一、判断SQL注入漏洞

  • 参数带入数据库查询:传入的参数拼接到SQL语句,然后写入数据库查询。

    • 例如:用户传入的参数为1':select * from users where id=1'

    • 因为这个SQL语句不符合语法规则,所以导致报错(有报错就说明有可能存在SQL注入漏洞)

  • 判断原理

    • 当用户传入的参数为1 and 1=1时(select * from users where id=1 and 1=1

    • 因为1=1为真,id=1也是真,也就and两边同真(与运算),所以页面会返回id=1的结果。

    • 如果用户传入参数为1 and 1=2的时候,因为1=2为假,id=1为真,也就是and两边有一个为假,所以页面就会返回和id=1不一样的结果。根据这些结果,就大概可以判断存在SQL 注入漏洞。然后我们就可以进一步拼接SQL攻击语句来进行攻击,造成对方信息泄露,甚至获取到服务器的权限。

  • 常用判断语句:根据页面回显的信息进行判断

id =1 and 1=1
id = 1 and 1=2
id = 1 or 1=1
id = '1' or '1'='1'
id=" 1 "or "1"="1"
  • 为了演示方便,先在数字型注入里查看一下用户名,然后在字符型(用户名是字符型)注入里传参进行判断

  • 用单引号判断,发现报错,则可能存在注入

  • 也可以通过传参进行判断:

    • lucy'and '1'='1:后面不加引号是因为页面里会拼接SQL语句;输入lucy'and '1'='2就发现页面会有相应变化

  • 无回显情况判断是否存在注入:根据输入的语句,页面没有发生任何变化,或者没有将数据库中的内容显示到网页中

    • 可以用sleep()来判断是否可以注入

    • lucy'and sleep(5)-- (注意:--后面要加一个空格),发现页面没有任何变化

    • sleep(5):大于5秒再返回页面

    • -- :用注释符注释页面拼接的单引号和后面的查询语句

二、注入流程概述

  • 先判断是否存在注入,然后判断注入类型

  • 判断字段数:order by

  • 确定回显点:union select 1,2

  • 查询数据库信息:@@version @@datadir

  • 查询用户名:user()

  • 查询数据库名:database()

  • 文件读取:union select 1,load_file('C:\\wondows\\win.ini')#

  • 写入 webshell:select..into outfile...

  • 使用 sql 注入遇到转义字符串的单引号或者双引号,可以用HEX编绕过