当前位置: 代码迷 >> python >> Python脚本不打印字符串
  详细解决方案

Python脚本不打印字符串

热度:72   发布时间:2023-07-16 10:06:47.0

我忘记了dlink DCS-930L IP摄像机的密码。 在线搜索后,我遇到了一个身份验证绕过漏洞,如此 。

我能够同时获取编码的配置(包含管理员密码)。

但是,我在使python脚本(可解码配置文件)正常工作方面遇到问题。 这是我到目前为止所拥有的:

#!/usr/bin/python


# 'data' holds the content of the obfuscated configuration file

data1 = open('/root/Desktop/data', 'r')
data = data1.readlines()


def deobfuscate(data):
    r = []
    for c in data:
        c = ord(c)
        c = (c + ord('y')) & 0xff
        c = (c ^ ord('Z')) & 0xff
        c = (c - ord('e')) & 0xff
        r.append(c)
    tmp = None
    i = len(r) - 1
    while i >= 0:
        if i == len(r) - 1:
            x = r[i]
            tmp = ((x & 7) << 5) & 0xff

        if i == 0:
            assert tmp is not None
            x = r[0]
            x = (x >> 3) & 0xff
            x = (x + tmp) & 0xff
            r[0] = x
        else:
            c1 = r[i-1]
            c2 = r[i]
            c1 = c1 & 0x7
            c2 = (c2 >> 3) & 0xff
            c1 = (c1 << 5) & 0xff
            c2 = (c2 + c1) & 0xff
            r[i] = c2
        i = i - 1

    r = "".join([chr(x) for x in r])

    s = ""
    assert (len(r) % 2) == 0
    for i in range(len(r)/2):
        s += r[i+(len(r)/2)] + r[i]

    return s
    print s


deobfuscate(data)

每次我运行脚本时,都没有输出。 在这一点上,我不确定脚本是否正常运行,是否只是打印问题,或者脚本是否存在较大问题。

非常感谢您的协助。

问题在于return语句始终是方法中执行的最后一件事。 return语句之后的任何事情都不会发生。

开关:

return s
print s

至:

print s
return s

或者,您可以打印方法的返回值:

print deobfuscate(data)

另一个问题:看来您正在以字符串列表( data1.readlines() )的形式读取文件,但是去混淆函数需要单个字符串。

您的代码应该是

INPUT = '/root/Desktop/data'

def deobfuscate(data):
    r = []
    for c in data:
        c = ord(c)
        c = (c + ord('y')) & 0xff
        c = (c ^ ord('Z')) & 0xff
        c = (c - ord('e')) & 0xff
        r.append(c)
    tmp = None
    i = len(r) - 1
    while i >= 0:
        if i == len(r) - 1:
            x = r[i]
            tmp = ((x & 7) << 5) & 0xff

        if i == 0:
            assert tmp is not None
            x = r[0]
            x = (x >> 3) & 0xff
            x = (x + tmp) & 0xff
            r[0] = x
        else:
            c1 = r[i-1]
            c2 = r[i]
            c1 = c1 & 0x7
            c2 = (c2 >> 3) & 0xff
            c1 = (c1 << 5) & 0xff
            c2 = (c2 + c1) & 0xff
            r[i] = c2
        i = i - 1

    r = "".join([chr(x) for x in r])

    s = ""
    assert (len(r) % 2) == 0
    for i in range(len(r)/2):
        s += r[i+(len(r)/2)] + r[i]

    return s

def main():
    with open(INPUT) as inf:
        data = inf.read()

    print(deobfuscate(data))

if __name__=="__main__":
    main()

...实际上,应该清除deobfuscate某些代码,但是由于没有可测试的数据,我不想过多地讨论它。