有长度限制的RCE注入
本文最后更新于:7 个月前
有长度限制的RCE注入
基本知识
>
与>>
我们知道Linux中,有>
和>>
命令
- 我们可以通过
>
来创建新文件
- 同时
>
也可以用来往文件存入内容,但是使用>
会直接覆盖文件为你需要的内容,如果文件不存在,那么新建文件再放入你需要的内容
而
>>
则是往文件中追加新内容,不会覆盖原文件,同样的如果文件不存在也会新建文件再追加
多行命令
同样是在Linux中,我们可以采用在没写完的命令后写入\
的方式,实现多行命令
同时我们也可以将命令如上图一样写入文件,并使用sh
执行该文件
- 注意这里要使用
>>
追加命令
ls -t
Linux中,ls -t
可以让文件按照时间进行排序(时间靠后的排在前面)
同时也可以与上述命令构造ls -t > cmd
是不是跟多行命令中的很像,所以如果我们把文件名写为片段化的命令,就可以用sh
来实现执行命令
之所以是\\
是因为防止引号转义实际上只有一个\
写入
实战
访问题目地址
观察代码,filter函数中做了过滤,接下来的代码对Get的内容做了长度限制,可以用到我们上面学到的知识
于是构造一下payload
1 |
|
1 |
|
解释一下
echo PD9waHAgZXZhbCgkX0dFVFsxXSk7
是一个将Base64编码字符串输出到标准输出的命令base64 -d
是一个Base64解码的命令。在这里,它将接收前一个命令输出的Base64编码字符串,并解码成原始的二进制数据> 1.php
将解码后的二进制数据保存到一个名为1.php
的文件中
命令挺长的所以我们可以写个脚本来自动执行一下
payload.txt:
1 |
|
脚本:
1 |
|
现在访问1.php
便可以正常的命令执行了
有长度限制的RCE注入
http://example.com/posts/34863/