System hacking training/pwnable.xyz
-
sub write upSystem hacking training/pwnable.xyz 2019. 12. 31. 13:31
Welcome보다 쉽게 풀었다. 거두절미하고 디컴파일해보면 답이 나온다. main()함수를 디컴파일 해본 결과인데, v5와 v6에 사용자에 대해 입력을 받고, 두 수가 4918보다 작거나 같으면서 두 수의 차가 4919일 때 flag를 출력해준다. 따라서 위 두 조건을 만족시키며 flag를 출력할 수 있는데, v5에는 0, v6에는 -4919를 입력하면 뚝-딱 풀린다. ⚡ root@ubuntu /mnt/hgfs/vm_shared/pwnable.xyz nc svc.pwnable.xyz 30001 1337 input: 0 -4919 FLAG{--------------------} 의문이 들었던 부분은 scanf()함수를 호출할 때 format string으로 %u(unsigned int)를 지정했는데..
-
Welcome write upSystem hacking training/pwnable.xyz 2019. 12. 22. 19:11
pwnable.xyz의 첫번째 문제다. 64bit 바이너리이며 dynamically linked되어있고, stripped되어있다. 모든 메모리 보호기법이 적용되어있는 녀석이다. IDA로 main()함수를 디컴파일 해보면 다음과 같은 결과가 나오는데, 결론적으로 system("cat /flag")가 수행되기 위해서 v3이 가리키는 값이 0이여야만 한다. 코드상에서 v3에 대한 사용자의 input이 없기 때문에 불가능해 보인다. 하지만 v10과 malloc() 함수의 특성 덕분에 *v3에 0을 넣을 수 있는데, 바이너리는 다음과 같이 동작한다. 1. v3 = malloc(0x40000uLL) 2. leak v3 address 3. User input v10 4. v5 = malloc(v10) 5. read(..