渗透测试 | 账号密码泄露导致获取到数据库

admin 2025年1月22日10:23:49评论14 views字数 2079阅读6分55秒阅读模式

 

原文链接:https://www.freebuf.com/defense/415466.html

作者:绣影6666

0x1 前言

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!

0x2 渗透测试

一、渗透测试思路

在对系统进行测试时,通常会查看前端的 js 文件看是否存在敏感信息或者敏感接口,以便进行数据包构造等手法。在一次测试中,偶然碰到 js 文件中写账号密码,我之前以为这种都是不可能存在的漏洞,拿到账号密码后,登录后台发现 sql 注入和未授权漏洞分享思路。

二、渗透测试过程

拿到一个站点后登陆页面,首先肯定是弱口令,admin/123456,或者其他的弱口令等。试过之后不行,但是发现存在用户名枚举。输如admin,提示密码错误。

渗透测试 | 账号密码泄露导致获取到数据库

然后通过在前端js文件中搜索admin,却发现password,很吃惊,真的有密码写在前端的。这里推荐大家一个插件findsomething插件,在js文件中发现账号密码或者接口信息都很方便。

渗透测试 | 账号密码泄露导致获取到数据库

然后就通过账号密码登录。

0x3 SQL注入

一、判断SQL主任点

在里面找到一个接口参数带 asc ,看到这个 asc 一定想到的是 sql 排序注入,在现在的大部分的 sql 查询中,都被预编译防御了,但是也存在预编译防御不到的地方,比如 limit、order by 排序这样的地方,官方给出的是如果在这些地方使用预编译,会造成慢查询等问题。

渗透测试 | 账号密码泄露导致获取到数据库

首先单引号,直接报异常,可能存在注入。

渗透测试 | 账号密码泄露导致获取到数据库
进一步判断是否存在注入,输入 exp(1)--+和 exp(710)--+,看 回显是否一至,如不一致直接判断存在 sql 注入。解释:exp()即为以e为底的对数函数,即求解e的710次方,当传递一个大于709的值时,函数exp()就会引起一个溢出错误,而 MySQL 能记录的 Double 数值范围有限,一旦结果超过范围,则该函数报错。这个范围的极限是 709,当传递一个大于 709 的值时,函数 exp() 就会引起一个溢出错误
渗透测试 | 账号密码泄露导致获取到数据库渗透测试 | 账号密码泄露导致获取到数据库
从返回结果来看,大家能看到是什么注入吗?延时,因为返回结果为真或假,通过时间查看注入的数据真假。所以看结果肯定存在 sql 注入,但是出现一个问题,这个是什么数据库呢?因为不同的数据库,相应的注入语句也不同。
二、SQL注入神器-sqlmap

我尝试了 mysql 数据库、oracle 数据库的延时语句都不行,全都显示系统异常,手工注了好久,直接上神器 sqlmap 跑。

渗透测试 | 账号密码泄露导致获取到数据库
可以看到数据库为 PostgreSQL,在 timeorder 参数中存在注入,这里使用正常语句跑,即可出数据信息,就不显示了,各位师傅们。
0x4 知识点

一、 那该如何判断 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

二、不能预编译点

预编译是将sql语句参数化,刚刚的例子中 where语句中的内容是被参数化的。这就是说,预编译仅仅只能防御住可参数化位置的sql注入like关键字:模糊查询默认不会预编译,like预编译会造成慢查询、DOS。不能加引号的关键字:order bylimit、列名、表名in关键字 等
0x5 未授权漏洞

在关于进后台的测未授权接口,一定要推荐 burpsuite 的一款插件 瞎越 很好用。瞎越下载地址:https://github.com/smxiazi/xia_Yue使用教程:在未开启前,将鉴权字段填入其中,然后开启插件,直接在前端页面的各个功能点都点一遍。看未授权的是否有对号。有就代表存在未授权漏洞

渗透测试 | 账号密码泄露导致获取到数据库
渗透测试 | 账号密码泄露导致获取到数据库

然后找一个没有认证缓存的浏览器访问。出现数据即为未授权。

渗透测试 | 账号密码泄露导致获取到数据库
渗透测试 | 账号密码泄露导致获取到数据库
0x6 总结

主要是利用一些工具帮助我们在一些测试环境中更加快速的找到漏洞存在和漏洞复现。

原文始发于微信公众号(神农Sec):渗透测试 | 账号密码泄露导致获取到数据库

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月22日10:23:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试 | 账号密码泄露导致获取到数据库https://cn-sec.com/archives/3658924.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息