电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解各種PHP函數漏洞

瀏覽:143日期:2022-09-07 17:03:16
1.MD5 compare漏洞

PHP在處理哈希字符串時,會利用”!=”或”==”來對哈希值進行比較,它把每一個以”0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以后,其哈希值都是以”0E”開頭的,那么PHP將會認為他們相同,都是0。 常見的payload有

0x01 md5(str) QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387a sha1(str) sha1(’aaroZmOk’) sha1(’aaK1STfY’) sha1(’aaO8zKZF’) sha1(’aa3OFF9m’)0x02 md5(md5(str).'SALT') 2

同時MD5不能處理數組,若有以下判斷則可用數組繞過

if(@md5($_GET[’a’]) == @md5($_GET[’b’])){ echo 'yes';}//http://127.0.0.1/1.php?a[]=1&b[]=22.ereg函數漏洞:00截斷

ereg ('^[a-zA-Z0-9]+$', $_GET[’password’]) === FALSE

字符串對比解析 在這里如果 $_GET[‘password’]為數組,則返回值為NULL 如果為123 || asd || 12as || 123%00&&&**,則返回值為true 其余為false

3.變量本身的key

說到變量的提交很多人只是看到了GET/POST/COOKIE等提交的變量的值,但是忘記了有的程序把變量本身的key也當變量提取給函數處理。

<?php//key.php?aaaa’aaa=1&bb’b=2 //print_R($_GET); foreach ($_GET AS $key => $value){print $key.'n';}?>4.變量覆蓋

extract()這個函數在指定參數為EXTR_OVERWRITE或者沒有指定函數可以導致變量覆蓋

<?php $auth = ’0’; // 這里可以覆蓋$auth的變量值 extract($_GET); if($auth == 1){ echo 'private!'; } else{ echo 'public!'; } ?>

<?php $a=’hi’;foreach($_GET as $key => $value) {echo $key;$$key = $value;}print $a;?>5.strcmp

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果兩者相等,返回 0。 將兩個參數先轉換成string類型。 以后,當比較數組和字符串的時候,返回是0。 如果參數不是string類型,直接return了

<?php $password=$_GET[’password’]; if (strcmp(’xd’,$password)) { echo ’NO!’; } else{echo ’YES!’; }?>6.sha1 和 md5 函數

md5 和 sha1 無法處理數組,返回 NULL

if (@sha1([]) == false) echo 1;if (@md5([]) == false) echo 2;echo var_dump(@sha1([]));7.is_numeric

PHP提供了is_numeric函數,用來變量判斷是否為數字。但是函數的范圍比較廣泛,不僅僅是十進制的數字。

<?phpecho is_numeric(233333); # 1echo is_numeric(’233333’); # 1echo is_numeric(0x233333); # 1echo is_numeric(’0x233333’); # 1echo is_numeric(’233333abc’); # 0?>8.preg_match

如果在進行正則表達式匹配的時候,沒有限制字符串的開始和結束(^ 和 $),則可以存在繞過的問題

<?php$ip = ’1.1.1.1 abcd’; // 可以繞過if(!preg_match('/(d+).(d+).(d+).(d+)/',$ip)) { die(’error’);} else { echo(’key...’);}?>9.parse_str

與 parse_str() 類似的函數還有 mb_parse_str(),parse_str 將字符串解析成多個變量,如果參數str是URL傳遞入的查詢字符串(query string),則將它解析為變量并設置到當前作用域。

//var.php?var=new $var=’init’; parse_str($_SERVER[’QUERY_STRING’]); print $var;10.字符串比較

== 是弱類型的比較,以下比較都為 true

<?php echo 0 == ’a’ ;// a 轉換為數字為 0 重點注意// 0x 開頭會被當成16進制54975581388的16進制為 0xccccccccc// 十六進制與整數,被轉換為同一進制比較’0xccccccccc’ == ’54975581388’ ;// 字符串在與數字比較前會自動轉換為數字,如果不能轉換為數字會變成01 == ’1’;1 == ’01’;10 == ’1e1’;’100’ == ’1e2’ ; // 十六進制數與帶空格十六進制數,被轉換為十六進制整數’0xABCdef’ == ’ 0xABCdef’;echo ’0010e2’ == ’1e3’;// 0e 開頭會被當成數字,又是等于 0*10^xxx=0// 如果 md5 是以 0e 開頭,在做比較的時候,可以用這種方法繞過’0e509367213418206700842008763514’ == ’0e481036490867661113260034900752’;’0e481036490867661113260034900752’ == ’0’ ;var_dump(md5(’240610708’) == md5(’QNKCDZO’));var_dump(md5(’aabg7XSs’) == md5(’aabC9RqS’));var_dump(sha1(’aaroZmOk’) == sha1(’aaK1STfY’));var_dump(sha1(’aaO8zKZF’) == sha1(’aa3OFF9m’));?>11.unset

unset( bar);用來銷毀指定的變量,如果變量 bar 包含在請求參數中,可能出現銷毀一些變量而實現程序邏輯繞過。

<?php // http://127.0.0.1/index.php?_CONFIG=123$_CONFIG[’extraSecure’] = true;foreach(array(’_GET’,’_POST’) as $method) { foreach($$method as $key=>$value) { // $key == _CONFIG // $$key == $_CONFIG // 這個函數會把 $_CONFIG 變量銷毀 unset($$key); }}if ($_CONFIG[’extraSecure’] == false) { echo ’flag {****}’;}?>12.intval()

int轉string:

$var = 5; 方式1:$item = (string)$var; 方式2:$item = strval($var);

string轉int:intval()函數。

var_dump(intval(’2’)) //2 var_dump(intval(’3abcd’)) //3 var_dump(intval(’abcd’)) //0

說明intval()轉換的時候,會將從字符串的開始進行轉換知道遇到一個非數字的字符。即使出現無法轉換的字符串,intval()不會報錯而是返回0。 利用代碼:

<?php $a = ’10000 union select * from yz’;if(intval($a)>1000) echo $a ;?>13.switch()

如果switch是數字類型的case的判斷時,switch會將其中的參數轉換為int類型。如下:

<?php$i ='2abc'; switch ($i) { case 0: case 1: case 2: echo 'i is less than 3 but not negative'; break; case 3: echo 'i is 3'; } ?>

這個時候程序輸出的是i is less than 3 but not negative,是由于switch()函數將$i進行了類型轉換,轉換結果為2。

14.in_array()

$array=[0,1,2,’3’]; var_dump(in_array(’abc’, $array)); //true var_dump(in_array(’1bc’, $array)); //true

可以看到上面的情況返回的都是true,因為’abc’會轉換為0,’1bc’轉換為1。 在所有php認為是int的地方輸入string,都會被強制轉換

15.serialize 和 unserialize漏洞

魔術方法

這里我們先簡單介紹一下php中的魔術方法(這里如果對于類、對象、方法不熟的先去學學吧),即Magic方法,php類可能會包含一些特殊的函數叫magic函數,magic函數命名是以符號__開頭的,比如 __construct, __destruct,__toString,__sleep,__wakeup等等。這些函數都會在某些特殊時候被自動調用。 例如__construct()方法會在一個對象被創建時自動調用,對應的__destruct則會在一個對象被銷毀時調用等等。 這里有兩個比較特別的Magic方法,__sleep 方法會在一個對象被序列化的時候調用。 __wakeup方法會在一個對象被反序列化的時候調用。

在這里介紹一個序列化漏洞,首先不要相信用戶輸入的一切 看下面代碼

<?phpclass test{ public $username = ’’; public $password = ’’; public $file = ’’; public function out(){echo 'username: '.$this->username.'<br>'.'password: '.$this->password ; } public function __toString() {return file_get_contents($this->file); }}$a = new test();$a->file = ’C:UsersYZDesktopplan.txt’;echo serialize($a);?>//tostring方法會在輸出實例的時候執行,如果實例路徑是隱秘文件就可以讀取了

下面就可以讀取了C:UsersYZDesktopplan.txt文件了 echo unserialize觸發了__tostring函數

<?phpclass test{ public $username = ’’; public $password = ’’; public $file = ’’; public function out(){echo 'username: '.$this->username.'<br>'.'password: '.$this->password ; } public function __toString() {return file_get_contents($this->file); }}$a = ’O:4:'test':3:{s:8:'username';s:0:'';s:8:'password';s:0:'';s:4:'file';s:28:'C:UsersYZDesktopplan.txt';}’;echo unserialize($a);?>16.session 反序列化漏洞

主要原因是 ini_set(‘session.serialize_handler’, ‘php_serialize’); ini_set(‘session.serialize_handler’, ‘php’); 兩者處理session的方式不同

利用下面代碼可以生成session值

<?phpini_set(’session.serialize_handler’, ’php_serialize’);//a:1:{s:6:'spoock';s:3:'111';}//ini_set(’session.serialize_handler’, ’php’);//a|s:3:'111'session_start();$_SESSION['spoock']=$_GET['a'];?>

我們來看看生成的session值

spoock|s:3:'111'; //session鍵值|內容序列化a:1:{s:6:'spoock';s:3:'111';}a:1:{s:N:session鍵值;內容序列化}在ini_set(’session.serialize_handler’, ’php’);中把|之前認為是鍵值后面的視為序列化那么就可以利用這一漏洞執行一些惡意代碼

看下面的例子 1.php

<?phpini_set(’session.serialize_handler’, ’php_serialize’);session_start();$_SESSION['spoock']=$_GET['a'];?>

2.php

<?php ini_set(’session.serialize_handler’, ’php’);session_start();class lemon { var $hi; function __construct(){$this->hi = ’phpinfo();’; } function __destruct() { eval($this->hi);//這里很危險,可以執行用戶輸入的參數 }}?>

在1.PHP里面輸入a參數序列化的值|O:5:”lemon”:1:{s:2:”hi”;s:10:”phpinfo();”;} 則被序列化為 a:1:{s:6:”spoock”;s:44:”|O:5:”lemon”:1:{s:2:”hi”;s:10:”phpinfo();”;} 在2.PHP里面打開 就可以執行phpinfo()了

以上就是詳解各種PHP函數漏洞的詳細內容,更多關于PHP函數漏洞的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 高铝砖-高铝耐火球-高铝耐火砖生产厂家-价格【荣盛耐材】 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 移动机器人产业联盟官网| 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 京马网,京马建站,网站定制,营销型网站建设,东莞建站,东莞网站建设-首页-京马网 |