CTF
-
Backdoor CTF - Enter the MatrixCTF 2016. 6. 7. 00:27
이 문제는 함수포인터와 버퍼에대한 지식이 있다면 손쉽게 풀수있는 문제이다. 다음과같은 코드를 보고 커맨드 인젝션인것은 모두 눈치챘을것이다. 우리는 name 을 입력해줄수있는상태이다. 하지만 이 함수가 호출되는것은 이상한 조건에서만 호출이된다.그 조건을 충족시키지 못하기때문에 다른 방법을 알아내야한다. 이 조건은 맞추기 힘들것같다. 그래서 다른 방법을 구했다. 일단 이걸 참고하고, 제일 중요한 함수가 존재한다. get_input_n함수를 보게되면 구조상 트릭이존재한다. 그리고, 우린 오버플로우를 할 수 있어서 choice 변수를 덮을수있다. 덮어서 뭐하냐? 메인함수 맨밑을 확인해보자 dispatcher + choice로 함수포인터를 호출하는데, choice 는 우리가 1,2,3을 선택할수있게된다. 함수포인..
-
TJCTF - Java sandboxCTF 2016. 5. 31. 22:45
java sandbox 문제는 간단한 sql injection을 거친후에 자바 샌드박스가 등장한다. 웹페이지에서는 다음과같은 쿼리로 샌드박스로 접근하면된다. [ Query ]' or '1'='1-- 간단하게 샌드박스로 접근 할 수 있으며, 중요한건 필터링이 존재하는 자바샌드박스이다. 플래그는 /var/www/안에 존재한다. Directory webFile Wrapper.javaFile DockerfileFile flag.txtDirectory etcFile runapi.pyFile php.iniDirectory html /* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java..
-
TJCTF - gravitymudCTF 2016. 5. 30. 02:08
This problem solve to have sense, It is MISChallenge we use north,south,up,down,east,west,examine ???.. Then, Let's solve this problem This Binary has map, The game is to imagine a RPG Game It is RPG MAP Hey you, Note Make a map! 아 영어 못해먹겠다 각 맵에대한 가젯이 존재하는데, 각각의 맵에 아이템이 떨어져있는것을 확인하고 examine 명령으로 아이템이름을 인자로주고 명령을 넣어주면된다. 하지만 그냥 주는것이아닌 등불이 필요할때도있고 히든맵이 존재하며, 어디를 들러야 되는곳도있다. from s0ngsari import * ..
-
Defcon 24 - LEGIT 1,2,3 PatchedCTF 2016. 5. 23. 22:11
이문제들은 그냥 세그먼트폴트가 안나게끔 바이너리 헥스값들을 뽑아와서 보내주면되는 간단한문제이다. for ( i = 0; i < 256; ++i ) v5[i] = 0; for ( j = 0; j < v7; ++j ) ++v5[*(_BYTE *)(v6 + j)]; wrong code from s0ngsari import * HOST = "legit_00001_patch_1ffce96a2c0e08000e70e4ef3e5aecdf.quals.shallweplayaga.me" PORT = 36483 def recvuntil(t): data = '' while not data.endswith(t): tmp = s.recv(1) if not tmp: break data += tmp return data s = soc..
-
Defcon 24 - easy_praskyCTF 2016. 5. 23. 21:48
easy_prasky 문제는 간단히 코드 이해만 한다면 풀수있는 문제이다. strncpy함수로 v2에 lddwDrwhkTebsYA_ , 17바이트만큼 복사를해주는데, 입력을받고나서 v2에 해당문자열을 4바이트만큼 비교한다.그럼 lddw라는 문자열을 비교하는것과같다. 만약 같지않다면 hacking detected, see ya 가 출력이될것이고, 맞다면 canary ok가 출력될것이다. char v1; // [sp+2Fh] [bp-29h]@1 char v2; // [sp+43h] [bp-15h]@1 v2는 0x15 위치에 존재한다. 카나리를 맞춰주고 오버플로우를 해주면 기본적으로 쉘코드, ROP와 상관없이 세그먼트폴트가 발생하면 플래그를 출력해준다. 또, 파이썬 코드를 통해 이 바이너리가 실행되는데, ba..
-
Defcon 23 - babycmdCTF 2016. 5. 19. 00:30
babycmd 는 64비트 ELF 바이너리가 주어진다. 일단 트릭문제임을 알아채고 첫번째로 분석을 시작했다.64비트라고 무조건 그런것은 아니지만 바이너리 이름부터 커맨드와 관련된것이 아닐까? 일단 다음과같은 코드로 개행문자를 만나기전까지 입력을받는다. do { v7 = _IO_getc(stdin); if ( v7 == -1 ) break; if ( v7 == '\n' ) break; ++v6; v12[v5] = v7; v5 = v6; } v12에 넣고, v12를 strncpy 로 dest 란 변수에 저장하게되는데 아래코드를 보면 다양한 커맨드로 비교를 한다 strcasecmp는 처음보지만, strcmp와 동일한 기능을 하는것같다. 만약 커맨드가 들어간다면 각각의 함수들이 호출되는데, sprintf_chk..
-
TUCTF pwn75CTF 2016. 5. 18. 03:21
int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [sp+10h] [bp-20h]@1 puts("What's your name?"); fflush(stdout); gets((char *)&v4); puts("What's your favorite number?"); fflush(stdout); __isoc99_scanf("%d", &meow); if ( meow & 1 ) { printf("Hello %s, %d is an odd number!\n", &v4, meow); fflush(stdout); } else { printf("Hello %s, %d is an even number!\n", &v4, meow); f..