原文链接:https://www.freebuf.com/defense/415466.html
作者:绣影6666
文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!
一、渗透测试思路
在对系统进行测试时,通常会查看前端的 js 文件看是否存在敏感信息或者敏感接口,以便进行数据包构造等手法。在一次测试中,偶然碰到 js 文件中写账号密码,我之前以为这种都是不可能存在的漏洞,拿到账号密码后,登录后台发现 sql 注入和未授权漏洞分享思路。
拿到一个站点后登陆页面,首先肯定是弱口令,admin/123456,或者其他的弱口令等。试过之后不行,但是发现存在用户名枚举。输如admin,提示密码错误。
然后通过在前端js文件中搜索admin,却发现password,很吃惊,真的有密码写在前端的。这里推荐大家一个插件findsomething插件,在js文件中发现账号密码或者接口信息都很方便。
然后就通过账号密码登录。
一、判断SQL主任点
在里面找到一个接口参数带 asc ,看到这个 asc 一定想到的是 sql 排序注入,在现在的大部分的 sql 查询中,都被预编译防御了,但是也存在预编译防御不到的地方,比如 limit、order by 排序这样的地方,官方给出的是如果在这些地方使用预编译,会造成慢查询等问题。
首先单引号,直接报异常,可能存在注入。
exp()即为以e为底的对数函数,即求解e的710次方,当传递一个大于709的值时,函数exp()就会引起一个溢出错误,而 MySQL 能记录的 Double 数值范围有限,一旦结果超过范围,则该函数报错。这个范围的极限是 709,当传递一个大于 709 的值时,函数 exp() 就会引起一个溢出错误

我尝试了 mysql 数据库、oracle 数据库的延时语句都不行,全都显示系统异常,手工注了好久,直接上神器 sqlmap 跑。
一、 那该如何判断 sql 注入的数据库呢?
1、通过网站语言判断
在网站和数据库之间的搭配是:asp+access 或 SQLServer、php+MySQL、jsp+oracle。但是不准确,只能给我们一个大概的方向。
2、报错信息
很多数据库在遇到错误时会返回特定的错误消息,其中包含数据库类型的线索。例如:● MySQL:错误消息中可能包含"mysql
"或"SQL syntax
"等词汇。● PostgreSQL:可能包含"PGSQL
"或"PostgreSQL
"。● SQL Server:通常返回错误代码,比如"OLE DB
"或"SQL Server
"
3、特定的函数和特征
通过向注入点发送特定的payload,可以判断数据库类型。例如,使用不同数据库的特定函数:● MySQL:尝试UNION SELECT @<span class="label label-primary">@version
;#CTL{n} ● PostgreSQL:尝试SELECT version()
;● SQL Server:尝试SELECT @<span class="label label-primary">@version
;#CTL{n} ● Oracle:尝试SELECT banner FROM v$version
二、不能预编译点
order by
、limit
、列名、表名in关键字 等在关于进后台的测未授权接口,一定要推荐 burpsuite 的一款插件 瞎越 很好用。瞎越下载地址:https://github.com/smxiazi/xia_Yue使用教程:在未开启前,将鉴权字段填入其中,然后开启插件,直接在前端页面的各个功能点都点一遍。看未授权的是否有对号。有就代表存在未授权漏洞
然后找一个没有认证缓存的浏览器访问。出现数据即为未授权。
主要是利用一些工具帮助我们在一些测试环境中更加快速的找到漏洞存在和漏洞复现。
原文始发于微信公众号(神农Sec):渗透测试 | 账号密码泄露导致获取到数据库
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论