SUCTF的部分web題

0x00

大佬在群里分享的一次外校的招新ctf賽,沒什么經(jīng)驗(yàn),第一次個(gè)人參加,做出了幾題,雖然挺開心的。但是還是有挺多題目做不出來。(萌新瑟瑟發(fā)抖...)

0x01

include me

題目給的提示是index,但是打開以后的界面是這樣的



結(jié)合題目,猜測是通過include函數(shù)去包含不同的php文件,這時(shí)想到通過php偽協(xié)議去讀取index頁面的源碼
構(gòu)造payload:

php://filter/read=convert.base64-encode/resource=index.php

通過burp抓包以后修改請求得到了返回了一段base64的字符串.



解碼以后得到了index.php的源碼:

<?php
if(isset($_GET["lang"])){  
    $lang=$_GET["lang"];  
}else{  
    $lang="cn.php";  
}  
?> 
<form>  
<select style="width:60px;" name="lang">  
<option value="cn.php"<?php echo $lang=="cn.php"?"selected":"";?>>Chinese</option>  
<option value="en.php"<?php echo $lang=="en.php"?"selected":"";?>>English</option>
<option value="kr.php"<?php echo $lang=="kr.php"?"selected":"";?>>
Korean</option>
<option value="jp.php"<?php echo $lang=="jp.php"?"selected":"";?>>Japanese</option>
<option value="de.php"<?php echo $lang=="de.php"?"selected":"";?>>German</option>
<option value="fr.php"<?php echo $lang=="fr.php"?"selected":"";?>>French</option>
<input type="submit" value="change language">  
</form> 
<?php
$flag="SUCTF{ha_ha_ha_you_win}";
    include $lang;
?>

一下就看到flag了。這道題也是相對簡單的,考察的是關(guān)于文件包含漏洞的相關(guān)知識,而php有一些內(nèi)置協(xié)議file://、php://、 data://等等可以做到更多的事情。

onepiece


作為海賊迷,我也相信onepiece是真的存在的,所以剛看到題目的時(shí)候我就想著一定要做出來,結(jié)果到最后都沒做出來, o(╥﹏╥)o



題目提示用了phpstorm,然后搜索了一下發(fā)現(xiàn)在phpstrom下面建項(xiàng)目是會建立.idea這個(gè)目錄的,所以直接輸入目錄看到了下面的3個(gè)文件,一個(gè)個(gè)點(diǎn)開終于在第三個(gè)文件中發(fā)現(xiàn)了東西。



仔細(xì)看了整個(gè)文件發(fā)現(xiàn)了這個(gè)項(xiàng)目還有另外的3個(gè)頁面,然后呢第一個(gè)UpL0ad.php頁面一開始不停上傳一句話木馬都沒反應(yīng)就放棄了

后來打開了README.html,看到了接下來的提示

根據(jù)提示,把onepiece.zip文件下載下來后得到一個(gè)php文件

<?php 
if (!defined("BEBCEFCCAC")){define("BEBCEFCCAC", __FILE__);global $?$垟,$剶?$崒憢,$湊灋?$€搰殎?$帨櫀煍?$挐焾啌帥,$棞垑噭殕?$妵槗仜寫梾,$垨洊墭晸焾?$泙瀮媶墕崕挅,$唴檪搳殮搼晧?$?帊墤墛弽棖槦,$剢憸帢晳媭媴敐?$煓墴垬垰仈姁寔垕;function 暊($暊,$垟?""){global $?$垟,$剶?$崒憢,$湊灋?$€搰殎?$帨櫀煍?$....

打開這個(gè)php看到一串的亂碼,整個(gè)人都傻了,后來查到這是經(jīng)過了php混淆加密以后的文件,接下來就是去找解密的方法,一開始找到某個(gè)大佬的解密方法(http://sec2hack.com/web/phpjiami-decode.html),但是自己跟著弄了幾次都不行就放棄了....看來onepiece是看不到了。后來比賽方放出writeup的時(shí)候


跟著用了上面的解密網(wǎng)站一下就解密了文件...想當(dāng)時(shí)我用其他網(wǎng)站解密的時(shí)候各種問題,而且還要收費(fèi),雖然我沒花錢...

classic sql


這題一開始弄到手也不知道怎么做,因?yàn)榘l(fā)現(xiàn)黑名單過濾了很多常用的字符串,于是就一直搜,搜到了一題基本一樣的題目(https://github.com/hongriSec/PHP-Audit-Labs/blob/master/PHP-Audit-Labs%E9%A2%98%E8%A7%A3/Day13-16/files/README.md),是紅日安全-代碼審計(jì)小組的一道題目。
這題的思路是

詳細(xì)的解釋就是:

通過\去轉(zhuǎn)義user的一個(gè)單引號,使得user的值變成了

\' and pwd =

然后后面

||

實(shí)際上就是or的意思
另外REGEXP函數(shù)也有一些語法規(guī)則可以匹配特定的字符串,可自行搜索了解

xss1


這道題是關(guān)于xss的,根據(jù)js腳本可以看到只要輸入alert就會被替換,那要做的就是把a(bǔ)lert用其他方法表示出來。官方的writeup是根據(jù)jsfuck來做的,而我不是:



將alert字符串通過parseInt方法轉(zhuǎn)成一個(gè)整數(shù),然后把這個(gè)整數(shù)再通過toString方法轉(zhuǎn)回alert,這樣payload就是

eval((8680439).toString(30))(1)

就沒有alert這個(gè)字符串.但是這題還有一點(diǎn)要注意的是我們輸入的字符串被兩個(gè)雙引號包圍了,如果直接輸入payload也不能實(shí)現(xiàn)彈窗




在控制臺可以看到字符串被包圍了,那這時(shí)就需要逃脫雙引號,我們可以使用

" + "

前后兩個(gè)雙引號分別閉合原先代碼中的雙引號,這時(shí)payload就變成了

"+eval((8660439).toString(30))(1)+"

php is No.1


這題主要是關(guān)于php的弱等于的知識.



這是官方的writeup,這里說的is_numeric我還真不知道,不過我是用科學(xué)計(jì)數(shù)的表示去做的,
我的payload是:

time=3.888e6 & num=0e1

首先這兩個(gè)都是整數(shù)能通過is_numeric函數(shù),這時(shí)進(jìn)入到最里面的if-elseif-else語句,而要讓通過計(jì)算可以得到3.888*10^6是介于題目要求的兩個(gè)數(shù)之間,然后php中把一個(gè)變量強(qiáng)制轉(zhuǎn)換成int的時(shí)候,遇到字母就會截?cái)?例如

$ a = '123a.0123'  
$ b = (int) $a ; //實(shí)際上b會等于123

那么這時(shí)我們大概等待4s就可以得到flag了。

0x10

這次實(shí)際上沒做出什么題目,但是挺開心,畢竟開始能看懂和自己弄懂一些題目了。另外這次比賽還有幾題比較難的,還沒有復(fù)現(xiàn)成功,鑒于題目要關(guān)掉了,還沒時(shí)間做,暫時(shí)就弄到這里吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容