execl php 科學計數法處理 關於PHP

2021-10-14 12:33:29 字數 3137 閱讀 3036

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()函式把序列化之後的字串還原回來

魔術方法

人類身份驗證 - segmentfault​segmentfault.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,並保證所有有效位都...