从mysql注入到getshell

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

    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。

wKioL1mhJwmBlOnTAAAoEAbq0b8072.png-wh_50

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

0×01获取操作系统类型

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

wKioL1mhJ0HwyjLJAAA1xe96wXw598.jpg-wh_50

图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注入,因此其他略过!

wKioL1mhJ1Oxl0x5AABrk20ZXyg054.jpg-wh_50

图3发现SQL注入点

0x03 sqlmap进行验证

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

wKiom1mhJ2zwvoNCAAAMyKwRcdk562.png-wh_50

图4sqlmap获取数据库信息

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

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

wKioL1mhJ2jyrPomAABG6EJ8Suw277.jpg-wh_50

图5获取操作系统架构

0×05获取相关信息

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

wKiom1mhJ3-gmPd6AAAWC-VrzC4402.png-wh_50

图6获取相关信息

wKiom1mhJ4nzqFDQAABk8hGW5DM147.jpg-wh_50

图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所示。

wKioL1mhJ4aSebcnAAA3TecMiCg226.png-wh_50

图8 获取目录信息

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

wKiom1mhJ8-wCbdjAABzkurgIOc258.png-wh_50

图9 查看目录信息

0×07写一句话木马

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

wKiom1mhJ-WAknbwAAARJQrDxCo441.jpg-wh_50

wKioL1mhJ-LCDh8-AAAZlNRK2V0855.png-wh_50

图10 写入webshell

0×07菜刀连接

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

wKiom1mhKCDiCHFEAABKxyx82yA143.png-wh_50

图11 获取webshell

wKioL1mhKDPxdp9AAAAEtwYmS2s455.png-wh_50

图12 查看当前用户

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

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

wKioL1mhKFai90jZAAAFKhI3QeI356.png-wh_50

图13 命令执行失败

wKiom1mhKHHSFC-bAABCM-ze3Jk869.jpg-wh_50

图14 查看IP地址

0×07题外话

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

0×07参考

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

wKioL1mhKKGSuK1mAAAoEAbq0b8962.png-wh_50

    获取操作系统类型,我们可以改变目录中的相关字母的大小写,原因是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 51CTO博客,原文链接:http://blog.51cto.com/eth10/1959546

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
47 0
|
6月前
|
SQL 关系型数据库 MySQL
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
Python 与 MySQL 进行增删改查的操作以及防止SQL注入
131 0
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 数据库导出及读文件
Mysql注入 -- 数据库导出及读文件
97 0
|
2月前
|
关系型数据库 MySQL
Mysql注入 -- 注入类型
Mysql注入 -- 注入类型
16 1
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 联合注入
Mysql注入 -- 联合注入
16 0
|
2月前
|
关系型数据库 MySQL 数据库
Mysql注入 -- 布尔注入
Mysql注入 -- 布尔注入
11 0
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 延时注入
Mysql注入 -- 延时注入
8 0
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 报错注入
Mysql注入 -- 报错注入
11 0
|
2月前
|
安全 关系型数据库 MySQL
MySQL注入 -- 宽字节注入
MySQL注入 -- 宽字节注入
18 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql注入 -- 堆叠注入
Mysql注入 -- 堆叠注入
21 0