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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
NOT NULL 和NULL
Jan 15 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP中的Streams详细介绍
Nov 12 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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.ini 中文版
2006/10/28 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
php实现两个数组相加的方法
2015/02/17 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python 实现有道翻译功能
2021/02/26 Python
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
车间组长岗位职责
2013/12/20 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
Ruby处理YAML和json数据
2022/04/18 Ruby
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript