靶场环境:用户登陆
解题过程:
步骤一:
这是一个登录页,表单 GET 提交到check.php,参数为username和password。直接拿admin/admin登录会返回 "NO,Wrong username password!!!"。
步骤二:
测试 SQL 注入,发现username字段可注入,用:
http://04aece4075ee4bfedb600d2a.http-ctf2.dasctf.com/check.php?username=admin'%20or%201%3D1%23&password=x用户名处的单引号闭合了 SQL 的字符串,or 1=1让条件恒真,#注释掉后面(包括密码校验)的查询部分,于是返回Login Success,页面直接输出 flag。
答疑
username=admin'%20or%201%3D1%23&password=x指的是username=admin' or 1=1%23
因为地址栏里的#是 URL 的片段标识符(fragment)。浏览器一看到#,它后面所有内容(包括&password=...)都不会发送给服务器。
如果SQL语句为username=admin' or 1=1%23,则密码为空 → 于是返回 "Input your username and password"。