WriteUp

    Forensic : Terrorist

    파일을 다운받아보니까 이상한 헤더를 가지고 있다. ftypM4A 이런게 있는데 M4A 파일이라고 한다. 음성 녹음 파일이다. 사진이 아니라 단순히 확장자만 변경해주면 재생이 된다. 진짜 알수없는 소리가 들린다. 편집기로 좀 해보고싶은걸 해봤다. (sonic visualizer 사용) 배속으로 빨리 들어도 보고 뒤집어도 들어봤다. 뭔가 나온다. "미션을 수행하는 요원들에게 알립니다. 다음 테러 목표지점은 서울남산타워입니다." HackCTF{서울남산타워}

    Forensic : Magic PNG

    Forensic : Magic PNG

    파일을 열어보니 당황스럽다. 음 어딘가가 깨져있는 것 같다 파일을 HxD로 확인해 보자. 파일 헤더부분이 잘못되어 있다. PNG 헤더의 첫 8바이트는 89 50 4E 47 0D 0A 1A 0A 이다. 여기는 89 50 4E 47 2E 0A 2E 0A 로 나와있는데 수정해보자. 저장해보니 사진의 일부가 나온다. 다른 부분도 잘못 되어있는것 같으니 확인해보자. PNG 파일에는 반드시 포함되어야 하는 청크가 있는데 IHDR, IDAT, IEND 이다. 3개가 모두 있는지 확인해보자. 10008 블럭부터 idat 로 나와있기 때문에 그 밑에서부터는 사진이 짤려 보이는 것 같다. 수정해주자. 사진이 제대로 나온다. HackCTF{c@n_y0u_$ee_m3?}

    Forensic : 나는 해귀다

    Forensic : 나는 해귀다

    hex 를 뒤집어놓았다고 한다. HxD 로한번 보자. 아 IEND 부분이 나오고 바로 뒷부분에 DNEI 가 나오는 것을 볼 수 있다. 그럼 맨 밑을 보자. PNG 헤더 앞부분도 거꾸로 들어가 있는 것을 확인할 수 있다. 그럼 이부분을 쭉 긁어서 hex 부분만 거꾸로 출력해주면 되겠다. a = "긁은 부분 (너무 길어서 생략)" c = a.split(" ") length = len(c) res="" res1="" for i in range(0,length): res += str(c[length-i-1]) res += " " print(res) 이렇게 쭉 나오는 것을 HxD 에 다시 긁어 넣은 다음 파일을 저장하면 다음과 같이 나온다. 거꾸로 있네 제대로 써보자. HackCTF{Y0u_tu2n3d_th3_$..

    Command & Control - level 2

    Command & Control - level 2

    ch2.dmp 파일이 있다. 지난 학기에 실습을 했던적이 있었는데, DumpIt으로 메모리를 dmp 해서 추출하는 것이였다. 이때 volatility를 사용하라고 하셨는데 그냥 string 추출해서 보는 방법도 있었다. 일단 문제를 보면 WorkStation 의 HostName 을 알아야 한다고 한다. 이런건 보통 레지스트리 정보에 들어가 있다. 해당 경로에 저장되어 있다고 한다. 한번 보도록 하자. 툴을 사용해야 하는데 사용할수 있는게 문제에서는 volatility를 준거 같다. volatility는 뭔가 사용이 어색하다....ㅎㅎ 그래서 이 문제는 String 추출로 풀겠다. 커맨드 창에 다음과 같이 입력하면 된다. 그리고 나서 메모장으로 열어서 ComputerName을 검색해주면 되겠다. 이렇게 보..

    XCZ.kr : prob 17 (100pt)

    XCZ.kr : prob 17 (100pt)

    먼저 HTTP 상의 정보를 보기 위해서 HTTP object를 보면 될듯하다. 어쩌다보니 무식하게 찾다가 찾아버렸다. 필터에 검색어로 해서 찾아도 금방 찾을 거 다. 다른 패킷 파일도 있다 하지만 주변 패킷을 보면 해당 로그인이 승인되었는지 아닌지를 확인할 수 있다. 즉 로그인이 승인된 것의 pw 값을 확인하면 되겠다. 회원가입한 내역을확인할 수 있다. 근데 아이디가 우리가 원하는 아이디가 아니다. 오케이 해당 값을 찾았다. 회원가입도 확인되었다. IDISLIE

    XCZ.kr : prob 18 (150pt)

    XCZ.kr : prob 18 (150pt)

    주어진 코드에 변수가 바코드로 되어있어서 치환했다. 일단 test($d) => $d = givemepassword 이고 test($e) => $e = keyplz! 이면 문제가 해결된다. $d = $b.$a 이고 $e = c 이다. 다만 이해가 안가는 부분이 if 문 내부가 or 로 이루어져 있는데 왜 둘다 만족을 시켜줘야지만 통과가 되는지 모르겠다. 일단 기본적으로 a,b,c를 모두 채워줘야 한다. a는 쿠키, b는 get['g'] c는 post['p']이다. web_basic_problem_haha

    Root-me : [Web_Server]HTTP - Cookies

    Root-me : [Web_Server]HTTP - Cookies

    쿠키는 서브웨이가 맛있다. 문제를 보자. 이렇게 나온다. 이메일을 입력하면 이메일을 어딘가에 저장하고, admin만 볼수 있는 것 같다. 해당 링크를 누르니까 아래에 다음과 같이 뜬다. http://challenge01.root-me.org/web-serveur/ch7/?c=visiteur 링크가 이런것을 보아 c 가 접속자의 상태를 주는 것 같은데 admin을 넣어보자. 오케이 쿠키를 체크하는 과정이 있는 것 같다. 이제 admin 쿠키를 탈취하여 c=admin 주면 문제가 풀리겠다. 쿠키값이 visiteur 로 이전에 c와 같은 값으로 설정되어 있다. 이걸 admin으로 바꾸고 넣어보자. pass 가 나온다.

    Root-me : [Web_Server]File upload - MIME

    Root-me : [Web_Server]File upload - MIME

    이전 문제랑 동일 한거같은데, 이제 확장자 필터링 하는 부분이 다를 것 같다. 이전 문제랑 같은 접근으로, 이름에 힌트가 있는 것은 확실하다. MIME type 가 뭔지 알아보자. -> http로 전달할때 문서의 type를 전달하는 것. MIME를 보고 필터링 하는거 같다. 그렇다면 burp 같은 걸로 잡아서 MIME 를 변조한 뒤 전달해주면 될 것 같으니 시도해 보도록 하자. 현재 MIME type 이 application/octet-stream 이다. 이를 image/jpg 로 변조해서 전달하면 pass할 수 있을 것이다. 하지만 이전 문제 필터링이랑 같이 사용한다면 pass 할 수 없다. 일단 파일 업로드한 것을 실행해 보자. 동일한 경로상에 존재하는 것을 확인할 수 있다.

    Root-me : [Web_Server]File upload - Double extensions

    Root-me : [Web_Server]File upload - Double extensions

    파일 업로드 문제다. 이전부터 깊게 연습해보고 싶었는데 이번 기회에 제대로 풀어보도록 하자. /.passwd 를 실행하도록 코드를 짜면 된다. 보통 웹쉘을 만들어서 inject 해줘야 하는데 다음과 같은 형식으로 코드를 짜줘야 한다.

    LOS-rubiya : nightmare

    6) exit("No Hack ~_~"); $query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'"; echo "query :