记事本

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 这道题有两个注...

Behemoth2

这道题第一次做好像还用的是race condition,这次直接就是用PATH了。因为执行的命令都不是绝对路径,我们在当前文件夹下创建一个touch: #!/bin/shcat /etc/behemoth_pass/behemoth3 给他加上可执行权限,然后把当前路径(.)放在PATH的第一位。再执行behemoth2就会运行我们的touch

Behemoth1

这道题我开始试了半天想要invoke一个shell,都没成功。最后用的shellcode是读直接文件 首先,我们把shellcode存在环境变量里。 通过输出ebp地址,我们知道了其在xor esp, 0xfffffff0之前esp的值,进而知道输入的字符串距离返回地址的距离为79bytes 然后打印环境变量的地址,也就是shellcode的地址 我们把要读取的文件软链接到文件sol...

Behemoth0

先用ida反编译,发现输入的密码要与一段字符串比较,而字符串是memfrob作用在几个数拼接起来的,即 0x475e4b4f,0x45425953,0x00595e58。先获取拼接得到的字符串: echo -e "475e4b4f\n45425953\n595e58" | tac | xxd -r -p | rev 是OK^GSYBEX^Y 于是可获取密码: print(''.joi...

Warchall: Live RCE

http://www.wechall.net/challenge/warchall/live_rce/index.php 这道题开始试了半天,发现没有注入什么的……然后在网上搜php rce,发现了有这个问题:CVE-2012-1823 根据解释,如果query string中不包含未urlencoded的等号,那么整个query会以空格分词,传给php-cgi。于是我们传-s,就会把ph...

Bandit

bandit0 只需要ssh登陆即可,登陆后有文件readme bandit1 用刚才得到的密码登陆,要读一个文件名为-的文件。搜了下,开始有的说用--,这表示选项的结束,但我试了cat -- -不行,因为cat把-当作是stdin了 后来搜,发现直接./-就可以 bandit2 这次要读一个文件名包含空格的文件,直接用\ 就可以,实际上tab补全就这么做了……或者用...

Quangcurrency

http://www.wechall.net/challenge/quangcurrency/index.php 论坛里有提示,说是标题就是hint,从这个标题可以想到concurrency,虽然我是答完后看论坛才知道 具体的,click会将金额加1,也就是new = old + 1, set value = new;不自然的地方就在于,相比其他操作,click花的时间要长的多的多。所以,...

Impossible n’est pas français

http://www.wechall.net/challenge/impossible/index.php 这道题要求在6秒内分解一个超级大的整数,所以标题的名字都是”impossible” 这道题比较奇怪的一个地方是,如果你输入了错误的答案,他会把正确的答案告诉你,而这按理来说并不需要。于是从这里入手,发现即使答错,问题的整数还是没有变,这就给了我们再次尝试的机会。也就是说,先得到正确答...