(dreamhack/shell_basic) pwntools풀이

noob3er·2022년 12월 18일
0

System Hacking

목록 보기
3/5
post-thumbnail

shell_basic


문제정보

접속정보

익스플로잇 코드

문제 풀이

  • orw 셸 코드를 작성하기 위한 syscall은 위와 같다
  • 파이썬에 있는 pwntools에 shellcraft를 사용하여 풀이
  • python에 pwntools을 import 해준다
  • context.arch를 통해서 자신의 컴퓨터에 맞는 아키텍처를 설정
  • context.log_level = 'debug'를 통해 대상 프로세스와 익스플로잇간에 오가는 모든 데이터를 화면에 출력
  • p 라는 변수에 remote를 사용하여 dreamhack에서 제공하는 주소와 포트를 저장
  • pos라는 변수에 flag위치가 있는 주소를 저장
  • payload라는 변수에 shellcraft의 open을 사용하여 flag값의 경로가 담겨있는 변수 pos를 넣어준다.
  • 다음 payload에는 shellcraft의 read를 사용하여 위에 syscall형식에 따라 fd로 설정되어 있는 rax를 넣어주고 buf에 주소에 rsp를 넣어주고 마지막은 0x100정도 크기를 넣어준다.
    rax가 fd로 설정 되어 있는 이유는 시스템콜 반환된 값이 rax에 저장되기 때문이다.
    buf에 rsp가 들어가는 이유는 buf의 주소가 rsp의 현재 위치이기 때문이다.
  • 마지막 payload에는 write에 표준 입출력 방식의 표준출력인 1을 0번 째 인자에 넣어주고 1번 째와 2번 째 인자는 위와 같다.
  • 이제 recvuntil로 문제를 실행시키면 shellcode: 라는 문자열이 출력 되기 전까지 받고 asm함수를 통해 작성한 payload를 어셈블리어로 변환하고 보내준다.
  • 마지막으로 받은 값(recv())를 print로 출력 해주면 플래그 값이 나온다.

profile
"Hard work beats talent when talent doesn't work hard."

0개의 댓글