개발 환경
파이썬 언어
유닉스 패스워드 크래커
압축파일 패스워드 크래커
포트 스캐너
SSH 봇넷
컨피커
제로데이
포렌식 수사
레즈스트리의 무선 AP 분석
삭제된 아이템 복구하기
메타데이터
애플리케이션 사용흔적 수사
iTunes 백업 조사하기
네트워크 트래픽 분석
IP 트래픽의 목적지는?
어나니머스가 정말 익명인 것일까?
TTL 필드
도메인 플럭스
TCP 일련 번호 예측 공격
IDS 공격하기
무선 기기 해킹
WALL OF SHEEP
노트북 컴퓨터를 사용한 곳은?
파이썬으로 UAV 제어하기
FIRESHEEP 탐지하기
블루투스와 파이썬으로 스토킹하기
정보수집
오늘날의 사회공학기법
MECHANIZE 라이브러리로 인터넷 검색
ANONBROWSER로 웹 페이지 정보 수집
구글 API 사용하기
익명의 이메일
백신 프로그램 우회
파이썬 인터프리터, 표준 라이브러리
자체 데이터 타입
예외 처리
숫자와 수학 모듈
파일 처리
암호화 서비스
운영체제와의 상호 호환성
인터넷 데이터 처리
IP 프로토콜 처리
손쉽게 외부 패키지 설치
sudo pip install python-nmap pygeoip mechanize beautifulsoup4
# .py 확장자를 가진 파일 실행 모드
# >는 리다이렉션 기호: 파일 저장하는 것
!echo print \"Hello World\" > ch01/hello.py
!python ch01/hello.py
Hello World
!cat ch01/hello.py
print "Hello World"
# Interactive 모드.
# ipython notebook이 좋은 예
print 'Hello World1111'
Hello World1111
변수
데이터 타입
문자열
복잡한 데이터 구조
네트워크
선택
반복문
파일 처리
예외 처리
운영체계와의 상호운영성
설명할 것임
이 스크립트는 TCP 소켓에 연결하여 서비스의 배너를 읽고, 이미 알려진 취약한 서비스 버전의 배너와 읽어온 배너를 비교하는 간단한 취약점 스캐너
port = 21
port
21
banner = 'FreeFloat FTP Server'
print '\''
'
print '[+] Checking for ' + banner + ' on port ' + port
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-8-16abb4da8df8> in <module>() ----> 1 print '[+] Checking for ' + banner + ' on port ' + port TypeError: cannot concatenate 'str' and 'int' objects
print '[+] Checking for ' + banner + ' on port ' + str(port)
type(banner)
str
type(port)
int
type(str(port))
str
portList = [21, 22, 80, 110] # A list
type(portList)
list
portList2 = [21, 22, 80, 110, 'string'] # A list
portList2
[21, 22, 80, 110, 'string']
portOpen = True # A boolean
type(portOpen)
bool
banner
'FreeFloat FTP Server'
# string에서 어떤 메소드들을 사용할 수 있는지 알려줌
dir(banner)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
banner
'FreeFloat FTP Server'
# 대문자로 변경
print banner.upper()
FREEFLOAT FTP SERVER
# 소문자로 변경
print banner.lower()
freefloat ftp server
# 문자열 변경
print banner.replace('FreeFloat', 'Ability')
Ability FTP Server
# 문자열 찾기
print banner.find('FTP')
10
# 문자열을 찾지 못했을 때
print banner.find('FTP2')
-1
print banner.index('FTP')
10
print banner.index('FTP2')
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-26-4c522c40d66a> in <module>() ----> 1 print banner.index('FTP2') ValueError: substring not found
portList = []
portList
[]
portList.append(21)
portList
[21]
portList.append(80)
portList.append(443)
portList.append(25)
portList
[21, 80, 443, 25]
# 이 list 자체가 정렬이 되버려서 내가 원하는 작업을 할지 못할 때가 있다.
# 이 때는 slice를 이용해서 복사해야 한다.
portList.sort()
portList
[21, 25, 80, 443]
portList10 = [21, 80, 443, 25]
portList10
[21, 80, 443, 25]
portList11 = portList10
portList11
[21, 80, 443, 25]
# 객체의 참조가 복사되어서 모두 동시에 바뀌는 것을 알 수 있다.
# 쉽게 이야기하면 객체의 주소가 전달되어 portList11과 portList10이 동일한 객체를 가르키게 되는것
portList11.sort()
print 'portList11 ', portList11
print 'portList10 ', portList10
portList11 [21, 25, 80, 443] portList10 [21, 25, 80, 443]
portList2 = [21, 80, 443, 25]
portList2
[21, 80, 443, 25]
# slice 연산자인 :를 사용하면 복사가 이루어진다.
portList3 = portList2[:]
portList3.sort()
print 'portList3 ', portList3
print 'portList2 ', portList2
portList3 [21, 25, 80, 443] portList2 [21, 80, 443, 25]
portList2[:]
[21, 80, 443, 25]
# slice
# 시작 index(포함): 끝 index(미포함)
portList2[0:2]
[21, 80]
portList2
[21, 80, 443, 25]
portList2[1:3]
[80, 443]
# sorting 되어진 상태
portList
[21, 25, 80, 443]
pos = portList.index(80)
pos
2
type(pos)
int
print '[+] There are ' + str(pos) + ' ports to scan before 80.'
[+] There are 2 ports to scan before 80.
print '[+] There are ' + pos + ' ports to scan before 80.'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-50-3db9260fdcfd> in <module>() ----> 1 print '[+] There are ' + pos + ' ports to scan before 80.' TypeError: cannot concatenate 'str' and 'int' objects
portList
[21, 25, 80, 443]
portList.remove(443)
print portList
[21, 25, 80]
cnt = len(portList)
help(len)
Help on built-in function len in module __builtin__: len(...) len(object) -> integer Return the number of items of a sequence or mapping.
len?
print '[+] Scanning ' + str(cnt) + ' Total Ports.'
[+] Scanning 3 Total Ports.
# key: value
# 콤마를 기준으로 나뉜다.
services = {'ftp': 21,
'ssh': 22,
'smtp': 25,
'http': 80}
# 정렬이 뒤죽박죽이 되어 있습니다.
# 내부적으로 해쉬값으로 저장이 되기 때문에 사용자들이 어떻게 할 수 없습니다.
services
{'ftp': 21, 'http': 80, 'smtp': 25, 'ssh': 22}
type(services)
dict
services.keys()
['ftp', 'smtp', 'ssh', 'http']
services.values()
[21, 25, 22, 80]
# items를 사용하면 key, value를 튜플 형태로 돌려준다.
services.items()
[('ftp', 21), ('smtp', 25), ('ssh', 22), ('http', 80)]
l = [1,2]
l
[1, 2]
l[0] = 5
l
[5, 2]
t = (1, 3)
t
(1, 3)
t[0] = 5
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-70-8d3d8637cb4b> in <module>() ----> 1 t[0] = 5 TypeError: 'tuple' object does not support item assignment
# 전체는 list
type(services.items())
list
# 그 안에 요소들은 tuple
type(services.items()[0])
tuple
services.items()[0]
('ftp', 21)
# key값으로 접근 가능
services['ftp']
21
# 아까와 똑같지만 services 라는 dictionary를 활용하니
# ftp라는 name만 알면 port를 자동으로 넣을 수가 있다.
print '[+] Found vuln with FTP on port ' + str(services['ftp'])
[+] Found vuln with FTP on port 21
import socket
socket.setdefaulttimeout(5)
socket.setdefaulttimeout?
# socket 클래스로부터 새로운 변수 s 생성
s = socket.socket()
my_local_ftp = '172.16.190.128'
my_local_ftp = '192.168.32.159'
# ftp 서버로 접속
# 책에는 s.connect(('172.16.190.128', 21))로 써져 있는데 항상 변수를 쓰는 습관을 갖자.
s.connect((my_local_ftp, 21))
!telnet 192.168.32.159 21
Trying 192.168.32.159... Connected to 192.168.32.159. Escape character is '^]'. 220 FreeFloat Ftp Server (Version 1.00) ^C
ans = s.recv(1024)
print ans
220 FreeFloat Ftp Server (Version 1.00)
ans
'220 FreeFloat Ftp Server (Version 1.00)\r\n'
'FreeFloat Ftp Server (Version 1.00)' in ans
True
'FreeFloat Ftp Server (Version 1.00)2' in ans
False
# 자.. if, elif, else문이다.
# 뭔가 똑같은게 반복이 되는게 느껴진다..
if ('FreeFloat Ftp Server (Version 1.00)' in ans):
print '[+] FreeFloat FTP Server is vulnerable.'
elif ('3Com 3CDaemon FTP Server Version 2.0' in ans):
print '[+] 3CDaemon FTP Server is vulnerable.'
elif ('Ability Server 2.34' in ans):
print '[+] Ability FTP Server is vulnerable.'
elif ('Sami FTP Server 2.0.2' in ans):
print '+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
[+] FreeFloat FTP Server is vulnerable.
print 1337/0
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-126-9d0ad8dd7974> in <module>() ----> 1 print 1337/0 ZeroDivisionError: integer division or modulo by zero
# ZeroDivisionError가 안 뜨고 except 처리되어 에러 메시지가 출력된걸 확인할 수 있다.
try:
print '[+] 1337 / 0 = ' + str(1337 / 0)
except:
print '[-] Error.'
[-] Error.
# Exception, e를 추가함으로써 어떤 오류 메시지가 발생했는지 알려줌
try:
print '[+] 1337/0 = ' + str(1337/0)
except Exception, e:
print '[-] Error = ' + str(e)
[-] Error = integer division or modulo by zero
import socket
socket.setdefaulttimeout(2)
s = socket.socket()
try:
s.connect(('1.1.1.1', 21))
except Exception, e:
print '[-] Error = ' + str(e)
[-] Error = timed out
# FTP 서버에 연결하여 배너를 반환하는 함수
import socket
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def main():
ip1 = '192.168.32.159'
ip2 = '172.16.190.129'
port = 21
banner1 = retBanner(ip1, port)
if banner1:
print '[+] ' + ip1 + ': ' + banner1
banner2 = retBanner(ip2, port)
if banner2:
print '[+] ' + ip2 + ': ' + banner2
if __name__ == '__main__':
main()
[+] 192.168.32.159: 220 FreeFloat Ftp Server (Version 1.00)
banner2 = None
print banner2
None
if banner2:
print 'I have a True'
else:
print 'I have a False'
I have a False
%%writefile main_test.py
def main():
print 'echo: __name__ is', __name__
main()
Writing main_test.py
%%writefile main_test2.py
def main():
print 'echo: __name__ is', __name__
if __name__ == '__main__':
main()
Writing main_test2.py
import main_test
reload(main_test)
echo: __name__ is main_test
<module 'main_test' from 'main_test.pyc'>
reload(main_test2)
<module 'main_test2' from 'main_test2.pyc'>
!python ch01/main_test.py
echo: __name__ is __main__
!python ch01/main_test2.py
echo: __name__ is __main__
# !ls
# !ls ch01
# FTP 서버에 연결하여 배너를 반환하는 함수
# 여기에서도 뭔가 반복되는게 feel 이 와야된다..
import socket
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner):
if ('FreeFloat Ftp Server (Version 1.00)' in banner):
print '[+] FreeFloat FTP Server is vulnerable.'
elif ('3Com 3CDaemon FTP Server Version 2.0' in banner):
print '[+] 3CDaemon FTP Server is vulnerable.'
elif ('Ability Server 2.34' in banner):
print '[+] Ability FTP Server is vulnerable.'
elif ('Sami FTP Server 2.0.2' in banner):
print '+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
return
def main():
ip1 = '192.168.32.159'
ip2 = '172.16.190.129'
ip3 = '172.16.190.130'
port = 21
banner1 = retBanner(ip1, port)
if banner1:
print '[+] ' + ip1 + ': ' + banner1
checkVulns(banner1)
banner2 = retBanner(ip2, port)
if banner2:
print '[+] ' + ip2 + ': ' + banner2
checkVulns(banner2)
banner3 = retBanner(ip3, port)
if banner3:
print '[+] ' + ip3 + ': ' + banner3
checkVulns(banner3)
if __name__ == '__main__':
main()
[+] 192.168.32.159: 220 FreeFloat Ftp Server (Version 1.00) [+] FreeFloat FTP Server is vulnerable.
# range 함수는 처음 값인 1은 포함하지만 마지막 값인 255는 포함하지 않는다.
# 1 <= x < 255 라고 볼 수 있다.
# 1 <= x <= 254
for x in range(1, 255):
print '192.168.32.' + str(x)
192.168.32.1 192.168.32.2 192.168.32.3 192.168.32.4 192.168.32.5 192.168.32.6 192.168.32.7 192.168.32.8 192.168.32.9 192.168.32.10 192.168.32.11 192.168.32.12 192.168.32.13 192.168.32.14 192.168.32.15 192.168.32.16 192.168.32.17 192.168.32.18 192.168.32.19 192.168.32.20 192.168.32.21 192.168.32.22 192.168.32.23 192.168.32.24 192.168.32.25 192.168.32.26 192.168.32.27 192.168.32.28 192.168.32.29 192.168.32.30 192.168.32.31 192.168.32.32 192.168.32.33 192.168.32.34 192.168.32.35 192.168.32.36 192.168.32.37 192.168.32.38 192.168.32.39 192.168.32.40 192.168.32.41 192.168.32.42 192.168.32.43 192.168.32.44 192.168.32.45 192.168.32.46 192.168.32.47 192.168.32.48 192.168.32.49 192.168.32.50 192.168.32.51 192.168.32.52 192.168.32.53 192.168.32.54 192.168.32.55 192.168.32.56 192.168.32.57 192.168.32.58 192.168.32.59 192.168.32.60 192.168.32.61 192.168.32.62 192.168.32.63 192.168.32.64 192.168.32.65 192.168.32.66 192.168.32.67 192.168.32.68 192.168.32.69 192.168.32.70 192.168.32.71 192.168.32.72 192.168.32.73 192.168.32.74 192.168.32.75 192.168.32.76 192.168.32.77 192.168.32.78 192.168.32.79 192.168.32.80 192.168.32.81 192.168.32.82 192.168.32.83 192.168.32.84 192.168.32.85 192.168.32.86 192.168.32.87 192.168.32.88 192.168.32.89 192.168.32.90 192.168.32.91 192.168.32.92 192.168.32.93 192.168.32.94 192.168.32.95 192.168.32.96 192.168.32.97 192.168.32.98 192.168.32.99 192.168.32.100 192.168.32.101 192.168.32.102 192.168.32.103 192.168.32.104 192.168.32.105 192.168.32.106 192.168.32.107 192.168.32.108 192.168.32.109 192.168.32.110 192.168.32.111 192.168.32.112 192.168.32.113 192.168.32.114 192.168.32.115 192.168.32.116 192.168.32.117 192.168.32.118 192.168.32.119 192.168.32.120 192.168.32.121 192.168.32.122 192.168.32.123 192.168.32.124 192.168.32.125 192.168.32.126 192.168.32.127 192.168.32.128 192.168.32.129 192.168.32.130 192.168.32.131 192.168.32.132 192.168.32.133 192.168.32.134 192.168.32.135 192.168.32.136 192.168.32.137 192.168.32.138 192.168.32.139 192.168.32.140 192.168.32.141 192.168.32.142 192.168.32.143 192.168.32.144 192.168.32.145 192.168.32.146 192.168.32.147 192.168.32.148 192.168.32.149 192.168.32.150 192.168.32.151 192.168.32.152 192.168.32.153 192.168.32.154 192.168.32.155 192.168.32.156 192.168.32.157 192.168.32.158 192.168.32.159 192.168.32.160 192.168.32.161 192.168.32.162 192.168.32.163 192.168.32.164 192.168.32.165 192.168.32.166 192.168.32.167 192.168.32.168 192.168.32.169 192.168.32.170 192.168.32.171 192.168.32.172 192.168.32.173 192.168.32.174 192.168.32.175 192.168.32.176 192.168.32.177 192.168.32.178 192.168.32.179 192.168.32.180 192.168.32.181 192.168.32.182 192.168.32.183 192.168.32.184 192.168.32.185 192.168.32.186 192.168.32.187 192.168.32.188 192.168.32.189 192.168.32.190 192.168.32.191 192.168.32.192 192.168.32.193 192.168.32.194 192.168.32.195 192.168.32.196 192.168.32.197 192.168.32.198 192.168.32.199 192.168.32.200 192.168.32.201 192.168.32.202 192.168.32.203 192.168.32.204 192.168.32.205 192.168.32.206 192.168.32.207 192.168.32.208 192.168.32.209 192.168.32.210 192.168.32.211 192.168.32.212 192.168.32.213 192.168.32.214 192.168.32.215 192.168.32.216 192.168.32.217 192.168.32.218 192.168.32.219 192.168.32.220 192.168.32.221 192.168.32.222 192.168.32.223 192.168.32.224 192.168.32.225 192.168.32.226 192.168.32.227 192.168.32.228 192.168.32.229 192.168.32.230 192.168.32.231 192.168.32.232 192.168.32.233 192.168.32.234 192.168.32.235 192.168.32.236 192.168.32.237 192.168.32.238 192.168.32.239 192.168.32.240 192.168.32.241 192.168.32.242 192.168.32.243 192.168.32.244 192.168.32.245 192.168.32.246 192.168.32.247 192.168.32.248 192.168.32.249 192.168.32.250 192.168.32.251 192.168.32.252 192.168.32.253 192.168.32.254
2**8
256
portList = [21, 22, 25, 80, 110]
for port in portList:
print port
21 22 25 80 110
for x in range(1, 255):
for port in portList:
print '[+] Checking 192.168.32.' + str(x) + ': ' + str(port)
[+] Checking 192.168.32.1: 21 [+] Checking 192.168.32.1: 22 [+] Checking 192.168.32.1: 25 [+] Checking 192.168.32.1: 80 [+] Checking 192.168.32.1: 110 [+] Checking 192.168.32.2: 21 [+] Checking 192.168.32.2: 22 [+] Checking 192.168.32.2: 25 [+] Checking 192.168.32.2: 80 [+] Checking 192.168.32.2: 110 [+] Checking 192.168.32.3: 21 [+] Checking 192.168.32.3: 22 [+] Checking 192.168.32.3: 25 [+] Checking 192.168.32.3: 80 [+] Checking 192.168.32.3: 110 [+] Checking 192.168.32.4: 21 [+] Checking 192.168.32.4: 22 [+] Checking 192.168.32.4: 25 [+] Checking 192.168.32.4: 80 [+] Checking 192.168.32.4: 110 [+] Checking 192.168.32.5: 21 [+] Checking 192.168.32.5: 22 [+] Checking 192.168.32.5: 25 [+] Checking 192.168.32.5: 80 [+] Checking 192.168.32.5: 110 [+] Checking 192.168.32.6: 21 [+] Checking 192.168.32.6: 22 [+] Checking 192.168.32.6: 25 [+] Checking 192.168.32.6: 80 [+] Checking 192.168.32.6: 110 [+] Checking 192.168.32.7: 21 [+] Checking 192.168.32.7: 22 [+] Checking 192.168.32.7: 25 [+] Checking 192.168.32.7: 80 [+] Checking 192.168.32.7: 110 [+] Checking 192.168.32.8: 21 [+] Checking 192.168.32.8: 22 [+] Checking 192.168.32.8: 25 [+] Checking 192.168.32.8: 80 [+] Checking 192.168.32.8: 110 [+] Checking 192.168.32.9: 21 [+] Checking 192.168.32.9: 22 [+] Checking 192.168.32.9: 25 [+] Checking 192.168.32.9: 80 [+] Checking 192.168.32.9: 110 [+] Checking 192.168.32.10: 21 [+] Checking 192.168.32.10: 22 [+] Checking 192.168.32.10: 25 [+] Checking 192.168.32.10: 80 [+] Checking 192.168.32.10: 110 [+] Checking 192.168.32.11: 21 [+] Checking 192.168.32.11: 22 [+] Checking 192.168.32.11: 25 [+] Checking 192.168.32.11: 80 [+] Checking 192.168.32.11: 110 [+] Checking 192.168.32.12: 21 [+] Checking 192.168.32.12: 22 [+] Checking 192.168.32.12: 25 [+] Checking 192.168.32.12: 80 [+] Checking 192.168.32.12: 110 [+] Checking 192.168.32.13: 21 [+] Checking 192.168.32.13: 22 [+] Checking 192.168.32.13: 25 [+] Checking 192.168.32.13: 80 [+] Checking 192.168.32.13: 110 [+] Checking 192.168.32.14: 21 [+] Checking 192.168.32.14: 22 [+] Checking 192.168.32.14: 25 [+] Checking 192.168.32.14: 80 [+] Checking 192.168.32.14: 110 [+] Checking 192.168.32.15: 21 [+] Checking 192.168.32.15: 22 [+] Checking 192.168.32.15: 25 [+] Checking 192.168.32.15: 80 [+] Checking 192.168.32.15: 110 [+] Checking 192.168.32.16: 21 [+] Checking 192.168.32.16: 22 [+] Checking 192.168.32.16: 25 [+] Checking 192.168.32.16: 80 [+] Checking 192.168.32.16: 110 [+] Checking 192.168.32.17: 21 [+] Checking 192.168.32.17: 22 [+] Checking 192.168.32.17: 25 [+] Checking 192.168.32.17: 80 [+] Checking 192.168.32.17: 110 [+] Checking 192.168.32.18: 21 [+] Checking 192.168.32.18: 22 [+] Checking 192.168.32.18: 25 [+] Checking 192.168.32.18: 80 [+] Checking 192.168.32.18: 110 [+] Checking 192.168.32.19: 21 [+] Checking 192.168.32.19: 22 [+] Checking 192.168.32.19: 25 [+] Checking 192.168.32.19: 80 [+] Checking 192.168.32.19: 110 [+] Checking 192.168.32.20: 21 [+] Checking 192.168.32.20: 22 [+] Checking 192.168.32.20: 25 [+] Checking 192.168.32.20: 80 [+] Checking 192.168.32.20: 110 [+] Checking 192.168.32.21: 21 [+] Checking 192.168.32.21: 22 [+] Checking 192.168.32.21: 25 [+] Checking 192.168.32.21: 80 [+] Checking 192.168.32.21: 110 [+] Checking 192.168.32.22: 21 [+] Checking 192.168.32.22: 22 [+] Checking 192.168.32.22: 25 [+] Checking 192.168.32.22: 80 [+] Checking 192.168.32.22: 110 [+] Checking 192.168.32.23: 21 [+] Checking 192.168.32.23: 22 [+] Checking 192.168.32.23: 25 [+] Checking 192.168.32.23: 80 [+] Checking 192.168.32.23: 110 [+] Checking 192.168.32.24: 21 [+] Checking 192.168.32.24: 22 [+] Checking 192.168.32.24: 25 [+] Checking 192.168.32.24: 80 [+] Checking 192.168.32.24: 110 [+] Checking 192.168.32.25: 21 [+] Checking 192.168.32.25: 22 [+] Checking 192.168.32.25: 25 [+] Checking 192.168.32.25: 80 [+] Checking 192.168.32.25: 110 [+] Checking 192.168.32.26: 21 [+] Checking 192.168.32.26: 22 [+] Checking 192.168.32.26: 25 [+] Checking 192.168.32.26: 80 [+] Checking 192.168.32.26: 110 [+] Checking 192.168.32.27: 21 [+] Checking 192.168.32.27: 22 [+] Checking 192.168.32.27: 25 [+] Checking 192.168.32.27: 80 [+] Checking 192.168.32.27: 110 [+] Checking 192.168.32.28: 21 [+] Checking 192.168.32.28: 22 [+] Checking 192.168.32.28: 25 [+] Checking 192.168.32.28: 80 [+] Checking 192.168.32.28: 110 [+] Checking 192.168.32.29: 21 [+] Checking 192.168.32.29: 22 [+] Checking 192.168.32.29: 25 [+] Checking 192.168.32.29: 80 [+] Checking 192.168.32.29: 110 [+] Checking 192.168.32.30: 21 [+] Checking 192.168.32.30: 22 [+] Checking 192.168.32.30: 25 [+] Checking 192.168.32.30: 80 [+] Checking 192.168.32.30: 110 [+] Checking 192.168.32.31: 21 [+] Checking 192.168.32.31: 22 [+] Checking 192.168.32.31: 25 [+] Checking 192.168.32.31: 80 [+] Checking 192.168.32.31: 110 [+] Checking 192.168.32.32: 21 [+] Checking 192.168.32.32: 22 [+] Checking 192.168.32.32: 25 [+] Checking 192.168.32.32: 80 [+] Checking 192.168.32.32: 110 [+] Checking 192.168.32.33: 21 [+] Checking 192.168.32.33: 22 [+] Checking 192.168.32.33: 25 [+] Checking 192.168.32.33: 80 [+] Checking 192.168.32.33: 110 [+] Checking 192.168.32.34: 21 [+] Checking 192.168.32.34: 22 [+] Checking 192.168.32.34: 25 [+] Checking 192.168.32.34: 80 [+] Checking 192.168.32.34: 110 [+] Checking 192.168.32.35: 21 [+] Checking 192.168.32.35: 22 [+] Checking 192.168.32.35: 25 [+] Checking 192.168.32.35: 80 [+] Checking 192.168.32.35: 110 [+] Checking 192.168.32.36: 21 [+] Checking 192.168.32.36: 22 [+] Checking 192.168.32.36: 25 [+] Checking 192.168.32.36: 80 [+] Checking 192.168.32.36: 110 [+] Checking 192.168.32.37: 21 [+] Checking 192.168.32.37: 22 [+] Checking 192.168.32.37: 25 [+] Checking 192.168.32.37: 80 [+] Checking 192.168.32.37: 110 [+] Checking 192.168.32.38: 21 [+] Checking 192.168.32.38: 22 [+] Checking 192.168.32.38: 25 [+] Checking 192.168.32.38: 80 [+] Checking 192.168.32.38: 110 [+] Checking 192.168.32.39: 21 [+] Checking 192.168.32.39: 22 [+] Checking 192.168.32.39: 25 [+] Checking 192.168.32.39: 80 [+] Checking 192.168.32.39: 110 [+] Checking 192.168.32.40: 21 [+] Checking 192.168.32.40: 22 [+] Checking 192.168.32.40: 25 [+] Checking 192.168.32.40: 80 [+] Checking 192.168.32.40: 110 [+] Checking 192.168.32.41: 21 [+] Checking 192.168.32.41: 22 [+] Checking 192.168.32.41: 25 [+] Checking 192.168.32.41: 80 [+] Checking 192.168.32.41: 110 [+] Checking 192.168.32.42: 21 [+] Checking 192.168.32.42: 22 [+] Checking 192.168.32.42: 25 [+] Checking 192.168.32.42: 80 [+] Checking 192.168.32.42: 110 [+] Checking 192.168.32.43: 21 [+] Checking 192.168.32.43: 22 [+] Checking 192.168.32.43: 25 [+] Checking 192.168.32.43: 80 [+] Checking 192.168.32.43: 110 [+] Checking 192.168.32.44: 21 [+] Checking 192.168.32.44: 22 [+] Checking 192.168.32.44: 25 [+] Checking 192.168.32.44: 80 [+] Checking 192.168.32.44: 110 [+] Checking 192.168.32.45: 21 [+] Checking 192.168.32.45: 22 [+] Checking 192.168.32.45: 25 [+] Checking 192.168.32.45: 80 [+] Checking 192.168.32.45: 110 [+] Checking 192.168.32.46: 21 [+] Checking 192.168.32.46: 22 [+] Checking 192.168.32.46: 25 [+] Checking 192.168.32.46: 80 [+] Checking 192.168.32.46: 110 [+] Checking 192.168.32.47: 21 [+] Checking 192.168.32.47: 22 [+] Checking 192.168.32.47: 25 [+] Checking 192.168.32.47: 80 [+] Checking 192.168.32.47: 110 [+] Checking 192.168.32.48: 21 [+] Checking 192.168.32.48: 22 [+] Checking 192.168.32.48: 25 [+] Checking 192.168.32.48: 80 [+] Checking 192.168.32.48: 110 [+] Checking 192.168.32.49: 21 [+] Checking 192.168.32.49: 22 [+] Checking 192.168.32.49: 25 [+] Checking 192.168.32.49: 80 [+] Checking 192.168.32.49: 110 [+] Checking 192.168.32.50: 21 [+] Checking 192.168.32.50: 22 [+] Checking 192.168.32.50: 25 [+] Checking 192.168.32.50: 80 [+] Checking 192.168.32.50: 110 [+] Checking 192.168.32.51: 21 [+] Checking 192.168.32.51: 22 [+] Checking 192.168.32.51: 25 [+] Checking 192.168.32.51: 80 [+] Checking 192.168.32.51: 110 [+] Checking 192.168.32.52: 21 [+] Checking 192.168.32.52: 22 [+] Checking 192.168.32.52: 25 [+] Checking 192.168.32.52: 80 [+] Checking 192.168.32.52: 110 [+] Checking 192.168.32.53: 21 [+] Checking 192.168.32.53: 22 [+] Checking 192.168.32.53: 25 [+] Checking 192.168.32.53: 80 [+] Checking 192.168.32.53: 110 [+] Checking 192.168.32.54: 21 [+] Checking 192.168.32.54: 22 [+] Checking 192.168.32.54: 25 [+] Checking 192.168.32.54: 80 [+] Checking 192.168.32.54: 110 [+] Checking 192.168.32.55: 21 [+] Checking 192.168.32.55: 22 [+] Checking 192.168.32.55: 25 [+] Checking 192.168.32.55: 80 [+] Checking 192.168.32.55: 110 [+] Checking 192.168.32.56: 21 [+] Checking 192.168.32.56: 22 [+] Checking 192.168.32.56: 25 [+] Checking 192.168.32.56: 80 [+] Checking 192.168.32.56: 110 [+] Checking 192.168.32.57: 21 [+] Checking 192.168.32.57: 22 [+] Checking 192.168.32.57: 25 [+] Checking 192.168.32.57: 80 [+] Checking 192.168.32.57: 110 [+] Checking 192.168.32.58: 21 [+] Checking 192.168.32.58: 22 [+] Checking 192.168.32.58: 25 [+] Checking 192.168.32.58: 80 [+] Checking 192.168.32.58: 110 [+] Checking 192.168.32.59: 21 [+] Checking 192.168.32.59: 22 [+] Checking 192.168.32.59: 25 [+] Checking 192.168.32.59: 80 [+] Checking 192.168.32.59: 110 [+] Checking 192.168.32.60: 21 [+] Checking 192.168.32.60: 22 [+] Checking 192.168.32.60: 25 [+] Checking 192.168.32.60: 80 [+] Checking 192.168.32.60: 110 [+] Checking 192.168.32.61: 21 [+] Checking 192.168.32.61: 22 [+] Checking 192.168.32.61: 25 [+] Checking 192.168.32.61: 80 [+] Checking 192.168.32.61: 110 [+] Checking 192.168.32.62: 21 [+] Checking 192.168.32.62: 22 [+] Checking 192.168.32.62: 25 [+] Checking 192.168.32.62: 80 [+] Checking 192.168.32.62: 110 [+] Checking 192.168.32.63: 21 [+] Checking 192.168.32.63: 22 [+] Checking 192.168.32.63: 25 [+] Checking 192.168.32.63: 80 [+] Checking 192.168.32.63: 110 [+] Checking 192.168.32.64: 21 [+] Checking 192.168.32.64: 22 [+] Checking 192.168.32.64: 25 [+] Checking 192.168.32.64: 80 [+] Checking 192.168.32.64: 110 [+] Checking 192.168.32.65: 21 [+] Checking 192.168.32.65: 22 [+] Checking 192.168.32.65: 25 [+] Checking 192.168.32.65: 80 [+] Checking 192.168.32.65: 110 [+] Checking 192.168.32.66: 21 [+] Checking 192.168.32.66: 22 [+] Checking 192.168.32.66: 25 [+] Checking 192.168.32.66: 80 [+] Checking 192.168.32.66: 110 [+] Checking 192.168.32.67: 21 [+] Checking 192.168.32.67: 22 [+] Checking 192.168.32.67: 25 [+] Checking 192.168.32.67: 80 [+] Checking 192.168.32.67: 110 [+] Checking 192.168.32.68: 21 [+] Checking 192.168.32.68: 22 [+] Checking 192.168.32.68: 25 [+] Checking 192.168.32.68: 80 [+] Checking 192.168.32.68: 110 [+] Checking 192.168.32.69: 21 [+] Checking 192.168.32.69: 22 [+] Checking 192.168.32.69: 25 [+] Checking 192.168.32.69: 80 [+] Checking 192.168.32.69: 110 [+] Checking 192.168.32.70: 21 [+] Checking 192.168.32.70: 22 [+] Checking 192.168.32.70: 25 [+] Checking 192.168.32.70: 80 [+] Checking 192.168.32.70: 110 [+] Checking 192.168.32.71: 21 [+] Checking 192.168.32.71: 22 [+] Checking 192.168.32.71: 25 [+] Checking 192.168.32.71: 80 [+] Checking 192.168.32.71: 110 [+] Checking 192.168.32.72: 21 [+] Checking 192.168.32.72: 22 [+] Checking 192.168.32.72: 25 [+] Checking 192.168.32.72: 80 [+] Checking 192.168.32.72: 110 [+] Checking 192.168.32.73: 21 [+] Checking 192.168.32.73: 22 [+] Checking 192.168.32.73: 25 [+] Checking 192.168.32.73: 80 [+] Checking 192.168.32.73: 110 [+] Checking 192.168.32.74: 21 [+] Checking 192.168.32.74: 22 [+] Checking 192.168.32.74: 25 [+] Checking 192.168.32.74: 80 [+] Checking 192.168.32.74: 110 [+] Checking 192.168.32.75: 21 [+] Checking 192.168.32.75: 22 [+] Checking 192.168.32.75: 25 [+] Checking 192.168.32.75: 80 [+] Checking 192.168.32.75: 110 [+] Checking 192.168.32.76: 21 [+] Checking 192.168.32.76: 22 [+] Checking 192.168.32.76: 25 [+] Checking 192.168.32.76: 80 [+] Checking 192.168.32.76: 110 [+] Checking 192.168.32.77: 21 [+] Checking 192.168.32.77: 22 [+] Checking 192.168.32.77: 25 [+] Checking 192.168.32.77: 80 [+] Checking 192.168.32.77: 110 [+] Checking 192.168.32.78: 21 [+] Checking 192.168.32.78: 22 [+] Checking 192.168.32.78: 25 [+] Checking 192.168.32.78: 80 [+] Checking 192.168.32.78: 110 [+] Checking 192.168.32.79: 21 [+] Checking 192.168.32.79: 22 [+] Checking 192.168.32.79: 25 [+] Checking 192.168.32.79: 80 [+] Checking 192.168.32.79: 110 [+] Checking 192.168.32.80: 21 [+] Checking 192.168.32.80: 22 [+] Checking 192.168.32.80: 25 [+] Checking 192.168.32.80: 80 [+] Checking 192.168.32.80: 110 [+] Checking 192.168.32.81: 21 [+] Checking 192.168.32.81: 22 [+] Checking 192.168.32.81: 25 [+] Checking 192.168.32.81: 80 [+] Checking 192.168.32.81: 110 [+] Checking 192.168.32.82: 21 [+] Checking 192.168.32.82: 22 [+] Checking 192.168.32.82: 25 [+] Checking 192.168.32.82: 80 [+] Checking 192.168.32.82: 110 [+] Checking 192.168.32.83: 21 [+] Checking 192.168.32.83: 22 [+] Checking 192.168.32.83: 25 [+] Checking 192.168.32.83: 80 [+] Checking 192.168.32.83: 110 [+] Checking 192.168.32.84: 21 [+] Checking 192.168.32.84: 22 [+] Checking 192.168.32.84: 25 [+] Checking 192.168.32.84: 80 [+] Checking 192.168.32.84: 110 [+] Checking 192.168.32.85: 21 [+] Checking 192.168.32.85: 22 [+] Checking 192.168.32.85: 25 [+] Checking 192.168.32.85: 80 [+] Checking 192.168.32.85: 110 [+] Checking 192.168.32.86: 21 [+] Checking 192.168.32.86: 22 [+] Checking 192.168.32.86: 25 [+] Checking 192.168.32.86: 80 [+] Checking 192.168.32.86: 110 [+] Checking 192.168.32.87: 21 [+] Checking 192.168.32.87: 22 [+] Checking 192.168.32.87: 25 [+] Checking 192.168.32.87: 80 [+] Checking 192.168.32.87: 110 [+] Checking 192.168.32.88: 21 [+] Checking 192.168.32.88: 22 [+] Checking 192.168.32.88: 25 [+] Checking 192.168.32.88: 80 [+] Checking 192.168.32.88: 110 [+] Checking 192.168.32.89: 21 [+] Checking 192.168.32.89: 22 [+] Checking 192.168.32.89: 25 [+] Checking 192.168.32.89: 80 [+] Checking 192.168.32.89: 110 [+] Checking 192.168.32.90: 21 [+] Checking 192.168.32.90: 22 [+] Checking 192.168.32.90: 25 [+] Checking 192.168.32.90: 80 [+] Checking 192.168.32.90: 110 [+] Checking 192.168.32.91: 21 [+] Checking 192.168.32.91: 22 [+] Checking 192.168.32.91: 25 [+] Checking 192.168.32.91: 80 [+] Checking 192.168.32.91: 110 [+] Checking 192.168.32.92: 21 [+] Checking 192.168.32.92: 22 [+] Checking 192.168.32.92: 25 [+] Checking 192.168.32.92: 80 [+] Checking 192.168.32.92: 110 [+] Checking 192.168.32.93: 21 [+] Checking 192.168.32.93: 22 [+] Checking 192.168.32.93: 25 [+] Checking 192.168.32.93: 80 [+] Checking 192.168.32.93: 110 [+] Checking 192.168.32.94: 21 [+] Checking 192.168.32.94: 22 [+] Checking 192.168.32.94: 25 [+] Checking 192.168.32.94: 80 [+] Checking 192.168.32.94: 110 [+] Checking 192.168.32.95: 21 [+] Checking 192.168.32.95: 22 [+] Checking 192.168.32.95: 25 [+] Checking 192.168.32.95: 80 [+] Checking 192.168.32.95: 110 [+] Checking 192.168.32.96: 21 [+] Checking 192.168.32.96: 22 [+] Checking 192.168.32.96: 25 [+] Checking 192.168.32.96: 80 [+] Checking 192.168.32.96: 110 [+] Checking 192.168.32.97: 21 [+] Checking 192.168.32.97: 22 [+] Checking 192.168.32.97: 25 [+] Checking 192.168.32.97: 80 [+] Checking 192.168.32.97: 110 [+] Checking 192.168.32.98: 21 [+] Checking 192.168.32.98: 22 [+] Checking 192.168.32.98: 25 [+] Checking 192.168.32.98: 80 [+] Checking 192.168.32.98: 110 [+] Checking 192.168.32.99: 21 [+] Checking 192.168.32.99: 22 [+] Checking 192.168.32.99: 25 [+] Checking 192.168.32.99: 80 [+] Checking 192.168.32.99: 110 [+] Checking 192.168.32.100: 21 [+] Checking 192.168.32.100: 22 [+] Checking 192.168.32.100: 25 [+] Checking 192.168.32.100: 80 [+] Checking 192.168.32.100: 110 [+] Checking 192.168.32.101: 21 [+] Checking 192.168.32.101: 22 [+] Checking 192.168.32.101: 25 [+] Checking 192.168.32.101: 80 [+] Checking 192.168.32.101: 110 [+] Checking 192.168.32.102: 21 [+] Checking 192.168.32.102: 22 [+] Checking 192.168.32.102: 25 [+] Checking 192.168.32.102: 80 [+] Checking 192.168.32.102: 110 [+] Checking 192.168.32.103: 21 [+] Checking 192.168.32.103: 22 [+] Checking 192.168.32.103: 25 [+] Checking 192.168.32.103: 80 [+] Checking 192.168.32.103: 110 [+] Checking 192.168.32.104: 21 [+] Checking 192.168.32.104: 22 [+] Checking 192.168.32.104: 25 [+] Checking 192.168.32.104: 80 [+] Checking 192.168.32.104: 110 [+] Checking 192.168.32.105: 21 [+] Checking 192.168.32.105: 22 [+] Checking 192.168.32.105: 25 [+] Checking 192.168.32.105: 80 [+] Checking 192.168.32.105: 110 [+] Checking 192.168.32.106: 21 [+] Checking 192.168.32.106: 22 [+] Checking 192.168.32.106: 25 [+] Checking 192.168.32.106: 80 [+] Checking 192.168.32.106: 110 [+] Checking 192.168.32.107: 21 [+] Checking 192.168.32.107: 22 [+] Checking 192.168.32.107: 25 [+] Checking 192.168.32.107: 80 [+] Checking 192.168.32.107: 110 [+] Checking 192.168.32.108: 21 [+] Checking 192.168.32.108: 22 [+] Checking 192.168.32.108: 25 [+] Checking 192.168.32.108: 80 [+] Checking 192.168.32.108: 110 [+] Checking 192.168.32.109: 21 [+] Checking 192.168.32.109: 22 [+] Checking 192.168.32.109: 25 [+] Checking 192.168.32.109: 80 [+] Checking 192.168.32.109: 110 [+] Checking 192.168.32.110: 21 [+] Checking 192.168.32.110: 22 [+] Checking 192.168.32.110: 25 [+] Checking 192.168.32.110: 80 [+] Checking 192.168.32.110: 110 [+] Checking 192.168.32.111: 21 [+] Checking 192.168.32.111: 22 [+] Checking 192.168.32.111: 25 [+] Checking 192.168.32.111: 80 [+] Checking 192.168.32.111: 110 [+] Checking 192.168.32.112: 21 [+] Checking 192.168.32.112: 22 [+] Checking 192.168.32.112: 25 [+] Checking 192.168.32.112: 80 [+] Checking 192.168.32.112: 110 [+] Checking 192.168.32.113: 21 [+] Checking 192.168.32.113: 22 [+] Checking 192.168.32.113: 25 [+] Checking 192.168.32.113: 80 [+] Checking 192.168.32.113: 110 [+] Checking 192.168.32.114: 21 [+] Checking 192.168.32.114: 22 [+] Checking 192.168.32.114: 25 [+] Checking 192.168.32.114: 80 [+] Checking 192.168.32.114: 110 [+] Checking 192.168.32.115: 21 [+] Checking 192.168.32.115: 22 [+] Checking 192.168.32.115: 25 [+] Checking 192.168.32.115: 80 [+] Checking 192.168.32.115: 110 [+] Checking 192.168.32.116: 21 [+] Checking 192.168.32.116: 22 [+] Checking 192.168.32.116: 25 [+] Checking 192.168.32.116: 80 [+] Checking 192.168.32.116: 110 [+] Checking 192.168.32.117: 21 [+] Checking 192.168.32.117: 22 [+] Checking 192.168.32.117: 25 [+] Checking 192.168.32.117: 80 [+] Checking 192.168.32.117: 110 [+] Checking 192.168.32.118: 21 [+] Checking 192.168.32.118: 22 [+] Checking 192.168.32.118: 25 [+] Checking 192.168.32.118: 80 [+] Checking 192.168.32.118: 110 [+] Checking 192.168.32.119: 21 [+] Checking 192.168.32.119: 22 [+] Checking 192.168.32.119: 25 [+] Checking 192.168.32.119: 80 [+] Checking 192.168.32.119: 110 [+] Checking 192.168.32.120: 21 [+] Checking 192.168.32.120: 22 [+] Checking 192.168.32.120: 25 [+] Checking 192.168.32.120: 80 [+] Checking 192.168.32.120: 110 [+] Checking 192.168.32.121: 21 [+] Checking 192.168.32.121: 22 [+] Checking 192.168.32.121: 25 [+] Checking 192.168.32.121: 80 [+] Checking 192.168.32.121: 110 [+] Checking 192.168.32.122: 21 [+] Checking 192.168.32.122: 22 [+] Checking 192.168.32.122: 25 [+] Checking 192.168.32.122: 80 [+] Checking 192.168.32.122: 110 [+] Checking 192.168.32.123: 21 [+] Checking 192.168.32.123: 22 [+] Checking 192.168.32.123: 25 [+] Checking 192.168.32.123: 80 [+] Checking 192.168.32.123: 110 [+] Checking 192.168.32.124: 21 [+] Checking 192.168.32.124: 22 [+] Checking 192.168.32.124: 25 [+] Checking 192.168.32.124: 80 [+] Checking 192.168.32.124: 110 [+] Checking 192.168.32.125: 21 [+] Checking 192.168.32.125: 22 [+] Checking 192.168.32.125: 25 [+] Checking 192.168.32.125: 80 [+] Checking 192.168.32.125: 110 [+] Checking 192.168.32.126: 21 [+] Checking 192.168.32.126: 22 [+] Checking 192.168.32.126: 25 [+] Checking 192.168.32.126: 80 [+] Checking 192.168.32.126: 110 [+] Checking 192.168.32.127: 21 [+] Checking 192.168.32.127: 22 [+] Checking 192.168.32.127: 25 [+] Checking 192.168.32.127: 80 [+] Checking 192.168.32.127: 110 [+] Checking 192.168.32.128: 21 [+] Checking 192.168.32.128: 22 [+] Checking 192.168.32.128: 25 [+] Checking 192.168.32.128: 80 [+] Checking 192.168.32.128: 110 [+] Checking 192.168.32.129: 21 [+] Checking 192.168.32.129: 22 [+] Checking 192.168.32.129: 25 [+] Checking 192.168.32.129: 80 [+] Checking 192.168.32.129: 110 [+] Checking 192.168.32.130: 21 [+] Checking 192.168.32.130: 22 [+] Checking 192.168.32.130: 25 [+] Checking 192.168.32.130: 80 [+] Checking 192.168.32.130: 110 [+] Checking 192.168.32.131: 21 [+] Checking 192.168.32.131: 22 [+] Checking 192.168.32.131: 25 [+] Checking 192.168.32.131: 80 [+] Checking 192.168.32.131: 110 [+] Checking 192.168.32.132: 21 [+] Checking 192.168.32.132: 22 [+] Checking 192.168.32.132: 25 [+] Checking 192.168.32.132: 80 [+] Checking 192.168.32.132: 110 [+] Checking 192.168.32.133: 21 [+] Checking 192.168.32.133: 22 [+] Checking 192.168.32.133: 25 [+] Checking 192.168.32.133: 80 [+] Checking 192.168.32.133: 110 [+] Checking 192.168.32.134: 21 [+] Checking 192.168.32.134: 22 [+] Checking 192.168.32.134: 25 [+] Checking 192.168.32.134: 80 [+] Checking 192.168.32.134: 110 [+] Checking 192.168.32.135: 21 [+] Checking 192.168.32.135: 22 [+] Checking 192.168.32.135: 25 [+] Checking 192.168.32.135: 80 [+] Checking 192.168.32.135: 110 [+] Checking 192.168.32.136: 21 [+] Checking 192.168.32.136: 22 [+] Checking 192.168.32.136: 25 [+] Checking 192.168.32.136: 80 [+] Checking 192.168.32.136: 110 [+] Checking 192.168.32.137: 21 [+] Checking 192.168.32.137: 22 [+] Checking 192.168.32.137: 25 [+] Checking 192.168.32.137: 80 [+] Checking 192.168.32.137: 110 [+] Checking 192.168.32.138: 21 [+] Checking 192.168.32.138: 22 [+] Checking 192.168.32.138: 25 [+] Checking 192.168.32.138: 80 [+] Checking 192.168.32.138: 110 [+] Checking 192.168.32.139: 21 [+] Checking 192.168.32.139: 22 [+] Checking 192.168.32.139: 25 [+] Checking 192.168.32.139: 80 [+] Checking 192.168.32.139: 110 [+] Checking 192.168.32.140: 21 [+] Checking 192.168.32.140: 22 [+] Checking 192.168.32.140: 25 [+] Checking 192.168.32.140: 80 [+] Checking 192.168.32.140: 110 [+] Checking 192.168.32.141: 21 [+] Checking 192.168.32.141: 22 [+] Checking 192.168.32.141: 25 [+] Checking 192.168.32.141: 80 [+] Checking 192.168.32.141: 110 [+] Checking 192.168.32.142: 21 [+] Checking 192.168.32.142: 22 [+] Checking 192.168.32.142: 25 [+] Checking 192.168.32.142: 80 [+] Checking 192.168.32.142: 110 [+] Checking 192.168.32.143: 21 [+] Checking 192.168.32.143: 22 [+] Checking 192.168.32.143: 25 [+] Checking 192.168.32.143: 80 [+] Checking 192.168.32.143: 110 [+] Checking 192.168.32.144: 21 [+] Checking 192.168.32.144: 22 [+] Checking 192.168.32.144: 25 [+] Checking 192.168.32.144: 80 [+] Checking 192.168.32.144: 110 [+] Checking 192.168.32.145: 21 [+] Checking 192.168.32.145: 22 [+] Checking 192.168.32.145: 25 [+] Checking 192.168.32.145: 80 [+] Checking 192.168.32.145: 110 [+] Checking 192.168.32.146: 21 [+] Checking 192.168.32.146: 22 [+] Checking 192.168.32.146: 25 [+] Checking 192.168.32.146: 80 [+] Checking 192.168.32.146: 110 [+] Checking 192.168.32.147: 21 [+] Checking 192.168.32.147: 22 [+] Checking 192.168.32.147: 25 [+] Checking 192.168.32.147: 80 [+] Checking 192.168.32.147: 110 [+] Checking 192.168.32.148: 21 [+] Checking 192.168.32.148: 22 [+] Checking 192.168.32.148: 25 [+] Checking 192.168.32.148: 80 [+] Checking 192.168.32.148: 110 [+] Checking 192.168.32.149: 21 [+] Checking 192.168.32.149: 22 [+] Checking 192.168.32.149: 25 [+] Checking 192.168.32.149: 80 [+] Checking 192.168.32.149: 110 [+] Checking 192.168.32.150: 21 [+] Checking 192.168.32.150: 22 [+] Checking 192.168.32.150: 25 [+] Checking 192.168.32.150: 80 [+] Checking 192.168.32.150: 110 [+] Checking 192.168.32.151: 21 [+] Checking 192.168.32.151: 22 [+] Checking 192.168.32.151: 25 [+] Checking 192.168.32.151: 80 [+] Checking 192.168.32.151: 110 [+] Checking 192.168.32.152: 21 [+] Checking 192.168.32.152: 22 [+] Checking 192.168.32.152: 25 [+] Checking 192.168.32.152: 80 [+] Checking 192.168.32.152: 110 [+] Checking 192.168.32.153: 21 [+] Checking 192.168.32.153: 22 [+] Checking 192.168.32.153: 25 [+] Checking 192.168.32.153: 80 [+] Checking 192.168.32.153: 110 [+] Checking 192.168.32.154: 21 [+] Checking 192.168.32.154: 22 [+] Checking 192.168.32.154: 25 [+] Checking 192.168.32.154: 80 [+] Checking 192.168.32.154: 110 [+] Checking 192.168.32.155: 21 [+] Checking 192.168.32.155: 22 [+] Checking 192.168.32.155: 25 [+] Checking 192.168.32.155: 80 [+] Checking 192.168.32.155: 110 [+] Checking 192.168.32.156: 21 [+] Checking 192.168.32.156: 22 [+] Checking 192.168.32.156: 25 [+] Checking 192.168.32.156: 80 [+] Checking 192.168.32.156: 110 [+] Checking 192.168.32.157: 21 [+] Checking 192.168.32.157: 22 [+] Checking 192.168.32.157: 25 [+] Checking 192.168.32.157: 80 [+] Checking 192.168.32.157: 110 [+] Checking 192.168.32.158: 21 [+] Checking 192.168.32.158: 22 [+] Checking 192.168.32.158: 25 [+] Checking 192.168.32.158: 80 [+] Checking 192.168.32.158: 110 [+] Checking 192.168.32.159: 21 [+] Checking 192.168.32.159: 22 [+] Checking 192.168.32.159: 25 [+] Checking 192.168.32.159: 80 [+] Checking 192.168.32.159: 110 [+] Checking 192.168.32.160: 21 [+] Checking 192.168.32.160: 22 [+] Checking 192.168.32.160: 25 [+] Checking 192.168.32.160: 80 [+] Checking 192.168.32.160: 110 [+] Checking 192.168.32.161: 21 [+] Checking 192.168.32.161: 22 [+] Checking 192.168.32.161: 25 [+] Checking 192.168.32.161: 80 [+] Checking 192.168.32.161: 110 [+] Checking 192.168.32.162: 21 [+] Checking 192.168.32.162: 22 [+] Checking 192.168.32.162: 25 [+] Checking 192.168.32.162: 80 [+] Checking 192.168.32.162: 110 [+] Checking 192.168.32.163: 21 [+] Checking 192.168.32.163: 22 [+] Checking 192.168.32.163: 25 [+] Checking 192.168.32.163: 80 [+] Checking 192.168.32.163: 110 [+] Checking 192.168.32.164: 21 [+] Checking 192.168.32.164: 22 [+] Checking 192.168.32.164: 25 [+] Checking 192.168.32.164: 80 [+] Checking 192.168.32.164: 110 [+] Checking 192.168.32.165: 21 [+] Checking 192.168.32.165: 22 [+] Checking 192.168.32.165: 25 [+] Checking 192.168.32.165: 80 [+] Checking 192.168.32.165: 110 [+] Checking 192.168.32.166: 21 [+] Checking 192.168.32.166: 22 [+] Checking 192.168.32.166: 25 [+] Checking 192.168.32.166: 80 [+] Checking 192.168.32.166: 110 [+] Checking 192.168.32.167: 21 [+] Checking 192.168.32.167: 22 [+] Checking 192.168.32.167: 25 [+] Checking 192.168.32.167: 80 [+] Checking 192.168.32.167: 110 [+] Checking 192.168.32.168: 21 [+] Checking 192.168.32.168: 22 [+] Checking 192.168.32.168: 25 [+] Checking 192.168.32.168: 80 [+] Checking 192.168.32.168: 110 [+] Checking 192.168.32.169: 21 [+] Checking 192.168.32.169: 22 [+] Checking 192.168.32.169: 25 [+] Checking 192.168.32.169: 80 [+] Checking 192.168.32.169: 110 [+] Checking 192.168.32.170: 21 [+] Checking 192.168.32.170: 22 [+] Checking 192.168.32.170: 25 [+] Checking 192.168.32.170: 80 [+] Checking 192.168.32.170: 110 [+] Checking 192.168.32.171: 21 [+] Checking 192.168.32.171: 22 [+] Checking 192.168.32.171: 25 [+] Checking 192.168.32.171: 80 [+] Checking 192.168.32.171: 110 [+] Checking 192.168.32.172: 21 [+] Checking 192.168.32.172: 22 [+] Checking 192.168.32.172: 25 [+] Checking 192.168.32.172: 80 [+] Checking 192.168.32.172: 110 [+] Checking 192.168.32.173: 21 [+] Checking 192.168.32.173: 22 [+] Checking 192.168.32.173: 25 [+] Checking 192.168.32.173: 80 [+] Checking 192.168.32.173: 110 [+] Checking 192.168.32.174: 21 [+] Checking 192.168.32.174: 22 [+] Checking 192.168.32.174: 25 [+] Checking 192.168.32.174: 80 [+] Checking 192.168.32.174: 110 [+] Checking 192.168.32.175: 21 [+] Checking 192.168.32.175: 22 [+] Checking 192.168.32.175: 25 [+] Checking 192.168.32.175: 80 [+] Checking 192.168.32.175: 110 [+] Checking 192.168.32.176: 21 [+] Checking 192.168.32.176: 22 [+] Checking 192.168.32.176: 25 [+] Checking 192.168.32.176: 80 [+] Checking 192.168.32.176: 110 [+] Checking 192.168.32.177: 21 [+] Checking 192.168.32.177: 22 [+] Checking 192.168.32.177: 25 [+] Checking 192.168.32.177: 80 [+] Checking 192.168.32.177: 110 [+] Checking 192.168.32.178: 21 [+] Checking 192.168.32.178: 22 [+] Checking 192.168.32.178: 25 [+] Checking 192.168.32.178: 80 [+] Checking 192.168.32.178: 110 [+] Checking 192.168.32.179: 21 [+] Checking 192.168.32.179: 22 [+] Checking 192.168.32.179: 25 [+] Checking 192.168.32.179: 80 [+] Checking 192.168.32.179: 110 [+] Checking 192.168.32.180: 21 [+] Checking 192.168.32.180: 22 [+] Checking 192.168.32.180: 25 [+] Checking 192.168.32.180: 80 [+] Checking 192.168.32.180: 110 [+] Checking 192.168.32.181: 21 [+] Checking 192.168.32.181: 22 [+] Checking 192.168.32.181: 25 [+] Checking 192.168.32.181: 80 [+] Checking 192.168.32.181: 110 [+] Checking 192.168.32.182: 21 [+] Checking 192.168.32.182: 22 [+] Checking 192.168.32.182: 25 [+] Checking 192.168.32.182: 80 [+] Checking 192.168.32.182: 110 [+] Checking 192.168.32.183: 21 [+] Checking 192.168.32.183: 22 [+] Checking 192.168.32.183: 25 [+] Checking 192.168.32.183: 80 [+] Checking 192.168.32.183: 110 [+] Checking 192.168.32.184: 21 [+] Checking 192.168.32.184: 22 [+] Checking 192.168.32.184: 25 [+] Checking 192.168.32.184: 80 [+] Checking 192.168.32.184: 110 [+] Checking 192.168.32.185: 21 [+] Checking 192.168.32.185: 22 [+] Checking 192.168.32.185: 25 [+] Checking 192.168.32.185: 80 [+] Checking 192.168.32.185: 110 [+] Checking 192.168.32.186: 21 [+] Checking 192.168.32.186: 22 [+] Checking 192.168.32.186: 25 [+] Checking 192.168.32.186: 80 [+] Checking 192.168.32.186: 110 [+] Checking 192.168.32.187: 21 [+] Checking 192.168.32.187: 22 [+] Checking 192.168.32.187: 25 [+] Checking 192.168.32.187: 80 [+] Checking 192.168.32.187: 110 [+] Checking 192.168.32.188: 21 [+] Checking 192.168.32.188: 22 [+] Checking 192.168.32.188: 25 [+] Checking 192.168.32.188: 80 [+] Checking 192.168.32.188: 110 [+] Checking 192.168.32.189: 21 [+] Checking 192.168.32.189: 22 [+] Checking 192.168.32.189: 25 [+] Checking 192.168.32.189: 80 [+] Checking 192.168.32.189: 110 [+] Checking 192.168.32.190: 21 [+] Checking 192.168.32.190: 22 [+] Checking 192.168.32.190: 25 [+] Checking 192.168.32.190: 80 [+] Checking 192.168.32.190: 110 [+] Checking 192.168.32.191: 21 [+] Checking 192.168.32.191: 22 [+] Checking 192.168.32.191: 25 [+] Checking 192.168.32.191: 80 [+] Checking 192.168.32.191: 110 [+] Checking 192.168.32.192: 21 [+] Checking 192.168.32.192: 22 [+] Checking 192.168.32.192: 25 [+] Checking 192.168.32.192: 80 [+] Checking 192.168.32.192: 110 [+] Checking 192.168.32.193: 21 [+] Checking 192.168.32.193: 22 [+] Checking 192.168.32.193: 25 [+] Checking 192.168.32.193: 80 [+] Checking 192.168.32.193: 110 [+] Checking 192.168.32.194: 21 [+] Checking 192.168.32.194: 22 [+] Checking 192.168.32.194: 25 [+] Checking 192.168.32.194: 80 [+] Checking 192.168.32.194: 110 [+] Checking 192.168.32.195: 21 [+] Checking 192.168.32.195: 22 [+] Checking 192.168.32.195: 25 [+] Checking 192.168.32.195: 80 [+] Checking 192.168.32.195: 110 [+] Checking 192.168.32.196: 21 [+] Checking 192.168.32.196: 22 [+] Checking 192.168.32.196: 25 [+] Checking 192.168.32.196: 80 [+] Checking 192.168.32.196: 110 [+] Checking 192.168.32.197: 21 [+] Checking 192.168.32.197: 22 [+] Checking 192.168.32.197: 25 [+] Checking 192.168.32.197: 80 [+] Checking 192.168.32.197: 110 [+] Checking 192.168.32.198: 21 [+] Checking 192.168.32.198: 22 [+] Checking 192.168.32.198: 25 [+] Checking 192.168.32.198: 80 [+] Checking 192.168.32.198: 110 [+] Checking 192.168.32.199: 21 [+] Checking 192.168.32.199: 22 [+] Checking 192.168.32.199: 25 [+] Checking 192.168.32.199: 80 [+] Checking 192.168.32.199: 110 [+] Checking 192.168.32.200: 21 [+] Checking 192.168.32.200: 22 [+] Checking 192.168.32.200: 25 [+] Checking 192.168.32.200: 80 [+] Checking 192.168.32.200: 110 [+] Checking 192.168.32.201: 21 [+] Checking 192.168.32.201: 22 [+] Checking 192.168.32.201: 25 [+] Checking 192.168.32.201: 80 [+] Checking 192.168.32.201: 110 [+] Checking 192.168.32.202: 21 [+] Checking 192.168.32.202: 22 [+] Checking 192.168.32.202: 25 [+] Checking 192.168.32.202: 80 [+] Checking 192.168.32.202: 110 [+] Checking 192.168.32.203: 21 [+] Checking 192.168.32.203: 22 [+] Checking 192.168.32.203: 25 [+] Checking 192.168.32.203: 80 [+] Checking 192.168.32.203: 110 [+] Checking 192.168.32.204: 21 [+] Checking 192.168.32.204: 22 [+] Checking 192.168.32.204: 25 [+] Checking 192.168.32.204: 80 [+] Checking 192.168.32.204: 110 [+] Checking 192.168.32.205: 21 [+] Checking 192.168.32.205: 22 [+] Checking 192.168.32.205: 25 [+] Checking 192.168.32.205: 80 [+] Checking 192.168.32.205: 110 [+] Checking 192.168.32.206: 21 [+] Checking 192.168.32.206: 22 [+] Checking 192.168.32.206: 25 [+] Checking 192.168.32.206: 80 [+] Checking 192.168.32.206: 110 [+] Checking 192.168.32.207: 21 [+] Checking 192.168.32.207: 22 [+] Checking 192.168.32.207: 25 [+] Checking 192.168.32.207: 80 [+] Checking 192.168.32.207: 110 [+] Checking 192.168.32.208: 21 [+] Checking 192.168.32.208: 22 [+] Checking 192.168.32.208: 25 [+] Checking 192.168.32.208: 80 [+] Checking 192.168.32.208: 110 [+] Checking 192.168.32.209: 21 [+] Checking 192.168.32.209: 22 [+] Checking 192.168.32.209: 25 [+] Checking 192.168.32.209: 80 [+] Checking 192.168.32.209: 110 [+] Checking 192.168.32.210: 21 [+] Checking 192.168.32.210: 22 [+] Checking 192.168.32.210: 25 [+] Checking 192.168.32.210: 80 [+] Checking 192.168.32.210: 110 [+] Checking 192.168.32.211: 21 [+] Checking 192.168.32.211: 22 [+] Checking 192.168.32.211: 25 [+] Checking 192.168.32.211: 80 [+] Checking 192.168.32.211: 110 [+] Checking 192.168.32.212: 21 [+] Checking 192.168.32.212: 22 [+] Checking 192.168.32.212: 25 [+] Checking 192.168.32.212: 80 [+] Checking 192.168.32.212: 110 [+] Checking 192.168.32.213: 21 [+] Checking 192.168.32.213: 22 [+] Checking 192.168.32.213: 25 [+] Checking 192.168.32.213: 80 [+] Checking 192.168.32.213: 110 [+] Checking 192.168.32.214: 21 [+] Checking 192.168.32.214: 22 [+] Checking 192.168.32.214: 25 [+] Checking 192.168.32.214: 80 [+] Checking 192.168.32.214: 110 [+] Checking 192.168.32.215: 21 [+] Checking 192.168.32.215: 22 [+] Checking 192.168.32.215: 25 [+] Checking 192.168.32.215: 80 [+] Checking 192.168.32.215: 110 [+] Checking 192.168.32.216: 21 [+] Checking 192.168.32.216: 22 [+] Checking 192.168.32.216: 25 [+] Checking 192.168.32.216: 80 [+] Checking 192.168.32.216: 110 [+] Checking 192.168.32.217: 21 [+] Checking 192.168.32.217: 22 [+] Checking 192.168.32.217: 25 [+] Checking 192.168.32.217: 80 [+] Checking 192.168.32.217: 110 [+] Checking 192.168.32.218: 21 [+] Checking 192.168.32.218: 22 [+] Checking 192.168.32.218: 25 [+] Checking 192.168.32.218: 80 [+] Checking 192.168.32.218: 110 [+] Checking 192.168.32.219: 21 [+] Checking 192.168.32.219: 22 [+] Checking 192.168.32.219: 25 [+] Checking 192.168.32.219: 80 [+] Checking 192.168.32.219: 110 [+] Checking 192.168.32.220: 21 [+] Checking 192.168.32.220: 22 [+] Checking 192.168.32.220: 25 [+] Checking 192.168.32.220: 80 [+] Checking 192.168.32.220: 110 [+] Checking 192.168.32.221: 21 [+] Checking 192.168.32.221: 22 [+] Checking 192.168.32.221: 25 [+] Checking 192.168.32.221: 80 [+] Checking 192.168.32.221: 110 [+] Checking 192.168.32.222: 21 [+] Checking 192.168.32.222: 22 [+] Checking 192.168.32.222: 25 [+] Checking 192.168.32.222: 80 [+] Checking 192.168.32.222: 110 [+] Checking 192.168.32.223: 21 [+] Checking 192.168.32.223: 22 [+] Checking 192.168.32.223: 25 [+] Checking 192.168.32.223: 80 [+] Checking 192.168.32.223: 110 [+] Checking 192.168.32.224: 21 [+] Checking 192.168.32.224: 22 [+] Checking 192.168.32.224: 25 [+] Checking 192.168.32.224: 80 [+] Checking 192.168.32.224: 110 [+] Checking 192.168.32.225: 21 [+] Checking 192.168.32.225: 22 [+] Checking 192.168.32.225: 25 [+] Checking 192.168.32.225: 80 [+] Checking 192.168.32.225: 110 [+] Checking 192.168.32.226: 21 [+] Checking 192.168.32.226: 22 [+] Checking 192.168.32.226: 25 [+] Checking 192.168.32.226: 80 [+] Checking 192.168.32.226: 110 [+] Checking 192.168.32.227: 21 [+] Checking 192.168.32.227: 22 [+] Checking 192.168.32.227: 25 [+] Checking 192.168.32.227: 80 [+] Checking 192.168.32.227: 110 [+] Checking 192.168.32.228: 21 [+] Checking 192.168.32.228: 22 [+] Checking 192.168.32.228: 25 [+] Checking 192.168.32.228: 80 [+] Checking 192.168.32.228: 110 [+] Checking 192.168.32.229: 21 [+] Checking 192.168.32.229: 22 [+] Checking 192.168.32.229: 25 [+] Checking 192.168.32.229: 80 [+] Checking 192.168.32.229: 110 [+] Checking 192.168.32.230: 21 [+] Checking 192.168.32.230: 22 [+] Checking 192.168.32.230: 25 [+] Checking 192.168.32.230: 80 [+] Checking 192.168.32.230: 110 [+] Checking 192.168.32.231: 21 [+] Checking 192.168.32.231: 22 [+] Checking 192.168.32.231: 25 [+] Checking 192.168.32.231: 80 [+] Checking 192.168.32.231: 110 [+] Checking 192.168.32.232: 21 [+] Checking 192.168.32.232: 22 [+] Checking 192.168.32.232: 25 [+] Checking 192.168.32.232: 80 [+] Checking 192.168.32.232: 110 [+] Checking 192.168.32.233: 21 [+] Checking 192.168.32.233: 22 [+] Checking 192.168.32.233: 25 [+] Checking 192.168.32.233: 80 [+] Checking 192.168.32.233: 110 [+] Checking 192.168.32.234: 21 [+] Checking 192.168.32.234: 22 [+] Checking 192.168.32.234: 25 [+] Checking 192.168.32.234: 80 [+] Checking 192.168.32.234: 110 [+] Checking 192.168.32.235: 21 [+] Checking 192.168.32.235: 22 [+] Checking 192.168.32.235: 25 [+] Checking 192.168.32.235: 80 [+] Checking 192.168.32.235: 110 [+] Checking 192.168.32.236: 21 [+] Checking 192.168.32.236: 22 [+] Checking 192.168.32.236: 25 [+] Checking 192.168.32.236: 80 [+] Checking 192.168.32.236: 110 [+] Checking 192.168.32.237: 21 [+] Checking 192.168.32.237: 22 [+] Checking 192.168.32.237: 25 [+] Checking 192.168.32.237: 80 [+] Checking 192.168.32.237: 110 [+] Checking 192.168.32.238: 21 [+] Checking 192.168.32.238: 22 [+] Checking 192.168.32.238: 25 [+] Checking 192.168.32.238: 80 [+] Checking 192.168.32.238: 110 [+] Checking 192.168.32.239: 21 [+] Checking 192.168.32.239: 22 [+] Checking 192.168.32.239: 25 [+] Checking 192.168.32.239: 80 [+] Checking 192.168.32.239: 110 [+] Checking 192.168.32.240: 21 [+] Checking 192.168.32.240: 22 [+] Checking 192.168.32.240: 25 [+] Checking 192.168.32.240: 80 [+] Checking 192.168.32.240: 110 [+] Checking 192.168.32.241: 21 [+] Checking 192.168.32.241: 22 [+] Checking 192.168.32.241: 25 [+] Checking 192.168.32.241: 80 [+] Checking 192.168.32.241: 110 [+] Checking 192.168.32.242: 21 [+] Checking 192.168.32.242: 22 [+] Checking 192.168.32.242: 25 [+] Checking 192.168.32.242: 80 [+] Checking 192.168.32.242: 110 [+] Checking 192.168.32.243: 21 [+] Checking 192.168.32.243: 22 [+] Checking 192.168.32.243: 25 [+] Checking 192.168.32.243: 80 [+] Checking 192.168.32.243: 110 [+] Checking 192.168.32.244: 21 [+] Checking 192.168.32.244: 22 [+] Checking 192.168.32.244: 25 [+] Checking 192.168.32.244: 80 [+] Checking 192.168.32.244: 110 [+] Checking 192.168.32.245: 21 [+] Checking 192.168.32.245: 22 [+] Checking 192.168.32.245: 25 [+] Checking 192.168.32.245: 80 [+] Checking 192.168.32.245: 110 [+] Checking 192.168.32.246: 21 [+] Checking 192.168.32.246: 22 [+] Checking 192.168.32.246: 25 [+] Checking 192.168.32.246: 80 [+] Checking 192.168.32.246: 110 [+] Checking 192.168.32.247: 21 [+] Checking 192.168.32.247: 22 [+] Checking 192.168.32.247: 25 [+] Checking 192.168.32.247: 80 [+] Checking 192.168.32.247: 110 [+] Checking 192.168.32.248: 21 [+] Checking 192.168.32.248: 22 [+] Checking 192.168.32.248: 25 [+] Checking 192.168.32.248: 80 [+] Checking 192.168.32.248: 110 [+] Checking 192.168.32.249: 21 [+] Checking 192.168.32.249: 22 [+] Checking 192.168.32.249: 25 [+] Checking 192.168.32.249: 80 [+] Checking 192.168.32.249: 110 [+] Checking 192.168.32.250: 21 [+] Checking 192.168.32.250: 22 [+] Checking 192.168.32.250: 25 [+] Checking 192.168.32.250: 80 [+] Checking 192.168.32.250: 110 [+] Checking 192.168.32.251: 21 [+] Checking 192.168.32.251: 22 [+] Checking 192.168.32.251: 25 [+] Checking 192.168.32.251: 80 [+] Checking 192.168.32.251: 110 [+] Checking 192.168.32.252: 21 [+] Checking 192.168.32.252: 22 [+] Checking 192.168.32.252: 25 [+] Checking 192.168.32.252: 80 [+] Checking 192.168.32.252: 110 [+] Checking 192.168.32.253: 21 [+] Checking 192.168.32.253: 22 [+] Checking 192.168.32.253: 25 [+] Checking 192.168.32.253: 80 [+] Checking 192.168.32.253: 110 [+] Checking 192.168.32.254: 21 [+] Checking 192.168.32.254: 22 [+] Checking 192.168.32.254: 25 [+] Checking 192.168.32.254: 80 [+] Checking 192.168.32.254: 110
# 254 * 5
len( range(1, 255) ) * len( portList )
1270
cnt = 0
for x in range(1, 255):
for port in portList:
if not x in [1]:
#print '[+] Checking 172.16.190.' + str(x) + ': ' + str(port)
cnt += 1
print cnt
1265
# 172.16.190.0/24 서브넷에 있는 모든 255 주소를 점검
# 서비스는 telnet, SSH, smtp, http, imap, https 점검
import socket
def retBanner(ip, port):
'''서버에 연결해 배너값을 돌려 받는다.'''
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner):
'''받은 배너값으로 취약한 버전인지 확인한다.'''
if ('FreeFloat Ftp Server (Version 1.00)' in banner):
print '[+] FreeFloat FTP Server is vulnerable.'
elif ('3Com 3CDaemon FTP Server Version 2.0' in banner):
print '[+] 3CDaemon FTP Server is vulnerable.'
elif ('Ability Server 2.34' in banner):
print '[+] Ability FTP Server is vulnerable.'
elif ('Sami FTP Server 2.0.2' in banner):
print '+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
return
# main에서 ip, port 지정하여
def main():
'''이중 for문으로 ip와 port를 지정하여 retBanner 실행하고
retBanner 있으면 checkVulns 실행'''
portList = [21, 22, 25, 80, 110, 443]
# for x in range(1, 255):
for x in range(159, 160):
ip = '192.168.32.' + str(x)
for port in portList:
banner = retBanner(ip, port)
if banner:
print '[+] ' + ip + ': ' + banner
checkVulns(banner)
if __name__ == '__main__':
main()
[+] 192.168.32.159: 220 FreeFloat Ftp Server (Version 1.00) [+] FreeFloat FTP Server is vulnerable.
checkVulns() 함수에 항상 if, elif로 취약한 버전을 넣어야 하나?
귀찮아...
좀 더 간단히 할 수 있는 방법은 없을까?
나는 취약한 버전 이름만 추가하고 프로그램이 알아서 비교해주는..?
좀 더 진행하자면 취약한 버전도 알아서 추가 시켜주는..?
def checkVulns(banner):
'''받은 배너값으로 취약한 버전인지 확인한다.'''
if ('FreeFloat Ftp Server (Version 1.00)' in banner):
print '[+] FreeFloat FTP Server is vulnerable.'
elif ('3Com 3CDaemon FTP Server Version 2.0' in banner):
print '[+] 3CDaemon FTP Server is vulnerable.'
elif ('Ability Server 2.34' in banner):
print '[+] Ability FTP Server is vulnerable.'
elif ('Sami FTP Server 2.0.2' in banner):
print '+] Sami FTP Server is vulnerable.'
else:
print '[-] FTP Server is not vulnerable.'
return
%%writefile ch01/vuln_banners.txt
3Com 3CDaemon FTP Server Version 2.0
Ability Server 2.34
CCProxy Telnet Service Ready
ESMTP TABS Mail Server for Windows NT
FreeFloat Ftp Server (Version 1.00)
IMAP4rev1 MDaemon 9.6.4 ready
MailEnable Service, Version: 0-1.54
NetDecision-HTTP-Server 1.0
PSO Proxy 0.9
SAMBAR
Sami FTP Server 2.0.2
Spipe 1.0
TelSrv 1.5
WDaemon 6.8.5
WinGate 6.1.1
Xitami
YahooPOPs! Simple Mail Transfer Service Ready
Overwriting ch01/vuln_banners.txt
%%writefile ch01/vuln_banners.txt
3Com 3CDaemon FTP Server Version 2.0
Ability Server 2.34
CCProxy Telnet Service Ready
ESMTP TABS Mail Server for Windows NT
FreeFloat Ftp Server (Version 1.00)
IMAP4rev1 MDaemon 9.6.4 ready
MailEnable Service, Version: 0-1.54
NetDecision-HTTP-Server 1.0
PSO Proxy 0.9
SAMBAR
Sami FTP Server 2.0.2
Spipe 1.0
TelSrv 1.5
WDaemon 6.8.5
WinGate 6.1.1
Xitami
YahooPOPs! Simple Mail Transfer Service Ready
Add FTP to check vulnerable version 0.1 by geun young
Overwriting ch01/vuln_banners.txt
!cat ch01/vuln_banners.txt
3Com 3CDaemon FTP Server Version 2.0 Ability Server 2.34 CCProxy Telnet Service Ready ESMTP TABS Mail Server for Windows NT FreeFloat Ftp Server (Version 1.00) IMAP4rev1 MDaemon 9.6.4 ready MailEnable Service, Version: 0-1.54 NetDecision-HTTP-Server 1.0 PSO Proxy 0.9 SAMBAR Sami FTP Server 2.0.2 Spipe 1.0 TelSrv 1.5 WDaemon 6.8.5 WinGate 6.1.1 Xitami YahooPOPs! Simple Mail Transfer Service Ready Add FTP to check vulnerable version 0.1 by geun young
try:
f = open('ch01/vuln_banners.txt')
except:
print 'err'
s = ' aaa ccc \t ddd \t '
print s
aaa ccc ddd
print s.strip()
aaa ccc ddd
# 글자수 확인하면 다른 것을 알 수 있다.
print len(s), len(s.strip())
22 13
# finally로 file을 닫을 필요가 없어요.
def checkVulns(banner):
with open('ch01/vuln_banners.txt') as f:
# for line in f.readlines():
for line in f:
if line.strip('\n') in banner:
print '[+] Server is vulnerable: ' + banner.strip('\n')
# Error 발생
# def test_with():
# with open('ch01/vuln_banners.txt') as f:
# for line in f:
# print line.strip()
# except Exception, e:
# print e
# test_with()
# with open as f 테스트 해봄
try:
with open('ch01/vuln_banners2.txt') as f:
for line in f:
print line.strip()
except Exception, e:
print e
[Errno 13] Permission denied: 'ch01/vuln_banners2.txt'
from contextlib import contextmanager
@contextmanager
def opened_w_error(filename, mode="r"):
try:
f = open(filename, mode)
except IOError, err:
yield None, err
else:
try:
yield f, None
finally:
f.close()
with opened_w_error("ch01/vuln_banners.txt", "r") as (f, err):
if err:
print "IOError:", err
else:
for line in f:
print line.strip()
with opened_w_error("/etc/passwd", "a") as (f, err):
if err:
print "IOError:", err
else:
f.write("guido::0:0::/:/bin/sh\n")
3Com 3CDaemon FTP Server Version 2.0 Ability Server 2.34 CCProxy Telnet Service Ready ESMTP TABS Mail Server for Windows NT FreeFloat Ftp Server (Version 1.00) IMAP4rev1 MDaemon 9.6.4 ready MailEnable Service, Version: 0-1.54 NetDecision-HTTP-Server 1.0 PSO Proxy 0.9 SAMBAR Sami FTP Server 2.0.2 Spipe 1.0 TelSrv 1.5 WDaemon 6.8.5 WinGate 6.1.1 Xitami YahooPOPs! Simple Mail Transfer Service Ready Add FTP to check vulnerable version 0.1 by geun young IOError: [Errno 13] Permission denied: '/etc/passwd'
만약에 있잖아...
우리가 취약한 버전을 저장해 놓은 파일명을 vuln-banners.txt에서 i_hate_nogada.txt로 변경한다고 해보자.
그럼 우리는 어떻게 해야할까?
당연히 코딩해 놓은 소스 코드 파일을 열어서 vuln-banners.txt -> i_hate_nogada.txt로 변경해야겠지?
좋아. 뭐 여기까지는 참을 수 있어. 근데 있잖아. 매번 파일명이 바뀌면 이렇게 바꿔줘야 돼?? 귀찮다. 뭔가 좀 더 편한 방법이 없을까?
%%writefile ch01/vuln-scanner.py
import sys
if len(sys.argv) == 2:
filename = sys.argv[1]
print '[+] Reading Vulnerabilities From: ' + filename
Overwriting ch01/vuln-scanner.py
# sys.argv[0] sys.argv[1]
!python ch01/vuln-scanner.py vuln-banners.txt
[+] Reading Vulnerabilities From: vuln-banners.txt
%%writefile ch01/test_confirm.py
import sys
import os
if len(sys.argv) == 2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] ' + filename + ' does not exist.'
exit(0)
if not os.access(filename, os.R_OK):
print '[-] ' + filename + ' access denied.'
exit(0)
print '[+] Reading Vulnerabilities From: ' + filename
Overwriting ch01/test_confirm.py
import os
help(os.access)
Help on built-in function access in module posix: access(...) access(path, mode) -> True if granted, False otherwise Use the real uid/gid to test for access to a path. Note that most operations will use the effective uid/gid, therefore this routine can be used in a suid/sgid environment to test if the invoking user has the specified access to the path. The mode argument can be F_OK to test existence, or the inclusive-OR of R_OK, W_OK, and X_OK.
os.R_OK
4
# 파일이 없을때
!python ch01/test_confirm.py ch01/vuln_banners_not_exist.txt
[-] ch01/vuln_banners_not_exist.txt does not exist.
# 정상적으로 파일을 읽었을떄
!python ch01/test_confirm.py ch01/vuln_banners.txt
[+] Reading Vulnerabilities From: ch01/vuln_banners.txt
!cp ch01/vuln_banners.txt ch01/vuln_banners2.txt
cp: ch01/vuln_banners2.txt: Permission denied
!chmod 000 ch01/vuln_banners2.txt
# access denied 됐을때
!python ch01/test_confirm.py ch01/vuln_banners2.txt
[-] ch01/vuln_banners2.txt access denied.
!ls -l ch01/
total 336 -rw-r--r-- 1 re4lfl0w staff 356 Jun 15 12:59 1thread.py -rw-r--r-- 1 re4lfl0w staff 614 Jun 15 12:59 2process.py -rw-r--r-- 1 re4lfl0w staff 447 Jun 15 12:59 2thread.py -rw-r--r-- 1 re4lfl0w staff 0 Jun 14 14:43 __init__.py -rw-r--r-- 1 re4lfl0w staff 103 Jun 14 14:43 __init__.pyc -rw-r--r-- 1 re4lfl0w staff 57 Jun 23 2012 dictionary.txt -rw-r--r-- 1 re4lfl0w staff 35755 Jun 23 2012 evil.zip -rw-r--r-- 1 re4lfl0w staff 20 Jun 15 12:58 hello.py -rw-r--r-- 1 re4lfl0w staff 35 Jun 15 13:20 main_test.py -rw-r--r-- 1 re4lfl0w staff 148 Jun 15 13:20 main_test.pyc -rw-r--r-- 1 re4lfl0w staff 91 Jun 15 13:20 main_test2.py -rw-r--r-- 1 re4lfl0w staff 302 Jun 15 13:20 main_test2.pyc -rw-r--r-- 1 re4lfl0w staff 122 Jun 15 11:50 passwd -rw-r--r-- 1 re4lfl0w staff 122 Jun 23 2012 passwords.txt -rw-r--r-- 1 re4lfl0w staff 149 Jun 10 17:59 reverse_slash.txt -rw-r--r-- 1 re4lfl0w staff 1154 Jun 13 13:58 test_512_2.py -rw-r--r-- 1 re4lfl0w staff 320 Jun 15 13:20 test_confirm.py -rw-r--r-- 1 re4lfl0w staff 1575 Jun 7 18:54 test_last.py -rw-r--r-- 1 re4lfl0w staff 477 Jun 7 18:24 test_original.py -rw-r--r-- 1 re4lfl0w staff 659 Jun 7 18:24 test_process.py -rw-r--r-- 1 re4lfl0w staff 642 Jun 7 19:46 test_process2.py -rw-r--r-- 1 re4lfl0w staff 1529 Jun 13 13:58 test_sha512.py -rw-r--r-- 1 re4lfl0w staff 501 Jun 7 18:24 test_thread.py -rw-r--r-- 1 re4lfl0w staff 551 Jun 7 19:46 test_thread2.py -rw-r--r-- 1 re4lfl0w staff 104 Jun 13 13:58 unzip.py -rw-r--r-- 1 re4lfl0w staff 347 Jun 15 12:59 unzip3.py -rw-r--r-- 1 re4lfl0w staff 146 Jun 15 12:59 unzip_except.py -rw-r--r-- 1 re4lfl0w staff 503 Jun 15 12:59 unzip_module.py -rw-r--r-- 1 re4lfl0w staff 496 Jun 15 12:59 unzip_thread.py -rw-r--r-- 1 re4lfl0w staff 118 Jun 15 13:20 vuln-scanner.py -rw-r--r-- 1 re4lfl0w staff 452 Jun 15 13:20 vuln_banners.txt ---------- 1 re4lfl0w staff 398 Jun 13 13:58 vuln_banners2.txt -rw-r--r-- 1 re4lfl0w staff 1282 Jun 13 13:58 vuln_scanner.py -rw-r--r-- 1 re4lfl0w staff 1291 Jun 15 12:59 zipcrack.py
%%writefile ch01/vuln_scanner.py
import socket
import os
import sys
def retBanner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port))
banner = s.recv(1024)
return banner
except:
return
def checkVulns(banner, filename):
with open(filename, 'r') as f:
for line in f:
if line.strip('\n') in banner:
print '[+] Server is vulnerable: ' + \
banner.strip('\n')
def main():
if len(sys.argv) == 2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] ' + filename + \
' does not exist.'
exit(0)
if not os.access(filename, os.R_OK):
print '[-] ' + filename + \
' access denied.'
exit(0)
else:
print '[-] Usage: ' + str(sys.argv[0]) + \
' <vuln filename>'
exit(0)
portList = [21, 22, 25, 80, 110, 443]
for x in range(159, 160):
ip = '192.168.32.' + str(x)
for port in portList:
banner = retBanner(ip, port)
if banner:
print '[+] ' + ip + ': ' + banner
checkVulns(banner, filename)
if __name__ == '__main__':
main()
Overwriting ch01/vuln_scanner.py
!python ch01/vuln_scanner.py ch01/vuln_banners.txt
!python ch01/vuln_scanner.py ch01/vuln_banners2.txt
[-] ch01/vuln_banners2.txt access denied.
!python ch01/vuln_scanner.py ch01/vuln_banners_not_exist.txt
[-] ch01/vuln_banners_not_exist.txt does not exist.
victim: HX9LLTdc/jiDE: 503:100:Iama Victim:/home/victim:/bin/sh
root: DFNFxgW7C05fo: 504:100: Markus Hess:/root/:/bin/bash
help('crypt')
Help on module crypt: NAME crypt FILE /Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/lib-dynload/crypt.so MODULE DOCS http://docs.python.org/library/crypt FUNCTIONS crypt(...) crypt(word, salt) -> string word will usually be a user's password. salt is a 2-character string which will be used to select one of 4096 variations of DES. The characters in salt must be either ".", "/", or an alphanumeric character. Returns the hashed password as a string, which will be composed of characters from the same alphabet as the salt.
import crypt
# victim 계정의 패스워드와 일치하는 것 확인
crypt.crypt('egg', 'HX')
'HX9LLTdc/jiDE'
프로그램을 작성하기 위해 2개의 함수를 만들 것
하나는 main, 다른 하나는 testpass
서로 다른 기능들은 분리하여 서로 다른 함수로 만드는 것이 유용
main 함수는 암호화된 패스워드 파일인 'passwords.txt'를 열고 패스워드 파일에 있는 각 라인을 읽어온다.
그리고 각 라인마다 사용자 이름과 해쉬화된 패스워드를 분리한다.
그리고 각 해쉬화된 패스워드마다 main 함수는 testPass() 함수를 호출하여 딕셔너리에 파일에 있는 패스워드와 일치하는지 확인
함수 testPass()는 암호화된 패스워드를 인자값으로 입력 받은 후에 패스워드를 찾거나 아니면 딕셔너리에 있는 모든 단어를 대입해본 후에 반환
여기서 주목할 점은 코드에서 암호화된 패스워드 해시에서 첫번째 두 문자를 사용하여 솔트를 만든다는 것
다음으로, 함수는 딕셔너리를 열어서 딕셔너리에 있는 각 단어를 읽어온다. 그리고 단어마다 솔트를 사용하여 패스워드 해시를 생성
그리고 결과값이 암호화된 패스워드 해시와 동일하면 함수는 패스워드를 찾았다는 메시지와 함께 종료
그렇지 않으면 딕셔너리에 있는 모든 단어를 계속 테스트
!cat ch01/passwords.txt
victim: HX9LLTdc/jiDE: 503:100:Iama Victim:/home/victim:/bin/sh root: DFNFxgW7C05fo: 504:100: Markus Hess:/root:/bin/bash
!cat ch01/dictionary.txt
apple orange egg lemon grapes secret strawberry password
# -*- coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# %%writefile ch01/test_pass.py
import crypt
def testPass(cryptPass):
'''dictionary 파일을 읽어서 대입 word와 salt를 묶어서 암호문을 만든다.
새로 만들어진 암호문과 우리가 탈취한 암호문과 비교해서 같다면 대입 word가
원래 사용자의 암호다.'''
# 제일 앞에 2개는 salt
salt = cryptPass[0:2]
dictionary = 'ch01/dictionary.txt'
dictFile = open(dictionary, 'r')
for word in dictFile:
word = word.strip('\n')
# crypt 메소드에 dictionary에서 읽은 라인별 word와
# salt(이건 위에서 1번만 읽으면 됨)를 넣음
cryptWord = crypt.crypt(word, salt)
# 새로 만든 암호문과 우리가 얻어 온 암호문과 똑같은지 비교
if(cryptWord == cryptPass):
print '[+] Found Password: ' + word + '\n'
return
print '[-] Password Not Found. \n'
return
def main():
'''암호화된 passwords 파일을 열어서 testPass를 호출하여 dictionary 방식으로
암호를 Brute Forcing 한다.'''
passwords = 'ch01/passwords.txt'
passFile = open(passwords)
for line in passFile:
# ':' 이 있을 때만
if ':' in line:
# :의 앞부분은 user: victim, root
user = line.split(':')[0]
# : 뒤의 부분이 HX~
cryptPass = line.split(':')[1].strip(' ')
print '[*] Cracking Password For: ' + user
# : 뒤의 부분을 testPass에 넘겨줌. 우리가 풀어야 할 암호문
testPass(cryptPass)
if __name__ == '__main__':
main()
[*] Cracking Password For: victim [+] Found Password: egg [*] Cracking Password For: root [-] Password Not Found.
s = '''victim: HX9LLTdc/jiDE: 503:100:Iama Victim:/home/victim:/bin/sh'''
print s
victim: HX9LLTdc/jiDE: 503:100:Iama Victim:/home/victim:/bin/sh
s.split(':')
['victim', ' HX9LLTdc/jiDE', ' 503', '100', 'Iama Victim', '/home/victim', '/bin/sh']
s.split(':')[1].strip()[0:2]
'HX'
# cat /etc/shadow | grep root
# root:$6$ms32yIGN$NyXj0Yofkk14MpRwFHvXQW0yvUid.slJtgxHE2EuQqgD74S/GaGGs5VCnqeC.bS0MzTf/EFS3uspQMNeepIAc.:15503:0:99999:7:::
!cat ch01/dictionary.txt
apple orange egg lemon grapes secret strawberry password
%%writefile ch01/shadow.txt
root:$6$ms32yIGN$NyXj0Yofkk14MpRwFHvXQW0yvUid.slJtgxHE2EuQqgD74S/GaGGs5VCnqeC.bS0MzTf/EFS3uspQMNeepIAc.:15503:0:99999:7:::
Overwriting ch01/shadow.txt
%%writefile ch01/test_sha512.py
# This source is not exactly.
import os,sys
import crypt
import codecs
from datetime import datetime,timedelta
import argparse
def testPass(cryptPass,user):
dicFile = open ('ch01/dictionary.txt','r')
ctype = cryptPass.split("$")[1]
if ctype == '6':
print "[+] Hash type SHA-512 detected ..."
print "[+] Be patien ..."
salt = cryptPass.split("$")[2]
insalt = "$" + ctype + "$" + salt + "$"
for word in dicFile.readlines():
word=word.strip('\n')
cryptWord = crypt.crypt(word,insalt)
if (cryptWord == cryptPass):
time = time = str(datetime.today() - today)
print "[+] Found password for the user: " + user + " ====> " + word + " Time: "+time+"\n"
return
else:
print "Nothing found, bye!!"
break
def main():
parse = argparse.ArgumentParser(description=\
'A simple brute force /etc/shadow .')
parse.add_argument('-f', action='store', dest='path', \
help='Path to shadow file, example: \'/etc/shadow\'')
argus=parse.parse_args()
if argus.path == None:
parse.print_help()
else:
passFile = open (argus.path,'r')
for line in passFile.readlines():
line = line.replace("\n","").split(":")
if not line[1] in [ 'x', '*','!' ]:
user = line[0]
cryptPass = line[1]
testPass(cryptPass,user)
if __name__=="__main__":
main()
Overwriting ch01/test_sha512.py
!python ch01/test_sha512.py -f ch01/shadow.txt
[+] Hash type SHA-512 detected ... [+] Be patien ... Nothing found, bye!!
%%writefile ch01/test_512_2.py
import crypt
import hashlib
def testPass(cryptPass):
salt=cryptPass.split('$')[2]
print '[i] salt = ' + salt
myPass=cryptPass.split('$')[3]
print 'myPass ', myPass
dictFile = open('ch01/dictionary.txt', 'r')
for word in dictFile.readlines():
word = word.strip('\n')
cryptWord = crypt.crypt(word, '$6$' + salt + '$')
print cryptWord
cryptWord = cryptWord.split('$')[3]
if cryptWord==myPass:
print '[+] Found password: ' + word + '\n'
return
print '[-] Password not found.\n'
return
def main():
passwords = 'ch01/shadow.txt'
passFile = open(passwords)
for line in passFile:
# ':' 이 있을 때만
if ':' in line:
# :의 앞부분은 user: victim, root
user = line.split(':')[0]
# : 뒤의 부분이 HX~
cryptPass = line.split(':')[1].strip(' ')
print '[*] Cracking Password For: ' + user
# : 뒤의 부분을 testPass에 넘겨줌. 우리가 풀어야 할 암호문
testPass(cryptPass)
if __name__ == '__main__':
main()
Overwriting ch01/test_512_2.py
help('zipfile')
Help on module zipfile: NAME zipfile - Read and write ZIP files. FILE /Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/zipfile.py MODULE DOCS http://docs.python.org/library/zipfile CLASSES __builtin__.object ZipFile PyZipFile ZipInfo exceptions.Exception(exceptions.BaseException) BadZipfile LargeZipFile class BadZipfile(exceptions.Exception) | Method resolution order: | BadZipfile | exceptions.Exception | exceptions.BaseException | __builtin__.object | | Data descriptors defined here: | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Methods inherited from exceptions.Exception: | | __init__(...) | x.__init__(...) initializes x; see help(type(x)) for signature | | ---------------------------------------------------------------------- | Data and other attributes inherited from exceptions.Exception: | | __new__ = <built-in method __new__ of type object> | T.__new__(S, ...) -> a new object with type S, a subtype of T | | ---------------------------------------------------------------------- | Methods inherited from exceptions.BaseException: | | __delattr__(...) | x.__delattr__('name') <==> del x.name | | __getattribute__(...) | x.__getattribute__('name') <==> x.name | | __getitem__(...) | x.__getitem__(y) <==> x[y] | | __getslice__(...) | x.__getslice__(i, j) <==> x[i:j] | | Use of negative indices is not supported. | | __reduce__(...) | | __repr__(...) | x.__repr__() <==> repr(x) | | __setattr__(...) | x.__setattr__('name', value) <==> x.name = value | | __setstate__(...) | | __str__(...) | x.__str__() <==> str(x) | | __unicode__(...) | | ---------------------------------------------------------------------- | Data descriptors inherited from exceptions.BaseException: | | __dict__ | | args | | message class LargeZipFile(exceptions.Exception) | Raised when writing a zipfile, the zipfile requires ZIP64 extensions | and those extensions are disabled. | | Method resolution order: | LargeZipFile | exceptions.Exception | exceptions.BaseException | __builtin__.object | | Data descriptors defined here: | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Methods inherited from exceptions.Exception: | | __init__(...) | x.__init__(...) initializes x; see help(type(x)) for signature | | ---------------------------------------------------------------------- | Data and other attributes inherited from exceptions.Exception: | | __new__ = <built-in method __new__ of type object> | T.__new__(S, ...) -> a new object with type S, a subtype of T | | ---------------------------------------------------------------------- | Methods inherited from exceptions.BaseException: | | __delattr__(...) | x.__delattr__('name') <==> del x.name | | __getattribute__(...) | x.__getattribute__('name') <==> x.name | | __getitem__(...) | x.__getitem__(y) <==> x[y] | | __getslice__(...) | x.__getslice__(i, j) <==> x[i:j] | | Use of negative indices is not supported. | | __reduce__(...) | | __repr__(...) | x.__repr__() <==> repr(x) | | __setattr__(...) | x.__setattr__('name', value) <==> x.name = value | | __setstate__(...) | | __str__(...) | x.__str__() <==> str(x) | | __unicode__(...) | | ---------------------------------------------------------------------- | Data descriptors inherited from exceptions.BaseException: | | __dict__ | | args | | message class PyZipFile(ZipFile) | Class to create ZIP archives with Python library files and packages. | | Method resolution order: | PyZipFile | ZipFile | __builtin__.object | | Methods defined here: | | writepy(self, pathname, basename='') | Add all files from "pathname" to the ZIP archive. | | If pathname is a package directory, search the directory and | all package subdirectories recursively for all *.py and enter | the modules into the archive. If pathname is a plain | directory, listdir *.py and enter all modules. Else, pathname | must be a Python *.py file and the module will be put into the | archive. Added modules are always module.pyo or module.pyc. | This method will compile the module.py into module.pyc if | necessary. | | ---------------------------------------------------------------------- | Methods inherited from ZipFile: | | __del__(self) | Call the "close()" method in case the user forgot. | | __enter__(self) | | __exit__(self, type, value, traceback) | | __init__(self, file, mode='r', compression=0, allowZip64=False) | Open the ZIP file with mode read "r", write "w" or append "a". | | close(self) | Close the file, and for mode "w" and "a" write the ending | records. | | extract(self, member, path=None, pwd=None) | Extract a member from the archive to the current working directory, | using its full name. Its file information is extracted as accurately | as possible. `member' may be a filename or a ZipInfo object. You can | specify a different directory using `path'. | | extractall(self, path=None, members=None, pwd=None) | Extract all members from the archive to the current working | directory. `path' specifies a different directory to extract to. | `members' is optional and must be a subset of the list returned | by namelist(). | | getinfo(self, name) | Return the instance of ZipInfo given 'name'. | | infolist(self) | Return a list of class ZipInfo instances for files in the | archive. | | namelist(self) | Return a list of file names in the archive. | | open(self, name, mode='r', pwd=None) | Return file-like object for 'name'. | | printdir(self) | Print a table of contents for the zip file. | | read(self, name, pwd=None) | Return file bytes (as a string) for name. | | setpassword(self, pwd) | Set default password for encrypted files. | | testzip(self) | Read all the files and check the CRC. | | write(self, filename, arcname=None, compress_type=None) | Put the bytes from filename into the archive under the name | arcname. | | writestr(self, zinfo_or_arcname, bytes, compress_type=None) | Write a file into the archive. The contents is the string | 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or | the name of the file in the archive. | | ---------------------------------------------------------------------- | Data descriptors inherited from ZipFile: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) | | comment | The comment text associated with the ZIP file. | | ---------------------------------------------------------------------- | Data and other attributes inherited from ZipFile: | | fp = None class ZipFile(__builtin__.object) | Class with methods to open, read, write, close, list zip files. | | z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=False) | | file: Either the path to the file, or a file-like object. | If it is a path, the file will be opened and closed by ZipFile. | mode: The mode can be either read "r", write "w" or append "a". | compression: ZIP_STORED (no compression) or ZIP_DEFLATED (requires zlib). | allowZip64: if True ZipFile will create files with ZIP64 extensions when | needed, otherwise it will raise an exception when this would | be necessary. | | Methods defined here: | | __del__(self) | Call the "close()" method in case the user forgot. | | __enter__(self) | | __exit__(self, type, value, traceback) | | __init__(self, file, mode='r', compression=0, allowZip64=False) | Open the ZIP file with mode read "r", write "w" or append "a". | | close(self) | Close the file, and for mode "w" and "a" write the ending | records. | | extract(self, member, path=None, pwd=None) | Extract a member from the archive to the current working directory, | using its full name. Its file information is extracted as accurately | as possible. `member' may be a filename or a ZipInfo object. You can | specify a different directory using `path'. | | extractall(self, path=None, members=None, pwd=None) | Extract all members from the archive to the current working | directory. `path' specifies a different directory to extract to. | `members' is optional and must be a subset of the list returned | by namelist(). | | getinfo(self, name) | Return the instance of ZipInfo given 'name'. | | infolist(self) | Return a list of class ZipInfo instances for files in the | archive. | | namelist(self) | Return a list of file names in the archive. | | open(self, name, mode='r', pwd=None) | Return file-like object for 'name'. | | printdir(self) | Print a table of contents for the zip file. | | read(self, name, pwd=None) | Return file bytes (as a string) for name. | | setpassword(self, pwd) | Set default password for encrypted files. | | testzip(self) | Read all the files and check the CRC. | | write(self, filename, arcname=None, compress_type=None) | Put the bytes from filename into the archive under the name | arcname. | | writestr(self, zinfo_or_arcname, bytes, compress_type=None) | Write a file into the archive. The contents is the string | 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or | the name of the file in the archive. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) | | comment | The comment text associated with the ZIP file. | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | fp = None class ZipInfo(__builtin__.object) | Class with attributes describing each file in the ZIP archive. | | Methods defined here: | | FileHeader(self, zip64=None) | Return the per-file header as a string. | | __init__(self, filename='NoName', date_time=(1980, 1, 1, 0, 0, 0)) | | ---------------------------------------------------------------------- | Data descriptors defined here: | | CRC | | comment | | compress_size | | compress_type | | create_system | | create_version | | date_time | | external_attr | | extra | | extract_version | | file_size | | filename | | flag_bits | | header_offset | | internal_attr | | orig_filename | | reserved | | volume error = class BadZipfile(exceptions.Exception) | Method resolution order: | BadZipfile | exceptions.Exception | exceptions.BaseException | __builtin__.object | | Data descriptors defined here: | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Methods inherited from exceptions.Exception: | | __init__(...) | x.__init__(...) initializes x; see help(type(x)) for signature | | ---------------------------------------------------------------------- | Data and other attributes inherited from exceptions.Exception: | | __new__ = <built-in method __new__ of type object> | T.__new__(S, ...) -> a new object with type S, a subtype of T | | ---------------------------------------------------------------------- | Methods inherited from exceptions.BaseException: | | __delattr__(...) | x.__delattr__('name') <==> del x.name | | __getattribute__(...) | x.__getattribute__('name') <==> x.name | | __getitem__(...) | x.__getitem__(y) <==> x[y] | | __getslice__(...) | x.__getslice__(i, j) <==> x[i:j] | | Use of negative indices is not supported. | | __reduce__(...) | | __repr__(...) | x.__repr__() <==> repr(x) | | __setattr__(...) | x.__setattr__('name', value) <==> x.name = value | | __setstate__(...) | | __str__(...) | x.__str__() <==> str(x) | | __unicode__(...) | | ---------------------------------------------------------------------- | Data descriptors inherited from exceptions.BaseException: | | __dict__ | | args | | message FUNCTIONS is_zipfile(filename) Quickly see if a file is a ZIP file by checking the magic number. The filename argument may be a file or file-like object too. DATA ZIP_DEFLATED = 8 ZIP_STORED = 0 __all__ = ['BadZipfile', 'error', 'ZIP_STORED', 'ZIP_DEFLATED', 'is_zi...
%%writefile ch01/unzip.py
import zipfile
zFile = zipfile.ZipFile('ch01/evil.zip', 'r')
zFile.extractall(path='tmp', pwd='secret')
Overwriting ch01/unzip.py
!rm -rf ch01/evil
!ls -l ch01/
total 336 -rw-r--r-- 1 re4lfl0w staff 356 Jun 15 12:59 1thread.py -rw-r--r-- 1 re4lfl0w staff 614 Jun 15 12:59 2process.py -rw-r--r-- 1 re4lfl0w staff 447 Jun 15 12:59 2thread.py -rw-r--r-- 1 re4lfl0w staff 0 Jun 14 14:43 __init__.py -rw-r--r-- 1 re4lfl0w staff 103 Jun 14 14:43 __init__.pyc -rw-r--r-- 1 re4lfl0w staff 57 Jun 23 2012 dictionary.txt -rw-r--r-- 1 re4lfl0w staff 35755 Jun 23 2012 evil.zip -rw-r--r-- 1 re4lfl0w staff 20 Jun 15 12:58 hello.py -rw-r--r-- 1 re4lfl0w staff 35 Jun 15 13:20 main_test.py -rw-r--r-- 1 re4lfl0w staff 148 Jun 15 13:20 main_test.pyc -rw-r--r-- 1 re4lfl0w staff 91 Jun 15 13:20 main_test2.py -rw-r--r-- 1 re4lfl0w staff 302 Jun 15 13:20 main_test2.pyc -rw-r--r-- 1 re4lfl0w staff 122 Jun 15 11:50 passwd -rw-r--r-- 1 re4lfl0w staff 122 Jun 23 2012 passwords.txt -rw-r--r-- 1 re4lfl0w staff 149 Jun 10 17:59 reverse_slash.txt -rw-r--r-- 1 re4lfl0w staff 1154 Jun 15 13:20 test_512_2.py -rw-r--r-- 1 re4lfl0w staff 320 Jun 15 13:20 test_confirm.py -rw-r--r-- 1 re4lfl0w staff 1575 Jun 7 18:54 test_last.py -rw-r--r-- 1 re4lfl0w staff 477 Jun 7 18:24 test_original.py -rw-r--r-- 1 re4lfl0w staff 659 Jun 7 18:24 test_process.py -rw-r--r-- 1 re4lfl0w staff 642 Jun 7 19:46 test_process2.py -rw-r--r-- 1 re4lfl0w staff 1529 Jun 15 13:20 test_sha512.py -rw-r--r-- 1 re4lfl0w staff 501 Jun 7 18:24 test_thread.py -rw-r--r-- 1 re4lfl0w staff 551 Jun 7 19:46 test_thread2.py -rw-r--r-- 1 re4lfl0w staff 104 Jun 15 13:20 unzip.py -rw-r--r-- 1 re4lfl0w staff 347 Jun 15 12:59 unzip3.py -rw-r--r-- 1 re4lfl0w staff 146 Jun 15 12:59 unzip_except.py -rw-r--r-- 1 re4lfl0w staff 503 Jun 15 12:59 unzip_module.py -rw-r--r-- 1 re4lfl0w staff 496 Jun 15 12:59 unzip_thread.py -rw-r--r-- 1 re4lfl0w staff 118 Jun 15 13:20 vuln-scanner.py -rw-r--r-- 1 re4lfl0w staff 452 Jun 15 13:20 vuln_banners.txt ---------- 1 re4lfl0w staff 398 Jun 13 13:58 vuln_banners2.txt -rw-r--r-- 1 re4lfl0w staff 1282 Jun 15 13:20 vuln_scanner.py -rw-r--r-- 1 re4lfl0w staff 1291 Jun 15 12:59 zipcrack.py
import zipfile
zFile = zipfile.ZipFile('ch01/evil.zip', 'r')
zFile.extract?
!python ch01/unzip.py
# extractall에서 path를 지정해주지 않으니 notebook이 실행된 root에 생성이 됐네.
# 괜히 폴더 찾아보면서 삽질했다.
# 항상 실행된 주체가 어디인지 확인할 것. 이걸로 인해 많은 삽질 발생
!ls -l tmp
total 0
drwxr-xr-x 4 re4lfl0w staff 136 Jun 13 13:58 evil
!ls -l evil/
total 88 -rw-r--r-- 1 re4lfl0w staff 38540 Jun 15 13:20 evil.jpg -rw-r--r-- 1 re4lfl0w staff 171 Jun 15 13:20 note_to_adam.txt
!open evil/evil.jpg
!cat evil/note_to_adam.txt
Sorry, you are too late - she ate the apple. -------- [Image downloaded from http://farm3.staticflickr.com/2422/4424308439_7bd9e833d3_z.jpg under Creative Commons License]
%%writefile ch01/unzip_except.py
import zipfile
zFile = zipfile.ZipFile('ch01/evil.zip', 'r')
try:
zFile.extractall(path='tmp', pwd='orange')
except Exception, e:
print e
Overwriting ch01/unzip_except.py
!python ch01/unzip_except.py
('Bad password for file', <zipfile.ZipInfo object at 0x10061e500>)
%%writefile ch01/unzip3.py
import zipfile
zFile = zipfile.ZipFile('ch01/evil.zip')
dictionary = 'ch01/dictionary.txt'
passFile = open(dictionary)
for line in passFile:
password = line.strip('\n')
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
exit(0)
except Exception, e:
# no operation
pass
Overwriting ch01/unzip3.py
!python ch01/unzip3.py
[+] Password = secret
%%writefile ch01/unzip_module.py
import zipfile
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
return password
except:
return
def main():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
guess = extractFile(zFile, password)
if guess:
print '[+] Password = ' + password + '\n'
exit(0)
if __name__ == '__main__':
main()
Overwriting ch01/unzip_module.py
!python ch01/unzip_module.py
[+] Password = secret
%%writefile ch01/unzip_thread.py
import zipfile
from threading import Thread
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
except:
pass
def main():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
if __name__ == '__main__':
main()
Overwriting ch01/unzip_thread.py
!python ch01/unzip_thread.py
[+] Password = secret
import zipfile
from threading import Thread
from multiprocessing import Process, Queue
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
except:
pass
def main_original():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
extractFile(zFile, password)
def main_thread():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
# Queue를 사용하지 않아 똑같은 변수를 받아가서 실행하는 멍청한 multiprocess
def main_multi():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
result = Queue()
pr1 = Process(target=extractFile, args=(zFile, password))
pr2 = Process(target=extractFile, args=(zFile, password))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
def main_multi2():
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
result = Queue()
for line in passFile:
result.put(line.strip('\n'))
pr1 = Process(target=extractFile, args=(zFile, result.get()))
pr2 = Process(target=extractFile, args=(zFile, result.get()))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
main_multi()
[+] Password = secret [+] Password = secret
main_thread()
# %timeit main_multi()
%timeit main_multi2()
[+] Password = secret 100 loops, best of 3: 17.4 ms per loop
%%writefile ch01/1thread.py
from threading import Thread
def do_work(start, end, result):
sum = 0
for i in range(start, end):
sum += i
result.append(sum)
return
if __name__ == '__main__':
START, END = 0, 20000000
result = list()
th1 = Thread(target=do_work, args=(START, END, result))
th1.start()
th1.join()
print 'Result : ', sum(result)
Overwriting ch01/1thread.py
!time python ch01/1thread.py
Result : 199999990000000 real 0m2.009s user 0m1.659s sys 0m0.339s
%%writefile ch01/2thread.py
from threading import Thread
def do_work(start, end, result):
sum = 0
for i in range(start, end):
sum += i
result.append(sum)
return
if __name__ == '__main__':
START, END = 0, 20000000
result = list()
th1 = Thread(target=do_work, args=(START, END, result))
th2 = Thread(target=do_work, args=(START, END, result))
th1.start()
th2.start()
th1.join()
th2.join()
print 'Result : ', sum(result)
Overwriting ch01/2thread.py
!time python ch01/2thread.py
Result : 399999980000000 real 0m5.159s user 0m3.810s sys 0m2.485s
%%writefile ch01/2process.py
from multiprocessing import Process, Queue
def do_work(start, end, result):
sum = 0
for i in range(start, end):
sum += i
result.put(sum)
return
if __name__ == '__main__':
START, END = 0, 20000000
result = Queue()
pr1 = Process(target=do_work, args=(START, END/2, result))
pr2 = Process(target=do_work, args=(END/2, END, result))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
result.put('STOP')
sum = 0
while True:
tmp = result.get()
if tmp == 'STOP':
break
else:
sum += tmp
print 'Result : ', sum
Overwriting ch01/2process.py
!time python 2process.py
/Users/re4lfl0w/Library/Enthought/Canopy_64bit/User/Resources/Python.app/Contents/MacOS/Python: can't open file '2process.py': [Errno 2] No such file or directory real 0m0.025s user 0m0.012s sys 0m0.009s
%%writefile ch01/zipcrack.py
import zipfile
import optparse
from threading import Thread
from multiprocessing import Process, Queue
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Found password ' + password + '\n'
except:
pass
def main():
parser = optparse.OptionParser('usage%prog ' + \
'-f <zipfile> \
-d <dictionary>')
parser.add_option('-f', dest='zname', type='string', \
help='specify zip file')
parser.add_option('-d', dest='dname', type='string', \
help='specify dictionary file')
(options, args) = parser.parse_args()
if(options.zname == None) | (options.dname == None):
print parser.usage
exit(0)
else:
zname = options.zname
dname = options.dname
zFile = zipfile.ZipFile(zname)
passFile = open(dname)
passQueue = Queue()
for line in passFile:
passQueue.put(line.strip('\n'))
pr1 = Process(target=extractFile, args=(zFile, passQueue.get()))
pr2 = Process(target=extractFile, args=(zFile, passQueue.get()))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
if __name__ == '__main__':
main()
Overwriting ch01/zipcrack.py
!python ch01/zipcrack.py -f ch01/evil.zip -d ch01/dictionary.txt
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
except:
pass
def main_original():
import zipfile
zFile = zipfile.ZipFile('ch01/evil.zip')
passFile = open('ch01/dictionary.txt')
for line in passFile:
password = line.strip('\n')
extractFile(zFile, password)
main_original()
[+] Password = secret