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 的 __FILE__ 常量
Jan 15 PHP
PHP 5.0对象模型深度探索之类的静态成员
Mar 27 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
php自定义加密与解密程序实例
Dec 31 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
利用php输出不同的心形图案
Apr 22 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 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
ajax缓存问题解决途径
2006/12/06 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
nodejs基础知识
2017/02/03 NodeJs
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
python修改字典键(key)的方法
2019/08/05 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
工程监理应届生求职信
2013/11/09 职场文书
正规的求职信范文分享
2013/12/11 职场文书
自主招生自荐信指南
2014/02/04 职场文书
秘书英文求职信
2014/04/16 职场文书
趣味运动会广播稿
2014/09/13 职场文书
庆元旦演讲稿
2014/09/15 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
个人工作总结范文2014
2014/11/07 职场文书
农村环境卫生倡议书
2015/04/29 职场文书