CTF
-
Layer CTF sanity_checkCTF 2016. 9. 4. 20:14
a ^ b = ca ^ c = b 다음과같이 xor이 됨을 참고하여, WelcomeToLayer7CTF 와 위 헥스값을 xor하는 코드를 작성하면된다. 123456789101112#include int main(){ int v7[18] = {0x04, 0x15, 0x06, 0x2c, 0x07, 0x08, 0x35, 0x01, 0x55, 0x04, 0x0b, 0x20, 0x06, 0x09, 0x0c, 0x60,0x1b,0x3c}; char key[18] = "WelcomeToLayer7CTF"; int i; for(i=0;i
-
Layer CTF echo_systemCTF 2016. 9. 4. 19:13
echo_system 문제는 때마다 eip가 바뀌는게 달랐다 (python -c 'print "1234"*(132/4)';cat;) | strace -if ./echo_system 위 페이로드를 넣어줬을때의 실행결과다. 값이 이상하게바뀐다. 하지만 계속 해보면 다음과같이된다 2143 이렇게 들어가는것을 알수있다. 자 그럼, eip가 이렇게바뀌니까 플래그를 읽어주는 인스트럭션인 0x080484ab를 호출하면되겠다. 똑같이 해주면된다. 100%의 익스를 장담하지못한다. 위 환경같이 이상하게 바뀌기도 하기때문
-
PoliCTF 2015 johns-libraryCTF 2016. 8. 24. 23:33
그냥 릭하는 재밌는 문제 찾아보다가 해당 문제를 찾았다. esp 릭하고 esp 리턴해서 쉘코드로 푸는문제다 scanf를 받는데, v2로 입력을 받는다. 근데 v2가 sp에서 0x1c 즉 28바이트만큼 떨어졌다. read하는곳에서 len[v2] + a1을 하는데 a1은 0x1b이다. -28 넣어주면 알아서 릭이된다. 그냥 페이로드 쭉 오버플로우는 다른함수에 gets로 존재한다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647from socket import *import structfrom telnetlib import * p = lambda x:struct.pack("
-
TJCTF onshotCTF 2016. 7. 12. 13:20
int __cdecl main(int argc, const char **argv, const char **envp) { int (__fastcall *v4)(const char *); // [sp+8h] [bp-8h]@1 setbuf(stdout, 0LL); puts("Read location?"); __isoc99_scanf("%ld", &v4); printf("Value: 0x%016lx\n", *(_QWORD *)v4); puts("Jump location?"); __isoc99_scanf("%ld", &v4); puts("Good luck!"); return v4("Good luck!"); } 주소를 넣어주면 그 주소를 읽어서 출력해주고, 점프도해준다. 점프를 해주는곳에서 main주소를 넣어주면 ..
-
SECUINSDIE 2016 notedCTF 2016. 7. 11. 23:46
noted는 대회때 언더플로우 벡터는 잡았지만 릭벡터를 찾지못해 아쉽게풀지못했다.. 풀이 보고나서 풀게되었는데 진짜 너무나도 간단해서 좀 아쉬웠다.. buf[read(0, buf, 0x10u) - 1] = 0; v5 = atoi(buf); // underflow 여기서 언더플로우나는걸 알고 -1을 넣어주면된다 그럼.. 내가 못찾았던 릭 벡터를 찾아보자 n = read(fd, v13, v2 - 16) - 1; v13[n] = 0; close(fd); printf("original data : "); write(1, v13, n); Edit Note메뉴를 들어가보면 n을 입력받아주는데, 여기서 꽉 채워주면 널바이트전까지 릭을해줄거다 d?????n??q??q??n??n? %??? ?q??p?pgp?r? ?q?..
-
SECUINSIDE 2016 CYKOR_00002_patchCTF 2016. 7. 11. 01:28
int sub_8048F50() { char v1; // [sp+70h] [bp-448h]@1 char v2; // [sp+B0h] [bp-408h]@3 char v3; // [sp+B1h] [bp-407h]@4 int v4; // [sp+4B0h] [bp-8h]@1 v4 = 0; printf("----------------------------------------\n"); printf("- Simple Echo System -\n"); printf("----------------------------------------\n"); printf("What is your name?\n"); inputname((int)&v1); if ( !strncmp((int)&v1, (int)"ADMIN", 5u) )..
-
SECUINSIDE 2016 CYKOR_00001CTF 2016. 7. 10. 22:04
전에 쓴 글을 확인하시고 오세요 바이너리는 똑같습니다 XML을 이용해서 보내주는식으로 익스플로잇하는겁니다 service \x0aWhat is your message?\x0a H4PPY_S3CUINSID3\x0a \x0a+ Are you serious?\x0a AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x0a \x0a- Why so serious?\x0a from socket import * from telnetlib import * HOST = "cgc.cykor..
-
SECUINSIDE 2016 CYKOR_00001_PatchCTF 2016. 7. 10. 21:37
이것은 CGC파일이다. CGC는 데프콘에서 풀어봤던문제라 바로 풀긴했는데 그만큼 사람들도 이미 풀어봤던 문제고하니 빨리빨리 풀려서 긴장좀했다 뭐일단.. if ( write(1, (int)"What is your message?\n", 0x16u) ) write함수로 What is your messgae?를 출력해준다. if ( read(0, (int)&v1, 24u, 10) ) { v19 = -1; } else if ( v1 != 72 || v2 != 52 ) { v19 = 7; } else if ( v3 != 80 || v4 != 80 ) { v19 = 6; } else if ( v5 != 89 || v6 != 95 ) { v19 = 5; } else if ( v7 != 83 || v8 != 51 ) ..