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

最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.

很多人可能都知道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表,在注入点地址后面加上union 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的文章<

>里面有个非常重要的函数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/ping/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 )

(图9 )

错误原因估计是与操作系统有关,因为我用这两种方法在linux的系统上测试成功了!哎,看来山穷水尽了!于是对此服务器的渗透暂停了一下。可能休息后头脑比较清醒,思想的火花一下就冒出来。这个时候我想起一篇入侵Tomcat的文章,里面提到上传JSP后门到web路径下后直接就得到了root权限!于是,我就在shell下用wget命令从我的肉鸡上传了个JSP的后门到web路径下面。然后用ie测试了一下权限,竟然发现这个WEBSHELL就是root权限,如图10所示。

(图10 )

6.注入导出webshell

6.注入导出webshell

假设我们没有得到他的telnet的弱口令,那如何来得到此站的webshell?angel在文<> 及文<>中研究了由mysql注入导出文件得到webshell的方法.很多人可能觉得他的方法局限性大. 因为当php.ini中magic_quotes_gpc = on时,运用into outfile导出文件的时候会不成功!但是jsp+mysql的网站就没有magic_quotes_gpc = on这样的设置.所以说他的方法在jsp+mysql注入中发出了耀眼的光芒!

jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...相关推荐

  1. mysql宽字节注入_转宽字节注入详解

    在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等, 还有一种情况是magic_quote_gpc,不过高 ...

  2. jsp工程防止外部注入_防止 jsp被sql注入的五种方法

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  3. mysql dns 注入_数据库DNSLog外带注入-总结

    sql注入中利用的骚姿势你又知道几个? DNSLog外带注入和DNSlog带外注入?(OOB) 其实是一样的,叫法不同!本人还是习惯叫外带注入,自我感觉,比较顺口 为什么需要外带注入? 当我们对一个数 ...

  4. mysql猎豹_猎豹网校MySQL数据库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎豹网校MySQL数据库 链接:http://pan.baidu.com/s/1i3wyPjn 密码:qxhm 教程目录 第1章 了解SQL 1.1 数据 ...

  5. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  6. 怎么重启网站mysql数据库_如何重启MySQL数据库服务

    服务器的启动和停止 停止:net stop mysql 启动:net start mysql -------------------------mysql mode相关问题-------------- ...

  7. 反引号注入_什么是 SQL 注入?

    (给ImportNew加星标,提高Java技能) 转自:Java程序员联盟 文章目录: 何谓SQL注入? SQL数据库操作示例 SQL数据库注入示例 如何防止SQL注入问题 SQL数据库反注入示例 何 ...

  8. linux c mysql 封装_本人对MYSQL C API做的一个封装,希望对linux C++程序员有点帮助,同时欢迎拍砖!...

    本人对MYSQL  C API做的一个封装,使用很简单,构造一个对象,就可直接执行SQL,但对于需返回结果的查询语句,对其数据集没做封装,仍需直接调用mysql c api对其进行处理,本人将下次完成 ...

  9. 无法为您重置MySQL密码_无法重置MySQL的root密码

    问题描述 我需要重置本地mysql安装的root密码,但不会让我.我已经试过了: $ sudo /etc/init.d/mysql stop * Stopping MySQL database ser ...

最新文章

  1. jQuery原理系列-css选择器实现
  2. Django学习~1
  3. IOS-C语言小练习02
  4. 北大青鸟:比尔盖茨:我在微软的10大失误
  5. Spring事务管理全面分析
  6. spring的定时任务schedule
  7. RVCT31编译问题
  8. win10安装iNode客户端软件就不能连接无线网络的问题解决
  9. linux瘦身软件下载,Linux系统瘦身裁剪 ——测试版
  10. 两台局域网电脑大数据传输详细教程
  11. 电脑无法使用typec耳机
  12. 【一】1D测量 Measuring——translate_measure()算子
  13. Service Mesh介绍
  14. Springboot周期性任务调度
  15. Windows系统安装部署redis服务器
  16. 计算机发展历史分为几代,cpu发展历程经历了几代?每一代计算机包括哪些型号的芯片...
  17. 微信群管理服务器软件哪个好用吗,微信群管理软件机器人(比较好用的微信社群管理软件)...
  18. 基于单片机的八路抢答器系统设计(#0512)
  19. Is my baby
  20. 如何解决ipod mp3 下载歌曲

热门文章

  1. Java中锁的使用和实现
  2. C语言定义直线的数据类型,C语言 | 数据类型
  3. MATLAB基础教程(9)——高级积分运算、二重积分
  4. activity 变成后台进程后被杀死_Android 后台运行白名单,优雅实现保活
  5. 自定义你的VSCode:主题、文件图标、快捷键、设置、schema、插件
  6. 在大数据时代下金融风控的分类
  7. python中0、1、True、False、if条件
  8. 练习ddt-file_data时,报错UnboundLocalError local variable ‘value‘ referenced before assignment
  9. 血的案例告诫 | 模拟大批量数据测试边界上限
  10. python闭包与装饰器的代码解释