0%

DASCTF_MAY_2020

前言

上周打了一下安恒五月赛,题目质量还行,记录一些东西。

帮帮小红花

这题应该是非预期做的 给了个裸的shell 无回显 反弹shell失败 直接

1
2
cat /flag > ./res
GET /res

flag内容 make iptables great again 应该就是不让弹shell的 看了下别的师傅wp是shell命令进行延时盲注 贴一下

1
h3zh1=$( cat /flag | cut -c %d-%d );if [ $( printf '%%d' "'$h3zh1" ) -gt %d ];then sleep %f;fi

挺有趣

gob

上传时将文件目录穿越为/flag cookie记录了文件位置 查看头像就能拿flag

老开发

题目描述说用了orm 进去是个登陆框 后端是php 裸的sql注入 测了一下

1
2
3
4
5
username=admin&password=admin 登陆成功
username=admin'&password=admin 500
username=admin' and 1=1 -- &password=admin 登陆成功
username=admin' and 1=2 -- &password=admin 登陆失败
username=admin' and length(database())>0 -- &password=admin 500

测试可以看到有些语法比如database()函数 select语句一旦使用就会500 /robots.txt里给了个User.php 访问可以看到是定义了一个orm实体 根据语法搜了一波应该是DQL

于是这题变成了一个裸的DQL注入的问题 具体可以看这篇文章 DQL注入

然后再去翻翻文档 DQL语法

最后payload忘了留 大概写一下 可能有错(x

1
username=admin' and 1=(select s from user s where s.uid=12 and substring(s.password,1,1)='a') -- &password=admin 布尔盲注

user表uid=12时username为flag password即为flag内容

多人运动

第一步是一个order by的sql注入点 带一个巨厚的waf 最后选择的是异或符号+pow函数进行布尔盲注 字符串截取用left+right 带一个子查询 字符比较用hex函数 运算符由于+不能用 选择 - * / 结合 做的很麻烦 payload大概是这样

1
2
by=^(select pow(2,hex(hex(right(left((select fuck2 from (select 1 as fuck1, 2 as fuck2 union select * from user)x limit 1,1),i),1)-num))
然后按位爆破num 结果的每一位为unhex(unhex(num+1024))

虽然其实爆破的速度还可以 但是payload确实巨麻烦 所以这里贴一个出题人的payload

1
by=(case when right(left(( select group_concat(`1`,`2`) from (select 1,2 union select * from hint)a ),(位数)),1) in (binary(16进制数) then pow(123,123123213)  else 1 end)

还有一点是当时只想着注入得到admin的密码 没想到还有个hint表… 感觉挺坑的 hint表里留了个/source接口可以看到部分源码 最后管理员账密为

1
admin T1Me cTRol13r

第二步是一个golang的ssrf点 可以输入url和cookie 对url的host做了过滤 反正试了一下只有baidu.com和bing.com看到了回显 需要本地访问/getflag接口拿flag 由于第一步没有得到/source接口 所以这里测试了很久也没想到怎么绕过 host绕不过去就想着给了输入cookie的点是不是crlf 又测试了半天 最后放弃了 吐槽一下这里有个巨长的验证码 巨恶心 感觉没啥必要

最后姿势其实很简单就是host留空 如果知道这个姿势其实不用/source看源码也能做出

1
http:///getflag

ezupload

这题最开始没用扫描器扫 像个脑瘫一样黑盒测了半天 测到getkey.php 会获取referer并get_heaers 后来扫到www.zip 感觉自己像个智障

限制大概是

  • parse_url 解析的host为 google.com 获者 *.google.com
  • get_headers 获取到一个特定的头

大概就是解析的host符合要求但是get_headers访问自己的vps 测了很久 最后的payload

1
http://vps_ip:port,.google.com:port/ 前后port一致

看了下别的师傅的payload 用的是%00

1
http://vps_ip%00.google.com/

进去有个文件上传功能 还有个文件查看功能 有一堆函数可以触发phar反序列化 所以大概攻击链是上传phar文件 然后触发phar反序列化 用compress.zlib绕过正则 由于给的类没什么利用链 又扫到了个flag.php告诉你可以实例化任意类并且只能本地访问

最后攻击链为 soapClient ssrf 访问 flag.php -> 实例化SimpleXMLElemt类 无回显xxe 读取/flag

布吉岛

java web 比赛时候没怎么看 后面等复现环境出来了会专门写一篇文章