일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 선린인터넷고등학교
- 포렌식
- 정보보호
- 자료구조
- kangsecu
- 버그헌팅
- nefus
- 워게임
- 해킹
- 포너블
- C언어
- xcz
- webhacking
- DVP
- 정보보안
- 문제풀이
- WarGame
- webhacking.kr
- hacking
- 블록체인
- 프로그래밍
- CTF
- wargame.kr
- 시스템
- 버그바운티
- 네퓨즈
- 웹해킹
- Pwnable
- 보안
- 코드게이트
- Today
- Total
kangsecu's B1og
[HackCTF]Pwnable - fourth line 본문
1. Poet
binary :
get_poem.c :
rate_poem.c :
reward.c :
대충 보면 그냥 poem을 입력받아서 1000000점을 넘기면 플래그를 준다. 위에 rate_poem.c 에 있는 문자들을 입력하면
100점을 주는데 저걸로 1000000점을 채울 수 없다. 근데 점수를 저장하는 변수인 dword_6024E0이 bss영역에 있다.
gdb로 rate_poem를 보면 100점을 늘려주는 부분이 strcmp를 하고 나서 rip + 0x201bae에 존재하는걸 알 수 있다. 즉
rip + 0x201bae == dword_6024E0이다. 그리고 get_author를 보면 unk_6024A0과 dword_6024E0의 거리를 구해서 만족할 점수를 넣어주면 된다는것을 알 수 있다. 그리고 두 변수 사이의 거리는 64bytes이다.
exploit :
간단하게 처음에 아무거나 입력하고 두번째에서 author을 물을때 값을 넘겼다.
2. 1996
binary :
main.c :
shell.c :
그냥 간단한 rtl문제이다. getenv에서 bof를 일으켜서 ret를 shell함수로 overwrite하면된다.
exploit :
3. Random key
binary :
main.c :
그냥 rand값으로 생성하는걸 맞춰주면 된다. 우리도 파이썬 CDLL을 이용하여 난수를 생성하자.
exploit :
4. RTL_core
binary :
main.c :
입력한 값을 hashcode랑 비교한 후 core실행
core.c :
후에 조건문을 맞추면 printf의 주소를 릭해준다.
check_passcode.c :
이걸 구하는게 사실 문제푸는것보다 오래걸렸다. 5번을 돌리면서 0C0D9B0A7h을 5로 나누고 다시 5를 곱하면 값이 부족하니까 그냥 4번을 곱하고 부가적으로 부족한 값을 더해줬다.
exploit :
끝.
'System > wargame' 카테고리의 다른 글
[HackCTF]Pwnable - third line (0) | 2020.03.01 |
---|---|
[HackCTF]Pwnable - second line (0) | 2020.02.23 |
[HackCTF]Pwnable - first line (0) | 2020.02.23 |