【问题标题】:Regarding "TypeError: a bytes-like object is required, not 'str'"关于“TypeError:需要一个类似字节的对象,而不是'str'”
【发布时间】:2019-02-11 23:28:34
【问题描述】:

第一次发帖。几个月前我接触了python。我一直在阅读 Syngress 的《Violent Python》一书。

制作了一个 txt 文件,列出了几个版本的 vsFTPd,保存为 vuln_banners.txt。它只是一个 txt 文件中几行的列表。

我做错了什么?如果这是一个愚蠢的问题或非常初级/愚蠢的问题,我深表歉意。感谢任何形式的帮助。

运行代码后我得到了这个回溯错误:

Traceback (most recent call last):
  File "ban_grab2.py", line 33, in <module>
    main()
  File "ban_grab2.py", line 29, in main
    checkVulns(banner)
  File "ban_grab2.py", line 18, in checkVulns
    if line.strip('\n') in banner:
TypeError: a bytes-like object is required, not 'str'

下面是有问题的代码部分:

def checkVulns(banner):
    f = open('vuln_banners.txt', 'r')
    for line in f.readlines():
        if line.strip('\n') in banner:
            print('[+] Service is vulnerable: ' + banner.strip('\n'))

如果这有助于更好地了解情况,这是完整的脚本:

import socket


def retBanner(ip, port):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, port))
        socket.setdefaulttimeout(2)
        banner = s.recv(1024)
        return banner
    except:
        return


def checkVulns(banner):
    f = open('vuln_banners.txt', 'r')
    for line in f.readlines():
        if line.strip('\n') in banner:
            print('[+] Service is vulnerable: ', + banner.strip('\n')


def main():
    portList = [21, 22, 25, 80, 110, 443]
    for r in range(1, 255):
        ip = '192.168.0.' + str(r)
        for port in portList:
            banner = retBanner(ip, port)
            if banner:
                checkVulns(banner)
                print('[+] ' + ip + ': ' + str(banner))


main()

这个脚本没什么了不起,只是在我的虚拟网络中使用它来进行 POC。

【问题讨论】:

    标签: python python-3.x security


    【解决方案1】:

    我相信,不知何故,您将 bytes 对象作为 banner 参数传递给您的函数。

    问题是banner.strip('\n') - 要么你应该有字符串并从其中剥离字符串,要么使用banner.strip(b'\n') 剥离字节(但稍后你会遇到连接问题)。

    混合字符串和原始字节通常是个坏主意,除非您知道自己在做什么。我建议您跟踪调用函数的位置和方式

    【讨论】:

    • 感谢您的意见。我会接受你所说的并尝试解决这个问题并解决它。
    • 我编辑了原始帖子以显示正在发生的事情的全部范围。仍然得到与上图相同的错误。我不确定我做错了什么。我尝试在banner.strip(b'\n') 中添加“b”以剥离字节,但这似乎不起作用。 '你应该有绳子并从它身上剥下绳子'是什么意思?感谢您的帮助,不胜感激。
    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多