联合查询 unionweb
由于查询语句构造问题,可直接否定掉以前的查询,执行一个全新的语句来执行,须要注意的是查询的列应当与以前对应。数据库
在MySQL中,把information_schema 看做是一个信息数据库,其中保存着关于MySQL服务器所维护的全部其余数据库的信息,如数据库表名,数据库的表,表栏的数据类型与访问权限浏览器
此数据库是MySQL自带的,information_schema.SCHEMATA表中的SCHEMA_NAME有着全部的数据库。bash
万能密码绕过登录服务器
经过在用户名处传入参数 ' or 1 = 1 #
进行万能密码登录session
在SQL查询语句中,where 条件中为检验username,每每要where username = '..'
svg
此时若是在 ..
后加上构造的参数,那么就会出现验证提早中断,而且换做一个或的条件函数
咱们知道1 = 1 这个条件恒成立,username就跳过验证了,接下来,AND password = '...'
网站
就天然而然的被 # 注释掉。编码
select * from users where username = '..'or 1 = 1 #' AND password = '...'
【上述 # 也能够换做 – 都是SQL注释】
数字型注入
输入参数为整数,若是存在注入型漏洞,则为数字型注入
字符型注入
与数字型注入的区别在于:字符型注入通常要用单引号或双引号来闭合
检测方法 ..?id=8 and 1=1 【数字型】 --change--> ..? id=8' 【字符型】 ..? user=admin' and '1'='1' 【字符型】
SQL盲注
不能经过直接显示的途径来获取数据库数据的方法。
在盲注中,攻击者根据其返回页面的不一样来判断信息(多是页面内容不一样也多是响应时间不一样)
因为某些限制,布尔盲注的关键字带入不进去,这时候能够用slee来进行时间盲注,去页面执行时间,来判断sleep函数是否正常执行.
基于时间盲注在使用延迟函数上有两个选择,BENCHMARK(count,expr)函数,sleep(time)函数,前者经过将expr语句执行count次来达到延迟的目的,后者是直接延迟time时间.
某些查询是不须要返回结果的,仅判断语句是否正确执行便可,因此返回能够看做是一个布尔值,正常显示true,报错或者不正常显示为false.
SQL文件头注入
User-Agent:
使得服务器可以识别客户使用的操做系统,浏览器版本,不少数据量大的网站终会记录客户使用的操做系统或者浏览器版本等存入数据库中
Cookie:
网站为了辨别用户,进行session跟踪而储存在用户本地终端上的数据 , 一般通过加密
X-Forwarded-For:
简称XFF头,它表明客户端,也就是HTTP的请求段真实的IP,一般一些网站的防注入功能会记录请求端真实IP并写入数据库or某文件。【经过修改XXF头能够实现伪造IP】
Rerferer:
浏览器向web服务器代表本身是从哪一个页面连接过来的
Host:
客户端制定本身想访问的web服务器的域名/IP地址和端口号
宽字节注入
理想规范下,程序都使用unicode , 网站都使用 utf-8 ,但有些国家使用本身的编码,例如gbk,一个gbk编码的汉字占用两个字节,一个utf-8占用三个字节,简体中文系统中ANSI就表明GBK。
Scenes: 正常状况下经过输入单引号来探测有没有SQL注入漏洞 但因为使用了select函数或者其余字符转义函数,咱们会在单引号前加反斜杠 若是咱们构造的是`%df'`做为输入,在前面加上\,即`%df\'`,将会变成`%df%5c%27` 但gbk是两个字节表示一个汉字,因此`%5c变成汉字` `单引号逃逸`,原本转义以后是不能做为特殊字符的 如今能够与前面的语句进行`引号闭合`,使得报错或者检测漏洞。