일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 생활코딩
- html
- vinetto
- 윈도우 프로세스
- memory
- disk
- Window process
- CTF-D
- 윈도우 프로세스 종류
- Multimeida
- 포렌식
- 실기
- 디지털포렌식
- pythonchallenge
- 생활코딩 html
- Multimedia
- slack space
- N0Named
- 슬퍼유
- 네트워크 보안
- 네트워크관리사2급
- 는 하지마...
- network
- 24시간의 전사
- ftz
- 정보처리기사 필기 합격
- 디지털포렌식 with CTF
- ZIP 파일구조
- 2022시작
- blkls
- Today
- Total
ssoL2 TISTORY
pwnable.kr [random] 본문
Daddy, teach me how to use random value in programming!
ssh random@pwnable.kr -p2222 (pw:guest)
#include <stdio.h>
int main(){
unsigned int random;
random = rand(); // random value!
unsigned int key=0;
scanf("%d", &key);
if( (key ^ random) == 0xdeadbeef ){
printf("Good!\n");
system("/bin/cat flag");
return 0;
}
printf("Wrong, maybe you should try 2^32 cases.\n");
return 0;
}
1. rand() 함수는 seed가 일정해서 계속 동일한 값 나온다.
2. 따라서 key XOR random = 0xdeadbeef에서 random과 0xdeadbeef가 일정 값이므로 key에 입력할 값을 계산하면 되겠다
step1. random을 찾아라.
HOW?
random은 if문에서 XOR할 때 사용되므로 그 부분을 gdb로 살펴보자.
아래는 xor할 때 사용되는 rbp-0x4.
main_56에서 eax에 담는 행위를 하므로 해당 실행 주소를 하고 난 후의 eax를 살펴보면 rbp-0x4의 값이 담겨있겠쥬?
rax에 0x6b8b4567이 담겼네. 이게 일정한 rand값이라는 것 + breakpoint걸고 실행하면 scanf때문에 key값 넣어줘야함.
이때, XOR 특징이 0과 XOR하면 자기자신이 나오기 때문에 key에 0값을 줌으로써 random값이 그대로 변하지 않고 나옴
<정리>
key = random XOR 0xdeadbeef = 0x6b8b4567 XOR 0xdeadbeef = 0xB526FB88 = 3039230856(10진수)
key 입력받을 때 scanf로 %d(정수)형태 이므로 정수로 넣어줘야겠쥬
'challenge > pwn' 카테고리의 다른 글
pwnable.kr [leg] (0) | 2021.06.30 |
---|---|
pwnable.kr [input] (0) | 2021.06.30 |
pwnable.kr [passcode] (0) | 2021.06.29 |
[FTZ] LEVEL 18 풀이 (0) | 2021.02.23 |
[FTZ] LEVEL 17 풀이 (0) | 2021.02.23 |