- leviathan0
家目录下有个.backup文件夹,里面有一个bookmarks.html。直接用grep搜leviathan,得到密码 - leviathan1以其为结尾
反编译,发现只是简单地比较字符串,得到密码 - leviathan2
没发现溢出,单纯race condition的话又有点来不及,所以是command injection. 在当前目录下创建一个到目标文件的链接passwd->leviathan3,再创建一个文件名为anyfile;cat passwd
的文件。那么在system
执行的时候,命令注入,目标文件的内容会通过链接passwd获得 - leviathan3
是在do_stuff函数里,简单的字符串比较 - leviathan4
他会把密码的每个字符编码,然后输出。所以我们可以先构造码表,然后反推出密码。下面是python代码,其中字母表包括换行符,因为文件中可能以其为结尾
#!/usr/bin/env python2importsysdefconvert(c):res=[]n=ord(c)i=0whilei<=7:ifn&128:#negativeres.append('1')else:res.append('0')i=i+1n=(n<<1)&255return''.join(res)if__name__=='__main__':alpha='0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM\x0a'book=[convert(x)forxinalpha]codes=sys.argv[1].split(' ')res=[]forcodeincodes:idx=book.index(code)res.append(alpha[idx])print''.join(res)
- leviathan5
程序会输出某文件的内容,于是把目标文件链接到那里即可 - leviathan6
简单地比较数字