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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • 几种常见攻击的正则表达式

    "( \\s|\\S)*(exec(\\s|\\+)+(s|x)p\\w+)(\\s|\\S)*" //Exec Commond "( \\s|\\S)*((%3C)|<)((%2F)|/)*[a-z0-9%]+((%3E)|>)(\\s|\\S)*" //Simple XSS "( \\s|\\S)*((%65)|e)(\\s)*((%76)|v)(\\s)*((%61)|a)(\\s)*((%6C)|l)(\\s|\\S)*" /

  • 常见的正则表达式问题

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符").模式描述在搜索文本时要匹配的一个或多个字符串. 关于^开始和$结束的问题注意 \b匹配一个单词边界, ?: ?= ?! 这四个不加^和$,其他都加^和$. 关于|的理解 1:/^a|zood$/ 当前面是a后面不管是什么都好使 当后面是zood前面不管是什么都好使 2:/^(a|z)ood$/ 结果是 aood zood 以上内容是小编给大家介绍的常见正则表达式问题,希望本文分享对大家有

  • 常见python正则用法的简单实例

    下面列出Python正则表达式的几种匹配用法: 1.测试正则表达式是否匹配字符串的全部或部分 regex=ur"" #正则表达式 if re.search(regex, subject): do_something() else: do_anotherthing() 2.测试正则表达式是否匹配整个字符串 regex=ur"\Z" #正则表达式末尾以\Z结束 if re.match(regex, subject):     do_something() else:  

  • php防止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"

  • JS正则表达式比较常见用法

    废话不多说,直接步入正轨了,想要了解js正则表达式用法的相关知识,通过本教程学习吧. 定义和使用 var patt1 = new RegExp("hello"); var patt2 = /world/ ; test方法 test() 方法检索字符串中的指定值.返回值是 true 或 false. var pat = /my/; var str = "this is my code..."; console.log(pat.test(str)); // true e

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

    本文实例讲述了php中常见的sql攻击正则表达式.分享给大家供大家参考.具体分析如下: 我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表明以及字段名信息.故攻击方式如下: 1. 判断第一个表名的第一个字符是否是a-z中的字符,其中blind_sqli是假设已知的库名. 注:正则表达式中 ^[a-z] 表示字符串中开始字符是在 a-z范围内 复制代码 代码如下: index.php?id=1 and 1=(SELECT 1 FROM inform

  • MySQL中常见的几种日志汇总

    前言: 在 MySQL 系统中,有着诸多不同类型的日志.各种日志都有着自己的用途,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据.这些不同类型的日志有助于我们更清晰的了解数据库,在日常学习及运维过程中也会和这些日志打交道.本节内容将带你了解 MySQL 数据库中几种常用日志的作用及管理方法. 1.错误日志(errorlog) 错误日志记录着 mysqld 启动和停止,以及服务器在运行过程中发生的错误及警告相关信息.当数据库意外宕机或发生其他错误时,我们应该去排查错误日志. lo

  • JavaScript中常见获取元素的方法汇总

    常见的获取元素的方法有3种,分别是通过元素ID.通过标签名字和通过类名字来获取. getElementById DOM提供了一个名为getElementById的方法,这个方法将返回一个与之对应id属性的节点对象.使用的时候请注意区分大小写. 它是document对象特有的函数,只能通过其来调用该方法.其使用的方法如下: 复制代码 代码如下: document.getElementById('demo') //demo是元素对应的ID 该方法兼容主流浏览器,甚至包括IE6+,可以大胆使用. ge

  • iOS中常见正则表达式验证方法

    在某些App应用里面需要填写用户信息(用于验证),有身份证.手机号.军官证等等.下面来跟大家分享一下各自的验证方式. 1.验证 手机号码 ,这个是对任意输入的一串数字做验证,返回一个识别结果(字符串),根据这个结果再做判断. //判断手机号码 + (NSString *)valiMobile:(NSString *)mobile{ if (mobile.length != 11){ return @"手机号码格式错误"; }else{ /** * 移动号段正则表达式 */ NSStri

  • JavaScript中常见的字符串操作函数及用法汇总

    本文实例总结了JavaScript中常见的字符串操作函数及用法.分享给大家供大家参考.具体分析如下: 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串的处理是前端招聘过程中最常见的题型之一.这些题有一个特点,站在考官的角度去考虑,它考的不是你会不会,而是你能不能在不借用XX手册或者XX指南再或者百度谷歌的情况下,用比较简洁的方式写出答案来.可惜的是,很多开发人员,当然我也

  • 如何对PHP程序中的常见漏洞进行攻击(上)

    如何对PHP程序中的常见漏洞进行攻击(上) 翻译:analysist(分析家) 来源:http://www.china4lert.org 如何对PHP程序中的常见漏洞进行攻击(上) 原著:Shaun Clowes <http://www.securereality.com.au/> 翻译:analysist <http://www.nsfocus.com/> 之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则

  • 如何对PHP程序中的常见漏洞进行攻击(下)

    如何对PHP程序中的常见漏洞进行攻击(下) 翻译:analysist(分析家) 来源:http://www.china4lert.org 如何对PHP程序中的常见漏洞进行攻击(下) 原著:Shaun Clowes <http://www.securereality.com.au/> 翻译:analysist <http://www.nsfocus.com/> [库文件] 正如我们前面讨论的那样,include()和require()主要是为了支持代码库,因为我们一般是把一些经常使用

  • Python3中常见配置文件写法汇总

    目录 1.引言 2.配置文件写法 2.1 ini 2.2 json 2.3 toml 2.4 yaml 3.总结 1.引言 小鱼:小屌丝,走啊,出去撸串啊, 小屌丝:没时间啊,鱼哥 小鱼:嗯??? 啥事情让你忙的撸串都不去了 小屌丝:我的BOSS让我写一个自动化平台,但是我不知道这些参数放在**.py文件里面,还是放在配置文件**里面. 小鱼:就因为这个? 小屌丝:对啊, 小鱼:唉…我还以为啥事呢, 放在配置文件里. 小屌丝:但是,我对配置文件写法不太熟(尴尬的一批)… 小鱼:… 每次都上当,

  • ES6中常见基本知识点的基本使用实例汇总

    目录 前言 1.字面量的增强 2.解构Destructuring 3.let和const 4.作用域 5.模板子符串 6.函数 7.展开语法 8.数值表示 9.Symbol的基本使用 10.Set 11.WeakSet 12.Map 13.WeakMap 总结 前言 学习了coderwhy的JavaScript高级语法视频课的笔记 如有错误或者不合适的地方,敬请见谅,欢迎指出和拓展,谢谢各位了 1.字面量的增强 var name = 'xxx' var age = 12 var obj = {

  • Java中如何避免sql注入实例详解

    目录 前言 造成sql注入的原因: 预防sql注入方法: java 有效的防止SQL注入 总结 前言 sql注入是web开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息.利用数据库的特性执行添加用户.导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限. 造成sql注入的原因: 程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL脚本,程序在接收后错误的将攻击者的输入作为SQL语句的一部分执行,导致原始的查询逻辑被改变,执行了攻击者精心构造的恶意SQL语句.

随机推荐