从mysql注入到getshell

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从mysql注入到getshell相关的知识,希望对你有一定的参考价值。

    SQL注入就是一种通过操作输入(可以是表单,可以是get请求,也可以是POST请求等)相关SQL语句,并且能让该语句在数据库中得以执行,从而进行攻击的技术。最主要的原因就是没有对用户输入数据的合法性或者说是客户端提交的可变参数进行严格的检查和过滤,从而导致应用程序存在该漏洞。这篇文章主要是讲述通过一个mysql注入漏洞,通过os-shell执行echo命令获取webshell的攻击过程,大牛绕过,写这篇文章主要表扬自己开始有了自己的想法,可能该想法是其他人早就知道的!

    本来通过管理后台弱口令进入到系统中,发现上传点,但是各种绕过都无法成功上传木马,不得已才想到通过SQL注入来写一句话到文件中,看来不愧是菜鸟,还需要各位路过的大神多多指教!

0×00系统基本信息获取

    当我打开本次测试的站点时,使用Firefox的server-spy获取到基本信息,该网站使用的环境是nginx 1.4.4,脚本类型时php 5.3.29,如图1所示。server-spy更多信息请关注其官方网站:https://github.com/100apps/ServerSpy。

技术分享

图1使用server-spy获取网站基本信息

0×01获取操作系统类型

    通过改变目录中以及网站程序名称中的大小写,以及ping网站域名获取TTL值等,初步判断该系统是Unix(linux),如图2所示。

技术分享

图2获取操作系统类型

知识点:

    (1)TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

    (2)TTL是IPv4包头的一个8 bit字段。TTL值的注册表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255,Windows系统设置后重启才生效。

    (3)TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1,使用PING时涉及到的 ICMP 报文类型,一个为ICMP请求回显(ICMP Echo Request),一个为ICMP回显应答(ICMP Echo Reply),TTL 字段值可以帮助我们识别操作系统类型。

    (4)UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为255,Windows2003Server、Windows 2008Server的TTL默认值为64。

    Compaq Tru64 5.0ICMP 回显应答的 TTL 字段值为 64

    微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为128

    微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为32

但有些情况下有所特殊:

    LINUX Kernel 2.2.x& 2.4.x ICMP 回显应答的 TTL 字段值为 64

    FreeBSD 4.1, 4.0,3.4;Sun Solaris 2.5.1, 2.6, 2.7, 2.8;OpenBSD 2.6, 2.7,NetBSD、

    HP UX 10.20,ICMP回显应答的 TTL 字段值为 255

    Windows 95/98/98SE/WindowsME,ICMP 回显应答的 TTL 字段值为 32

    Windows NT4 WRKS,WindowsNT4 Server,Windows 2000,ICMP 回显应答的 TTL 字段值为 128。

0×02获取注入点

    因为站点是一个公司的官网,所以就使用工具简单扫描下情况,本次使用的扫描工具是safe3wvs,扫描发现有SQL注入,有xss,有后台管理,如图3所示,由于本次主要是讲述mysql注入,因此其他略过!

技术分享

图3发现SQL注入点

0x03 sqlmap进行验证

    通过使用sqlmap注入工具进行扫描,得知该SQL注入漏洞是存在的,如图4所示,并且数据库是mysql > 5.0.11.

技术分享

图4sqlmap获取数据库信息

0×04–os-shell系统命令执行

    本来只是试试的,没想到真的能执行—os-shell,如图5所示,人品爆发,操作系统是64位的,因为选32位不能执行命令!

技术分享

图5获取操作系统架构

0×05获取相关信息

    通过执行whomai命令,可知当前用户是mysql,如图6所示,通过ifconfig可知,地址是内网地址,如图7所示。

技术分享

图6获取相关信息

技术分享

图7获取本机IP地址

知识点:

    私有地址(Private address)属于非注册地址,专门为组织机构内部使用,俗称内网地址。

以下列出留用的内部私有地址

    A类10.0.0.0--10.255.255.255

    B类172.16.0.0--172.31.255.255

    C类192.168.0.0--192.168.255.255

0×06寻找可写目录

    首先通过页面可查看到部分目录,随便找一张与该官网相关的图片,查看属性可知网站中存在目录uploads,如图7所示。

技术分享

图8 获取目录信息

    另外通过os-shell,我们使用pwd查看到当前目录,然后通过ls从第一级目录逐级查看,当查看到uploads时,如图8所示,就有了一个思路,就是通过相关手段去上传木马,因为目录可以知道了。

技术分享

图9 查看目录信息

0×07写一句话木马

    由于之前在linux加固的时候,使用echo来输入数据到文件中实现禁ping,于是就想到是不是可以通过该方法写入一句话到文件中呢?通过在uploads目录下多次尝试,可能是自己技术太菜了,花了不少时间,几乎是一个个echo输出看到成功了,才将内容写入文件中,在一个单引号的地方折腾了很久,用\’都没有用,一直失败,没想到直接不要单引号就成功,终于写入成功了!太兴奋了,嘿嘿!

技术分享

技术分享

图10 写入webshell

0×07菜刀连接

    通过使用菜刀,成功连接,但是用户是www,权限还没有mysql权限大,如图9,图10所示。

技术分享

图11 获取webshell

技术分享

图12 查看当前用户

0×07相关命令不能使用解决

    在www用户下,如图11所示,不能使用ifconfig,此时我们可以通过去sbin目录下,直接执行该命令文件,如图12所示,就可以成功使用这些命令了(也可以直接执行命令/sbin/ifconfig)!

技术分享

图13 命令执行失败

技术分享

图14 查看IP地址

0×07题外话

    通过菜刀连接成功后,我们可以上传大马,从而进行进一步的提权,关于如何提权,此处省略1000字。。。。。。

0×07参考

    获取服务器相关信息,可以使用火狐的server-spy插件,可以获取网站的部署环境,IP地址,脚本类型等相关信息!

技术分享

    获取操作系统类型,我们可以改变目录中的相关字母的大小写,原因是linux对大小写敏感,windows对大小写不敏感,其次是使用ping命令来获取操作系统类型,在一般情况下,windows XP/2003 对应的TTL值为128;linux对应的TTL值为64,Unix对应的TTL值是255,windows 7/10对应的TTL值为64,windows 95/98对应的TTL值为32。

    另外就是,获取网站的绝对路径,如果不能使用报错,而我们能使用pwd、ls两个命令,那么我们也基本能找出绝对路径来,当我们执行一些命令发现提示找不到命令时,我们可以在自己的虚拟机中locate一下该命令的路径,然后去到该路径中通过./来执行相关命令。

本文出自 “eth10” 博客,请务必保留此出处http://eth10.blog.51cto.com/13143704/1959546

以上是关于从mysql注入到getshell的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL手工注入(详细步骤)—— 待补充

SQL注入测试技巧TIP:再从Mysql注入绕过过滤说起

MySQL注入之显错注入

SQL注入——mysql注入原理与注入检查

SQL注入入门

sql注入mysql篇