CTF之PHP黑魔法總結


繼上一篇php各版本的姿勢(不同版本的利用特性),文章總結了php版本差異,現在在來一篇本地日記總結的php黑魔法,是以前做CTF時遇到並記錄的,很適合在做CTF代碼審計的時候翻翻看看。

一、要求變量原值不同但md5或sha1相同的情況下

1.0e開頭的全部相等(==判斷)

240610708 和 QNKCDZO md5值類型相似,但並不相同,在”==”相等操作符的運算下,結果返回了true.

Md5和sha1一樣

 

2.利用數組繞過(===判斷)

Md5和sha1對一個數組進行加密將返回NULL;而NULL===NULL返回true,所以可繞過判斷。

二、Strcmp利用數組繞過

查看php的手冊

int strcmp ( string $str1 , string $str2 )

Return Values

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

當輸入的兩個值為不是字符串時就會產生不預期的返回值:

比如

這樣一段代碼中,輸入password[]=1則返回success,成功繞過驗證

三、當有兩個is_numeric判斷並用and連接時,and后面的is_numeric可以繞過

四、NULL,0,”0″,array()使用==和false比較時,都是會返回true的

五、Eregi匹配

  • 數組繞過

ereg是處理字符串,傳入數組之后,ereg是返回NULL

  • %00截斷繞過

http://www.secbox.cn/hacker/1889.html

六、接收參數$a得存在,並且$a==0可用.繞過(非數字都可繞過)

PHP

七、接收參數中不能出現某一字符,但下面又必須使用可以php://偽協議繞過

目前遇到的是file_get_contents其他情況具體而定

八、is_numeric繞過

空格、t、n、r、v、f、+、-能夠出現在參數開頭,“點”能夠在參數任何位置,E、e只能出現在參數中間。

九、php5,3,29,這里可以直接用%0b繞過s(空白字符)的匹配

十、既是0又是1的情況

$a==1&$test[$a]=t時

  • php精度(16以上)var_dump(9999999999999999999==1);//true
  • 科學計數法 .1e1 echo $b[‘.1e1’]//輸出t

.是字符串所以在數組里面變成0,但在is_numeric中有點則正常輸出為數字

十一、當switch沒有break時可以繼續往下執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM