最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道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所示的结果。

由此可以断定此网站的数据库程序是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中的画线处的www应该存放了web的目录,再用load_file(‘/www’),得到web确切路径是/www/ping(我这里用ping代替了其www后面的那个真实的目录名).并找到了/www/ping目录下有个bbs目录及后台管理页adminlog.jsp.
[1] [2] 下一页