먼저, 파일이 pcap 파일이라는것 정도는 간단히 알수 있으므로, 와이어샤크로 열어보았습니다.

 

그리고 쭉 내려보면 telnet이 많이 보이고,

오른쪽 클릭해서 'follow tcp stream'을 통해서 보면, 텔넷으로 원격접속을 한것을 알수있습니다.

 

그러면 우선 텔넷 패킷들만 필터링하기 위해서 filter에 "tcp.port == 23" 으로 패킷 필터링을 합니다.

 

그러면 대충 나오는 아이피가

 

10.10.60.173

10.10.60.102

10.10.60.64

10.10.60.90

 

정도가 나오고, 10.10.60.102가 서버 아이피라는것은 간단히 알수있습니다.

 

그중 10.10.60.64의 tcp stream을 살펴보면

 

 

.ackcat","\x40\x8a\xff\xbf\n"x.[C
.ackcat","\x40\x8a\xff\xbf\n"x4.[C
.ackcat","\x40\x8a\xff\xbf\n"x40]]';cat)|../../hello.....................[1P';cat)|../../hello.....................[1P';cat)|../../hello.....................[1P';cat)|../../hello.....................[1P';cat)|../../hello.....................[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[D..[C
.ackcat","
.ackcat",""\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\\"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\xx"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x000"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"
.ackcat","\x00""\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"xx"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"x33"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"x366"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"x36,,"\x40\x8a\xff\xbf\n"';cat)|../../hello
.
.ackcat","\x00"x36,


iidd


uid=0(root) gid=501(blackcat) groups=501(blackcat)

llss


getenv.getenv.c

ccdd  ....


llss


gusals.minyoung  taekonryu  taekonryu.c  testt  testt.c

ccdd  ....


llss


hello  hello.c.key.txt  somedoby_helpme  temp

ccdd.^H.^Hcc.^H.. .. ... ... .. ... .. ... ... ..ccaatt  kkee.....yy..ttxxtt


W4rning_TongSo0!!

 

 

 

뒷부분에 이와 같이 나옵니다.

 

id 명령어를 치니, id가 0으로 나오므로, 루트권한을 획득한것을 알수있고.

 

cat key.txt를 쳤더니 W4rning_TongSo0!! 가 나왔죠.

그러므로 key값은 W4rning_TongSo0!! 입니다.

 

또 버퍼오버플로우를 시도한쪽을 살펴보면, "\x00"x36,,"\x40\x8a\xff\xbf\n "

가 나오죠.

BOF를 어느정도 공부한사람이라면 \x40\x8a\xff\xbf 가 리턴 어드레드라는것을 쉽게 알수있습니다.

 

이걸 정답에 쓰기위해 변환하면 0xbfff8a40 이 되겠죠.

 

또 마지막으로, sfp - buf의 어드레스값을 구하기 위해선, 텔넷 패킷 중간중간에 나오는 gdb 명령어의 결과를 살펴봐야합니다.

 

gdb의 disas main의 결과값을 보시면

 

그중에

 

 0x08048400 <main+24>:.lea    0xffffffb8(%ebp),%eax 

라는 결과가 strcpy에 앞서 있습니다.

 

AT&T 어셈블리에서는 ??(%ebp) 라고 되어있으면 ebp+??의 위치에 있다는뜻인데,

 

여기서는 마이너스이기때문에 0xffffffb8이 나왔습니다. 이걸 마이너스의 형태로 바꾸면, -0x48 (0x100000000 - 0xffffffb8)입니다.

 

즉, buf = ebp - 0x48 이라는것이죠.

 

문제에선 ebp - buf(sfp) 이므로, 정답은 0x48이 됩니다.

 

그러므로 정답은 10.10.60.64_0x48_W4rning_TongSo0!!_0xbfff8a40 입니다.

posted by tunz

문제:

l.pcap



사실 대회가 끝난후에 풀어서

 

정확한 답은 알지 못하고, 우선 푼곳까지 알려드리겠습니다.

 

이번에 주어진 l.pcap 파일을 쭉 훑어보시면 아이피는 크게 세가지 입니다.

 

하나는 자신의 아이피인 192.168.0.10

그리고 의문의 10.20.30.40 과 14.63.214.37이 있습니다

 

그런데 14.63.214.37의 패킷을 훑어보시면 안랩 사이트를 그냥 웹서핑하고있는게 전부입니다.

 

게다가 10.20.30.40....... 딱봐도 수상한 아이피고, 저런아이피는 흔한 아이피도 아닙니다

 

그러므로 10.20.30.40의 패킷을 집중 공략해보면

 

 

 GET /01m07s.reverse

 

라는 요청을 30초마다 하고있습니다.

 

그리고 서버도 그 응답으로 의문의 파일을 보내옵니다.

 

하아..... 그리고 이 파일을 추출해내신다음에

 

이 파일이 뭘까 고민을 해봤는데..

 

파일 확장자가 reverse 네요?????

 

그렇다면?

 

게다가 그 파일의 가장 마지막부분을 보니 GNP 라고 되어있습니다..

 

뒤집는다면 PNG가 되겠죠!

 

뒤집는 프로그램을 만들어봅니다.

 

저는 우선 넷상에 돌아다니는 소스를 살짝 개조해보았습니다.

 

 #include <stdio.h>
#include <stdlib.h>
 
int main()
{
 FILE *fp, *fpp;
 char ch;
 int f_size;
 int i = 0;

  fp = fopen("before_reverse", "rb");   
  fseek(fp, 0L, SEEK_END);
  f_size = ftell(fp);
  fpp = fopen("result.jpg", "wb");
  while ( ++i != (f_size+1))
  {
   fseek(fp, -i, SEEK_END);
   ch = getc(fp);
   putc(ch, fpp);  
  }
  fclose(fp);
  fclose(fpp);

 }

 

before_reverse라는 파일에 인풋값을 써놓으면

그 결과가 result.jpg로 나타나는 소스입니다.

 

소스를 푸시면 QR 코드가 나오고

 

그 QR코드를 찍어보시면 유령다시보기가 나오는데요

 

사실 정답은 모르고.. 스태가노그래피가 정답이 아닐까 합니다만

 

스태가노그래피가 또 다른 힌트일수도 있기떄문에.. ㅋㅋㅋ

 

여기까지입니다.

 

posted by tunz

문제:

m.pcap



사실 전 대회 끝날때까지 못풀어서 정확한 답은 모르지만

그래도 제가 한 내용을 한번 올려봅니다

 

이번 대회에서 주어진 m.pcap 파일을 와이어샤크로 열어보면

 

메일을 3번 주고 받은것을 알수있습니다

 

그리고 그것들은 base64 인코딩으로 되어있는데

base64인코딩, 게다가 짧은 텍스트파일은 그냥 네이버에 "base64 디코딩 사이트" 대충 이런걸 쳐서

들어가셔서 디코딩 하시면 아래와 같은 내용이 나옵니다

 

첫번째 메일은

 

3d 반도체 기술 자료 송부 드립니

안녕하세요.
강병규입니다.

말씀하신 내용 조사해서 회신 드립니다.

감사합니다.

강병규 드림.

 

첨부파일: 어떤 텍스트파일

대충 이런 내용이었고

 

두번째 메일은

 

 안녕하세요.
 진영인입니다.

 이번 휴가 중에 하루 시간이 괜찮아서 같이 수영장에 가요...
 장소를 잘 생각해서 메일 한번 다시 드릴께요.

 그럼..

 

세번째 메일은

 

거기서 뵙는 걸로

 안녕하세요.
 진영인입니다.

 휴가 같이 보내실 수 있으신가요?? ㅎ
 요즘에 이분이 대세더라구요.....
 저도 옷핀이나 주렁주렁 달고 다닐까 하네요 ㅋㅋ

 그럼, 나중에 그곳(?)에서 뵙는 걸로~~

 

첨부파일: oppinstyle.jpg 

 

 

이었습니다.

 

첫번째 메일은 agang과 주고받은 메일이 아니기때문에 무시하고

 

2,3 세번째 메일만 봤을때 중간에 뭔가 사라져서 트위터나 다른걸로 연락한줄 알고 거기만 뒤졌었는데 ....;;;;;;;;;;

결국 그게 아니더군요

 

그리고 힌트가 올라왔습니다. 힌트내용은 "ID3"

ID3는 mp3의 태그입니다.

그리고 전 네트워크 low문제도 대회 끝나고나서 풀었는데, 로우문제를 풀었다면 스태가노그래피 또한 힌트가 될수 있겠죠

 

결국................... oppinstyle.jpg 안에 어떤 mp3 파일이 스태가노그래피로 숨겨져있던 것이었습니다.........

 

우선 oppinstyle.jpg를 받고, base64 디코딩을 합니다.

이 과정에서 좀 헤맸는데

base64 디코딩은 돌아다니는 디코딩 소스를 조금 수정해서 했구요

 

소스는 이렇습니다.

 

#include <stdio.h>
#include <stdlib.h>
#include <string>

static int DecodeMimeBase64[256] = {
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 00-0F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 10-1F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,  /* 20-2F */
    52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,  /* 30-3F */
    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,  /* 40-4F */
    15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,  /* 50-5F */
    -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,  /* 60-6F */
    41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,  /* 70-7F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 80-8F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* 90-9F */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* A0-AF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* B0-BF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* C0-CF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* D0-DF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,  /* E0-EF */
    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1   /* F0-FF */
};

typedef union{
    struct{
        unsigned char c1,c2,c3;
    };
    struct{
        unsigned int e1:6,e2:6,e3:6,e4:6;
    };
} BF;

void base64d(FILE *fp, FILE *result, int *length){
    int i = 0, src_length, blank = 0;
    BF temp;

    src_length = *length;

    while( ++(++(++(++i))) < src_length + 1){
        fseek(fp , i-4 , SEEK_SET);
        temp.e4 = DecodeMimeBase64[getc(fp)];
        fseek(fp , i-3 , SEEK_SET);
        temp.e3 = DecodeMimeBase64[getc(fp)];
        fseek(fp , i-2 , SEEK_SET);
        char c_get = getc(fp);
        if(c_get == '=')
            temp.e2 = 0x00;
        else temp.e2 = DecodeMimeBase64[c_get];
        fseek(fp , i-1 , SEEK_SET);
        char c_get2 = getc(fp);
        if(c_get2 == '=')
            temp.e1 = 0x00;
        else temp.e1 = DecodeMimeBase64[c_get2];

        putc(temp.c3, result);
        putc(temp.c2, result);
        putc(temp.c1, result);
    }
}

int main(void){
    FILE *fp;
    FILE *result;
    int src_size;
   
    fp = fopen("input.txt", "rt");
    fseek(fp , 0L , SEEK_END);
    src_size = ftell(fp);
    result = fopen("result2", "wb");
    base64d(fp,result,&src_size);
    fclose(result);
    fclose(fp);

 

어찌됐든 디코딩을 하고나면 장동건이 나오는 jpg 그림이 나오는데

 

헥사에디터로 열어서 ID3를 검색하면 그 ID3부터 뒤쪽이 쭉 mp3 파일입니다.

 

그부분만 추출해서 뽑아내면 mp3파일이 만들어지는데

 

그 mp3 파일을 실행시키면 뚜뚜뚜 뚜~ 뚜~

 

이런 소리가 들립니다.. 즉 모스부호

 

모스부호를 해석하면

 

37.53480,126.993900

 

위도 경도를 조사해보니, 해밀턴 호텔이 나오네요

 

수영장인줄 알았더니.............

 

해밀턴호텔이 맞는지는 확인을 못했습니다.. 제가 대회시간안에 못풀어서

posted by tunz