ctf第二波

一、GetFlag

1、登錄進去看到login登錄按鈕,蓄力一點我們就到到了登錄界面
這裏寫圖片描述
2、我們看到一串代碼substr(md5(captcha), 0, 6)=10c6ca 截取驗證碼MD5加密後的前6位,我們可以寫腳本爆破。但是剛開始我陷入了誤區,就是不知道驗證碼有幾位,由哪些字符組成的。但是後來一想,這裏應該是服務端接受到我們傳過去的驗證碼,然後進行MD5加密再進行比較,所以驗證碼長度就不是那麼重要了,但是我試了下三位數的驗證碼能匹配成功的機率很低,所以寫了一個四位驗證碼的腳本,爆破出來的驗證碼,隨便選一個就可以了。

import string,hashlib
a=string.digits+string.lowercase+string.uppercase
for i in a:
    for j in a:
        for k in a:
            for m in a:
                s=hashlib.md5(i+j+k+m).hexdigest()[0:6]
                if s=="9bf514":
                        print i+j+k+m
                        break

3、爆破出來後,我們就登錄,然後發現怎麼登錄都會出現error,然後嘗試了sql注入
這裏寫圖片描述
4、嘗試萬能密碼登錄admin' or '1'='1 ,果然夠就進去了,進去之後可以下載三個文件,果斷下載下來看一下。
5、在a.php中有一段話Do what you want to do, web dog, flag is in the web root dir 就是說flag在網站根目錄下,在url裏面試了下大小寫,發現對大小寫敏感,那這個就是linux的服務器,網站根目錄就是VAR/WWW/HTML ,而且這裏要注意,通過抓包可以看到在下載文件的時候的請求鏈接
這裏寫圖片描述
我們把後面的a.php改成/var/www/html/glag.php,就能下載源碼
6、下載下來的源碼是這樣的

<?php
$f = $_POST['flag'];
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return')))
{
        die('wowwwwwwwwwwwwwwwwwwwwwwwww');
}
try
{
         eval("\$spaceone = $f");
}
catch (Exception $e)
{
        return false;
}
if ($spaceone === 'flag'){
    echo file_get_contents("helloctf.php");
}

?>

就是我們在訪問flag.php的時候post一個flag並且flag=flag就能讀取helloctf.php文件的內容,果斷post一個過去,但是這裏要注意post的時候flag後面要加一個分號,然後查看源碼就可以了。

二、pyscript

1、這個一看就需要我們寫腳本,先訪問一波,頁面很乾淨,按F12一波
這裏寫圖片描述
看到要用sha1加密去匹配一個密文,這個密文在響應頭裏面,
這裏寫圖片描述
但是隻有10秒我們需要寫腳本自動發包。

import requests,hashlib
import re,string

r=requests.post("http://106.75.108.111:1111")
cookies=r.cookies
r.encoding="utf-8"
mima=r.headers['Ciphertext']
a=re.findall(r"\+(.*?)\)",r.text)[0]


b=string.digits
for i in b:
    for j in b:
        for c in b:
            d=i+j+c
            if hashlib.sha1(i+j+c+a).hexdigest()==mima:
                # print d
                m=requests.post("http://106.75.108.111:1111",cookies=cookies,data={"pass":d})
                # print m.text
                l=re.findall(r"<!--.*?([\d\+\-\*]+).*?-->",m.text)[0]
                k=eval(l)
                url=requests.post("http://106.75.108.111:1111",cookies=cookies,data={"pass":k})                 
                print re.findall(r"flag{.*?}",url.text)[0]

這裏要注意,第一次返回回來的包裏面提示我們需要計算的數字,所以計算後再一次發包得到flag。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章