记事本

vortex10

由于time(0)的值的大致范围是知道的,关键就是v12的值。这里v12>>31会得到0xffffffff或是0x0,接下来的>>24就会得到0xff或是0x0。于是最终范围在128-256=-128与128+256=384之间,可以穷举出来。 另一方面,我们要读他的数,并反馈。与vortex0类似,我还是不知道怎么用shell, fifo等完成。于是在c程序里fo...

semtex

semtex0 首先把文件下载下来: $ nc 178.79.134.250 24001 > semtex 然后每两个bytes打印一个: import sysfin = open('semtex1', 'rb')fout = open('semtex1.out', 'wb')while 1: bytes = fin.read(2) if ...

utumno

utumno0 和semtex4类似,这次的也是没有读权限。还是用xocopy把内容dump出来,elf地址用的是0x08048000。再用strings查看,发现类似是密码的内容 utumno1 会打开目录,检查包含的文件的文件名。必须要是以sh_开头;然后漏洞在run函数里面,会把d_name[3]的地址放到返回地址。所以把payload放在文件名sh...

maze

maze0 race condition,以前做过,于是懒得再弄了 maze1 ldd检查发现会加载当前目录下的libc.so.4。于是我们写一个文件 int __libc_start_main() { int fd = open("/etc/maze_pass/maze2", 0); char buf[64]; int num...

krypton

krypton0 base64解码 <pre class="lang:sh decode:true " >$ echo “…” | base64 -d -</pre> krypton1 rot13解码 import codecss='...'print(codecs.encode(s,'rot13')) krypt...

vortex9

一登录就提示说you have a new mail,但是输入mail后又说没有邮件 然后去/var/spool/mail文件夹,发现密码文件

vortex8

这道题里用了setresuid。但是调用的方式是通过syscall,我实验了下,如果是直接setresuid,那么子线程的uid被改变了;而如果是syscall,那么子线程的uid不变。现在还不清楚这是为什么,估计是和signal什么的有关。 总之,现在必须在子线程里invoke shell。我们还是可以通过修改got来做到。也就是说,先在父进程unsafecode里执行我们的命令,来修改...

vortex7

这道题要求构造一个符合crc的输入来造成溢出。 关于CRC,这里有一篇详细的文章 为了reverse CRC,我们先找到所用的crc table在文件中的位置,然后将其dump出来: $ hexdump -v -n 1024 -s 1504 vortex7 -e '"0x" 1/4 "%08x" ","' | fold -b44 此外,我们还需要根据最高位字符来构造reverse t...

vortex6

反汇编之后,发现同样存在format string。但这次还有一restart函数,检查发现他exec了我们的argv[0]。但是argv[0]可以是任意的内容提交给他,所以我们写一个读密码的程序: #include <unistd.h>#include <stdio.h>int main (int argc, char *argv[]) { seteuid(...

vortex5

md5破解,直接在网上破解155fb95d04287b757c996d77b5ea51f7,得到rlTf6。