gdb-peda 설치하는법
위 표의 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라는 명령어를 통해 한번 자세히 알아보면 좋을것같다.