Leviathan

Posted by rk700 on July 6, 2014
  • 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
    简单地比较数字