pikachu靶场sql注入
Pikachu靶场的注入SQL注入模块,是注入我见过最适合新手入门SQL注入的练习环境。它不像DVWA那样需要配置数据库,注入也不像SQLi-Labs那样纯命令行枯燥。注入打开Pikachu的注入页面,一个黄澄澄的注入皮卡丘在左上角,旁边就是注入SQL注入的入口,点进去,注入第一关叫"数字型注入"。注入
这一关的注入界面是个简单的查询框,输入ID,注入下面返回用户名和邮箱。注入我输入1,注入正常返回。注入输入1 and 注入1=1,还是正常返回。输入1 and 1=2,页面空白了。就这么简单,一个数字型注入的漏洞就暴露了。很多人觉得这太基础,但真正的SQL注入核心逻辑,恰恰就藏在这种"输入什么返回什么"的对应关系里。你输入的内容被拼进了SQL语句,数据库执行后把结果反馈到页面,这个过程本身就是漏洞的根源。
我见过不少初学者卡在"为什么1 and 1=2就没结果"这个坎上。其实你换个角度想,SQL语句大概是这样的:SELECT * FROM users WHERE id = $id。当$id变成1 and 1=2,整条语句就变成了WHERE id = 1 and 1=2,这个条件永远为假,自然查不出东西。一旦你把这个逻辑理顺,后面的一切都顺理成章了。
然后是字符型注入。Pikachu在界面上特意标了个"单引号"的提示,你输入一个单引号,页面直接报错。这个报错信息很关键,它直接告诉你SQL语句的拼接方式。我试了试输入1',报错信息里能看到语句大概长这样:WHERE username = '1''。多出来的那个单引号破坏了语法。这时候你输入1' or '1'='1,就能把所有用户数据拉出来。这种"闭合前一个引号,再构造自己的条件"的思路,是字符型注入的核心技巧。
Pikachu还有个搜索型注入的关卡,界面是个搜索框,你输入关键词,它返回匹配的用户名。这关的坑在于,很多人以为搜索框只能用来搜东西,但其实它背后也是SQL查询。我输入a%' or 1=1 -- ,结果把所有记录都翻出来了。这种场景在真实网站里太常见了,比如电商网站的搜索功能、论坛的帖子搜索,只要没对输入做过滤,都可能存在同样的漏洞。
再往深处走,Pikachu还给了POST型注入和报错注入的练习。POST型注入跟前几关的区别只是请求方式不同,但逻辑完全一样。报错注入则是利用数据库报错信息来提取数据,比如你输入1' AND extractvalue(1, concat(0x7e, (select database()))) -- ,页面会直接报错并显示出当前数据库名。这种手法在真实渗透里很实用,因为很多网站虽然过滤了联合查询,但没过滤报错信息。
整个Pikachu的SQL注入模块,其实就教了一件事:你要学会跟数据库"对话"。不是那种死记硬背payload的对话,而是理解SQL语句的拼接规则,然后通过构造特殊输入,让数据库按你的意思执行查询。这个模块的难度曲线很平缓,从数字型到字符型,从GET到POST,从普通注入到报错注入,每一步都有提示,但又不至于直接给你答案。
我自己练完这套关卡大概花了一个下午。说实话,中途有几次卡在报错注入的语法上,总想着找个工具直接跑,但最后还是手动敲完了所有payload。那种把一个报错信息读懂、然后构造出正确语句的感觉,比跑任何自动化工具都爽。如果你真想学SQL注入,别急着上sqlmap,先把Pikachu里这十几个关卡手动过一遍,比看十篇教程都管用。