第一个帖子在这里。我几个月前就接触过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。
答案 0 :(得分:1)
我相信,您会以某种方式将bytes
对象作为banner
参数传递给函数。
问题是banner.strip('\n')
–您应该删除字符串并删除字符串,或者使用banner.strip(b'\n')
删除字节(但稍后会遇到串联问题)。
混合字符串和原始字节通常是个坏主意,除非您知道自己在做什么。我建议您跟踪调用函数的位置和方式