본문 바로가기

wargame

level20 vortex5번이 FSB문제였는데,비슷한 유형인거 같아서 한번 풀이를 적어볼려고 한다. 사실 FSB를 정식으로 공부하지 않아서, 정리할겸 해서 적어보겠다. 일단 hint를 보면 [level20@ftz level20]$ cat hint #include main(int argc,char **argv){ char bleh[80]; setreuid(3101,3101); fgets(bleh,79,stdin); printf(bleh);} 버퍼의 길이가 80인데 79만큼 입력을 받는다. 하지만 아래에 포멧스트링없이 바로 인자를 주었다. 그렇다면 사용자가 직접 포멧스트링을 주면 어떻게 될까??바로 뒤에있는 스택메모리의 값을 참조 할것이다.한번 디버깅을 통해 봐보자, (gdb) rStarting program: /hom.. 더보기
Easy Crack 방학때부터 리버싱 스킬향상을 위해 reversing.kr을 풀어보았다.일단 문제파일은 이것이다.실행한번 시켜보면,다음과 같이 간단한 입력을 할수있는 박스가 나온다.아무 입력값이나 주고 확인버튼을 누르면 다음과 같이 나온다.exeinfo로 봐서 c++로 작성된듯하고, 간단한문제니, 비교루틴을 찾을수 있을것이다.IDA에 어테치 해보았다.일단 패킹은 되어있지 않고,문자열부터 한번 훑어보았다. 다음과 같이 성공과 실패 문자열을 볼수 있다.저 성공 글자를 클릭해서 data영역으로 따라들어간다음, xref를 통해서 이 주소를 사용하는 곳으로 이동하였다.다행히 한곳밖에 없어, 쉽게 문자열 비교루틴을 발견할수 있었다. 디버깅을 통해, GeDlgItemTextA를 통해 입력한 문자열을 받아오는것을 알 수있으며, 따라가면.. 더보기
http://www.pythonchallenge.com/pc/def/linkedlist.php 문제는 아무 글없이 다음과 같이 사진이 한장 있다. 사진을 클릭해보니 아래와 같은 화면이 나왔다. 문제의 url과 같이 linkedlist의 성질을 응용해서 문제를 출제한거 같다. nothing이라는 파라미터에 웹페이지의 숫자를 넣으면 다음페이지가 나온다. 그래서 자동화시키기위해 파이썬으로 코딩해보았다.import urllib,re s='12345' while(True): file = urllib.urlopen("http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="+s) print s solve=file.read() s = "".join(re.findall("(\d+)",solve)) if s=='': if solve[:3]!='Yes': pri.. 더보기
LOB풀다가 생긴 의문점 [+]cobolt풀때1. buf에 놉 10만개줫을떄 나오는 세그폴트당연하다. buf는 스택에 위치해있고, 임시버퍼에서 memcpy로 buf에 복사하면서 0xc0000000을 넘어가면서 페이지 참조오류가 생김. 2.bash로 하고 argv에 줫을때 나는 오류 추적 gets는 엔터로 입력을 받는데 bash로 하니까 0a가 안들어가서 게속 read로 입력을 받는 오류가 발생한다. 더보기
http://www.pythonchallenge.com/pc/def/equality.html 하단의 글을 해석해보면 하나의 작은글자가, 정확히 3개의 큰 보디가드에게 그것의 주변에 둘러싸여있다. 라고 해석할수 있는데, 일단 무슨말인지 잘모르겟으니 소스를 한번 봐 보자. One small letter, surrounded by EXACTLY three big bodyguards oneach of its sides. To see the solutions to the previous level, replace pc with pcc, i.e. goto: http://www.pythonchallenge.com/pcc/def/equality.html Join us on IRC: irc.freenode.net #pythonchallenge다음과 같이 주석으로 암호문이 있다. 암호문을 훑어보니 전부 알파벳으로.. 더보기
http://www.pythonchallenge.com/pc/def/ocr.html 아래쪽의 글을 해석해보면 다음과 같다. 문자를 인식합니다. 어쩌면 그들은 책에하지만 어쩌면 그들은 페이지 소스에 있습니다. 페이지소스를 보라는것 같다.소스를 보면 recognize the characters. maybe they are in the book, but MAYBE theyare in the page source. General tips:Use the hints. They are helpful, most of the times.Investigate the data given to you.Avoid looking for spoilers. Forums: Python Challenge Forums,read before you post. IRC: irc.freenode.net #pythonchalle.. 더보기
http://www.pythonchallenge.com/pc/def/map.html 아래에 암호문과 위 그림을 보니 rot13 즉, 시져암호화 인거 같다.우리는 지금 파이썬을 이용한 워게임을 하고있으니 무식하게 아스키값으로 변환한뒤 더하고 다시변환하는 이러한식의 코딩은 문제를 정확히 풀었다고 할수없다. 그러므로 파이썬의 모듈중에 하나인, translate를 사용해보겠다. import string,urllib oldstring="" for i in range(ord('z')-ord('a')+1): oldstring += chr(ord('a')+i) print "k->m offset:%d" %(ord('m')-ord('k')) print "o->q offset:%d" %(ord('m')-ord('k')) print "e->g offset:%d" %(ord('m')-ord('k')) news.. 더보기
http://www.pythonchallenge.com/pc/def/0.html 2^38을 묻는 문제인듯 하다. 간단히 해결가능하다 힌트를 보아하니 2^38의 값을 URL에다 적으면 될듯 하다. >>> 2**38274877906944L http://www.pythonchallenge.com/pc/def/274877906944.html이렇게 적으면 자동으로 다음문제로 redirect된다. 더보기
level5 summary:simple RTL level5@io:/levels$ cat level05.c#include #include int main(int argc, char **argv) { char buf[128]; if(argc < 2) return 1; strcpy(buf, argv[1]); printf("%s\n", buf); return 0;} level5@io:/tmp/sanguine2$ cat whereisshell.c#include main(){ long shell = 0xb7eaaf10; while(memcmp((void*)shell,"/bin/sh",8)) shell++; printf("%x\n",shell);} level5@io:/tmp/sanguine2$ ./whereisshellb7faa.. 더보기
level4 summary: env PATH attack 소스를 보면 level4@io:/levels$ cat level04.c//writen by bla#include #include int main() { char username[1024]; FILE* f = popen("whoami","r"); fgets(username, sizeof(username), f); printf("Welcome %s", username); return 0;} whoami란 프로그램을 popen이란 함수를 통해서 whoami를 실행시키는데, 이것을 이용해 가짜 whoami파일을 만들어서 공략하면 된다. level4@io:/tmp/sanguine$ cat whoami.c#include int main(){ char *args[]={"/.. 더보기