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

歡迎訪問 生活随笔!

生活随笔

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

php

攻防世界 easyphp

發布時間:2023/12/20 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 攻防世界 easyphp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Easyphp?? 對于初學者其實一點也不easy哈

打開題目場景

<?php highlight_file(__FILE__); $key1?=?0; $key2?=?0;$a?=?$_GET['a']; $b?=?$_GET['b'];if(isset($a)?&&?intval($a)?>?6000000?&&?strlen($a)?<=?3){if(isset($b)?&&?'8b184b'?===?substr(md5($b),-6,6)){$key1?=?1;}else{die("Emmm...再想想");}}else{die("Emmm..."); }$c=(array)json_decode(@$_GET['c']); if(is_array($c)?&&?!is_numeric(@$c["m"])?&&?$c["m"]?>?2022){if(is_array(@$c["n"])?&&?count($c["n"])?==?2?&&?is_array($c["n"][0])){$d?=?array_search("DGGJ",?$c["n"]);$d?===?false?die("no..."):NULL;foreach($c["n"]?as?$key=>$val){$val==="DGGJ"?die("no......"):NULL;}$key2?=?1;}else{die("no?hack");} }else{die("no"); }if($key1?&&?$key2){include?"Hgfks.php";echo?"You're?right"."\n";echo?$flag; }?>?Emmm...

經典的php代碼審計題

首先我們大致瀏覽一下,想要輸出flag

Flag的輸出與key1?&&?key2有關

key1?&&?key2又與我們通過get方式提交的a,b,c三個參數有關

a,b決定key1,c決定key2

我們一點點來看

參數a

if(isset($a)?&&?intval($a)?>?6000000?&&?strlen($a)?<=?3)

分析:

a的值需要大于?6000000,同時也需要長度小于3

嘗試 科學技術法 ?7e6

參數b

?if(isset($b)?&&?'8b184b'?===?substr(md5($b),-6,6))

分析:

b的后六位md5值要等與8b184b,這個需要使用腳本跑一下了,我偷懶這里使用一下最近很火的chatgpt

不得不說這個玩意是真的強

import hashlibfor i in range(100000):m = hashlib.md5()m.update(str(i).encode())h = m.hexdigest()if h[-6:] == "8b184b":print(i)break

得到b為53724

接下來是最難的

參數c

$c=(array)json_decode(@$_GET['c'])

分析:

C參數應該是一個json數據,解析成數組

if(is_array($c)?&&?!is_numeric(@$c["m"])?&&?$c["m"]?>?2022)

判斷c為數組 ?, is_numeric php內置函數判斷是否為數字,題中不要數字,m鍵值要大于2022

想到了php弱類型比較 ??寫一個2023a即可

?if(is_array(@$c["n"])?&&?count($c["n"])?==?2?&&?is_array($c["n"][0]))

n必須為數組,鍵值有兩個,類似于[[*,*...],*]。

?$d?=?array_search("DGGJ",?$c["n"]);$d?===?false?die("no..."):NULL;

array_search() 函數與?in_array() 一樣,在數組中查找一個鍵值。如果找到了該值,匹配元素的鍵名會被返回。如果沒找到,則返回 false

數組中找DGGJ,如果沒找到DGGJ,die,這里我們肯定找到了,接著往下執行

foreach($c["n"]?as?$key=>$val){$val==="DGGJ"?die("no......"):NULL;}$key2?=?1;

在php中,三個等號“===”是全等比較運算符,用于比較兩個操作數的值是否相等,同時檢測它們的類型是否相同;只有兩邊的值和數據類型都相等時,運算結果才是TRUE

匹配n的一個鍵值若等于DGGJ直接die

不能存在DGGJ,但array_search()又要查找并且要有結果,矛盾,這里肯定要繞過,全等肯定無法繞過

查到array_search()的繞過

array_search()沒有設置strict參數(如果該參數被設置為 TRUE,則函數在數組中搜索數據類型和值都一致的元素),我們就可以用0DGGJ進行弱比較,0 == 'DGGJ'又0===='DGGJ'為false

即n的值中有0成功了寫payload

?a=6e7&b=53724&c={"m":"2023a","n":[[],0]}

提交payload???????

You're right cyberpeace{15ad787a1de7cf92b7fd50ee19e3c5cb}

提交

cyberpeace{15ad787a1de7cf92b7fd50ee19e3c5cb}

總結

以上是生活随笔為你收集整理的攻防世界 easyphp的全部內容,希望文章能夠幫你解決所遇到的問題。

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