无字母数字rce(ctfshow web55)
web55-56(无字母数字rce)
web55
1 |
|
web56
1 |
|
参考P神的文章 无字母数字webshell之提高篇 | 离别歌
一言以蔽之:
我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX
,文件名最后6个字符是随机的大小写字母,利用.
来执行
执行. /tmp/phpXXXXXX
,也是有字母的。此时就可以用到Linux下的glob通配符:
-
*
可以代替0个及以上任意字符 -
?
可以代表1个任意字符
那么,/tmp/phpXXXXXX
就可以表示为/*/?????????
或/???/?????????
但是符合/???/?????????
条件的文件有很多,最后发现所有文件名都是小写,只有PHP生成的临时文件包含大写字母。那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。
翻开ascii码表,可见大写字母位于@
与[
之间:
那么,我们可以利用[@-[]
来表示大写字母
当然,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。
首先构造post上传文件的数据包
1 |
|
然后bp抓包
?c=.%20/???/????????[@-[]
1 |
|
1 |
|
无字母数字rce(ctfshow web55)
http://example.com/post/web55-no-letters-pure-numbers-rce-2npubc.html