Mysql注入:
1、sql注入漏洞原理
开发者没有在网页传参点做好过滤,导致恶意sql语句拼接到数据库进行执行
2、sql注入分类:联合注入、布尔盲注、时间盲注、堆叠注入、宽字节注入、报错注入
3、联合注入的步骤
找传参点-->判断闭合符-->判断列数-->判断显示位-->查询database()-->查表-->数据
4、盲注分类
布尔盲注(页面回显长度:burp里的Content-Length)、时间盲注(页面回显时间:burp包的右下角)、Dnslog
5、盲注函数
if()、sleep()、substr()、left()、limit、ascii()、length() 5、报错注入原理:
6、报错注入函数,例如:floor() group by、exp()、updatexml()、extractvalue()
7、Dnslog注入原理
7.1、利用load_file()函数读取共享文件
7.2、共享文件形式:\hex(user()).dnslog.cn/或者\host\
7.3、利用myslq的load_file()函数解析拼接过的dnslog域名,进而带出数据
8、判断闭合符方式:
构造真和假:id=1 and 1=1、id=1' and 1=2、=1" or 1=1、') or 1=2、and 234=234、and 1、or 1、and 1^1、&&1、||0
9、堆叠注入原理
在mysql中,分号代表一个查询语句的结束,所以我们可以用分号在一行里拼接多个查询语句
10、宽字节注入原理
10.1、数据库使用gbk编码
10.2、使用反斜杠进行转义
11、sql注入绕waf
11.1、代替空格:/*/、/!*/、+、%09、%0a、%00、括号
11.2、关键字:16进制、char()、字符串拼接
11.3、等价函数替换:sleep()==benchmark()、if()==case when then else end、ascii()==ord()、substr()==substring()
11.4、内联注释:/! /
12、sqlmap常用参数
-r:用于post型注入,指定txt文件的post数据包
--os-shell:用户获取shell
--os-cmd:执行系统命令
--force- ssl:sqlmap跑https站,此参数主要用来伪造一个ssl证书,或者在host地址后面加一个443端口
--tamper:指定绕过用的脚本文件
-u:指定url,通常用于get型注入
-p:指定注入点,例如:python sqlmap.py -u http://127.0.0.1/index.php?id=1&mid=2&page=3 -p "page"
:指定注入点,例如:python sqlmap.py -u http://127.0.0.1/index.php?id=1&mid=2&page=3 注意:号也可以用于伪静态的注入,用法同前面一样,直接在注入点后面加*
--fresh-queries:刷新缓存
--current-db:获取当前数据库名称
--time-sec=5:设置延时时间
-m:用于sqlmap批量跑注入,指定一个含有多个url的txt文件
--level 3:指定测试等级,等级越高,检查项越多,共1-5个等级
--risk 3:指定风险等级,等级越告,payload越复杂,共1-3个等级
--random-agent:指定随机agent头
--batch:默认选项
13、sql注入获取webshell的方式
1、写文件(需要写权限)
2、写日志文件(不要学权限,但是需要通过命令开启日志记录功能,而且还需要把日志文件的路径指定到网站根路径下面)
14、sql注入防御
1、过滤敏感字符,例如:information_schema、into out_file、into dump_file、’、"、()
2、预编译
3、站库分离:增加攻击者的时间成本、防止通过数据库拿到webshell