728x90

gdb-peda 설치하는법

 

1. git clone https://github.com/longld/peda.git ~/peda

2. echo "source ~/peda/peda.py" >> ~/.gdbinit

3. echo "DONE! debug your program with gdb and enjoy"

 

위 표의 3개를 순서대로 쳐주면 gdb-peda를 쓸수있다.

 

gdb-peda의 기능

 

 

그냥 disas main을 하면 일반 gdb처럼 글자색이 동일하다.

 

 

그러나 pdisas main을 하게되면 글자색이 구분되어 있어 훨씬 보기 편해진다.

 

 

또 메타스플로잇에 내장되어있는 패턴 페이로드 생성기가 peda에 내장되어 있어서 일일이 메타스플로잇에서 패턴을 생성하고 복붙하는 작업을 줄일수있다.

 

 

또한 pattern search를 사용하면 패턴 시작위치부터 EIP까지의 거리를 알수있다.

 

 

그리고 ropsearch "검색어"를 통해 쓸만한 가젯들을 찾아낼수도 있다.

 

 

 

그리고 공격 유형에 맞게 쉘코드를 생성해주는 기능도 있다.

 

 

또한 skeleton이라는 기능이 있는데 이 기능은 바이너리 공격 코드를 자동으로 생성해주는 기능이다. 바이너리 공격 형태와 생성할 파일명을 위와같이 설정해주면된다. 이러면 공격자는 생성된 파이썬코드의 일부만 수정하여 간편하게 공격을 할수있다.

 

#!/usr/bin/env python
#
# Template for local argv exploit code, generated by PEDA
#
import os
import sys
import struct
import resource
import time

def usage():
    print "Usage: %s target_program" % sys.argv[0]
    return

def pattern(size=1024, start=0):
    try:
        bytes = open("pattern.txt").read(size+start)
        return bytes[start:]
    except:
        return "A"*size

def nops(size=1024):
    return "\x90"*size

def int2hexstr(num, intsize=4):
    if intsize == 8:
        if num < 0:
            result = struct.pack("<q", num)
        else:
            result = struct.pack("<Q", num)
    else:
        if num < 0:
            result = struct.pack("<l", num)
        else:
            result = struct.pack("<L", num)
    return result

i2hs = int2hexstr

def list2hexstr(intlist, intsize=4):
    result = ""
    for value in intlist:
        if isinstance(value, str):
            result += value
        else:
            result += int2hexstr(value, intsize)
    return result

l2hs = list2hexstr

def exploit(vuln):
    padding = pattern(0)
    payload = [padding]
    payload += ["PAYLOAD"] # put your payload here
    payload = list2hexstr(payload)
    args = [vuln, payload]
    env = {"PEDA":nops()}
    resource.setrlimit(resource.RLIMIT_STACK, (-1, -1))
    resource.setrlimit(resource.RLIMIT_CORE, (-1, -1))
    os.execve(vuln, args, env)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        usage()
    else:
        exploit(sys.argv[1])

 

이것이 sol.py의 소스코드이다.

 

 

context라는 기능도 있는데 이것을 치면 메모리/코드구조를 gdb에 비해 보기쉽게 나타내준다. 물론 context code라는 식으로 입력하면 따로따로 볼수도 있다.

 

 

그리고 또 find라는 명령어를 통해 특정 스트링도 찾을수있다.

 

 

 

checksec이랑 aslr이라는 명령어로 보호기법이 걸려있는지 체크도 할수있다.

 

마무리

위에 말했던 기능말고도 strings같은 굉장히 많은 기능들이 있다. phelp라는 명령어를 통해 한번 자세히 알아보면 좋을것같다.

 

 

 

 

 

 

 

 

 

 

 

'Hacking > Tool' 카테고리의 다른 글

yafu  (0) 2018.02.09
NoSQLMap  (0) 2018.01.22

+ Recent posts