- semtex1
用控制变量法之类的,发现加密的方法,然后解密:
-
semtex2
devils number是666
通过提示,还是要用LD_PRELOAD。写一个c文件,定义函数geteuid,然后编译为库:
$ gcc -m32 --shared -fPIC preload.c -o preload.so
再定义LD_PRELOAD
- semtex3
相当于求一个线性方程组的整数解,用matlab穷举了,类似于
[i,j,k,m]=ndgrid(1:11);
n=find(i+j+k+m==11);
s=[i(n),j(n),k(n),m(n)]
最后得到各个数字的个数为2, 3, 1, 1, 3, 1, 2, 0。输入得到shell
-
semtex4
之前的一直都没有读的权限,到这里实在是不爽。在网上搜了下,找到一个用来dump内存的工具:xocopy。用它把semtex4转存下来,再用IDA分析。
由于dump之后的程序比较大(估计是把相关的库,或者是准备的函数什么的都存了),打开比较慢。我们直接查找字符串password,进到了一个函数里。检查调用这个函数的函数,可以知道这个就是main。然后我们直接看汇编,得到密码会一个个字符打出来
然后看了看其他人的解答,还是用ptrace修改eax的值来达到修改geteuid返回值的目的。由于geteuid的syscall是0xc9,当上一步eax是0xc9时,将eax改为6005。具体看http://0xbadc0de.org/blog/2013/11/17/wargame-semtex-4-solution/
-
semtex5
这里要求从10个不同的ip连过去。可以用localhost.
IPv4 network standards reserve the entire 127.0.0.0/8 address block for loopback purposes.
我们用10个thread,每个收10bytes,与密码xor之后,附加上一个共同的10bytes的id。最后某一个连接读密码。