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

歡迎訪問 生活随笔!

生活随笔

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

php

[xctf] 江苏工匠杯easyphp

發(fā)布時間:2023/12/20 php 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [xctf] 江苏工匠杯easyphp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[xctf] 江蘇工匠杯easyphp

考點

PHP弱類型

一、題目

<?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...

二、WP

? 分析以下代碼,分別有a、b、c三個條件,只要當這三個條件都滿足的時候,就會輸出Flag,a和b都比較簡單,所以說本題的考點為參數c的array_search繞過

1、參數a

? 代碼的大概意思為:將a的值轉換為整數,然后需要滿足大于6000000 同時長度小于等于 3,我們直接使用科學技術法。

? a=6e9

2、參數b

? 代碼含義為:將b的值進行md5加密,當加密后的值后6位為8b184b的時候,就會進行到下一個判斷,我們直接使用腳本跑一下,得到的結果為53724

3、參數c

? 接下來就是本題的重點,搞了好久才研究出來/(ㄒoㄒ)/~~。

①、根據第一行代碼可知,傳入的c應該是一段JSON的數據,然后解析為數組。

②、首先判斷Json中Key為m的Value不能為數字,并且需要大于2022,這個簡單只需要利用php的弱類型比較,將m賦值為2023開頭的字符串即可,這里將其賦值為2023a

③、然后對key為n的value進行判斷,要求n必須為一個數組,并且value的數量必須為2,并且n的第一個value又必須為一個數組。然后有意思的來了,題目要求第一次用array_search搜索的時候,必須在n中含有DGGJ,但是接下來的代碼是循環(huán)查看數組中是否含有DGGJ,如果含有的話就直接die了。

④、經過參考array_search的官方文檔,發(fā)現當使用in_array() 或array_search()函數時,如果strict參數沒有設置為true,則in_array()或array_search()將使用松散來判斷。

這里用代碼來演示一下什么是松散判斷

$array = ['a',0,1,2,'3']; var_dump(in_array('abc', $array)); //True,下標為1(查看是否在數組中) var_dump(array_search('abc', $array)); //搜索abc字符串在數組中出現的第一個下標

在array數組中查找abc,我們可以發(fā)現其實數組中并沒有abc,但是因為松散判斷,匹配到了數字0,其實和var_dump("admin" == 0); //結果true同理

發(fā)現此漏洞的話,我們就可以將數組c中的第二個值設置為0,這樣會滿足array_search()的條件,同時也不存在DGGJ。

最終我們的payload為

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

條件,同時也不存在DGGJ。

最終我們的payload為

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

總結

以上是生活随笔為你收集整理的[xctf] 江苏工匠杯easyphp的全部內容,希望文章能夠幫你解決所遇到的問題。

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