本文写的是一次曲折的拿北大青鸟某地方学校网站shell的过程。
之前也曾拿过一个北大青鸟某网站的文章,我再次萌生了我个北大青鸟的网站练练手的想法。其实以前我也尝试过检测了几个北大青鸟地方学校的网站,简单看了下没有注入漏洞没有弱口令就放弃了。看了文章拿站的过程,方法并不难,所以我也决定找个网站来练练手。
一、确定目标
我首先到北大青鸟的主站看了一下,发现网站用的是独立服务器,虽然服务器所在的IP绑定了3个域名,但发现都是指向同一个网站,官方主站,看来旁注不用想了。简单看了下,意料之中不存在简单的注入漏洞,也没找到网站的后台,本人一个,遂放弃拿主站shell的想法。主站拿不下,北大青鸟在各个省都有校区,这些校区很多都有自己的网站,估计安全性做的不如主站好,说不定能让我拿到shell。查找各个校区的网站很简单,点北大青鸟主站上的“校区”就可以按地区查询到地方校区的网站,比如选择北京市后就会列出北大青鸟所有在北京市的校区,并且有各个校区网站地址的链接。
我随便选择了一个校区的网站作为目标,为了不必要的麻烦,我就不写网址了。
二、信息收集
确定了目标网站,先来收集一下目标网站的一些基本信息。打开目标网站首页,发现页面上的链接都是静态页面,通过查看首页源文件,初步判定网站用的是aspx的网站管理系统,猜测可能是通过后台生成的静态页面。存在robots.txt文件,但文件中没出现任何目录和文件,没有利用价值。通过搜索“site:xxxaccp.com inurl:.aspx”没有发现任何带参数的链接,注入就不用想了,但搜出了网站的后台,用几个弱口令尝试登录后台,没有成功。
三、开始旁注
根据收集到的信息,直接从目标网站下手太困难,考虑旁注。在ip查询网站反查了一下,发现目标网站所在的服务器有60个网站(其实不只60个,我这里疏忽了),满足旁注的条件。剩下的59个网站总有安全性做的不好的,我就不信拿不到一个shell。于是一个网站一个网站的挨个检测是否存在低级漏洞,是否存在注入漏洞,在网站地址后面加admin和manage,看是否出来后台登录页面,如果找到后台用常用弱口令尝试登录。看网站是否存在robots.txt这个文件。在这过程中遇到一个可以用万能密码进后台的,遇到一个用admin,admin弱口令进去后台的,但都因为后台功能太简单不能获得webshell。好不容易找到一个注入点猜解出了管理员的用户名和密码,但MD5加密的密码破解不出来。总之,粗略的旁注了一遍,没有拿到任何一个网站的shell。
四、找到任意文件下载漏洞
经过上面的查找没有结果后,我决定找下有没有网站存在任意文件下载漏洞。在一个网站上存在“资料下载”的链接,点开后有很多供下载的文件,当我把鼠标移动到一个下载文件上时,看到了下载地址,我觉得有戏,很可能存在任意文件下载漏洞,因为下载文件的地址是通过一个变量url指定的,如果对url变量没有过滤或过滤不好就会出现任意文件下载漏洞。来验证下,构造地址在浏览器中访问,出现了下载down.asp文件的对话框,说明确实存在任意文件下载漏洞。
任意文件下载漏洞还是很有用的,利用的好可能下载到网站的数据库文件,找到管理员的用户名和密码进后台,后台还能拿shell,这是最理想的情况了。要下载数据库首先要知道数据库的路径和名称,数据库的路径和名称对于采用asp程序的网站大多数一般保存在conn.asp文件中(少部分保存在config.asp等文件中),conn.asp有的直接在网站根目录下,有的在网站目录下的inc目录下,可以先尝试下是否在上面两个目录下,如果不在找到后台登录文件的话可以下载后查看源代码查找数据库连接文件然后再下载数据库。
为了省事,先来猜一下。假设存在任意文件下载漏洞的网站的数据库连接文件为网站根目录下的conn.asp,访问提示“程序运行出错。请与系统管理员联系。”,好像确实存在这个文件,只是直接访问报错了。
再访问结果提示“无法找到该页”。
说明“程序运行出错。请与系统管理员联系。”不是找不到文件的错误提示,证明确实在网站根目录下存在conn.asp这个文件。下载它,构造下载地址,在浏览器中访问后不出意外的出现了下载conn.asp的对话框。
下载conn.asp后用记事本打开,发现了如下代码。
dim Conn
dim dbpath
dbpatb=server.MapPath("../data/HN_kaitong,asp")
说明数据库文件为HN_kaitong.asp,在data目录下,知道了数据库路径和名称就来下载数据库,我第一次构造的地址访问后出现了“D:\www\web\xxx.com\wwwroot\data\HN_kaitong.aspdoes not exist”的错误提示。
把下载回来的HN_kaitong.asp改名为HN_ kaitong.mdb,用Microsoft Office Access打开,在admin表中找到了管理员的用户名Lawer和密码72ff7fa7b7678b6d,悲剧的是72ff7fa7b7678b6d破解不出来,更悲剧的是网站的后台也没有找到。还是没有获得哪怕一个同服务器上网站的shell。
明眼人一看就知道我的地址构造错了,因为conn.asp在网站根目录下,数据库文件HN_kaitong.asp相对于conn来说在它的上级目录下的data文件夹下,不过这次构造地址错误也有意外的收获,就是爆出了网站的绝对路径,这个有很大的作用,下面会提到。用新构造的地址把数据库文件下载了下来。
五、大胆尝试
一时不知道怎么办了。静下心来想了想,我又注意到了那个任意文件下载漏洞和爆出的那个网站绝对路径上。再次看了下那个路径D:\www\web\xxx.com\wwwroot\data\HN_kaitong.asp,可以知道存在任意文件下载漏洞的网站的根目录在服务器上的绝对路径为D:\www\web\xxxitalnc.com\wwwroot\。因为是虚拟主机,大胆猜测服务器上大部分网站的绝对路径有一定规律,比如域名为www.xxx.com的网站的绝对路径为D:\www\web\xxx.com\
wwwroot\。单知道别的网站的绝对路径貌似没什么用,但如果可以遍历别的网站下的所有文件再配合任意文件下载漏洞就大有用处了,你可以下载别的网站已经知道路径和文件名的任意文件,可以下载网站的数据库,找到管理员的用户名和密码后进后台。要想利用需要满足两个条件。
1、网站的绝对路径存在规律性
2、存在遍历所有网站的漏洞
这两个条件我不知道满不满足,我假设这两个条件满足,来验证一下我的假设。在ip网站查询页面中找到了一个网站,采用的asp程序,后台目录为admin,数据库连接文件为inc目录下的conn.asp,构造下载地址,在浏览器中访问,激动人心的下载文件对话框出现了。证明了我上面的两个假设是成立的!
下载conn.asp后发现数据库为Data/buy#2buy#cndata.asa,构造下载地址,在浏览器中访问时却提示文件不存在,构造的地址没错啊,去掉地址中的inc目录竟然可以下载数据库了(要对#进行url编码,变成%23)。
在数据库中找到了后台管理员的用户名admin和密码9aOf39b2e2b26750,在md5在线查询网站破解了出来,结果为23990588,然后登录了后台。后台添加商品的地方有ewebeditor,但已经被阉割了,不能获得webshell。
六、继续碰壁
用任意文件下载漏洞把能下载数据库的网站的数据库都下载了一遍(还下载了一个289M的数据库文件!),也进了几个网站的后台,但无奈网站后台功能太简单,都没有获得webshell。我也尝试过利用得到的网站后台管理员密码作为ftp密码,网站域名作为ftp用户名登录服务器的ftp,但没有成功。
七、出现转机
好像现在不知道该怎么办了。在我再次把ip查询网站列出的目标网站同服务器上的网站检测了一遍之后,才发现网页下面有如下说明“提示:只显示了部分域名。如要查看全部域名,点这里。”我嘞个去,我以为显示了全部域名呢,原来只显示了部分域名啊。
点开链接后发现要看全部内容需要交钱成为会员,没有钱给它。这时候我想起了好朋友路人甲给我的一个查旁注的网站地址,由于查询速度比较慢,平时不怎么用,但它可以免费显示一个服务器上的所有域名,在查得目标网站所在服务器上绑定了110个域名,比在ip查询网站显示的多了50个。
希望多出了的50个网站中有让我拿到webshell的。继续旁注刚查出来的网站,继续利用任意文件下载漏洞下载网站的数据库,又进了一个网站的后台,在这个后台看到了期待已久的数据库备份功能,上传一个包含一句话木马的图片文件,通过数据库备份得到了一个webshell。通过这个shell可以遍历目标网站目录下的文件了。
本来以为都到这步了,目标网站的shell可以信手拈来了,写一个asp一句话木马到目标网站根目录下,写入不成功,尝试了目标网站根目录下的几个子目录,都没有写入权限。觉得aspx文件的权限会大点,说不定对目标网站的目录有写权限,尝试传一个aspxspy到已经获得shell的网站目录下,提示上传成功后却找不到上传后的文件,被杀了?重新上传一个aspx文件,内容为test,还是上传不成功,说明已经获得shell的网站目录下不允许上传.aspx文件,此路不通。
目标网站是aspx程序的,必在网站根目录下存在配置文件web.config,通过已经获得的shell下载后发现目标网站用的也是Access数据库,数据库文件名为AccpDB_BackUP.mdb,在网站根目录下的App_Data目录下,下载后找到了管理员的用户名和密码,并且密码没有经过加密。挂上vpn后登录了目标网站的后台,但无奈的是在后台上传任何文件都提示“上传目录不存在。”,不能上传文件,还是不能获得目标网站的shell。
八、终偿所愿
虽然目前还没有得到shell,但我收集到的信息也越来越多了。利用已经获得的别的网站的一个shell的列目录功能挨个查看目标网站目录下的文件夹和文件,发现了一个kindeditor文件夹,是一个编辑器,找到了上传文件的页面,但上传文件时仍然提示“上传目录不存在。”,不能上传。我在MyFreeTextBox目录下发现了一个文件ftb.imagegallery.aspx,文件名中的ftb吸引了我,难道这个文件里保存了ftp的用户名和密码?我们进行访问,打开的页面。
好像可以上传文件,我上传了一个图片文件,没有任何提示和显示,也不知道上传成功没有,难道又不能利用?我发现这个页面还有创建文件夹的功能,看能不能利用,输入123,点“Create Folder”后123文件夹居然创建成功了。
通过列目录发现在MyFreeTextBox目录下多了一个文件夹images,新创建的文件夹123就在images目录下,双击新建的123文件夹来到123目录下,再次上传一个图片,这次上传成功了。
直接上传一个.asp格式的asp一句话木马asp.asp到123文件夹下,虽然看不到缩略图,但是通过列目录发现文件上传成功了,访问成功得到了期待已久的shell。
shell已经拿到,目标已经达成,和北大青鸟某地方学校网站的较量就告一段落了,提权我就不提了。拿到shell后回过头来看拿shell的过程,其实最后拿shell的方法非常简单,但找到这个方法的过程却一波三折,非常曲折。通过这次拿shell练手也告诉我,现在如果想拿一个网站,直接通过注入或通过弱口令进后台就拿到shell几乎已经不可能了,这时候就需要你多试试别的方法,多找找别的漏洞,比如任意文件下载漏洞,再就是要有耐心,不要遇到一点困难就放弃,如果我中途放弃也就不会有本文了。