日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP函数漏洞学习

發布時間:2023/12/20 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP函数漏洞学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP函數漏洞學習

0x00 前言

記一下php函數的一些缺陷,比如弱類型與強類型的比較,一些函數引發的安全問題,以及如何繞過等等,很有深意。

0x01 ==與===的區別

1、在PHP中===表示全等運算符,而==表示等于運算符; 2、如果等于運算符兩邊的值相等,則返回true,而如果全等運算符兩邊的值相等但類型不等,則返回false。

也就是說==僅比較兩個變量的值,===不僅比較值,還會比較類型。

==弱對比 ===強類型對比

0x02 MD5、SHA1函數缺陷(Hash比較缺陷)繞過

<?php if($_GET['name'] != $_GET['password']){if(MD5($_GET['name']) == MD5($_GET['password'])){echo $flag;}echo '?'; } //如果是"==",可以構造出MD5值為0e開頭的字符串,這樣的話弱類型比較時就會認為是科學技術法,因此可以繞過。 //echo MD5('QNKCDZO'); //echo MD5('240610708');//如果是"===",PHP自身的特性使得可以提交一個數組,而md5函數傳入數組的返回值都是NULL,這樣就可以繞過強類型比較,這樣可以進行數組繞過。 //name[]=1&password[]=2

md5加密后0e開頭的字符串

QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s1885207154a 0e509367213418206700842008763514 s1502113478a 0e861580163291561247404381396064 s1885207154a 0e509367213418206700842008763514 s1836677006a 0e481036490867661113260034900752 s155964671a 0e342768416822451524974117254469 s1184209335a 0e072485820392773389523109082030 s1665632922a 0e731198061491163073197128363787 s1502113478a 0e861580163291561247404381396064 s1836677006a 0e481036490867661113260034900752 s1091221200a 0e940624217856561557816327384675 s155964671a 0e342768416822451524974117254469 s1502113478a 0e861580163291561247404381396064 s155964671a 0e342768416822451524974117254469 s1665632922a 0e731198061491163073197128363787 s155964671a 0e342768416822451524974117254469 s1091221200a 0e940624217856561557816327384675 s1836677006a 0e481036490867661113260034900752 s1885207154a 0e509367213418206700842008763514 s532378020a 0e220463095855511507588041205815 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s214587387a 0e848240448830537924465865611904 s1502113478a 0e861580163291561247404381396064 s1091221200a 0e940624217856561557816327384675 s1665632922a 0e731198061491163073197128363787 s1885207154a 0e509367213418206700842008763514 s1836677006a 0e481036490867661113260034900752 s1665632922a 0e731198061491163073197128363787 s878926199a 0e545993274517709034328855841020

sha1加密的

sha1('aaroZmOk') sha1('aaK1STfy') sha1('aaO8zKZF') sha1('aa3OFF9m')

還有MD5和雙MD5以后的值都是0e開頭的字符串

CbDLytmyGm2xQyaLNhWn 770hQgrBOjrcqftrlaZk 7r4lGXCH2Ksu2JNT3BYM

加解密都是0e開頭的字符串

0e215962017

0x03 intval缺陷繞過

intval — 獲取變量的整數值

value:要轉換成 integer 的數量值

base:轉化所使用的進制

intval(mixed $value, int $base = 10): int

通過使用指定的進制 base 轉換(默認是十進制),返回變量 value 的 int 數值。 intval() 不能用于 object,否則會產生 E_NOTICE 錯誤并返回 1。

intval函數有個特性:”直到遇上數字或正負符號才開始做轉換,再遇到非數字或字符串結束時(\0)結束轉換”,在某些應用程序里由于對intval函數這個特性認識不夠,錯誤的使用導致繞過一些安全判斷導致安全漏洞.此外有些題目還利用intval函數四舍五入的特性來繞過判斷!

數組繞過四舍五入(小數)繞過 intval函數遇到小數點時會進行四舍五入,可以繞過一些限制。字母繞過 intval()函數如果$base為0則$var中存在字母的話遇到字母就停止讀取,但是e這個字母比較特殊,可以在PHP中不是科學計數法。所以為了繞過前面的==4476,我們就可以構造4476e123 其實不需要是e其他的字母也可以。異或繞過取反繞過二進制繞過

0x04 strpos()函數繞過

strpos — 查找字符串首次出現的位置

haystack:在該字符串中進行查找。

返回值

返回 needle 存在于 haystack 字符串起始的位置(獨立于 offset)。同時注意字符串位置是從0開始,而不是從1開始的。如果沒找到 needle,將返回 false。

strpos(string $haystack, mixed $needle, int $offset = 0): int 數組繞過 strpos 如果傳入數組,會返回NULL 換行繞過 strpos 我們可以利用換行進行繞過(%0a)

0x05 in_array函數缺陷

in_array — 檢查數組中是否存在某個值

in_array 函數默認采用 寬松 比較,即不比較類型,只比較值是否相等。

needle: 待搜索的值。(如果 needle 是字符串,則比較是區分大小寫的。)

haystack:帶搜索的數組。

strict:如果第三個參數 strict 的值為 truein_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同。

in_array(mixed $needle, array $haystack, bool $strict = false): bool

也就是說在 $haystack 中搜索 $needle ,如果第三個參數 $strict 的值為 TRUE ,則 in_array() 函數會進行強檢查,檢查 $needle 的類型是否和 $haystack 中的相同。如果找到 $haystack ,則返回 TRUE,否則返回 FALSE

也就是說,in_array()函數檢測上傳文件時候,如果未將第三個參數設置為true,從而導致攻擊者構造文件名繞過服務端的檢測。

0x06 preg_match()函數缺陷

當被匹配的數據為數組的時候回返回false值。

0x07 Preg_replace()函數缺陷

Preg_replcae在存在/e模式的時候會產生代碼執行漏洞

0x08 str_replace()函數缺陷

0x09 isset()函數缺陷

isset()函數只檢查變量是否存在,不檢查值。

0x10 strcmp函數缺陷

strcmp函數無法比較數組,可以使用數組繞過。

0x11 file_get_contents() 函數缺陷

file_get_contents() 函數把整個文件讀入一個字符串中,如果文件不存在,則函數返回flase(0)。

0x12 is_numeric()函數缺陷

is_numeric() 函數用于檢測變量是否為數字或數字字符串。

Is_numeric函數在對末尾含有%20的整數進行判斷時會返回false。

0x13 ereg()函數缺陷

Ereg函數用來對字符串中指定的字符進行匹配,返回True或False值。

當字符串中存在%00的時候,ereg將不會匹配%00后面的字符串,進行截斷,從而進行繞過。

0x14 Call_user_func()函數缺陷

函數將第一個參數作為調用的函數,其余參數為函數的傳入參數,當兩個值為可控內容時會產生命令執行漏洞。

0x15 assert()函數(php<7)

將字符串以php代碼來執行。

最后收藏一個代碼審計的練習的git項目:紅日安全代碼審計

總結

以上是生活随笔為你收集整理的PHP函数漏洞学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。