LEVEL 2

SigReturn-Oriented Programming

pwnable
  • 문제 정보
  • 풀이 39
  • 난이도 투표 84
  • 질문 5
  • 최근 풀이자 577
  • 댓글 13

문제 설명

Description

Exploit Tech: SigReturn-Oriented Programming에서 실습하는 문제입니다.

난이도 투표 84

질문 5

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
스택 오프셋에서 몇만큼 떨어진 곳의 값이 레지스터에 복사되나요?
Pwntools의 SigreturnFrame()를 사용하지 않고 직접 페이로드를 구성해서 Srop 익스플로잇 코드를 작성하고 싶었습니다. 여기서 이해되지 않는 부분이 sigreturn 시스템콜 호출을 통해서 스택에 있는 값들이 레지스터에 복사가 된다고 했는데 스택에서 어디 부분부터 레지스터에 복사가 되나요? 예시를 위해 이 문제의 코드를 기준으로 질문을 드리겠습니다. // Name: srop.c // Compile: gcc -o srop srop.c -fno-stack-protector -no-pie #include <unistd.h> int gadget() { asm("pop %rax;" "syscall;" "ret" ); } int main() { char buf[16]; read(0, buf ,1024); } 위 소스 코드의 바이너리에서 srop를 하기 위한 기본적인 페이로드 구성은 다음과 같습니다. payload = b'A'*16 # buf payload += b'B'*8 # sfp payload += p64(gadget) # pop rax; syscall; ret payload += p64(15) # sigreturn 위처럼 페이로드를 구성한 뒤에 payload += bytes(frame)을 통해서 익스플로잇을 하는 것이 강의에서 사용했던 방식입니다. 여기서 제가 궁금한 것이 SigreturnFrame()을 사용하지 않고 페이로드를 구성한다고 했을 때 저 페이로드 기준으로 스택에 몇 오프셋부터 값을 덮어야 그 값이 레지스터에 복사가 되나요? (이해가 되지 않아 강의를 여러번 보고, 관련된 Srop 글들을 봤는데도 딱히 저 오프셋 관련된 부분에 대한 답을 구하지 못 했습니다.)
avatar z3rodae0
LEVEL 2

SigReturn-Oriented Programming

pwnable

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
FisMA
워게임 풀이: 50
출제된 지 53분 만에 풀이 완료!

최근 풀이자 577

avatar
foundme
대표 업적 없음
아이스아메리카노
대표 업적 없음
avatar
Rootsquare
바탈리온
hoil
대표 업적 없음
Skywind
대표 업적 없음
애니
대표 업적 없음
avatar
NT_Abdullah
암호학 중급자
sh41k
대표 업적 없음
Ggozil
대표 업적 없음
llllI
대표 업적 없음

댓글 13

avatar
Rootsquare
바탈리온
Learn What is SROP!
g3nie
강의 수강: 1
강의 없이 풀기엔 빡센 문제 gadget을 잘써야한다.
Security-Development
대표 업적 없음
그냥 ROP로도 풀리네요
toffeenutt
프레시맨
강의에 풀이가 있어서 그렇지 쉬운 문제는 아닌거같은데..
avatar
MerryBerry
대표 업적 없음
머리털 다 뽑히겠네
ez
avatar
KUSC2009
Perfect 10
ez
avatar
LOURCODE
Dreamhack CTF Ⅵ 참여
ez
avatar
user99
워게임: 20
ez
avatar
Rasser
워게임: 20
ez