频道栏目
首页 > 安全 > 网站安全 > 正文

由Jsp+Mysql注入到root权限的全程展

2005-10-07 11:42:39      个评论      
收藏   我要投稿
文章作者:pingping
信息来源:邪恶八进制

  最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直接影响到整个系统的安全。本文就是主要展示一下我的一次JSP+MYSQL注入导出webshell的过程。
  www.***.***.cn是国内某一个著名研究所的网站,我们在这里对其进行善意的测试。当然,在写此文之前我已经将漏洞通知了网站管理员.并对文中所有的图片进行了处理,还粘贴了个我大三的时候自己发明的一个数学公式的图,希望让大家同时可以领会到数学更是博大精深(呵呵,当然研究数学更是人间正道).
1.寻找注入点
进入其首页,在新闻里面随便点了个新闻浏览,习惯地在其地址后面加个单引号’,链接上去后出现如图1所示。

                          (图1)
  从图中的信息容易看出此网站的数据库中有个表的名字(tablename)是zhxw。可惜的是看不到web路径。把引号’改为 and 1=1则返回正常页,而改为 and 1=2 则出现错误页.从而可以断定有注入漏洞.再用telnet探测此主机器的3306端口,返回如图2所示的结果。

                          (图2 )
由此可以断定此网站的数据库程序是mysql。.

2.猜解表名
  有了注入点,我们就会想到用union来构造sql语句。我们开始猜测表zhxw的字段数,在注入点的地址后面加上union select 1 得到错误页面如图3所示。

                        (图3 )
逐步在union select 1后面加上四个数字2,3,4,5后均出现图3的情况(注意每加一个数字的时候都要用个逗号,来隔开).看来字段数量不对。当在注入点地址后面加上union select 1,2,3,4,5,6 就返回一个正常的页面。说明表zhxw的字段数就是6.现在就可以来手工猜测一些常见的表名。很快想到就是admin表,在注入点地址后面加上uinon select 1,2,3,4,5,6 from admin,并把id=后面的1530改成一个不存在的id例如-1,结果出现如图4所示。

                        (图4 )
说明表admin是存在的,且可以在数字2和3处插入表的字段名或者mysql自带的函数来获取数据库的信息.现在来猜测admin表的字段名及其值.经手工猜测得到了admin表的字段名adminname和adminpwd的值如图5所示.

                            (图5 )

3.找web路径及web管理入口
  记得angel的文章<<Advanced SQL Injection with MySQL >>里面有个非常重要的函数load_file().我们现在就用这个函数来查找web路径.经测试发现在数字2处用load_file()函数替换后显示出来的结果不全,但是在数字3处用load_file()函数替换后显示出来的结果很全.我估计是与表zhxw的字段长度有关.而且我猜测此系统是unix的系统.所以我在先从根目录处查找web路径!如图6所示.

                        (图6 )
图6中的画线处的www应该存放了web的目录,再用load_file(‘/www’),得到web确切路径是/www/ping(我这里用ping代替了其www后面的那个真实的目录名).并找到了/www/ping目录下有个bbs目录及后台管理页adminlog.jsp.

4.获取服务器一般权限的shell
  有了管理页面我们自然想得到要通过图5中的帐号登录进去并上传个JSP WEBSHELL,可是令人失望的是用这个帐号登录的时候发现既没有报错也没有成功登录进去.后来才从bbs目录下的readme.txt得知此bbs只允许其网站内部网ip进行管理,所以此路不通.其次,我们自然会想到查找mysql的root口令来获取shell.所以想看看index.jsp的源代码是否调用了个公共的数据库连接文件,然后我们再查看这个公共数据库连接文件源代码中的数据库连接信息.我们在这里用语句’load_file()…into outfile’来查看jsp源代码;所以我们在ie中提交
http://www.xxx.xxx.cn/content.jsp?tablename=kydt&id=390003%20union%20select%201,2,load_file(/www/pingping/index.jsp),4,5,6%20from%20admin into outfile ‘/www/ping/ping.txt’,然后在ie中输入http://www.xxx.xxx.cn/ping.txt就得到了index.jsp的源码.令人吃惊的是,index.jsp并没有调用个数据库连接的公共文件,而是把数据库的连接信息直接写在代码中了,并且得到mysql帐户root的口令就是空。这时我们有了mysql的root的口令,想试一试远程连接此mysql服务器。但是我们想起了图2中的信息”Host xxx.xxx.xxx.170 is not allowed to connect to this MySQL server”,就知道从本地连接此网站的mysql数据库是连不上的!看来此路也不通.这时,我们就要去用社会工程学了。先看看此服务器是否开放了22,23端口,发现服务器开放了23端口,再用load_file()函数来获得文件/etc/passwd的信息。由文件/etc/passwd的信息我手工测试其telnet服务的弱口令,很幸运,我找到了五个有弱口令的帐号,用其中的一个帐号登录后得到的shell如图7所示.

                        (图7 )
从图中易看出操作系统还是sunos5.8.

5.提升权限
  有了低权限的shell自然想到去下载与sunos5.8相关的exploit来提升权限.我找了很久就是没有找到有效的exploit.既然我们已经有了个shell,那么我们就可以在shell里面登录他的mysql服务器了.如果mysql是以root身份运行的话,我们就可以用文<< How apache.org was defaced>>及文<< MySQL UDF Dynamic Library Exploit>>中的方法来提升权限了.结果失败了,错误信息如图8和图9所示.

                        (图8 )

                  &nb
相关TAG标签 全程 权限
上一篇:注入点得知是否有硬盘访问权
下一篇:几个在线破解MD5的网站
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站