在学 SQL 注入的时候,自己写了个 php 文件做测试,结果就出现单引号被转义的事情,导致无法产生单引号报错。初探 sqli-labs-master 靶机的时候(还是在第一关)又出现这个问题。。。是时候出手了!

事件还原

昨夜西风凋敝树,独上高楼,望尽天涯路

本来豪情壮志想在 sqli-labs-master 上大展手脚的时候,却出师不利。

① 正常显示 ?id=1

② 单引号注入
居然没报错!!!不正常,难道被过滤了?不慌,且看看。

③ 布尔注入 ?id=1 and 1=1
按理来说,and 前后为真,输出肯定正常。

④ ?id=1 and 1=2
1=2 为 false,正常情况下应该会报错,可是。。。

至此,判断一个点是否为 SQL 注入点的基本三步骤都不奏效,难道源码的过滤措施已经如此到位?但也不应该啊,sqli-labs-master 本来就是一个 SQL 注入的练习场,本该有漏洞,而且还是第一关。。。

衣带渐宽终不悔,为伊消得人憔悴

① 不能盲猜,代码审计走起。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/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 style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<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('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);$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 语句然后查询数据库的,完全符合寻常 SQL 漏洞的代码布局啊。

② 初露端倪
审计源码的时候发现了一个有趣的东西,它的作用在于把输入保存在一个 result.txt 文件里面。

③ 发现症结
在保存到输入里面,找到我之前输入的单引号,居然被转义了,难怪不报错!!!但是为什么会被转义呢?

④思考
冷静地理一下思路。
第一:从客观上来讲,sqli-labs-master 这个靶场在第一关肯定会产生单引号报错,教程上也是这解法。
第二:从技术层面上看,常见的判断 SQL 注入点的三步骤都不奏效,可见此处和靶场的设定有出入。
第三:从源码上看,存在很明显的 SQL 注入漏洞。
综上所述,问题的根源绝非源代码出错。那是浏览器的问题?靶场能在浏览器上正常运行,应该不是。那是环境配置的问题?有可能。

众里寻他千百度,慕然回首,那人却在灯火阑珊处

自己实在不能解决,那就得借助网络的力量,在一番查询下,问题的症结终现端倪。
① 了解搭建的环境
此处是用了 phpstudy2013 搭建的环境,它集成了 MySQL + apache + php。
②配置
大概了解php和apache的配置,主要用到php.ini和httpd.conf ,而此处主要了解的是php.ini的配置。
一般情况下,为了对 PHP 代码的安全加固和防止 SQL 注入,在php.ini中safe_mode = On,就是返回php执行错误的 display_errors 这会返回很多有用的信息。
其次就是另外一个配置选项 magic_quotes_gpc,高版本的默认都是magic_quotes_gpc=On,它会把提交的变量中所有的 ’ (单引号), " (双引号), \ (反斜线) 和 空字符会自动转为含有反斜线的转义字符,例如把’变成了’,把\变成了\。

③ 解决
可以关闭 magic_quotes_gpc ,然后重启一下apache,或者在源码中加入以下代码。意思是判断 magic_quotes_gpc,如果是开启的话,调用 stripcslashes 函数,删除在被转义字符前面添加的反斜杠。

if(get_magic_quotes_gpc()){$id = stripcslashes($id);}

④ 验证 ?id=1’

尾声

即便是单引号被转义,也是可以有绕过的方法,但是此举也是为了还原 sqli-labs-master 靶场原本的运行环境,实乃无奈之举。

共勉!!!

                                                                                                                    猪头2019.12.9

php.ini 配置引发的问题相关推荐

  1. golang 读取 ini配置信息

    package main //BY: 29295842@qq.com //这个有一定问题   如果配置信息里有中文就不行 //[Server] ;MYSQL配置 //Server=localhost  ...

  2. 【php7扩展开发三】ini配置

    php.ini配置 php.ini是PHP主要的配置文件,解析时PHP将在这些地方依次查找该文件:当前工作目录.环境变量PHPRC指定目录.编译时指定的路径,在命令行模式下,php.ini的查找路径可 ...

  3. shiro java配置,InI 配置 - 跟我学 Apache Shiro_教程_Java开发社区

    INI 配置 之前章节我们已经接触过一些 INI 配置规则了,如果大家使用过如 Spring 之类的 IoC/DI 容器的话,Shiro 提供的 INI 配置也是非常类似的,即可以理解为是一个 IoC ...

  4. nginx配置php项目后403,nginx配置引发的403问题解决办法

    nginx配置引发的403问题解决办法 一.问题:在curl nginx配置的本地域名时出现403 nginx_error.log日志如下: 二.疑问 1.www.requesturi.com配置如下 ...

  5. python虚拟环境配置文件_uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)

    uwsgi 文档 uwsgi 安装 pip3 install uwsgi ini 配置方法 在 ini 配置文件里增加一个 home 或 pyhome  或 virtualenv  或 venv 参数 ...

  6. mysql my.ini配置优化_求高手帮我优化一下 mysql 的 my.ini

    最近服务器内存总是爆满,导致磁盘io都爆了,发现是MYSQL在往c盘拼命写临时文件.我想是不是MY.INI的配置有问题啊.现贴出原来的MY.INI配置,望帮我提出点优化建议.============= ...

  7. 【转载】PHP.INI配置:Session配置详细说明教程

    网上有很多PHP.INI文件配置的中文说明,但是对于PHP初学者来说在进行PHP运行环境搭建配置时还是容易一头雾水,今天换一种角度来分享如何进行php.ini配置,以求达到解决实际问题的效果,开篇以P ...

  8. INI配置——《跟我学Shiro》

    之前章节我们已经接触过一些INI配置规则了,如果大家使用过如Spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根 ...

  9. php.ini配置中文详解

    php.ini配置中文详解 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目 ...

最新文章

  1. vim ctags使用方法
  2. 如何用css让一个容器水平垂直居中
  3. 不得自行对涉密计算机进行格式化,保密资格认证-涉密人员考试试题
  4. .NET Core 中使用 Humanizer 显示友好时间格式
  5. 手把手教你如何使用Python执行js代码
  6. 【Keil】Keil5无法更改背景色和字体解决方案
  7. linux ulimit调优
  8. 讲解SQL Injection一篇不错的文章,地址贴一下
  9. vue学习笔记-7-分支结构
  10. linux下实现getch()函数的功能,linux下有没有和windows下的getch函数功能基本一样的函数?...
  11. amd opencl使用低版本驱动
  12. mac下如何设置excel下拉表格
  13. windows系统清理垃圾文件
  14. iOS 百度地图_自定义Annotation大头针_修改大头针图片
  15. opencv python 多帧降噪算法_使用OpenCV和Python构建自己的车辆检测模型
  16. [附源码]java毕业设计网上书店系统
  17. ‘findstr‘ 不是内部或外部命令,也不是可运行的程序或批处理文件...
  18. my firefox常用的插件介绍
  19. 英语口语116之每日十句口语
  20. 附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!

热门文章

  1. 微软发布Win8内幕 危机创新颠覆传统
  2. InnoDB磁盘架构之redo log
  3. 初二英语上册50页2d翻译,初一英语上册41页2d翻译
  4. 【项目实战】Python基于GARCH模型进行预测特斯拉股票,以及评估金融资产的风险
  5. 对两个有序数组重新去重合并排序js实现
  6. 国产绘画AI杀疯了!画的小姐姐比真人还好看
  7. 使用selenium模拟登陆新浪微博
  8. 【攻克力扣200题--48】216. 组合总和 III
  9. 陈妍希+陈晓=陈以三,各路明星小孩预测大揭底
  10. 10 种常见的BUG分类