SQL注⼊学习—sqlilabs环境搭建以及代码审计(1—10关代码
详解)持续更新1-65关
⽬录
环境搭建
Github上直接搜索sqli-labs直接会有源码,php、asp版本的都有,我这是使⽤的⼀个php经典版本,sql注⼊必备
我这边使⽤的是phpstudy直接传上去就ok了,kali⾃带的lamp环境直接启动mysql和apache也可以,不过要记得设置mysql密码,kali⾃带的mysql是没有密码的,在root⽤户下输⼊如下命令即可进⼊mysql数据库
Mysql -u root -p
出现输⼊密码时⽆需输⼊直接回车即可,可以在mysql的user表⾥增加⼀个root密码,然后将源码复制打包到/var/www/html⽬录下即可
use mysql;//使⽤数据库mysql
update user set password=PASSWORD('root') where User='root';//使⽤PASSWORD函数将密码改为root
或者直接在root权限下命令⾏输⼊:mysqladmin -u root -password root
注意要使⽤php7的源码,php7中将sql函数移除,我们要使⽤sqli函数代替,csdn上有很多⼤佬对这个更改的⽅法做了很多的讲解,有想了解的⼩伙伴可以去搜索⼀下。
然后我这是直接使⽤的phpstudy的⼀个集成版,安装phpstudy之后⼀键启动即可,很适合想要学习的⼩伙伴们
Php study官⽹地址:
将源码放到PHPstudy下的WWW⽬录下即可
然后我们需要修改sqli-labs-master\sql-connections⽬录下的db-creds.inc⽂件,修改如下:
然后我们进⼊我们的sqli-labs⽹站⾸页安装⼀下就好了
正确提⽰这样我们就算安装完成了
我们进⼊关卡输⼊id=1测试⼀下,已经是没有问题了。
SQL注⼊概念讲解
SQL注⼊就算指web应⽤程序对⽤户输⼊数据的合法性没有判断,前段传⼊后段的参数是攻击者可控的,并且参数带⼊数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。
SQL注⼊根据个⼈学习所得,⼤概分为如下⼏种:
1. 联合查询注⼊(整型注⼊、字符型注⼊、宽字节注⼊、⼆次注⼊、堆叠注⼊等等)
2. 报错注⼊(通过报错函数⼤致分为updatexml报错注⼊、floor报错注⼊、extractvalue报错注⼊、exp报错注⼊等等)
3. 盲注(时间型盲注、布尔型盲注等等)
通过我们的上传点位置还⼤致分为GET注⼊、POST注⼊、http头部注⼊等等。
关于概念我们⽬前先讲⼀个⼤概,后续我会整理⼀下注⼊原理以及实现⽅式的后期分享
代码审计
事实上,在正常⼯作环境中,⽩盒测试⽆疑是⽐⿊盒测试要简单许多,所以我们先进⾏⼀个源码分析,
然后在下⾯我在讲解⼀下闯关的⼀些内容,⽽且我们通过对源码的分析会⼀针见⾎发现源码中的问题并且针对问题进⾏注⼊攻击,正所谓知⼰知彼,百战不殆。⽽且,我们作为⼀个学者来进⾏学习,所以肯定要学全套的嘛。
Less1:
源码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-1 **Error Based- String**</title>
</head>
<body bgcolor="#000000">
<div >Welcome   <font color="#FF0000"> Dhakkan </font><br> <font size="3" color="#FFFF00">
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$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>
源码讲解
通过源码,我们看到他的sql变量直接将id的内容带⼊到sql语句中进⾏查询
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
并且id变量直接由我们在⽹页上直接GET请求上传
$id=$_GET['id'];
并且数据库获取的内容直接在页⾯上可以显⽰sql容易学吗
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
echo 'Your Login name:'. $row['username'];
echo 'Your Password:' .$row['password'];
因此我们很容易的可以判断出这是⼀个没有任何限制的sql注⼊,是⼀个字符型注⼊,闭合符号为单引号。我们可以直接闭合前⾯的符号并且将后⾯内容注释掉直接可以进⾏⼀个联合查询注⼊。
Less2
源码如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。