记事本

vortex1

通过输入’\’,可以将ptr的位置往上挪,由此可修改ptr上方的内容。另外,由于会检查ptr是否低于buffer下界,另外反汇编发现main函数有stack保护,所以不能修改main的返回地址了 但他也提供了一个执行shell的机会,只要ptr的值最高位是0xca。坚持发现ptr保存在esp+14h,其初始值即buffer+sizeof(buffer)/2在esp+11ch。由于小端,pt...

Vortex0

第一题就花了好久…… 首先,获得密码的链接不是ssl。我开始想用命令行来完成,即用netcat。查了下可以通过fifo来交互: $ rm -f /tmp/f; mkfifo /tmp/f $ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f 但问题是怎样取出4个数字相加。我对shell还是不熟...

Natas

natas0 查看网页源代码即可 natas1 鼠标右键被禁止了,我是把网页保存下来看的 natas2 说当前页面没东西,看了源码似乎确实,但有一个图片在files文件夹下面,访问那个文件夹就可以发现密码 natas3 当前页面还是没东西,连google都找不到,于是去看robots.txt,发现文件夹,访问发现密码 natas4 修改referer即可,密码是 n...

Narnia

Narnia0 要改写内容很简单,20个填充字符加上0xdeadbeef,但问题是用perl输入后sh立刻就退出了……后来在网上搜了下,用cat可以读用户输入,然后输出通过管道送到sh那里 (perl -e 'print "A"x20 . "\xef\xbe\xad\xde"'; cat) | ./narnia0 Narnia1 只需要把shellcode放到环境变量里就可以了,而...

Leviathan

leviathan0 家目录下有个.backup文件夹,里面有一个bookmarks.html。直接用grep搜leviathan,得到密码 leviathan1以其为结尾 反编译,发现只是简单地比较字符串,得到密码 leviathan2 没发现溢出,单纯race condition的话又有点来不及,所以是command injection. 在当前目录下创建一个到目...

Behemoth7

这道题稍微和之前不太一样,在main开始时先push ebp, 又push edi, 然后and esp 0xfffffff0, sub esp 230h。但ida这里没搞清楚,字符数组是在esp+24h处,但ida显示的是ebp+210h,明显不对,估计是因为又push edi的原因。所以直接看反汇编有时确实容易出错,这种情况下还是要直接看汇编。 首先是把环境变量都清空了,所以只能把sh...

Behemoth6

这道题会在behemoth6_reader中执行用户提供的shellcode。我开始想的是直接就在那里把密码读取了,但reader没有setuid,所以权限不够。这样的话就只能写一个输出HelloKitty的shellcode了。代码如下 BITS 32 xor eax, eax push eax push word 0x7974 push 0x74694b6f push 0x6c6c6...

Betemoth5

这道题要读反汇编得到的代码,关键是有几个常量的意义要弄清楚。首先是发往本机的1337端口,然后是凭记忆,发的是UDP。所以我们后台运行 nc -u -l 1337 > /tmp/pass, 再运目标程序,就可以得到密码

Behemoth4

这道题的程序执行后,会几乎立刻(1秒)去读一个文件,文件名和程序的pid有关。当然可以创建一大堆链接,都指向密码文件,链接名是所有可能的pid,但这样太费事儿 我们用fork,父进程可以得到子进程的pid,由此创建链接文件;子进程先sleep一段时间,以确保父进程先创建链接,然后子进程exec目标程序即可。因为pid不会随exec变,所以这也就是目标程序的pid c代码如下 #incl...

Behemoth3

这道题是format string。步骤还是那样: 输入一连串A,跟上一连串%x,由41的位置发现输入字符串是从第6个参数开始 把shellcode导入环境变量,打印EBP地址进而得到返回地址 将返回地址byte by byte作为输入字符串的起始,然后用%mx来填充调整已输出字符个数,用%m$hhn改写相应的byte,使返回地址最终指向shellcode 这道题有两个注...