关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):
http://localhost/sqli-labs/Less-20/
可以看到,靶场中有一个登录框,本关的名称中包含 Cookie Injection
证明注入点是在 Cookie 中。所以这里我们先开个挂,先使用一个合法的用户进行登录,等获取了 Cookie 的命名规则后再进行进一步的测试
笔者这里使用的用户名和密码是 Dumb : Dumb
,登陆后的页面如下所示:
如此,我们成功获取了目标后端所需要的 Cookie 的样式:
uname = Dumb
接下来,打开 [[00 - HackBar - README|HackBar 插件]],点击 Load URL 并勾选 Cookies 后,对 Cookies 字段传入以下测试字段:
测试 Payload 01: uname=1' # 结果 : 报错
根据服务端回显的错误信息,我们可以构造如下 Payload 进行攻击:
-- 获取当前服务器正在使用的数据库的名称攻击 Payload: uname=1' and updatexml(1,concat(0x7e,database(),0x7e),1)#'笔者备注: 0x7e 是字符 ~ 号,用于标识服务器报出来的数据。
可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-20 POST-Cookie Injections-Uagent field-error based 成功过关。
0x02:源码分析
下面是 SQLI LABS Less-20 POST-Cookie Injections-Uagent field-error based 后端的部分源码,以及笔者做的笔记:
// 获取 Cookie 传递过来的 uname 的值$cookee = $_COOKIE['uname'];$format = 'D d M Y - H:i:s';$timestamp = time() + 3600;echo "<center>";echo '<br><br><br>';echo '<img src="../images/Less-20.jpg" />';echo "<br><br><b>";echo '<br><font color= "red" font size="4">'; echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];echo "</font><br>"; echo '<font color= "cyan" font size="4">'; echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR']; echo "</font><br>"; echo '<font color= "#FFFF00" font size = 4 >';echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";echo '<font color= "orange" font size = 5 >'; echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);echo "<br></font>";// 没有做过滤直接就拼接到 SQL 模板上$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";$result=mysqli_query($con1, $sql);if (!$result){ // 如果没能读取到数据,就返回报错信息 => 报错注入die('Issue with your mysql: ' . mysqli_error($con1));}