做黏土的网站,网站制作知名公司,招工在哪个平台最好,云虚拟主机做网站这道题目是bugku的web题目 题目的 描 述: KosenCTF{}
原文链接#xff1a; CTF网络安全大赛web题目#xff1a;just_sqli - 红客网-网络安全与渗透技术
题目Web源代码#xff1a;
?php$user NULL;
$is_admin 0;if (isset($_GET[source])) {highlig…这道题目是bugku的web题目 题目的 描 述: KosenCTF{}
原文链接 CTF网络安全大赛web题目just_sqli - 红客网-网络安全与渗透技术
题目Web源代码
?php$user NULL;
$is_admin 0;if (isset($_GET[source])) {highlight_file(__FILE__);exit;
}if (isset($_POST[username]) isset($_POST[password])) {$username $_POST[username];$password $_POST[password];$db new PDO(sqlite:../database.db);$db-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);try {$db-exec(CREATE TABLE IF NOT EXISTS users (username TEXT UNIQUE, password TEXT, is_admin BOOL););$q username, is_admin FROM users WHERE username $username AND password $password;if (preg_match(/SELECT/i, $q)) {throw new Exception(only select is a forbidden word);}$rows $db-query(SELECT . $q, PDO::FETCH_ASSOC);foreach ($rows as $row) {$user $row[username];$is_admin $row[is_admin];}}catch (Exception $e) {exit(EXCEPTION!);}}?!DOCTYPE html
html
headmeta charsetUTF-8titleJust SQLi/title
/head
bodyh1Just SQLi/h1 diva href?source1view source/a?php if ($user) { ?divNice Login ? $user ?/div?php if ($is_admin) { ?divAnd Nice to Get the Admin Permission!/divdiv ? include(../flag.php); ?/div?php } ??php } ?form action methodPOSTdivusername: input typetext nameusername required/divdivpassword: input typetext namepassword required/divdivinput typesubmit valueLogin/div/form/body
/html
从给定的PHP代码中有几个关键的安全问题可以被利用来进行SQL注入。但首先需要注意的是代码中尝试使用preg_match来防止SELECT关键词的使用然而这种尝试是无效的因为它并没有在构造完整的SQL查询时应用此检查。
下面是一个可能的SQL注入攻击步骤来绕过身份验证并获取管理员权限 原文链接 CTF网络安全大赛web题目just_sqli - 红客网-网络安全与渗透技术
用户名注入由于用户名和密码直接插入到SQL查询中我们可以尝试在用户名字段中注入SQL代码。但是由于preg_match检查我们不能直接包含SELECT。但我们可以尝试其他方法如注释掉原查询的剩余部分。构造注入语句在用户名字段中我们可以尝试使用SQL注释-- 在SQLite中是有效的来截断原始查询的其余部分并附加我们自己的查询条件。由于代码尝试直接构造一个片段并添加到SELECT查询中我们可以利用这一点。绕过preg_match由于preg_match只检查$q变量这只是一个片段不是完整的SQL查询我们可以构造一个不包含SELECT的片段但在实际执行时它将成为完整的SELECT查询的一部分。
下面是一个可能的注入攻击示例请注意这只是一个示例实际情况可能有所不同
在用户名字段中输入 OR 11 --
在密码字段中输入任意值例如password123。
提交表单后生成的SQL查询将是
SELECT username, is_admin FROM users WHERE username OR 11 -- AND password password123
由于--是SQL注释所以查询的剩余部分包括密码验证部分将被忽略。这样查询将返回表中的所有用户无论他们的密码是什么。
然而为了获取管理员权限我们可能还需要进一步利用其他漏洞或尝试其他注入方法因为此查询仅返回用户名和is_admin字段而不直接修改它们。
但请注意这种攻击是违法的并且只应在法律允许和道德接受的环境如安全培训或测试环境中进行。在实际环境中尝试此类攻击可能导致法律责任和其他后果。 原文链接 CTF网络安全大赛web题目just_sqli - 红客网-网络安全与渗透技术
我们开始对这个题目进行sql注入吧 一开始我们先盲注构造查询语句
adminor 11 --
发现行不通 接着我们开始联合查询
adminunion select 1,2#
发现还是不行 看了下代码 preg_match(/SELECT/i, $q这个对select进行了处理。 接着我们开始下一个方法就是用values进行替换select就行了
adminunion values(password,1) -- 也是成功拿到答案
红客网blog.hongkewang.cn 原文链接 CTF网络安全大赛web题目just_sqli - 红客网-网络安全与渗透技术