安基網 首頁 安全 Web安全 查看內容

PHP代碼層防護與繞過

2020-1-16 11:38| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: 搜索公眾號:暗網黑客教程可領全套安全課程、配套攻防靶場一. 前言  在一些網站通常會在公用文件引入全局防護代碼進行SQL注入、XSS跨站腳本等漏洞的防御,在一定程度上對網站安全防護還是比較有效的。  這里討論一下關鍵字過濾不完善及常見正則匹配存在的問題,并收集了網絡上常見的PHP全局防護代 ...

搜索公眾號:暗網黑客教程

可領全套安全課程、配套攻防靶場



一. 前言

  

在一些網站通常會在公用文件引入全局防護代碼進行SQL注入、XSS跨站腳本等漏洞的防御,在一定程度上對網站安全防護還是比較有效的。

  

這里討論一下關鍵字過濾不完善及常見正則匹配存在的問題,并收集了網絡上常見的PHP全局防護代碼進行分析。




Bypass思路:利用數據庫特性或過濾函數邏輯缺陷繞過。


二. 關鍵字過濾


1、使用strpos過濾關鍵字


PHP過濾代碼如下:


|";$arr=explode("|",$str);#print_r($arr);foreach($arras$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過濾代碼如下:


|";$arr=explode("|",$str);#print_r($arr);foreach($arras$key=>$val){$flag=strpos($_GET['id'],$val);if($flag){echo'Error';exit();}}?>


Bypass思路:

當$flag等于0,即關鍵字在輸入參數的第一位,可繞過

id=xsstest


關鍵字過濾類似的方法:


$value){//$_REQUEST['id']=str_replace(strtolower($value),'',strtolower($_REQUEST['id']));$_REQUEST['id']=str_replace($value,'',$_REQUEST['id']);}echo$_REQUEST['id'];?>


三.正則匹配


1、邊界關鍵詞


b 表示單詞的邊界,因此只有獨立的 "union" 單詞會被匹配

PHP過濾代碼如下:


Bypass思路:

通過數據庫的特性,在關鍵字前后添加字符,打擾關鍵字邊界判斷

id=1e0union/*!12345select*/1,2,3,4/*!12345from*/users


2、匹配模式


i 忽略大小寫,匹配不考慮大小寫,默認不匹配多行

PHP過濾代碼如下:

  preg_match("/(?:(union(.*?)select))/ims",$_GET['id'])


Bypass思路:

通過換行 n可繞過,url編碼為%0a

  preg_match("/(?:(union(.*?)select))/ims",$_GET['id'])


修復方案:

  preg_match("/(?:(union(.*?)select))/ims",$_GET['id'])


四. PHP通用防護代碼


1、safe3 防注入代碼


Error number: [$errno],error on line $errline in $errfile
"; die();}set_error_handler("customError",E_ERROR);$getfilter="'|select|from|(and|or)b.+?(>|<|=|in|like)|/*.+?*/||<|binb|blikeb)|/*.+?*/||<|binb|blikeb)|/*.+?*/|
操作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);}?>

如果正面懟正則,實在想不到繞過的方式。。


2、360webscan防御腳本

  

360網站安全:http://webscan.#

  

http://webscan.#/protect/index/?act=reinstall&domain=www.test.com下載漏洞修復插件360webscan.zip 多次下載解壓失敗,

  

無奈,跑到cmseasy下載最新版cms,解壓獲取 webscan360/360safe目錄,分享到網盤,鏈接: https://pan.baidu.com/s/1nviNi2l 密碼: 3itq

  

WEBSCAN_VERSION :0.1.3.2



SQL語句測試,成功攔截:

Bypass思路:


關鍵的兩個正則:

  UNION.+?SELECTs*((.+)s*|@{1,2}.+?s*|s+?.+?|(`|'|").*?(`|'|")s*)  (SELECT|DELETE)@{0,2}((.+)|s+?.+?s+?|(`|'|").*?(`|'|"))FROM((.+)|s+?.+?|(`|'|").*?(`|'|"))  id=1e0union select!1,user(),3,4 from users



五.結束


本文簡單演示了幾種防護代碼和繞過場景,在攻與防的道路上,不只是掌握一些技巧,是與代碼的對抗,更是人與人的對抗。


作者:Bypass007

轉載來源注明自:https://www.secpulse.com/archives/99326.html




小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6782361111598465547/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
创业如何赚钱 上海时时乐购彩平台 河南11选5中奖规则 重庆幸运农场破解技巧 江西十一选五走势图真准 安徽体彩十一选五一定牛 股市走势预测 新疆体彩11选5开奖结果 pk10计划人工在线计划 p2p网贷理财平台哪个好 湖北快三号码遗漏 乐天盈股票配资平台 20选5复式计算表 时时彩票网站手机版 福建十一选五开奖记录 广东快乐十分大小 恒瑞财富网