目录
题目的要求:1.输入不超过35位 2.不能有数字字母还不能包含 $ _
源码:
题目的要求:1.输入不超过35位 2.不能有数字字母还不能包含 $ _
首先就是
1.shell下可以利用.
来执行任意脚本
2.Linux文件名支持用glob通配符代替
第一点.
或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file
的意思就是用bash执行file文件中的命令。
这个文件也很好得到,我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX
,文件名最后6个字符是随机的大小写字母
第二个就是如果用. /tmp/phpxxxxx,来执行的话也是有字母的,此时就可以用Linux下的glob通配符:
*
可以代替0个及以上任意字符
?
可以代表1个任意字符
可是如果使用. /???/?????????可能会匹配到其他的文件,就无法执行了
我们得知这个文件大概率最后一个字母为大写
而翻开ascii码表,可见大写字母位于@
与[
之间
那么,我们可以利用[@-[]
来表示大写字母:
构造POC,执行命令
php生成临时文件名是随机的,最后一个字符不一定是大写字母所以有必要多试几次
表单:
这里把提交的表单数据复制过来
需要将request中的get改为post,因为get提交没有临时文件。这里post作为请求体,而code作为get传参,执行完后才会删除临时文件
code为
`?><?=`. +/???/????????[@-[]`;?>`
get传参需要url编码
第一个?>为闭合,+为空格编码
通过eval()执行反引号从而执行系统命令
在burpsuite中可以不转码
可惜的是没有打印出id的信息