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 | 
                            Tags
                            
                        
                          
                          - 포너블
 - kangsecu
 - 자료구조
 - 블록체인
 - 보안
 - 프로그래밍
 - webhacking.kr
 - nefus
 - 시스템
 - hacking
 - C언어
 - 문제풀이
 - wargame.kr
 - 포렌식
 - CTF
 - xcz
 - 코드게이트
 - 정보보호
 - 웹해킹
 - webhacking
 - 버그헌팅
 - 정보보안
 - 네퓨즈
 - 해킹
 - 워게임
 - DVP
 - WarGame
 - 선린인터넷고등학교
 - 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의 주소가 따인다. 앞으로 잘 써먹어야겠다.