Linux/모의해킹

Python 디버깅

GGkeeper 2022. 1. 8. 02:36

실습> python 디버깅

파이썬 코드 : VScode 를 사용하지 않고 디버깅 하는 방법
pdb 를 이용한다. 
사용법 : python -m pdb 소스파일

help : 도움말
break (b) : BP 설정
run (r) : 프로그램 실행 (VSCode F5)
next (n) : 다음 실행문으로 이동 (VScode F10)
step (s) : Step Into 로 함수, 클래스 안으로 들어가면서 실행문으로 이동 (VScode F11)
list (l, ll) : 소스코드 출력
continu (c) : 다음 BP까지 계속 실행 (VScode Shift + F11)
print (p) : 변수의 값을 출력
quit (q) : pdb 프로그램 종료

Attacker# vi pdbTest1.py
-- pdbTest1.py --
#!/usr/bin/python3

i = 1
j = 2
hap = i + j
print(hap)
print('프로그램 종료') 
-- pdbTest1.py --

파이썬 코드를 실행권한을 설정하지 않고 코드를 실행하는 방법
Attacker# python3 pdbTest1.py
3
프로그램 종료

파이썬 코드를 실행권한을 설정하고 코드를 실행하는 방법
Attacker# chmod 755 pdbTest1.py
Attacker# ./pdbTest1.py
3
프로그램 종료


Attacker ~# python3 -m pdb pdbTest1.py 
> /root/pdbTest1.py(3)<module>()
-> i = 1
(Pdb) 


(Pdb) help

Documented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt      
alias  clear      disable  ignore    longlist  r        source   until    
args   commands   display  interact  n         restart  step     up       
b      condition  down     j         next      return   tbreak   w        
break  cont       enable   jump      p         retval   u        whatis   
bt     continue   exit     l         pp        run      unalias  where    

Miscellaneous help topics:
==========================
exec  pdb


각 명령어의 도움말 확인하기
(Pdb) help next
n(ext)
        Continue execution until the next line in the current function
        is reached or it returns.
(Pdb) help p
p expression
        Print the value of the expression.



소스코드의 리스트를 확인한다.
list, l, ll 
(Pdb) list
  1   #!/usr/bin/python3
  2  
  3  -> i = 1
  4   j = 2
  5   hap = i + j
  6   print(hap)
  7   print('프로그램 종료')
  8  
[EOF]
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3  -> i = 1
  4   j = 2
  5   hap = i + j
  6   print(hap)
  7   print('프로그램 종료')
  8  

(Pdb) n
> /root/pdbTest1.py(4)<module>()
-> j = 2
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3   i = 1
  4  -> j = 2
  5   hap = i + j
  6   print(hap)
  7   print('프로그램 종료')
  8  

변수 i에 저장된 값을 확인한다. 
print, p 명령어를 사용할 수 있다.
(Pdb) print(i)
1
(Pdb) p i
1

n 을 이용해서 4번 라인의 코드를 실행한다.
(Pdb) n
> /root/pdbTest1.py(5)<module>()
-> hap = i + j

ll을 이용해서 현재 위치를 확인한다.
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3   i = 1
  4   j = 2
  5  -> hap = i + j
  6   print(hap)
  7   print('프로그램 종료')
  8  
(Pdb) 

(Pdb) p j
2

n 을 이용해서 5번 라인의 코드를 실행한다.
(Pdb) n
> /root/pdbTest1.py(6)<module>()
-> print(hap)

ll을 이용해서 현재 위치를 확인한다.
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3   i = 1
  4   j = 2
  5   hap = i + j
  6  -> print(hap)
  7   print('프로그램 종료')
  8  
(Pdb) p hap
3

(Pdb) c
3
프로그램 종료
The program finished and will be restarted
> /root/pdbTest1.py(3)<module>()
-> i = 1

pdb를 종료한다.
(Pdb) q


Attacker ~# python3 -m pdb pdbTest1.py 
> /root/pdbTest1.py(3)<module>()
-> i = 1
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3  -> i = 1
  4   j = 2
  5   hap = i + j
  6   print(hap)
  7   print('프로그램 종료')
  8  

6번 라인에 BP를 설정한다.
(Pdb) b 6
Breakpoint 1 at /root/pdbTest1.py:6
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3  -> i = 1
  4   j = 2
  5   hap = i + j
  6 B print(hap)
  7   print('프로그램 종료')
  8  

r 을 이용해서 프로그램을 실행한다.
BP 설정되어 있는 곳까지 실행하고 BP 없으면 프로그램을 끝까지 실행한다.
(Pdb) r
> /root/pdbTest1.py(6)<module>()
-> print(hap)
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3   i = 1
  4   j = 2
  5   hap = i + j
  6 B-> print(hap)
  7   print('프로그램 종료')
  8  

변수 i, j, hap에 저장된 값을 확인한다.
(Pdb) p i, j, hap
(1, 2, 3)

n 을 이용해서 6번 라인의 코드를 실행한다.
(Pdb) n
3
> /root/pdbTest1.py(7)<module>()
-> print('프로그램 종료')
(Pdb) ll
  1   #!/usr/bin/python3
  2  
  3   i = 1
  4   j = 2
  5   hap = i + j
  6 B print(hap)
  7  -> print('프로그램 종료')
  8  

n 을 이용해서 7번 라인의 코드를 실행한다.
(Pdb) n
프로그램 종료
--Return--
> /root/pdbTest1.py(7)<module>()->None
-> print('프로그램 종료')

q를 이용해서 pdb를 종료한다.
(Pdb) q

'Linux > 모의해킹' 카테고리의 다른 글

DNS Spoofing 공격  (0) 2022.01.08
ARP Redirect 공격  (0) 2022.01.08
arpspoof2.py 분석하기  (0) 2022.01.08
arpspoof 공격 스크립트 작성하기  (0) 2022.01.06
ARP spoofing (스푸핑)  (0) 2022.01.06