为什么报名是学生组打比赛分到了企业组捏,企业这群人也太卷了
(只有web是我做的,其他跟我没啥关系
签到
尝试一下解密?
url解码
简单的图片
拖进gimp里看到有三个图层,删去最上边的一个,就能看见flag
web
guess
sql盲注,唯一的问题是这里只允许最大有四个参数,所以在盲注第五个数时要删去第一个
SSRFme
利用file协议查看etc/hosts文件,找到主机的网段
bp扫一下,发现在100里有内容
接下来就是利用gopher协议把referer=dasctf.com带进去
提示要post一个参数dasctf,而且这个参数还要等于flag
重新构造gopher语句,最终得到flag
MagicalType
robots.txt里有个hint.php,访问一下,发现源码里是些html代码,拖到文档里改成html格式
利用数组溢出和filter伪协议读index.php的文件内容
解码之后是个反序列化
error_reporting(0);
class Evil{
public $flag = 1;
public function __wakeup()
{
$this->flag = 0;
}
public function __destruct()
{
if($this->flag == 1)
{
echo("How you did it?");
$xux = file_get_contents($_GET['xux']);
create_function("",$xux);
}
else{
die("nonono");
}
}
}
$o = $_GET['o'];
if(isset($o))
{
unserialize($o);
}
我们要利用的函数就算create_function,这个函数有个命令注入的漏洞。而$xux参数可以利用data协议进行控制,至于wakeup的绕过可以将最前面的O改成C(陇原战役里考过
之后发现空格也被过滤了,用${IFS}绕过
misc
掩耳盗铃
压缩包解压出来的改成ppt格式然后把叠加的图层全删了
chrchrchr
感觉像蚁剑的流量,蚁剑加密的方式就是base64加密之后再在前面添几位,所以从tcp流18开始往后找,删掉前两个字符先url解码再base64解码,把写入a.txt的内容拼起来
KJCUMVCRGFJEOZL2JJWE2V2RGNMW2SLXJZLVCM2ONJWGUTLNJZVU2VCBPBHFIZDIJZVFSMCOIRSGQTKHKJVWMUJ5HU======
然后进行base32解码,再base64得到flag
re
measyasm
自减
PEinM
拖进ida里动调
能看出来在这里有一个被魔改过的xxtea
逆一下脚本
#include <stdio.h>
#include <stdint.h>
#define DELTA 0x9E377AB9
#define MX (((z>>4^y<<3) + (y>>4^z<<3)) ^ ((sum^y) + (key[p&0xa^e] ^ z)))
unsigned long long Summation(int n, unsigned long long delat)
{
unsigned long long sum = 0;
for(int i = 0; i < 52/n+6; i++)
sum += delat;
return sum;
}
void btea(unsigned long long *v, int n, unsigned long long const key[4])
{
unsigned long long y, z, sum;
unsigned p, round, e;
if (n > 1)
{
round = 6 + 52/n;
sum = 0;
z = v[n-1];
do
{
sum += DELTA;
e = (sum >> 2) & 3;
for (p=0; p<n-1; p++)
{
y = v[p+1];
v[p] += MX;
z = v[p];
}
y = v[0];
z = v[n-1] += MX;
}
while (--round);
}
else if (n < -1)
{
n = -n;
round = 6 + 52/n;
sum = Summation(n, DELTA);
y = v[0];
do
{
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--)
{
z = v[p-1];
y = v[p] -= MX;
}
z = v[n-1];
y = v[0] -= MX;
sum -= DELTA;
}
while (--round);
}
}
int main()
{
unsigned long long v[]= {0xBD548E45099A220B, 0x50BB9976358C558A, 0x20598FD852017357, 0xDC9B969877F6E8C2, 0xBEC5A96D9ECC6B87, 0x34D1D0E4390DF96D, 0x6796AEADE501CC5D, 0xDC643460C1430B8F, 0x7CA5CE8BE64FE5EE, 0x066B317D2C139F9B};
unsigned long long const k[]= {0x0000000000000052, 0x0000000000000033, 0x0000000000000076, 0x0000000000000045, 0x0000000000000072, 0x0000000000000073, 0x0000000000000033, 0x000000000000005F, 0x0000000000000031, 0x0000000000000053, 0x000000000000005F, 0x0000000000000045, 0x0000000000000061, 0x0000000000000053, 0x0000000000000079, 0x000000000000000A};
int n = 0xa;
btea(v, -n, k);
for(int i = 0; i < 8*n; i++)
{
printf("%c", ((unsigned char *)&v)[i]);
}
return 0;
}
crypto
rssssa9
照着题目逆推脚本,用sage
交了一下结果不对
发现是加密的时候在后边填了点东西
再去掉加密里加上的最后那段123....321就行