xx型(未知型)

xx型(未知型)

类似于黑盒测试

这完全取决于​写代码那个程序员的个人习惯

  • 普通写法: 大部分教程或简单的代码里,程序员喜欢直接写 username = '$name'​。所以用 ' 就能闭合。

  • 强迫症/规范写法: 有些程序员(或者某些框架自动生成的代码)觉得给变量加个括号包裹起来更“稳重”或者更好看,于是写成了 username = ('$name')

    • 这就好比:有人送礼物直接用纸包('$name'​),有人喜欢在纸包外面再套个盒子(('$name'))。
    • 不管他包了几层,都要一层一层拆开。如果是纸包的,就撕纸('​);如果是盒子装的,就先撕纸再拆盒('))。

“xx型”和“字符型”的本质区别,仅仅就是后台代码多裹了一层括号,导致你需要多一把剪刀(那个右括号 ))来修剪它。

所以后续的测试就只需要在前面加一个能完成闭合的东西就行,比如:

-1') or '1'='1' --

image

所以后面实战就是要做一个黑盒测试:

需要建立自己的“探针字典” (Fuzzing List)

既然是黑盒,就不能只试一个单引号 ' 就放弃。在实战中,大家都有一套自己的“探测连招”。

当遇到一个输入框,脑子里要瞬间弹出这张清单:

  • 常规探测: '​ (单引号), " (双引号)
  • 括号探测: )​, ))​, ')​, ")​, '))​, "))
  • 逻辑探测: and 1=1​, and 1=2​, or 1=1
  • 注释探测: --+​, #​, %23​, ;%00
  • 特殊编码: 宽字节 %df'​, URL 编码 %27

在 Pikachu 里学到的“xx型”其实就是模拟了实战的第一阶段。

  • 阶段一:Fuzzing (模糊测试/探测)

    • 动作: 把上面那张清单里的符号轮流输进去。
    • 目的: 找出闭合符。比如你输 x')​ 报错了,输 x') -- 正常了,你就知道:“哈!原来你是单引号加括号闭合!”
  • 阶段二:Bypass (绕过防御)

    • 动作: 你刚输了 union select,结果被 WAF (防火墙) 拦截了。
    • 目的: 你得把空格换成 /**/​,把 union​ 换成 uNion,通过“变形”来绕过安检。
  • 阶段三:Exploit (利用)

    • 动作: 既然探明了路,防御也绕过了,最后就是把 select user() 发送过去拿数据。

那么什么又是白盒测试呢?

  • 黑盒测试: 你是玩家。你不知道机关怎么运作,只能这里点一下,那里踩一下,看门会不会开。
  • 白盒测试: 你是​开发者(或者拿到了开发者的图纸)。你直接看游戏的代码,发现第 10 行写着:“如果玩家同时按下 A 和 B,大门打开”。

定义: 白盒测试是指测试者完全知道系统的内部结构、算法逻辑和源代码。你不再关注“输入后输出了什么”,而是关注“代码在内部是怎么跑的”。

举个栗子:用白盒视角看刚才的“xx型注入”

刚才在做 Pikachu 的“xx型注入”时,为了试出那个括号 ('​,试了 x'​、x")​、x') 等好几次才蒙对。

如果是白盒测试,过程是这样的:

  1. 拿到源码: 你直接打开了 sqli_x.php 这个文件。

  2. 定位代码: 一眼就看到了这一行核心代码:

    $username =$​_GET['name'];
    // 程序员写道:为了安全,我要给名字加个括号!
    ​$sql = "select id, email from member where username = ('$​username')";

  3. 瞬间秒杀: 看到 ('$username') 的瞬间,你不用测试也不用猜,大脑里直接生成 Payload:

    “哦,用了单引号和括号包围,那我直接输入 x')​ 闭合,后面加 -- 注释就行了。”

这就是白盒测试的威力:精准打击,一击必杀。

“代码那么多,我怎么看?” 白盒测试不是让你当小说从第一行读到最后一行,而是通过 ​ “追踪数据流”

我们有一个核心公式:Source(输入点) + Sink(危险函数) = 漏洞

  • Source(污点源): 任何黑客能控制输入的地方。

    • 比如:$_GET​, $_POST​, $_COOKIE
  • Sink(汇聚点/危险函数): 会执行坏操作的地方。

    • 比如 SQL 里的 mysql_query()​,命令执行里的 system()
  • 审计过程:

    1. 我看到代码里接了一个参数 $id = $_GET['id'](Source)。
    2. 我追踪这个 $id 变量去了哪里。
    3. 我看它中间有没有被“清洗”(比如有没有被 intval() 强转成数字,或者被防火墙过滤)。
    4. 如果它“干干净净”地流到了 mysql_query($id)(Sink),那么恭喜你,发现一个 SQL 注入漏洞!

“凡是输入框,皆可能有诈。”“试了单引号不行?那就试双引号。”

posted @ 2025-12-16 22:09  xx666q  阅读(10)  评论(0)    收藏  举报