CTF中的PHP特性函數(shù)解析之中篇
前言
上篇文章給大家?guī)砹薖HP中最基本的特性,不知道大家學(xué)習(xí)的怎樣了,回顧上文,我們講了MD5強弱碰撞以及正則匹配的繞過,總體來看還是很簡單的,下面給大家?guī)硇碌腜HP特性講解,會稍微比上一篇難一些。
intval()
上一篇在最后時簡單介紹了一下這個函數(shù),我們看看官方是怎樣定義的:
簡單來說就是讓輸入的數(shù)字變成整數(shù),下面我們舉個例子:
echo intval(1145.14); // 1145 echo intval('114514'); // 114514
可以發(fā)現(xiàn)只對有小數(shù)點的數(shù)字起作用,正常的整數(shù)還是照常輸出,那么它在CTF中是如何考察的呢,查看下面代碼:
if($num==="1145"){ die("no no no!"); } if(intval($num,0)===1145){ echo $flag; }
要我們強類型傳入的不能等于1145,但后面經(jīng)過intval函數(shù)又要等于1145,這不和前面的矛盾了,我們要怎樣做呢?
這里介紹一下intval的特性,如果我們在函數(shù)里傳入字符串,那么該函數(shù)就會返回不是數(shù)字的字符之前的數(shù)字,也就是說我們傳入:
sum=1145a
intval就會判斷我們傳入的是1145,從而實現(xiàn)了繞過,還有另一種繞過方法:
當(dāng)base為0時,intval會自動進(jìn)行進(jìn)制轉(zhuǎn)換,我們可以傳入1145的十六進(jìn)制形式來繞過。
strpos()
根據(jù)手冊可以看到,該函數(shù)以及與其類似的函數(shù),作用都是匹配第一個或者最后一個字符,根據(jù)該函數(shù)特性,題目會經(jīng)常圍繞它作為一個限制頭部的點,比如上面那題可能會增加限制:
if(!strpos($num, "0")){ die("no no no!");
因為八進(jìn)制開頭通常為0,檢測到的話就不能通過進(jìn)制轉(zhuǎn)換來繞過了。
sha1
p>該函數(shù)的利用以及繞過方法類似于MD5函數(shù),都是運用了PHP特性來做,這里簡單看一下:
數(shù)組比較
類似于MD5,在SHA1里我們也可以使用數(shù)組繞過,具體可以看下面例子:
if(sha1($a)==sha1($b) && $a!=$b){ echo $flag; }
可以看到,也是一個弱比較,根據(jù)PHP特性sha1函數(shù)無法對數(shù)組進(jìn)行處理,,于是我們傳入數(shù)組來使結(jié)果為NULL:
a[]=1 b[]=2
強類型
與MD5相同,當(dāng)然也存在強類型比較,我們不能用數(shù)組來進(jìn)行繞過了:
if(sha1($a)===sha1($b) && $a!=$b){ echo $flag; }
這里同樣有類似于MD5函數(shù)的解決方法:
a=aaK1STf //0e7665852665575620768827115962402601 b=aaO8zKZF //0e89257456677279068558073954252716165
array_push()
可以理解為向數(shù)組尾部插入?yún)?shù),我們看看是如何考察的:
<?php highlight_file(__FILE__); $allow = array(); for ($i=36; $i < 0x36d; $i++) { array_push($allow, rand(1,$i)); } if(isset($_GET['n']) && in_array($_GET['n'], $allow)){ file_put_contents($_GET['n'], $_POST['content']); } ?>
可以看到題目先向數(shù)組里插入隨機(jī)數(shù),in_array()是搜索數(shù)組中是否存在指定的值,根據(jù)它的語法:
type會判斷類型是否匹配,這就是我們利用的點,因為數(shù)組里數(shù)據(jù)為int型,根據(jù)PHP特性比較后字符串會轉(zhuǎn)成int型,也就是說我們傳入1.php也是沒有問題的,后面有個寫入文件操作,正好可以設(shè)置一句話木馬連接后門,或者進(jìn)行命令執(zhí)行:
get: n=1.php post: content=<?=`tac f*`;
結(jié)語
今天這篇文章可能有的地方不是很好理解,但總體來說還是很簡單的,PHP特性很多以至于只能挑出一些著名的來說,更多關(guān)于CTF PHP特性函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ecshop適應(yīng)在PHP7的修改方法解決報錯的實現(xiàn)
下面小編就為大家?guī)硪黄猠cshop適應(yīng)在PHP7的修改方法解決報錯的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11php使用cookie實現(xiàn)記住用戶名和密碼實現(xiàn)代碼
這篇文章主要介紹了php使用cookie實現(xiàn)記住用戶名和密碼實現(xiàn)代碼,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-04-04