Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- CTF
- 자료구조
- 코드게이트
- 블록체인
- webhacking.kr
- hacking
- nefus
- 해킹
- wargame.kr
- 버그바운티
- 시스템
- 포너블
- 포렌식
- 웹해킹
- C언어
- 정보보호
- DVP
- 네퓨즈
- kangsecu
- 워게임
- 정보보안
- 문제풀이
- WarGame
- 프로그래밍
- 선린인터넷고등학교
- webhacking
- xcz
- 버그헌팅
- Pwnable
- 보안
Archives
- Today
- Total
kangsecu's B1og
2020 UTCTF - bof * 본문
포너블을 공부해봐야겠다고 생각한 이후로 처음으로 CTF에서 문제를 푼 것 같지만... 너무 쉬운 문제라 별로 감흥이 없다.
이전 워게임들이 더 어려운 것 같다.
아무튼.. 그래도 기념삼아,,
binay :
여기서부터 RTL의 느낌이 강하다고 생각했다.
main.c :
get_flag :
a1값이 죽은소고기가 되면 해결인데 main이랑 호출관계가 없다. -> RTL
exploit :
0x4005ea는 get_flag의 주소이고, 0x400693은 pop_rdi; ret 로 rop가젯이다. 그리고 그 뒤에 인자로 죽은소고기를 넣고 get_flag를 실행
main에서 바로 get_flag를 호출할 수 없고, get_flag를 호출하기 전에 a1값에 인자로 죽은소고기를 넣어줘야하기 때문에 ropgadget이 사용된다.
페이로드의 순서구성이 저런 이유는 우선 더미와 sfp를 채우고, pop_rdi에서 인자를 먼저 던져줘야 다음 리턴하면서 get_flag에 적절한 반응
x64 익스는 거의 오랜만인데,, dummy(112)+sfp(8)+ret(6)이라고 한다..
p.s
rop에 대하여 더 자세히 공부할 예정이다.
그리고 지금까지 gdb나 ida에서 하나하나 주소를 알아냈는데 그냥 pwntools에서
e.ELF("pwnable")
flag_addr = e.symbols["get_flag"] 하면 알아서 get_flag의 주소가 따인다. 앞으로 잘 써먹어야겠다.