国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

詳解各種PHP函數漏洞

瀏覽:100日期: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
相關文章:
主站蜘蛛池模板: 久久国产成人福利播放 | 中文字幕在线日韩 | 一级特黄aa大片欧美网站 | 香蕉亚洲精品一区二区 | 欧美片网站免费 | 久久香焦 | 亚洲欧美日韩国产vr在线观 | 欧美jizzhd精品欧美另类 | 亚洲国产成人精品一区二区三区 | 亚洲一区免费视频 | 日本一级高清片免费 | 日本一级高清片免费 | 日韩在线视频网址 | 国产精品手机在线观看 | 日韩精品特黄毛片免费看 | 亚洲人成综合 | 日本全黄 | 高清国产精品久久 | 成人性色生活片全黄 | 欧美日韩精品一区二区 | 精品国产免费一区二区三区五区 | 欧美日本一区二区三区 | 国产午夜精品理论片免费观看 | 亚洲国产精品一区二区第四页 | 日本高清毛片视频在线看 | 在线观看 国产 | 亚洲干综合 | 亚洲欧美国产日韩天堂在线视 | 国内国产真实露脸对白 | 亚洲欧美极品 | 久久国产精品女 | 免费人成在观看 | 伊人365影院| 九九九九九九 | 亚洲精品www | 91香蕉视| 久久久久久毛片免费播放 | 欧美日韩一区二区在线观看 | a级在线观看视频 | 国产91亚洲精品 | 精品国产三级a在线观看 |