php的九大全域性變數
例如:
<?php
var_dump($globals);
?>
執行得:
array(5) ["_post"]=> array(0) ["_cookie"]=> array(0) ["_files"]=> array(0) ["globals"]=> array(5) ["_post"]=> array(0) ["_cookie"]=> array(0) ["_files"]=> array(0) ["globals"]=> *recursion* } }
參考資料
session 反序列化那裡,為什麼最後的payload是以filename的形式上傳的?
序列化和反序列化
序列化,是將乙個物件轉化為乙個字串的過程,方便傳輸和儲存。這個過程用到serialize()函式。
<?php
class test
";public $a = "aaa";
static $b = "bbb";
}$test = new test;
$data = serialize($test);
echo $data;
?>
輸出結果為:
o:4:"test":2:";s:1:"a";s:3:"aaa";}
o:4:"test"指object(物件) 4個字元:test
:2表示物件屬性個數為2(static是不算在內的)
{}中為屬性字元數:屬性值
其中private修飾的"flag"屬性在序列化結果中顯示為"testflag"
{}內的內容提取出來其實就是"testflag";"flag";"a";"aaa"這四個字串,兩兩對應
反序列化就是用unserialize()函式把序列化之後的字串還原回來
魔術方法
人類身份驗證 - segmentfaultsegmentfault.com
例題
bugku的 welcome to bugkuctf (題目內容一搜就有,這裡只記錄知識點):
isset()用於檢測某個引數是否被設定;
file_get_content()用於獲得乙個檔案的內容(這意味著$user必須是乙個檔案);
php://input是php語言中乙個唯讀的資料流;通過"php://input",可以讀取從http客戶端以post方式提交、請求頭「content-type」值非"multipart/form-data"的所有資料;"php://input"一般用來讀取post上來,除已被處理以外的剩餘資料
file_get_contents("php://input")
可以獲取post的資料;
關於php://filter:csdn-專業it技術社群-登入;
這題的$password需要賦值為:
o:4:"flag":1:
這是個flag類,有個屬性file,值為flag.php。
因為反序列化後不能echo,所以呼叫了flag類中的__tostring方法,把flag.php檔案的內容給列印出來了。
$file需要賦值為hint.php,把flag類包含進來。
反序列化的乙個漏洞:
cve-2016-7124
作用:與__sleep()函式相反,__sleep()函式,是在序序列化時被自動呼叫。__wakeup()函式,在反序列化時,被自動呼叫。繞過:當反序列化字串,表示屬性個數的值大於真實屬性個數時,會跳過 __wakeup 函式的執行。
php型別比較:
php 型別比較 | 菜鳥教程www.runoob.com
php的md5漏洞:
php中 '0e*****' 會被解釋成科學計數法,也就是說這個值為0。
如果兩個字串的md5值都是這個格式,那它們在進行==比較時會被視為一樣(===比較下不成立)。
php hash比較存在缺陷,影響大量web**登入認證、忘記密碼等關鍵業務www.freebuf.com
另外記錄幾個md5碰撞的payload(下面的值的md5都是0e***x格式):
qnkcdzo
s878926199a
s155964671a
s214587387a
md5('ffifdyop',true)計算的值為【'or'6xc9]x99xe9!r,xf9xedbx1c】,可用來進行sql繞過。
php的陣列與sha1碰撞:
url中的引數是可以傳陣列的,如:***?id=123。以這樣的方式傳入的陣列也是可以做雜湊的,結果是null。
但若是有:***?id0=123&id1=124 這樣的url,php會認為id0和id1兩個陣列不同,但它們的sha1值是一樣的。
此法可用於sha1弱碰撞繞過。
例題:另外,在php中對陣列做字串的操作似乎都會返回null。這可以用來繞過一系列判定。
php截斷:
挖坑待填
php中字串和整數比較大小:
php會把字串從第乙個字元開始的數字提取出來,作為整數來比較大小,例如'123aaa'取的就是123,若是開頭沒有數字,則視為0。
php檔案包含:
php的include:
在 php 的 include 中,include 'hint.php?/../cookie.txt'; 會報錯,include 'hint.php%3f/../cookie.txt'; 不會報錯,且可以成功包含。
php會把路徑中不存在的檔案當成資料夾,後面跟上../時,會認為該路徑是當前資料夾。
php中的反序列化字元逃逸:
【例題】[安洵杯 2019]easy_serialize_php wp
科學計數法
在做專案時發現乙個比較頭痛的問題,輸入法輸入金額android inputtype numberdecimal 控制項是可以輸入000.123的,為了獲取正確的輸入值可以使用下面方法,當輸入的資料很長時也不會被用科學計數法顯示 string str 000.123 bigdecimal bigdec...
科學計數法 20
時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 現以科學計數法的格式給出實數a,請編寫程式按普通數字表示法輸出a,並保證所有有效位都被保留。每個輸入包含1個測試用例,即乙個以科學計數法表示的實數a。該數字的儲存長度不超過9999...
科學計數法 PAT
科學計數法是科學家用來表示很大或很小的數字的一種方便的方法,其滿足正規表示式 1 9 0 9 e 0 9 即數字的整數部分只有 1 位,小數部分至少有 1 位,該數字及其指數部分的正負號即使對正數也必定明確給出。現以科學計數法的格式給出實數 a,請編寫程式按普通數字表示法輸出 a,並保證所有有效位都...