此系类文章为SQL注入讲解,在本地搭建sql-labs环境进行sql注入,我也是刚开始学sql注入,本篇文章为sql-labs前两关注入讲解,后面的会在学过以后陆续发布,写此系类文章是为了以后方便回顾,也希望能够帮到大家,如果有不正确的地方欢迎指正,由于讲解比较详细,操作过程截图比较多,全文比较干,大家谅解、感谢支持。
phpstudy,sql-labs
hackbar,可以不用这个工具,只是为了方便一点,我用的是免费版的。
Less-1、Less-2
话不多说,直接看图:
直接在地址栏url注入,我为了方便使用hackbar,注入id=1测试:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
echo "<hr/>";
echo $sql;
echo "<hr/>";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
</font> </div></br></br></br><center>
<img src="../images/Less-1.jpg" /></center>
</body>
</html>
图2为sql-labs less1部分源码,可以看到我在源码sql语句下面在浏览器输出了sql语句,这样看起来会更明白,注入id=1后正确显示,然后测试id=1’ ,注意这里多了一个单引号:
根据报错信息和sql语句可以看出是因为单引号没有闭合,我们在后面加入注释–+,如果不加上加号依然不能注释后面的limit语句,+在后端会变成空格,这样连起来就可以起到注释作用:
接下来使用order by依次猜测有多少字段(order by作用可以百度),http://localhost/sql-labs/Less-1/?id=1’ order by 1/2/3–+测试到第四个四段就不行了,所以只有三个字段,然后查看字段信息:
这里注意,使用union(union为拼接两个不同的操作)以后前面的id的值要为不存在的,因为后面limit语句只显示一个字段,如果前面的id为正确的就会显示第一个结果,可以看到,第一个字段没有显示出来,不可用,可以在2,3任意字段执行sql命令,我们来查看当前数据库信息:
成功得到数据库security,接下来就可以查看数据库里面的表信息,这里要使用group_concat函数连接字符串,因为查询出来的是多个字符串,而浏览器只显示一个字段,所以要拼接在一起:
这里面的table_name、table_schema都是数据库的信息表information_schema里面的,具体信息请自行百度,可以看到已经查询出来了security数据库里面的表,flag表是以前大佬帮我搭环境的时候给我创建的,查询到flag里面的信息即可,当然大家查询其他信息方法都是一样的,接下来查看flag表里面的字段名:
可以看到flag表里面的字段名也是flag,这里用到的查询语句同上一步都为information_schema里面的信息,现在知道表名字段名以后直接select 字段名 from 表名就可以了:
成功得到所有信息,至此sql注入成功。
第二关和第一关几乎一样,只是id那里没有了单引号,大家看源码:
所以这一关不用在添加单引号,所有命令都为第一管去掉单引号即可,再次感谢支持!