明星设计网站风格说明百度推广开户需要多少钱
源码

 题目限制:
- webshell长度不超过35位
 - 除了不包含字母数字,还不能包含
$和_ 
这里使用php5来解决
 可以围绕以下两点展开:
- shell下可以利用
.来执行任意脚本 - Linux文件名支持用glob通配符代替
 
.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令
 并且用. file执行文件,是不需要file有x权限的
 我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX
 由于执行该命令也需要用到字母,那此时可以用到glob通配符
 1.*可以代替0个及以上任意字符
 2.?可以代表1个任意字符

 这是由于能够匹配上/???/?????????这个通配符的文件有很多,如果先匹配到别的文件则会出现错误,导致整个流程停止,根本不会执行到我们上传的文件。
通过ASCII码表可得知,大写字母位于@与[之间
 先创建一个文件(文件名要对上),测试
 
 
构造POC,执行任意命令
 php生成临时文件名是随机的,最后一个字符不一定是大写字母
复现漏洞还需要用于存放shell命令的文件以及用于提交表单的html
 
 

这里把提交的表单数据复制过来
需要将request中的get改为post,因为get提交没有临时文件。这里post作为请求体,而code作为get传参,执行完后才会删除临时文件
code为
`?><?=`. +/???/????????[@-[]`;?>`
 
get传参需要url编码
 第一个?>为闭合,+为空格编码
 通过eval()执行反引号从而执行系统命令
 在burpsuite中可以不转码
 
注意:这里的POST与GET参数是并行的
 想要查看临时文件是否生成,可以用sleep()函数
