第四届广东省强网杯
WEB
love_Pokemon
源码:
1 |
|
获取hint,payload:
1
myfavorite=bulbasaur!&levelup=lv%fa100
得到提示,flag在根目录,文件名为FLAG
1 | $hint = 'flag is located in / , and NAME IS FLAG' |
读取FLAG测试还有多少字符能用
1
2
3
4
5
6
7
8
9
for ($ascii = 0; $ascii < 256; $ascii++) {
if (!preg_match('/\'|
|_|\\$|;|l|s|flag|a|t|m|r|e|j|k|n|w|i|\\\\|p|h|u|v|\\+|\\^|\`|\
~|\||\"|\<|\>|\=|{|}|\!|\&|\*|\?|\(|\)/i', chr($ascii))) {
echo (chr($ascii));
}
}可以得知能通过WAF的字符有下面这些:
1
#%,-./0123456789:@BCDFGOQXYZ[]bcdfgoqxyz
空格使用TAB代替即可,读取文件可以用od文件名用正则匹配,构造一下payload
1
myfavorite=mewtwo&dream=od%09/F[C-Z][@-Z]G
十六进制转字符串即可获得flag
1
flag{Php_Rc3_1s_V3Ry_C001_But_I_l0v3_Pokemon~}
MISC
欢迎参加强网杯
1 | flag{Wec10m3_to_QwbCtF} |
泄露的秘密
用Tshark将http数据包导出来得到如下:
都是盲注的payload,根据盲注结果,讲AIISC码转换为字符即可得到flag
1 | flag{Log_analysis_SQL} |
memory1
取证大师直接搜flag找到一个7z压缩包,压缩包有密码
直接看进程,正好有个7z压缩程序
直接导出来dump,Strings得到字符串,直接搜password,那么巧有一个叫password_is_complex
但是压缩包密码不对,直接取证大师搜:
密码是:
1 | haha_password_is_complex |
解压直接得到flag
邮件的秘密
这题基本解出来了,但是最后可能是outlook的问题,最后没解出来。没解出来就不放做题截图了。。。
这题就是用修复工具将邮件修复,修复之后打开附件有一张图片,最终就是flag
RE
simplere
题目前半部分是迷宫题,根据wsad走就是前半部分的FLAG,后半部分是一个简单的异或
1 | #include <stdio.h> |
得到
1 | sZGad02wvbf3mtxEq8rDhYK47LueClz1Jig6ypHM+o/W5QjNPFRckUInOTXVAS9B |
BASE64:
CRYPTO
RSA and BASE?
维纳攻击获取私钥,直接求明文然后转为字符串
1 | import RSAwienerHacker |
1 | Hacked! |
通过对比可以知道 GHI45FQRSCX****UVWJK67DELMNOPAB3
少了 ZY2T
也就是说总共有4的阶乘中可能,也就是24种。自定义映射字符,尝试多次即可发现flag
PWN
打开程序的话,代码非常长,直接先看字符串定位关键信息
1 | .rodata:0000000000004ED0 ; const char aCouldNotMalloc_3[] |
其中
1 | bad function definition |
这一句话明显说明了他会检测函数调用,但是程序整体看下来只有input那有个输入点,尝试输入后返回的是一些奇怪报错
1 | Input: |
错误的全定义语句。
但是对input的输入方式进行仔细分析
1 | *((_BYTE *)buf + read(0, buf, 0x3FFFFuLL)) = 0; |
最多读入0x3ffff大小的数据到buf,最外层套上了指针,这就是吧输入数据当函数执行了
由此可以写一个test验证一下,虽然开了PIE但是要是可以真正的把输入数据当函数执行,那么地址也可以泄露出来的。
test
1 | from pwn import * |
的确可以得到地址
1 | Input: |
而且经过测试,这个变量的确是低3位不改变的,用了计算libc_base是可以的。
直接打exit_hook
1 | from pwn import * |