第一題:
這是源碼。
可以看到這里要求password只能傳入字母和數(shù)字,而后面的strpos語(yǔ)句又要求password里面必須含有“--”才能輸出flag里面的值,很明顯這是矛盾的。要繞過(guò)判斷就利用了ereg函數(shù)的%00截?cái)嗦┒础.?dāng)輸入的值中含有%00的時(shí)候,%00以及后面的字符會(huì)被函數(shù)忽略。所以輸入a%00--就能獲取flag。
第二題:
這塊代碼看著很長(zhǎng),實(shí)際分為三部分,$a、$b、$c能被成功賦值就能獲取正確結(jié)果。
第一個(gè):
switch語(yǔ)句中,$x1被賦值1或0就能使得$a被賦值,而1又被條件判斷語(yǔ)句排除,所以簡(jiǎn)單賦值0就行了。
第二個(gè):
輸入的x2會(huì)被以json格式解碼再以array類型賦給x2,所以輸入要符合json格式。后面兩句的意思是x21不能是純數(shù)字,但又必須大于2017,很明顯要利用PHP的弱類型,同樣能得到想要的結(jié)果。
第三個(gè):
兩個(gè)if語(yǔ)句要求x22是個(gè)array,同時(shí)里面只有兩個(gè)element而且第一個(gè)不能為零。array_search語(yǔ)句是把字符串以兩個(gè)等號(hào)的形式分別與x22里面的數(shù)據(jù)比較,而字符串與整數(shù)比較的時(shí)候會(huì)被轉(zhuǎn)化為0,所以x22中一個(gè)element的值為零就行了。element的值不能設(shè)置為字符串的內(nèi)容,因?yàn)橄旅嬉蟛荒芎凶址膬?nèi)容。
總的輸入和結(jié)果。
第三題:
這道題的pass是未知的,所以沒(méi)法直接輸入準(zhǔn)確的值通過(guò)判斷。這時(shí)就利用了strcmp函數(shù)的漏洞,只需要輸入一個(gè)array就像這樣?password[]=1就能使判斷成立。strcmp函數(shù)的參數(shù)中,如果含有數(shù)組的話,比較是直接成立的。