php中常见的sql攻击正则表达式汇总


Posted in PHP onNovember 06, 2014

本文实例讲述了php中常见的sql攻击正则表达式。分享给大家供大家参考。具体分析如下:

我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表明以及字段名信息。故攻击方式如下:

1. 判断第一个表名的第一个字符是否是a-z中的字符,其中blind_sqli是假设已知的库名。
注:正则表达式中 ^[a-z] 表示字符串中开始字符是在 a-z范围内

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-z]' LIMIT 0,1) /*

2. 判断第一个字符是否是a-n中的字符

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables  WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0,1)/*

3. 确定该字符为n

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables  WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^n' LIMIT 0,1) /*

4. 表达式的更换如下

expression like this:  '^n[a-z]' -> '^ne[a-z]' -> '^new[a-z]' -> '^news[a-z]' -> FALSE

这时说明表名为news ,要验证是否是该表明 正则表达式为'^news$',但是没这必要 直接判断 table_name = 'news‘ 不就行了。

5.接下来猜解其它表了 只需要修改 limit 1,1 -> limit 2,1就可以对接下来的表进行盲注了。

例如:

$Exec_Commond  = "( \s|\S)*(exec(\s|\+)+(s|x)p\w+)(\s|\S)*";

$Simple_XSS = "( \s|\S)*((%3C)|<)((%2F)|/)*[a-z0-9%]+((%3E)|>)(\s|\S)*";

$Eval_XSS  = "( \s|\S)*((%65)|e)(\s)*((%76)|v)(\s)*((%61)|a)(\s)*((%6C)|l)(\s|\S)*";

$Image_XSS  = "( \s|\S)*((%3C)|<)((%69)|i|I|(%49))((%6D)|m|M|(%4D))((%67)|g|G|(%47))[^\n]+((%3E)|>)(\s|\S)*" ;

$Script_XSS = "( \s|\S)*((%73)|s)(\s)*((%63)|c)(\s)*((%72)|r)(\s)*((%69)|i)(\s)*((%70)|p)(\s)*((%74)|t)(\s|\S)*";

$SQL_Injection = "( \s|\S)*((%27)|(')|(%3D)|(=)|(/)|(%2F)|(")|((%22)|(-|%2D){2})|(%23)|(%3B)|(;))+(\s|\S)*";

sql攻击代码:

<?php 

function customError($errno, $errstr, $errfile, $errline) 

{ 

    echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />"; 

    die(); 

} 

set_error_handler("customError",E_ERROR); 

$getfilter="'|(and|or)\b.+?(>|<|=|in|like)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; 

$postfilter="\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; 

$cookiefilter="\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; 

function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq)

{    

    if(is_array($StrFiltValue)) 

    { 

        $StrFiltValue=implode($StrFiltValue); 

    } 

    if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1&&!isset($_REQUEST['securityToken']))

    { 

        slog("<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue); 

        print "result notice:Illegal operation!"; 

        exit(); 

    } 

} 

foreach($_GET as $key=>$value)

{ 

    StopAttack($key,$value,$getfilter); 

} 

foreach($_POST as $key=>$value)

{ 

    StopAttack($key,$value,$postfilter); 

} 

foreach($_COOKIE as $key=>$value)

{ 

    StopAttack($key,$value,$cookiefilter); 

} 

   

function slog($logs) 

{ 

    $toppath="log.htm"; 

    $Ts=fopen($toppath,"a+"); 

    fputs($Ts,$logs."rn"); 

    fclose($Ts); 

} 

?>

sql分析:

如果使用这个函数的话,这个函数会绕开PHP的标准出错处理,所以说得自己定义报错处理程序(die())。
其次,如果代码执行前就发生了错误,那个时候用户自定义的程序还没有执行,所以就不会用到用户自己写的报错处理程序。 

那么,PHP里有一套错误处理机制,可以使用set_error_handler()接管PHP错误处理,也可以使用trigger_error()函数主动抛出一个错误。

set_error_handler()函数设置用户自定义的错误处理函数。函数用于创建运行期间的用户自己的错误处理方法。它需要先创建一个错误处理函数,然后设置错误级别。

 
关于的用法:

function customError($errno, $errstr, $errfile, $errline)

{
echo "<b>错误代码:</b> [${errno}] ${errstr}\r\n";

echo " 错误所在的代码行: {$errline} 文件{$errfile}\r\n";

   echo " PHP版本 ",PHP_VERSION, "(" , PHP_OS, ")\r\n";

// die();

}

set_error_handler("customError",E_ALL| E_STRICT);

总结

PHP遇到错误时,就会给出出错脚本的位置、行数和原因,有很多人说,这并没有什么大不了。但泄露了实际路径的后果是不堪设想的,对于某些入侵者,这个信息可是非常重要,而事实上现在有很多的服务器都存在这个问题。 有些网管干脆把PHP配置文件中的 display_errors 设置为 Off 来解决,但本人认为这个方法过于消极。有些时候,我们的确需要PHP返回错误的信息以便调试。而且在出错时也可能需要给用户一个交待,甚至导航到另一页面。但是有了set_error_handler()之后,这些矛盾也都可以解决掉了。但是发现很少用这个函数。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
收集的PHP中与数组相关的函数
Mar 22 PHP
PHP 防恶意刷新实现代码
May 16 PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 PHP
PHP生成plist数据的方法
Jun 16 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
实现PHP搜索加分页
Oct 12 PHP
thinkphp 验证码 的使用小结
May 07 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 PHP
php中实现记住密码下次自动登录的例子
Nov 06 #PHP
php网站被挂木马后的修复方法总结
Nov 06 #PHP
调试PHP程序的多种方法介绍
Nov 06 #PHP
php实现singleton()单例模式实例
Nov 06 #PHP
php使用session二维数组实例
Nov 06 #PHP
php函数serialize()与unserialize()用法实例
Nov 06 #PHP
php实现webservice实例
Nov 06 #PHP
You might like
用php过滤危险html代码的函数
2008/07/22 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP积分兑换接口实例
2015/02/09 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
python图书管理系统
2020/04/05 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
保密协议书范本
2014/04/22 职场文书
法人委托书范本
2014/09/15 职场文书
学生个人评语大全
2015/01/04 职场文书
销售经理岗位职责
2015/01/31 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers