시스템 해킹

 1576, 1/79 회원가입  로그인  
   pwnnnt
   고수님들께 질문합니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1838 [복사]


Codegate 2014 - angry doraemon 바이너리를 보다 이해가 안 돼서 질문합니다.


payload += (생략)
paylaod += p32(elf.plt["write"]) # RET 영역
payload += pop3ret
payload += p32(4) + p32(elf.got["read"]) + p32(4) + text section + argv(4)

# Write() 인자 p32(4) + p32(elf.got["read"]) + p32(4)

pop3ret은 gdb peda를 통해 가져와서 사용했습니다.
payload를 보내면 eip가 argv 값으로 세팅됩니다.... (??)
그래서 테스트를 하기 위해 payload를 다음과 같이 수정하였더니,

payload += p32(4) + p32(elf.got["read"]) + p32(4) + p32(10) + text section + argv(4)

write()가 끝나며 pop3ret을 만나 eip가 정상적으로 0xa로 바뀌었습니다.
왜 처음 만든 payload에서는 eip가 text section로 바뀌지 않는 걸까요 ?
이유를 모르겠습니다.... ㅜㅜㅜㅜㅜㅜ

* angrydoraemon은 소켓을 이용한 문제입니다.



  Hit : 3071     Date : 2017/03/30 12:32



    
해쿨러 text section이라고 쓰신게 어떤 인스트럭션 시퀀스의 주소인지를 알아야 합니다
0xa로 설정이 됐다면 처음에도 분명히 text section으로 변경됐을거고 그 코드에서 argv로 리턴하면서 eip가 argv로 설정됐을겁니다
2017/03/30  
pwnnnt 감사합니다 :D 2017/03/30