记事本

Training: WWW-Basics

http://www.wechall.net/challenge/training/www/basic/index.php 由于我的机子在内网,所以要先在路由器里设虚拟服务器。ip地址设为我的机子在内网的地址,端口80。然后把要求的文件放到对应地方即可 此外,在httpd.conf里,要把监听的设好,Listen 80

manpage4

这道题从第一次看到,到现在已经好久了…… 首先,这个游戏是叫wumpus,运行时加上参数-s <NUM>可以以我们提供的数做seed生成随机数,这样就保证每次都是一样的。取seed为100,输入SHOOT,1,2即可获胜。 问题还是出在sprintf,可以修改返回地址。关键是如何使字符串足够长。我曾经考虑过ctime的问题,因为其返回值是静态分配的一段空间,可能可以修改,但最...

manpage3

还是那个道理,打开的file descriptor会经过exec保存下来。我最开始的想法是,打开很多文件,然后执行manpage3,那么读密码那里就读空,因为密码文件打不开了 #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h>...

manpage2

问题出在,密码文件打开之后没有关闭,而fd是可以从exec继承的。于是我们先写一个读文件内容的程序 #include <unistd.h> int main () { char buf[64]; lseek(3, 0, SEEK_SET); ssize_t num; while((num=read(3,buf,sizeof buf)) >...

manpage1

exec的manual里是这么说的 Except for SIGCHLD, signals set to be ignored (SIG_IGN) by the calling process image shall be set to be ignored by the new process image. 于是我们先把SIGTERM设为忽略,再调用manpage1 #inc...

manpage0

有2点: execve,如果ST_NOSUID没有设的话,新执行的程序的rid不变,eid会变如果suid设了,saved suid也会被保存为eid,这样我们就可以在之后用setuid来恢复 setuid如果权限够了(root?),就把2个id都设了;否则只设eid,rid和saved suid不变 于是还是溢出,不过shellcode中要先恢复权限 BITS 32 ;s...

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 sys fin = open('semtex1', 'rb') fout = open('semtex1.out', 'wb') while 1: bytes = fin.read(2) ...

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 ...