游客发表

sql注入靶场闯关

发帖时间:2026-10-17 04:49:43

打开DVWA的入靶SQL Injection页面,输入框里敲一个单引号,场闯回车。入靶页面直接甩回来一个MySQL语法错误——恭喜,场闯你踩中了最经典的入靶注入点。靶场闯关这件事,场闯本质上就是入靶跟后端数据库玩一场猜谜游戏,你输入的场闯每个字符都可能变成SQL语句的一部分,而你要做的入靶,就是场闯让这些语句替你干活。

第一关通常叫“Low”级别,入靶代码大概长这样:$id = $_GET['id']; $query = "SELECT first_name,场闯 last_name FROM users WHERE user_id = '$id';"。看到没,入靶变量直接拼进SQL里,场闯连个过滤都没有。入靶这就像把家门钥匙插在锁上还贴了张纸条写着“随便进”。我试过输入1' OR '1'='1,结果整张users表全被拖出来。当时屏幕上刷出十几个用户名,那种感觉比打游戏爆装备还爽。

但别急着高兴,靶场第二关往往就给你上强度。比如Pikachu靶场的数字型注入,参数没引号包裹,你得用1 OR 1=1这种不带引号的写法。这时候如果还傻乎乎地加单引号,页面直接报错。我见过有人卡在这一关半小时,反复试1' OR '1'='1,嘴里嘟囔“怎么不灵了”——其实就是没看清SQL语句里参数有没有引号。这种细节,教程不会明说,得自己拿眼睛去代码里扒。

再往上走,过滤规则开始变态。有的靶场把union、select这些关键词拉黑,你输入union select直接弹窗警告。这时候就得玩点花的:大小写混写UnIoN SeLeCt,或者用内联注释/*!union*/ /*!select*/绕过。我在sqli-labs的Less-27关就吃过亏,服务器把union和select之间的空格也过滤了,最后用union%0aselect换行符才蒙混过关。这种解法没有标准答案,全凭对SQL解析器的理解——你得知道数据库在什么时候把注释当空气,什么时候把换行当空格。

盲注才是真正折磨人的环节。页面不报错、不回显数据,只给你两种状态:正常和异常。这时候就得靠substr()和ascii()一个字符一个字符地猜数据库名。我写过一个Python脚本跑盲注,每猜一个字符要发几十次请求,猜完一个表名花了三分钟。屏幕上跳动的ASCII码数字像心电图一样,猜对了就“滴”一声。有人觉得这效率太低,直接上sqlmap——但手动盲注练的是对布尔逻辑的直觉,脚本跑出来的结果你未必真懂。

时间盲注更阴间。页面连正常异常都不给你,只能靠sleep(5)让服务器卡五秒来判断条件真假。我试过一次猜database()的第一个字符,脚本跑了二十多秒才确认是s。那二十秒里我盯着浏览器转圈,心里默数秒数,比等外卖还焦虑。后来发现if(ascii(substr(database(),1,1))>100,sleep(3),0)这种写法能缩短等待,但依然慢得让人想砸键盘。

靶场最后一关通常是堆叠注入或者二次注入。堆叠注入允许你用分号执行多条SQL,比如1'; DROP TABLE users;--。我第一次成功时手抖了一下,真把靶场表删了,只好重装数据库。二次注入更隐蔽:恶意数据先存进数据库,等下次被查询时才触发。比如注册用户名admin'--,改密码时系统直接把你当成admin。这种漏洞在真实CMS里出过好几次,靶场只是把现实案例搬过来给你练手。

说到底,SQL注入靶场闯关就是不断试探后端逻辑的过程。每关的过滤规则像一堵墙,你得找墙上的裂缝——可能是注释符,可能是编码绕过,也可能是数据库特性。别指望一套payload通杀所有关卡,我见过有人把' OR 1=1--复制到每一关,结果从第三关开始就寸步难行。真正有用的经验是:看到报错先读错误信息,看到过滤先测哪些字符被拦,看到盲注先写个自动化脚本。靶场不会教你所有技巧,但它会逼你养成看代码、猜逻辑、动手试的习惯。这比背一百个payload管用。

    热门排行

    友情链接