일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 컴퓨터구조
- 리눅스 커널
- 리버싱
- write up
- 워게임
- 커널
- kernel
- 취약점
- C++
- Leviathan
- 시스템프로그래밍
- 알고리즘
- 프로그래밍
- 시스템해킹
- pwncollege
- 리눅스커널
- px4
- radare2
- css
- wargame
- 드론
- 리눅스
- Bandit
- 어셈블리어
- 시스템 프로그래밍
- pwn.college
- Pwnable.kr
- C언어
- 시스템
- 시그널
Archives
- Today
- Total
Computer Security
#6 Pwnable.kr : random 문제풀이 본문
반응형
1. ls -al 을 보니, random파일이 보인다.
2. ./random 을 통해 실행 시켜보니,,, 뭐 2^32 시도해보라는데,,, 무리인듯 하다.
3. vi random.c를 이용해 코드를 뜯어보자.
- rand()를 이용해 랜덤값을 random 변수에 넣어주고 있고, 사용자는 key 값을 입력한다.
- 두 변수를 XRO한 값이 0xDEADBEEF 이면, flag를 출력해주는 함수이다.
- 그런데 자세히 보니, rand()함수에 send를 주지 않고 있다.
- send가 변칙적인 값이라 rand함수에서 매번 다른 값이 나오지만, 얘는 rand() 만 사용하고 있기 때문에, 생성되는 랜덤값이 규칙적이라는 것을 알 수 있었다.
4. gdb로 분석 해보자.
일단 callq 0x400500에서 호출직후, main<+18> 요기 -0x4(%rbp) 속에 rand 로 생성된 난수가 있을테니, bp를 걸고 해보자.
5. x/x $rbp-0x4 라는 부분에 어떤 값이 들어가 있는지 확인해준다.
이 값은 send가 없기 때문에, 항상 같은 값일 것이다.
6. 이제 0x6b8b4567 과 0xdeadbeef 값을 XOR 해주면 입력해야할 key 값을 얻을 수 있을 것이다. 파이썬으로 알아보자.
7. 이제 다시 돌아가서 key 값에 3039230856 을 넣어주자!
8.위에서 얻은 Mommy, I thought libc random is unpredictable... 문구가 맞는지 확인 해보자!
성공!
반응형
'Wargame:Pwnable.kr' 카테고리의 다른 글
#5 Pwnable.kr : passcode 문제풀이 (0) | 2022.08.05 |
---|---|
#4 Pwnable.kr : flag 문제풀이 (0) | 2022.08.04 |
#3 Pwnable.kr : bof 문제풀이 (0) | 2022.08.02 |
#2 Pwnable.kr : collision 문제풀이 (0) | 2022.08.01 |
#1 Pwnable.kr : fd 문제 풀이 (0) | 2022.07.31 |
Comments