KDHzoot's Github

Code for study, project, etc

자세히보기

정보보안 16

[pwnable.kr] random

rand()함수와 srand()함수의 차이점을 알면 풀 수 있다. rand()함수는 한번 실행되면 값이 고정돼서 변하지 않는다.gdb로 뜯어서 key값에 저장된 난수 값을 확인하면 쉽게 풀 수 있다. 255는 16진수로 ff이다.ff 좌우에 0x00007ffd와 0x6b8b4567이 있다.0x00007ffd는 다시 실행해보니 값이 바뀌었으므로 key값은 0x6b8b4567이다. 입력과 key를 xor 했을 때 0xdeadbeef가 나와야 되므로입력은 0xdeadbeef에 key를 xor한 값이다. exploit code

[pwnable.kr] passcode

치킨은 맛있다. c코드만 보면 쉬워보인다. 그런데 해보면 segfalt가 뜬다.scanf에서 인자를 변수의 주솟값이 아니라 변수의 값 자체를 넘겨주기 때문이다. 따라서 system함수를 실행시키기 위한 다른 방법을 찾아야한다.먼저 생각해 볼 수 있는 것이 welcome에 있는 name 배열을 이용하여 welcom 함수의 ret를 system함수로 조작해주는 것이다.그러나 입력받는 값이 100글자이고 canary가 걸려있어 bof는 안된다.마찬가지로 nx가 걸려있어서 shellcode도 안된다. 여기서 알아내기 힘든것이 name배열의 96에서 100번째 글자 4바이트가login 함수의 password1의 위치이다. 어셈블리어 코드를 보면 welcome 함수와 login 함수의 호출이 바로 인접해서 일어남으..

[DEFCON CTF 2015] r0pbaby

결론부터 말하자면 못풀었다.대회가 끝난뒤 local에서 푸느라 local libc를 사용해야 됐다.PIE가 걸려있어서 ROP가젯을 libc에서 구해야 되는데 pop rdi; ret 가젯이 libc에 없었다.왜 그런지는 나중에 알 기회가 있겠지 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495__int64 __fastcall main(__int64 a1, char **a2, char **a3){ signed int v3; // eax ..

정보보안/CTF 2018.11.08

[pwnable.kr] echo1

NX는 안걸려있지만 서버환경상 aslr이 걸려있으므로 스택영역에 쉘코드를 쓰고 그 주소를 RET값에 넣는 방법은 안된다. bss영역은 aslr이 적용되어도 주소가 변하지 않음으로 id가 bss영역에 있는 것을 이용하여 쉘코드를 실행 시킬 수 있다. 버퍼오버플로우가 발생하는 echo1함수다. 먼저 id에 "\xff\xe4" 값을 넣는다.이는 어셈블리어로 jmp esp명령어와 같다. >>> payloaddump(40) + id_addr(8) + shellcodex64는 주소가 8바이트이다.쉘코드도 x32와 다른 코드를 사용해야한다. echo1함수의 에필로그에서 leave ret후 eip는 id의 주소를 가르키고 esp는 id_addr다음 쉘코드를 가르키게된다.id에는 jmp esp명령이 있으므로 eip가 e..