记事本

安装metasploit

首先是ruby1.9,因为版本低,所以从aur里装的。为了方便起见,把PKGBUILD里面涉及到的后缀1.9全部去掉,方便。再给gemrc文件里加上 gem: --no-ri --no-rdoc gemrc文件可以通过 $ strace gem 2>&1 | grep gemrc 找到在哪里。 还需要bundle来管理gems $ gem install bundler...

save the world

http://www.wechall.net/challenge/Z/save_the_world/index.php 这道题和ISG里的yaya用的是同样的思路,这里再复述一遍。 据说这个方法的名字是Hastad,但我觉得思路其实很简单: 用中国剩余定理找到c, 使得c%n1=c1, c%n2=c2, c%n3=c3 求c的立方根p #!/usr/bin/python2...

vortex15

这道题给了两个文件,一个是加密用的程序,另一个是加密后的文件。加密的方法很简单,就是读plaintext和8 bytes的密码,然后 cipher[i]=key[i%8] ^ (~plain[i]) 从文件后缀知道加密的文件是tar.Z格式,但.Z格式搜了下似乎最多3个bytes可以知道,但提示说了密码有8bytes,所以要暴力破解还是有点多…… 后来试了下压缩vortex15,这其中c...

build edb on x86

我想在32位的环境下用edb,按理来说是支持的,但编译时发现他认为是在64位下面……可能还是和chroot有关。在网上搜了半天也没找到什么好的结果,最后用的是笨办法,把src/src.pro和plugins/plugins.pri里面头文件路径都用成x86,再编译就可以了

vortex14

这道题提供了一个文件,是hexdump了server和client的通信 首先根据的个数及前后字符,我们判断出通信的流程是:server->client, client->server, server->client。这是因为我估计当前面是换行(\x0a),后面是空格时,才代表通信;否则是密文 开始想着是不是在第一次server把key传给client(应该是两个das...

SimpleVM

这是tiger给的一个ELF文件,普通用户似乎无法执行?以root执行后要输入东西,然后有判断 具体地,用readelf -a可以发现文件是比较畸形的。而且entry point还在mmap映射区域之外?但从网上搜的结果,映射时还是会映射page size的整数倍;而想这个文件区域13c7之后还有内容,也会被映射到内存。所以entry point处的内容为 hexdump -C -v -s...

vortex13

这道题和vortex12一样是猥琐流…… 题目说了栈还是不能执行,所以还是ROP。但这里陷入了思维定式,主要还是因为vortex12的影响,让我觉得还要修改got。但ROP不只是修改got,直接改返回地址也是可以的;而vortex12里也可以在主线程里改返回地址,但那样没用因为主线程已经去掉euid了。这道题的输入限制在20个字符,如果想修改got几乎是不可能的了…… 具体地,想要直接修...

vortex12

这道题和vortex8几乎是一样的,只是题目说了栈不能执行,所以只能ROP了。我开始还想用mprotect来恢复执行权限,但要传的参数里有\x00,比如地址必须是page size的倍数;而strcpy遇到\x00就停止了,所以最后没能用mprotect 思路还是和vortex8是一样的:在主线程里修改PLT,然后子线程里就调用了我们提供的函数,只是这里我们提供库函数system。 在主...

金陵科技杯信息安全大赛

做了漏洞利用类的第一题, Q11。反汇编发现是socket编程,那些enum实在是懒得找对应意思了,应该是socket(2,1,0)就开一个TCP 主要麻烦是只读5个字符,然后传给system()执行。看了下没发现溢出…… 后来想到可以利用重定向。一般来说连接过去的fd应该是4,于是执行sh<&4就会把我们的输入传给sh作为输入,但sh的输出没办法传回来 我先是试着用nc...

vortex11

这道题是在strawdog提示下做出来的。他也说其实可以不用去读phk代码,我连链接的文章都没看完…… 还是一步步来,打印变量的地址,发现第一次malloc(0x10)和malloc(0x800)之间相距0x1000+48。这0x1000用来放两个0x800,然后那48bytes应该就是一些信息了。 打印那部分内存,并对应到struct pginfo,void *page的地址正好是这个...