일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hacking
- 선린인터넷고등학교
- webhacking.kr
- wargame.kr
- 워게임
- kangsecu
- 네퓨즈
- Pwnable
- webhacking
- nefus
- 버그바운티
- xcz
- DVP
- CTF
- 포렌식
- 프로그래밍
- 버그헌팅
- 정보보호
- 문제풀이
- 보안
- 포너블
- 시스템
- 블록체인
- 정보보안
- 자료구조
- WarGame
- 웹해킹
- C언어
- 해킹
- 코드게이트
- Today
- Total
kangsecu's B1og
[HackCTF]Pwnable - second line 본문
1. x64 Buffer Overflow
binary :
main.c :
callmemaybe.c :
exploit :
2. x64 Simple_size_BOF
binary :
main.c :
exploit :
총 shell_code(31) + dummy(27929) + ret(buf_addr)
3. Simple_Overflow_ver_2
binary :
main :
이번 문제는 매우 간단하다.(사실 지금까진 다 간단하다.) 그냥 scanf에서 취약점이 발생한다. 그리고 ret까지는 0x88 = 140이다.
payload :
shellcode(25) + dummy(115) + ret_addr
4. Offset
binary :
main :
select_func :
print_flag :
main에서 gets로 &s를 입력받아서 select_func함수의 인자로 전달한다. v3변수는 처음엔 two의 주소값을 갖지만, 인자로 전달받은 src의 값이 one이면 one의 주소값을 갖게된다. > 바로 이 점이 우리가 공략할 것 이다.
보호기법들 때문에 뭐 할 수 있는게 없다. 하지만 PIE가 있어도 오프셋값만 맞춰주면 되기 때문에 문제 이름이 Offset인 것 같다.
함수들을 뒤져보니 print_flag라는 함수가 있었고, 누가봐도 select_func에서 리턴될 때 마지막 값을 print_flag함수를 가르키게 하면 해결 되는 것 같았다. 그래서 gdb를 이용하여 dummy가 30인걸 구했다.
payload :
dummy(30) + print_falg_addr
해결 한 후, 확인하기 위하여 이것저것 봤는데 보통은 strncpy함수에서 src의 1byte만 덮을 수 있어서 31바이트중에 dummy(30) + "\xd8"로 하는 풀이들도 봤는데 그게 더 현명한 것 같다,,,
'System > wargame' 카테고리의 다른 글
[HackCTF]Pwnable - fourth line (0) | 2020.03.09 |
---|---|
[HackCTF]Pwnable - third line (0) | 2020.03.01 |
[HackCTF]Pwnable - first line (0) | 2020.02.23 |