2019神盾杯

首届“神盾杯”上海市网络安全竞赛,去年的比赛。

0x00 babyJS

操作内容:

查看源码 找不到被调用的CheckLogin函数

/img/19shendun/image1.png

看到script中有用到unespaceescape等函数 用于编码字符串

eval传参改为alert 显示为弹窗

/img/19shendun/image2.png

发现check函数 并将flag与用户输入做比较 得到flag

/img/19shendun/image3.png

FLAG值:

flag{a5a5f402f6dc62acd3e848900a17513f}

0x01 crypto_easy_1

操作内容:

下载文件

/img/19shendun/image4.png

发现3行类似的数据 并且长度一致。

:左边的长度为42 右边的长度为56 ,猜测右边被base64编码过 进行解码 比较长度

/img/19shendun/image5.png

长度一致 为42

异或运算一下 可以得到Key随后将key代入 与base64解码后的密文异或比较 得到flag

解密脚本如下:

import base64
x = 'v6"wo5UIP9c4IdCk1o6qZhhB5DKZhVBwBzONl1JRIz:TwB2RyZYBCEVbjBjID17UkUeeDAwPBh1dg86AyAgcSQ4QygYGnAuJQYw'
y = 'zjS0ubQE2hw29FL2qs61ZNOVyFaf6IAjUZ7X8ijuVg:Q1wHADwPAC13PyRlUB90CwUCeHAwGj9hOg0QP34/cjkvY1AOTigOAhkt'
z = 'pJryZpVUNpSFi06WlKGkS0Uka6zw1sNCX"h2urQoyg:SXwmSRMdBz0LJwARAGkObhg6CSo5ZCVcIn0LLnkFfRAiGw9kAzM1GDYt'
a, b = x.split(':')
c, d = y.split(':')
e, f = z.split(':')
b = base64.b64decode(b)
d = base64.b64decode(d)
f = base64.b64decode(f)
g = base64.b64decode('X1o1VzIPaVgjbmNvCnQAC0ZHY3BbMUkaeylDYWVOCzZDXwJjR3hTFiw3')
flag = ''
for  i in range(42):
    t = ord(a[i]) ^ ord(b[i])
    flag += chr(ord(g[i]) ^ t)
print(flag)

FLAG值:

豌豆杯入学CTF


1.题目:小可爱 第一步肯定是绕过本地回环地址 CC25B038-F2D2-4F85-93F7-F51924B8DAB8.png 一开始想到的是x-forward-for等告诉服务器我的地址但发现没有绕过 看题目题目是说来源地址想到了referer成功绕过 BC410D27-3BE1-40E5-ABF5-777F7144F502.png AEA1A04B-27BA-4393-953B-75D948C95027.png 这里没啥思路只能爆破 B9E617B3-EF26-477B-B78C-534C490FB3C4.png 密码为orange 访问到另外一个页面 然后登录。 发现是一张迪丽热巴的图片 这个主管很喜欢迪丽热巴啊!! 122FC809-D249-4228-9EB5-1E7F101BB7C1.png ADBC80E5-9B6D-4483-B1D4-286FE4B9E3F2.png 将图片下载下来,用binwalk查看下发现有压缩包!foremost下得到压缩包发现有密码 70BBCD6F-2D2E-4D93-8F11-80D576A5CB54.png DABA844F-3716-4889-96CA-04A7E6137C96.png 这个地方解了很久发现使用Dilraba的md5。。。。 F0312D7E-FC35-4DE9-86AF-D5A0F5796C97.png 得到一张图片再一次foremost得到一个压缩包成功拿到flag C065BA1C-B8B1-4157-9E8A-D6BD23ED6440.png 2.题目:单身二十年 EA018BA0-F2BB-4204-9784-8E3585F3511B.png

<?php 

header("Content-type:text/html;charset=utf-8"); 
show_source(__FILE__); 
if($_COOKIE['token']=='5D41402ABC4B2A76B9719D911017C592'){ 
    $file    =    'dump/'.md5(base64_encode(mt_rand(1,100))).'.txt'; 
    file_put_contents($file,file_get_contents('327A6C4304AD5938EAF0EFB6CC3E53DC.php')); 
    sleep(10); 
    unlink($file); 
}else{ 
    header('Location: index.php'); 
} 

setcookie("token"); 

?>

看懂源码发现访问页面会睡眠十秒他会把flag写入到一个1到100随机数字经过base64,md5的txt文件里。 一种是用burp直接get到这里我就不演示了,我是直接写的python,访问下页面执行脚本就行了。 9BB9177B-2227-4784-A0BB-B029ED948AF3.png

import base64
import hashlib
import requests
for i in range(1,101):
	headers = {'Content-type':'text/html;charset=utf-8'}
	encodestr = base64.b64encode(str(i).encode('utf-8'))
	cookies = {'token':'5D41402ABC4B2A76B9719D911017C592'}
	#print(encodestr)
	m = hashlib.md5()
	m.update(encodestr)
	#print(m.hexdigest())
	a = m.hexdigest()
	url = 'http://106.14.145.133:8081/web10/dump/'+a+'.txt'
	#print(url)
	url_get = requests.get(url,headers=headers,cookies=cookies,timeout=2)
	#print(url_get.headers)
	#print(url_get.cookies)
	if url_get.status_code == 200:
		print(url_get.text)

3.题目:初心不改 1975DE5B-D07B-4569-B8D0-E7171F2A034C.png 访问页面发现是一个thinkphp5.0 一猜就是sql注入 一开始以为是构造一个注入然后load_file到flag后来发现想多了,直接通过payload拿到mysql账号密码 /index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 BA7D4195-9527-4B06-A1D8-28ABF453FE46.png 主页查看源码发现有一个phpmyadmin,登陆后成功拿到flag 73F165EC-C956-40AD-9106-ADE323691340.png