—————— 搜索型注入 加固
https://blog.csdn.net/weixin_43622525/article/details/123339432
搜索形注入:
其实对于初学SQL注入,并不需要区分注入类型。
但是要理解搜索形注入,首先需要理解SQL的搜索型语句,举个例子
我们希望从 "limo_666" 表中选取居住在包含 "limo" 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM limo_666
WHERE City LIKE '%limo%'
通常来讲 SQL注入只是后台的 数据库查询语句不够严谨导致,
现在,再举个例字 :比如后台的查询语句为
select email from member where id like '%要查询的关键字%'
当我们输入的关键字为 ' or '%'=' 此时变成
select email from member where id like '%' or '%'='%'
select email from member where id like '%' or '%'='%'
可见后者or为永真
其实对于初学SQL注入,并不需要区分注入类型。
但是要理解搜索形注入,首先需要理解SQL的搜索型语句,举个例子
我们希望从 "limo_666" 表中选取居住在包含 "limo" 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM limo_666
WHERE City LIKE '%limo%'
通常来讲 SQL注入只是后台的 数据库查询语句不够严谨导致,
现在,再举个例字 :比如后台的查询语句为
select email from member where id like '%要查询的关键字%'
当我们输入的关键字为 ' or '%'=' 此时变成
select email from member where id like '%' or '%'='%'
select email from member where id like '%' or '%'='%'
可见后者or为永真
直接输入%进行查询,因为没有做过滤,%在数据库的查询中匹配任意字符
源代码
1 <?php 2 /** 3 * Created by runner.han 4 * There is nothing new under the sun 5 */ 6 7 8 $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1); 9 10 if ($SELF_PAGE = "sqli_search.php"){ 11 $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''); 12 } 13 14 $PIKA_ROOT_DIR = "../../"; 15 include_once $PIKA_ROOT_DIR . 'header.php'; 16 17 include_once $PIKA_ROOT_DIR."inc/config.inc.php"; 18 include_once $PIKA_ROOT_DIR."inc/function.php"; 19 include_once $PIKA_ROOT_DIR."inc/mysql.inc.php"; 20 21 $link=connect(); 22 $html1=''; 23 $html2=''; 24 if(isset($_GET['submit']) && $_GET['name']!=null){ 25 26 //这里没有做任何处理,直接拼到select里面去了 27 $name=$_GET['name']; 28 29 //这里的变量是模糊匹配,需要考虑闭合 30 $query="select username,id,email from member where username like '%$name%'"; 31 $result=execute($link, $query); 32 if(mysqli_num_rows($result)>=1){ 33 //彩蛋:这里还有个xss 34 $html2.="<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />"; 35 while($data=mysqli_fetch_assoc($result)){ 36 $uname=$data['username']; 37 $id=$data['id']; 38 $email=$data['email']; 39 $html1.="<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>"; 40 } 41 }else{ 42 43 $html1.="<p class='notice'>0o。..没有搜索到你输入的信息!</p>"; 44 } 45 } 46 47 48 49 ?> 50 51 52 <div class="main-content"> 53 <div class="main-content-inner"> 54 <div class="breadcrumbs ace-save-state" id="breadcrumbs"> 55 <ul class="breadcrumb"> 56 <li> 57 <i class="ace-icon fa fa-home home-icon"></i> 58 <a href="sqli.php">sqli</a> 59 </li> 60 <li class="active">搜索型注入</li> 61 </ul><!-- /.breadcrumb --> 62 63 <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)" 64 data-content="%%"> 65 点一下提示~ 66 </a> 67 68 </div> 69 <div class="page-content"> 70 71 72 <div id="sqli_main"> 73 <p class="sqli_title">请输入用户名进行查找<br />如果记不住用户名,输入用户名的一部分搜索的试试看?</p> 74 <form method="get"> 75 <input class="sqli_in" type="text" name="name" /> 76 <input class="sqli_submit" type="submit" name="submit" value="搜索" /> 77 </form> 78 <?php echo $html2;echo $html1;?> 79 </div> 80 81 82 83 </div><!-- /.page-content --> 84 </div> 85 </div><!-- /.main-content --> 86 87 88 89 90 91 <?php 92 include_once $PIKA_ROOT_DIR . 'footer.php'; 93 94 ?>
$query="select username,id,email from member where username like '%1' or '1'='1'#'";


可以看见存在sql注入
下面开始修复
点击下面查看代码
<?php
/**
* Created by runner.han
* There is nothing new under the sun
*/
$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
if ($SELF_PAGE = "sqli_search.php"){
$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}
$PIKA_ROOT_DIR = "../../";
include_once $PIKA_ROOT_DIR . 'header.php';
include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";
$link=connect();
$html1='';
$html2='';
if(isset($_GET['submit']) && $_GET['name']!=null){
//这里没有做任何处理,直接拼到select里面去了
$name=addslashes($_GET['name']);
//这里的变量是模糊匹配,需要考虑闭合
$query="select username,id,email from member where username like '%$name%'";
$result=execute($link, $query);
if(mysqli_num_rows($result)>=1){
//彩蛋:这里还有个xss
$html2.="<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />";
while($data=mysqli_fetch_assoc($result)){
$uname=$data['username'];
$id=$data['id'];
$email=$data['email'];
$html1.="<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";
}
}else{
$html1.="<p class='notice'>0o。..没有搜索到你输入的信息!</p>";
}
}
?>
<div class="main-content">
<div class="main-content-inner">
<div class="breadcrumbs ace-save-state" id="breadcrumbs">
<ul class="breadcrumb">
<li>
<i class="ace-icon fa fa-home home-icon"></i>
<a href="sqli.php">sqli</a>
</li>
<li class="active">搜索型注入</li>
</ul><!-- /.breadcrumb -->
<a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"
data-content="%%">
点一下提示~
</a>
</div>
<div class="page-content">
<div id="sqli_main">
<p class="sqli_title">请输入用户名进行查找<br />如果记不住用户名,输入用户名的一部分搜索的试试看?</p>
<form method="get">
<input class="sqli_in" type="text" name="name" />
<input class="sqli_submit" type="submit" name="submit" value="搜索" />
</form>
<?php echo $html2;echo $html1;?>
</div>
</div><!-- /.page-content -->
</div>
</div><!-- /.main-content -->
<?php
include_once $PIKA_ROOT_DIR . 'footer.php';
?>
在27行修改成如下代码$name=addslashes($_GET['name']);继续测试




此时成功修复了sql注入

浙公网安备 33010602011771号