这个问题是关于一个更大的学校作业中的一个小细节。我已经为这个小问题苦苦挣扎太久了。
ABCTF 安排了今年早些时候举行的夺旗比赛。这场比赛中的一个问题是 SQL 注入。这是任务描述的 URL ,这是要注入的登录表单的 URL 。这个问题有一个已发布的解决方案,它看起来像这样:
用户名:-1' union select 1,1,1,1 #
密码:1
我需要弄清楚后端查询字符串可能是什么样子。最简单、最天真的假设是
String query = "SELECT FROM user WHERE username = '" + inputA + "' AND password = '" + inputB + "';";
execute(query);
但这会产生
String query = "SELECT FROM users WHERE username = '-1' union select 1,1,1,1 #' AND password = '1';";
execute(query);
最明显的问题是报价不平衡。此外,我不明白 SELECT 语句会产生什么输出。据我了解,“#”字符用于表示 MS SQL Server 中的临时表,例如“#temporary_table”。我也玩过其他简单的陈述,但没有任何意义。
有没有人知道后端查询的样子?任何建议表示赞赏。