360 php防注入代碼繞過思路利用函數(shù)正則匹配導致攔截繞過姿勢(組圖) php mysql pdo 防注入
2022-01-03
一段時間以來,我一直熱衷于研究各種 waf 旁路。一般來說,通過查找網(wǎng)站的真實IP可以繞過云WAF。由于 HTTP 協(xié)議解析的差異,硬件 waf 經(jīng)常被繞過。然而360 php防注入代碼小程序開發(fā),代碼層保護往往只能想方設法繞過代碼邏輯。
在某些網(wǎng)站上,公共文件中通常會引入全局保護代碼。因此,我收集并分析了互聯(lián)網(wǎng)上常見的PHP全局保護代碼。第一次看到的反注入代碼,花了很多時間研究如何繞過。我在筆記里寫了一句話:如果是肯定的,我想不出繞過它的方法。
直到前幾天看到論壇里也有人問了同樣的反注入代碼的繞過方法,在這個帖子的回復里看到了繞過手勢。這也是安全界最大的魅力所在。你總能從別人的回答中找到有趣的想法或技巧。
繞過想法
使用函數(shù)正則匹配繞過字符串長度限制。 PHP5.3之前默認函數(shù)閾值為10w360 php防注入代碼,PHP5.3開始??時默認值為100w。
測試情況
反注入代碼
//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.+?(>|<|=|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){
slog("
操作IP: ".$_SERVER["REMOTE_ADDR"]."
操作時間: ".strftime("%Y-%m-%d %H:%M:%S")."
操作頁面:".$_SERVER["PHP_SELF"]."
提交方式: ".$_SERVER["REQUEST_METHOD"]."
提交參數(shù): ".$StrFiltKey."
提交數(shù)據(jù): ".$StrFiltValue);
@header("http/1.1 404 not found");
print "";
//slog("
操作IP: ".$_SERVER["REMOTE_ADDR"]."
操作時間: ".strftime("%Y-%m-%d %H:%M:%S")."
操作頁面:".$_SERVER["PHP_SELF"]."
提交方式: ".$_SERVER["REQUEST_METHOD"]."
提交參數(shù): ".$StrFiltKey."
提交數(shù)據(jù): ".$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."\r\n");
fclose($Ts);
}
構建SQL注入點
在頁面中引入反注入代碼:
require_once('360_safe3.php');
參數(shù)中拼接SQL語句時,關鍵字正則匹配導致攔截
繞過姿勢
PHP 測試版:5.2.17
當填充的字符串超過10w時,可以繞過反注入碼獲取數(shù)據(jù)庫信息。
當填充的字符串超過100w時網(wǎng)站制作,可以繞過反注入碼獲取數(shù)據(jù)庫信息。