首页 > 数据库 >登录口SQL注入突破32位限制获取密码

登录口SQL注入突破32位限制获取密码

时间:2023-09-26 18:23:20浏览次数:48  
标签:尝试 like 登录 admin 32 密码 SQL password 得出

0x01 前言

虽然本文主要讲述了SQL注入,但同时也记录了在测试这个网站时的整体思考方式以及不同测试点的攻击方式。将这种方式记录下来并形成自己在渗透测试中的checklist,可以使渗透流程更加标准化,使整个测试
过程更加行云流水得心应手。

0x02 分析目标

打开项目中的网站,只有一个登录页面,经典的后台
image.png

多次尝试登录,观察登录数据包后得出以下猜想

  1. 使用了JSP以及Servlet技术,可以尝试权限绕过:;.js /..;/ .%64%6f等等
  2. 密码加密方式略微复杂,不同于直接使用AES、DES、RSA等加密方式,可能是上述多种加密组合使用,分析加密可能需要大量时间
  3. 登录错误的返回有:用户名或密码错误、密码错误次数超限两种情况,难以爆破用户账号
  4. 没有验证码限制,在分析出密码加密后还是可以尝试爆破的

image.png

汇总上面的结论
首先尝试权限绕过,常见的思路均失败,放弃。由2、3得出很难直接通过账号+密码组合进入后台,所以只爆破了TOP1000账号以及常见的123456、111111等最常见弱口令,但是并没有出结果。
image.png

0x03 测试

粗粗扫了一眼密码加密流程,引用的是CFCASIPInput.min.js
image.png

百度搜索了之后找到了开发文档,但测这个站是临时起意,不想花费太多时间去慢慢debug,除非实在挖不到其他的洞
image.png

最后尝试一下SQL注入,加了一个单引号后返回您发送请求中的参数含有非法字符
image.png

随便输入一个路径再试试,依然返回您发送请求中的参数含有非法字符,猜测极有可能是通过filter层实现的过滤,那么这就存在一个绕过此过滤的可能性
image.png

尝试将请求包改为multipart/form-data格式,很多filter只针对正常的POST Form-data做了过滤,忽略了multipart格式
1'返回系统异常,请联系管理员
image.png

1''返回用户名或密码错误!
image.png

妥妥的SQL注入,登录口的SQL注入,可以尝试万能密码,获取账号,获取密码等等,但是事情并没有那么简单
通过测试发现,

  1. 简单使用数据库特征函数判断,目标用的是HQL+Oracle且loginName限制32位超过会报错
  2. 密码字段是password加密方式为MD5

11111111111111111111111111111111返回用户名或密码错误
image.png

111111111111111111111111111111111返回系统错误请联系管理员
image.png

经过大量测试,有以下情况是有可能有攻击面的
payload1: admin'or password like'********%
使用payload1可以尝试去匹配TOP密码的MD5的前8位,找到一个在数据库的密码:000000(670b14728ad9902aecba32e22fa4f6bd)
说明数据库存在密码为000000的用户,后来尝试爆破这个用户,但是并没有找到
image.png

payload2: admin'and substr(password,1,1)='*
使用这个payload2可以直接获取admin的密码,但仔细查看payload会发现它是33位,超了1位。解决方法也有,尝试如下:

  1. 在Oracle中关于字符串函数有substr、instr、lpad、rpad等,但是都不足以在32位内构造出有效payload 失败
  2. 找到存在的用户且用户名长度小于登录4即可,爆破了TOP 1500与TOP 5000常用用户名字典,没有爆破到 失败

思绪回到payload1进行少许变形,admin'and password like'*%
当密码匹配成功后返回密码错误次数超限
image.png

密码匹配失败返回用户名或密码错误
image.png

也有攻击面,但是由于长度限制admin'and password like'*******%已经是32位极限了,只能得出密码的前7位,当尝试到第8位就会由于超出长度限制而报错
image.png
image.png

看似也要失败了,但是冥冥之中又好像能解决问题。沉思许久之后,突然想到刚刚一直在用的like特性,忽略可以在前后都加上%进行全文匹配。把密码片段夹在%%中间即可,如admin'and password like'%******%,用密码片段逐步匹配后就可获取完整的密码
举个例子123456的MD5结果是e10adc3949ba59abbe56e057f20f883e
利用admin'and password like'*%这个payload可以一直获取到前7位为e10adc3,接下来就可以利用这7位密码逐步匹配,如下:

admin'and password like'%10adc*% 得出3
admin'and password like'%0adc3*% 得出9
admin'and password like'%adc39*% 得出4
admin'and password like'%dc394*% 得出..
...
admin'and password like'%f20f8*% 得出8
admin'and password like'%20f88*% 得出3
admin'and password like'%0f883*% 得出e

最后得出e10adc3949ba59abbe56e057f20f883e

借此就可以获取到完整的admin的密码
image.png

标签:尝试,like,登录,admin,32,密码,SQL,password,得出
From: https://www.cnblogs.com/artofpenetration/p/17730878.html

相关文章

  • 新手指引:前后端分离的springboot + mysql + vue实战案例
    案例说明:使用springboot+mysql+vue实现前后端分离的用户查询功能。1、mysql:创建test数据库->创建user数据表->创建模拟数据;2、springboot:配置mysql->使用mybatis操作mysql数据库->接口开发;3、vue:使用axios访问接口->user数据展示;1、mysql数据库1.1、安......
  • Win32编程之远程注入(十七)
    一、VirtualAllocEx函数VirtualAllocEx 用于在另一个进程的虚拟地址空间中分配内存。这个函数通常与其他进程间内存操作函数一起使用,允许一个进程分配内存并将其映射到另一个进程的地址空间中。函数原型:LPVOIDVirtualAllocEx(HANDLEhProcess,LPVOIDlpAddress,SIZ......
  • Mysql的备份与恢复
    1.数据备份的重要性备份的主要目的是灾难恢复。在生产环境中,数据的安全性至关重要。任何数据的丢失都可能产生严重的后果。造成数据丢失的原因:程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃2.数据库备份的分类和备份策略2.1数据库备份的......
  • selenium 账号密码登录一个网站 需要加上等待元素出现的条件EC 很重要
    #导入包fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfromtimeimportsleep#登录商城classlogin_shop(......
  • MySQL修改密码的几种方法
    方法一:先登录MySQL命令框输入:setpasswordfor用户名@localhost=password('新密码'); 方法二:使用mysqladmin#该方法不需要登录命令框输入:mysqladmin-u用户名-p旧密码password新密码 ......
  • Win32编程之全局钩子(十七)
    一、动态链接库库头文件:#pragmaonce#include<Windows.h>extern"C"{ __declspec(dllexport)void__stdcallSetHookVal(HHOOKhookVal); __declspec(dllexport)LRESULTCALLBACKMouseProc(intcode,WPARAMwParam,LPARAMlParam);}库源文件:#includ......
  • sqlalchemy之append
    在SQLAlchemy中,append方法通常用于将一个对象添加到关系属性中,特别是在多对多(Many-to-Many)或一对多(One-to-Many)关系中。这个方法的用途是向关系属性添加一个新的关联对象,以建立关系。在多对多关系中,通常有一个中间表来表示两个模型之间的关系。append方法用于将一个对象添加......
  • NoSQL
    NoSQL数据库,其名称意为"NotOnlySQL"(不仅仅是SQL),是一类与传统关系型数据库(RDBMS)相对的数据库系统。NoSQL数据库被设计用来满足现代Web应用程序、大数据技术和其他新型应用的需求,其中可能需要非常大的可扩展性、高并发性和灵活的数据模型。下面是关于NoSQL数据库的一些核心......
  • MySQL事务死锁问题排查
    一、背景在预发环境中,由消息驱动最终触发执行事务来写库存,但是导致MySQL发生死锁,写库存失败。com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:rpcerror:code=Aborteddesc=Deadlockfoundwhentryingtogetlock;tryrestartingtransaction(er......
  • MySQL——个人入门到入土
    SQLSQL:结构化查询语言,全称是StructuredQueryLanguage通常分为四类(括号内为他们的一些关键字):DDL:数据定义语言(create,drop,alter,truncate等)——定义数据库对象(库、表、列这些)DML:数据操作语言(insert,update,delete,call等)——用于CUD(增删改)DQL:数据查询语言(select,where等)——用于......