- 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 python2
import sys
def convert(c):
res = []
n = ord(c)
i = 0
while i <= 7:
if n & 128: #negative
res.append('1')
else:
res.append('0')
i = i+1
n = (n<<1) & 255
return ''.join(res)
if __name__ == '__main__':
alpha = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM\x0a'
book = [convert(x) for x in alpha]
codes = sys.argv[1].split(' ')
res = []
for code in codes:
idx = book.index(code)
res.append(alpha[idx])
print ''.join(res)
- leviathan5
程序会输出某文件的内容,于是把目标文件链接到那里即可
- leviathan6
简单地比较数字