阅读本文大概需要 1 分钟
基本概述
SQL 注入,是 Web 渗透中最常见的漏洞。它所带来的危害也往往比较严重,利用此漏洞,攻击者可以对目标系统进行脱库,甚至控制主机。
产生原因
SQL 注入漏洞的根本原因,是程序编写人员在编写程序时,没有严格的对前台传递的参数进行校验。该参数破坏了原有的 SQL 语句结构,从而导致 SQL 注入。
一旦存在 SQL 注入,则攻击者可以任意构造 SQL 语句。
基本原理
那么现在我来简单说一下我对 SQL 注入原理的认知。
下面是一张简单的用户表,就叫它 user 表吧。
id | username | password |
---|---|---|
1 | admin | admin |
2 | root | root |
我现在有一个用户登录的功能,那么我的 SQL 语句是这样的。
select id,username from user where username='$username' and password='$password'
而我只需要判断查询出的结果是否为空即可。
正常情况下,提交参数 username=admin&password=123,那么得到的语句是这样的。
select id,username from user where username='admin' and password='123'
此时肯定是查不出数据的,因为 admin 账号正确的密码是 admin。所以此时会登录失败。
但是如果提交参数 username=admin'#&password=123,那么会得到以下语句。
select id,username from user where username='admin'#' and password='123'
而 # 在 SQL 是注释符,所以上面的语句等同于下面这条。
select id,username from user where username='admin'
此时肯定是可以查出数据的,这就导致了不需要密码就可以任意用户登录。
也可以提交参数 username=admin' or '1'='1&password=123,得到语句。
select id,username from user where username='admin' or '1'='1' and password='123'
or '1'='1'
是恒成立的,所以上面的语句同样可以查出数据。
总结
上面只是一个最为简单的例子,真实的渗透中,基本不存在这么容易的 SQL 注入。
但我们知道原理,就可以一步步探索。
不断向前,披荆斩棘,加油!
原文始发于微信公众号(白帽渗透笔记):SQL 注入基本原理
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论