728x90
반응형
1. intro
2. code 및 분석
2.1. C code
/*
* phoenix/net-zero, by https://exploit.education
*
* What did the fish say when he swam head first into a wall?
* Dam!
*/
#include <err.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/random.h>
#include <sys/types.h>
#include <unistd.h>
#define BANNER \
"Welcome to " LEVELNAME ", brought to you by https://exploit.education"
int main(int argc, char **argv) {
uint32_t i, j;
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
printf("%s\n", BANNER);
if (getrandom((void *)&i, sizeof(i), 0) != sizeof(i)) {
errx(1, "unable to getrandom(%d bytes)", sizeof(i));
}
printf("Please send '%u' as a little endian, 32bit integer.\n", i);
if (read(0, (void *)&j, sizeof(j)) != sizeof(j)) {
errx(1, "unable to read %d bytes from stdin", sizeof(j));
}
if (i == j) {
printf("You have successfully passed this level, well done!\n");
} else {
printf("Close - you sent %u instead\n", j);
}
return 0;
}
2.2. 분석
사실상 pwntools를 사용하라는 의미의 문제라고 생각한다.
랜덤 값을 i 변수에 받고 j 값을 입력받은 다음 둘을 비교한다.
다만 j 값은 string으로 입력받기 때문에 hex 값을 삽입해줘야 한다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
별도 취약점은 없다.
3.2. 공격 준비
특별히 준비할 것 없이 pwntools를 이용해서 공격 코드를 작성하자.
4. exploit
from pwn import *
p = remote ('localhost', 64000)
p.recvuntil('\'')
i = int(p.recvuntil('\'')[:-1])
p.recvline()
print(i)
print(hex(i))
p.send(p32(i))
print(p.recvline())
user@phoenix-amd64:~$ python /tmp/a.py
[+] Opening connection to localhost on port 64000: Done
1927523823
0x72e3adef
You have successfully passed this level, well done!
728x90
반응형
'Wargame > Exploit Education' 카테고리의 다른 글
[Phoenix] Net two (0) | 2022.10.13 |
---|---|
[Phoenix] Net one (0) | 2022.10.13 |
[Phoenix] Heap three (0) | 2022.10.06 |
[Phoenix] Heap two (0) | 2022.10.06 |
[Phoenix] Heap one (0) | 2022.10.04 |