-
CTF Tools 정리System/CTF 2018. 9. 30. 04:45
[ One gadget ] Usage : one_gadget [libc_binary]libc에서 한번에 쉘을 따주는 위치의 Offset을 구해서 출력해준다.rax == NULL / [rsp+0x30] == NULL과 같은 제약조건들만 맞춰주면 된다. RET에 libc_base+oneshot_offset값을 덮어주면 쉘이 짠! [ XROP ] Usage : xrop -r [arch] -b [bit] [Binary] ARM, PPC, MIPS 등의 Gadget들을 찾아주는 툴이다.ELF에서의 ROP_gadget이라고 보면 된다. [ qemu ]Usage : ./qemu-arm-static -L [Library_Directory] [Binary]ARM바이너리를 ELF아키텍쳐에서 실행 가능하게 해주는 툴이다.c..
-
[ IP Camera Dos Attack (CVE-2018-6479) ]IoT/IP Camera 2018. 9. 30. 04:00
한 동안 IP Camera분석을 못하고 있다가, 예전에 봐두었던 CVE를 재현해봤다.뭐 재현이랄것도 없지만. CVE Number는 2018-6479이며 올해 초에 등록된 CVE이다. github : https://github.com/dreadlocked/netwave-dosvulnerability Attack Vector는 네크워크이며방대한 양의 POST 데이터를 요청할 때 서비스가 중단되는 공격(Denial of Service)이다. ※ 해당 글에는 CVE 재현에 사용되는 IP Camera 제품에 대해서 어떠한 정보도 제공하지 않았습니다. [ PoC ]1234567891011121314151617import stringimport httplibimport urllib2 host = "192.168.1...
-
[ Rookiss ] loveletterSystem/Pwnable.kr 2018. 8. 26. 05:10
이번에 새로 추가된 Rookiss문제다.포인트는 제대로 잡았는데, 제대로 활용을 못해서 굉장히 오래 걸렸다..ㅠㅠ 우선 문제 취약점은 로직버그로 생긴 BoF이며, Command Injection을 이용해서 쉘을 따내는 문제다.Canary때문에 RET를 직접 덮을 수는 없으며, Size 공간 Overflow가 가능해서 이 부분을 공략하면 되는 문제다. Command Injection으로 쉘 명령어를 실행시킬 수 있는 환경을 조성했더라도 Input의 dummy값까지 명령어로 인식해버려서 이 부분까지 신경을 써줘야 한다. 따라서 STAGE 1 - BoF로 Command Injection으로 쉘 환경 조성하기 STAGE 2 - Input dummy값 처리하기 로 나눠서 Write up을 작성하도록 하겠다. [ ..
-
[FTZ Level19 풀이]System/FTZ 2018. 2. 17. 01:20
[Level19 Code]12345678#include void main(){ char buf[20]; gets(buf); printf("%s\n",buf);} cs코드는 굉장히 심플하다.gets( )에서 BOF취약점이 발생하니까, 이 점을 이용해서 RTL공격으로 쉘을 따도록 하겠다.RTL에 대해서는 블로그에 정리해두었으니, 참고하길 바란다.[RTL 정리글] RTL공격을 하기 위해서는 System( )주소, /bin/sh의 문자열 위치, RET까지의 offset을 구해야 한다.우선 attackme가 사용하는 libc버전을 확인해보자 [ldd attackme]ldd명령어로 libc버전이 /lib/tls에 위치한 so.6버전임을 알아냈다.libc버전을 알아냈으니 이제 System( )와 /bin/sh의 문자..
-
[FTZ Level18 풀이]System/FTZ 2018. 2. 17. 00:44
[Level18 Code]123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shel..
-
[FTZ Level17 풀이]System/FTZ 2018. 2. 16. 20:20
[Level17 Code]123456789101112131415#include void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call();} csLevel16과 흡사한 문제지만, 이번에는 쉘을 실행시켜주는 함수가 없다.그래서 나는 EGGShell로 환경변수를 등록한 후, 환경변수의 주소를 Call( )에 넘겨주는 식으로 쉘을 땄다. [Eggshell Code]12345678910111213141516171819202122232425262728293031323334353637383940414243444..
-
[FTZ Level16 풀이]System/FTZ 2018. 2. 16. 20:06
[Level16 Code]12345678910111213141516171819#include void shell() { setreuid(3097,3097); system("/bin/sh");} void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); call();} cs코드를 보면 call( ) printit( )를 저장해서 call( )가 실행되면 printit( )함수가 실행되도록 되어있다.그리고 위에 shell( )는 쉘을 실행시켜준다. 따라서, 우리는 printif( )의 주소가 저장되는 스택에 shell( )의 주소를 저장해서call( )..
-
[FTZ Level15 풀이]System/FTZ 2018. 2. 16. 19:50
[Level15 Code]1234567891011121314#include main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); }} cs 문제는 Level14와 매우 흡사하다.다른 점이 있다면, check변수가 포인터변수로 변했다는 점이 있다.어셈블리에서는 어떻게 달라졌는지 한번 보도록 하자 [Level15 Assemble] 보면, [EBP-16]공간에 있는 4Byte를 EAX에 저장하고 [EAX]에 있는 4Byte를 deadbeef와 비교한다. 여기서 우리가 주목해야 할 점은 [ ]의 의미이다.CMP부분에서 EAX의 대괄호..