代码审计系列第二节——SQL注入
经过第一节给咱们简略介绍了一下代码审计简略运用,那么第二节,咱们来介绍一下,使用东西和手艺进行缝隙发掘。为了咱们能对sql注入有更好的学习和收成。引荐咱们几个学习php根底的网站
Imooc.com http://www.w3school.com.cn/php/index.aspw3school
Sql注入根底
下面是咱们简略写了一个php后端传输句子,总共没有几行代码,假如上面几个根底网站你进行学习,那么下面这几行根底代码,看懂彻底没有问题。数据库衔接,使用$_GET用来显现数据库id号,进行遍历数据。这个是咱们进行演示的小demo
<?php
$dbuser = “root”;
$dbpwd = “123456”; //这里是mysql的暗码
$db = “dvwa”;
$conn = mysql_connect(“localhost”,$dbuser,$dbpwd) ordie(“error”);
mysql_select_db($db,$conn);
$user_id = $_GET[‘user_id’];
$query = “select * from users where user_id =$user_id”;
$result = mysql_query($query) or die(mysql_error());
print_r(mysql_fetch_array($result));
?>
除了上面id或许呈现注入,那么其它http头,也或许会呈现注入问题。那么咱们也会进行简略剖析http头注入问题,下面给出一段http头注入小demo
http头烘托注入
function getip()
{
if (getenv(‘HTTP_CLIENT_IP’))
{
$ip = getenv(‘HTTP_CLIENT_IP’);
}
elseif (getenv(‘HTTP_X_FORWARDED_FOR’))
{//获取客户端用代理服务器拜访时的实在ip 地址
$ip = getenv(‘HTTP_X_FORWARDED_FOR’);
}
elseif (getenv(‘HTTP_X_FORWARDED’))
{
$ip = getenv(‘HTTP_X_FORWARDED’);
}
elseif (getenv(‘HTTP_FORWARDED_FOR’))
{
$ip = getenv(‘HTTP_FORWARDED_FOR’);
}
elseif (getenv(‘HTTP_FORWARDED’))
{
$ip = getenv(‘HTTP_FORWARDED’);
}
else
{
$ip = $_SERVER[‘REMOTE_ADDR’];
}
return $ip;
}
http头注入点来历,来自下面几个函数头,假如平常你进行黑客测验,那么在进行抓包的时分,会经常看见下面函数头。
User-agent 浏览器版别 (少)
Referer 来历(少)
X-Forwarded-For 获取ip(高)
client_ip 获取ip(高)
注入分类,数字、字符、union、双查询
怎么辨认呢,黑盒测验,你能够进行加单引号或者是and 1=1来进行检查页面是否有改变。
①报错注入
这几条句子显现的十分清楚了,传过来一个id,进行了数据库句子操作,然而对$query没有进行安全过滤操作,直接进数据库。导致了sql注入发作。那么在进行单引号操作之后,页面发作一些过错。提示咱们在1邻近有单引号。
http://127.0.0.1/dvwa/Less-1/?id=1′ and 1=0union select 1,count(*),concat((select email_id from emails whereid=5),0x2a,floor(rand(0)*2))x from users group by x–+
②数字型注入
在这个句子里边,没有单引号的维护,导致了数字型注入。和前面报错注入剖析是相同的。只不过有了一个在进入数据库今后,会对一些符号进行转义,加上反斜杠。安全性恰当加高。
时刻注入
时刻注入函数,首要是今后两个函数进行验证,time()函数和bendwith(),现在数据库都是大于5.0今后版别,支撑time()操作,所以本文一下都是选用time()函数,来进行解说的。
[1] [2] [3] 黑客接单网