일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보보안기사 실기
- LOB
- Payload
- stack overflow
- Operating System
- 워게임
- Spring MVC
- system hacking
- OS
- 운영체제
- 해킹
- 정보보안기사
- 네트워크
- System
- Shell code
- Spring
- BOF
- wargame
- webhacking.kr
- webhacking
- 웹해킹
- Pwnable.kr
- pwnable
- SQL
- hacking
- PWN
- Buffer Overflow
- Spring Framework
- 정보처리기사 실기
- Lord of BOF
- Today
- Total
DongDD's IT
[2018 TUCTF] Write-up 본문
[2018 TUCTF] Write-up
Literal
Category : Misc
Problem : Something's going over my head, and it's too fast for me to catch! (Difficulty: Easy)
Challenge Link : http://18.222.124.7
해당 Link에 접속하면 다음과 같은 페이지로 Redirection이 된다.
해당 주소의 source code를 확인해보았다.
해당 페이지에서도 /Literal.html로 Redirection이 되는 것을 확인할 수 있었다.
해당 페이지로 접속해보았다.
해당 페이지에 들어가보니 다음과 같이 폭탄 모양의 글씨들이 있었고 자세히 보면 TUCTF가 있는 것을 볼 수 있었고 소문자를 제외한 모든 값을 풀어서 썼더니 flag가 완성되는 것을 확인할 수 있었다.
Answer & Flag
FLAG : TUCTF{R34L.ON35.4r3.D4NG3ROU5}
Mrs. White's Messy Maids
Category : Web
Problem : Mrs. White's simple website might be hiding some murderous intentions...
Challenge Link : http://18.218.152.56/
해당 주소로 접속해보니 다음과 같은 페이지가 나왔다.
여러 부분을 살펴봤지만 이상한 부분이 없어서 소스 코드를 확인해보았다.
소스 코드에 주석 처리된 부분이 있었고 /Boddy라는 것이 써있는 것으로 보아 /Boddy에 Flag가 있을 거라 추측되었고 Boddy에 들어가니 Flag가 출력되었다.
Answer & Flag
FLAG : TUCTF{1_4ccu53_Mr5._Wh173_w17h_7h3_c4ndl3571ck_1n_7h3_c0mm3n75}
Mr. Green's Weird Website
Category : Web
Problem : While investigating Mr. Green for something completely unrelated, we found this login page. Maybe you can find a way in?
Challenge Link : http://18.219.196.70/
해당 사이트에 들어가니 로그인할 수 있는 페이지가 나왔다.
admin/admin을 입력했더니 바로 flag를 획득할 수 있었다.
Answer & Flag
FLAG : TUCTF{1_4ccu53_mr._6r33n_w17h_7h3_b4d_p455w0rd_1n_7h3_l061n}
RSAyyyy
Category : Crypto
Problem : This challenge is designed to give an overview of the RSA algorithm.
If you have a team member that is less familiar with RSA that wants to be, give this challenge to them.
This might be useful.
Challenge Link : nc 3.16.57.250 12345
처음에 nc로 접속하니 다음과 같은 화면이 출력되었다.
Script를 짜서 풀 수 있을 거란 생각이 들었지만 귀찮아서 일일이 다 해보며 진행했다.
처음에는 단순히 n을 구하는 것이였기 때문에 p*q를 출력하여 답을 넣었다.
2번째 문제는 평문을 10진수로 바꾸는 문제였다.
1 2 3 4 5 | s = "which satyr piracy freedom surety" ans = 0 for i in range(0,len(s)): ans += pow(256, len(s)-i-1)*ord(s[i]) m = ans | cs |
위와 같은 코드를 짜서 평문을 10진수로 바꾸니 통과할 수 있엇다.
각 문자가 8bit이기 때문에 256의 지수승으로 더해주며 구할 수 있었다.
그 다음은 e와 m, n이 주어졌을 때 c를 구하는 문제였다.
c = pow(m,e)%n으로 그냥 돌렸더니 조금 걸리기는 했지만 답이 나와 제출해 통과할 수 있었다.
다음은 tot(n)을 구하는 문제였는데 이것도 간단히 tot(n) = (p-1)(q-1)을 구해 제출하니 통과할 수 있었다.
다음은 d를 구하는 문제였는데 d는 단순히 구했을 때는 오래 걸려서 다른 방법을 찾아 계산하였다.
1 2 3 4 5 6 7 | k = 1 while 1: if (k*on+1)%e ==0: d = (k*on+1)/e break k += 1 | cs |
d = (k*tot(n)+1)/e(k : 상수)
일반적으로 c*d mod tot(n) = 1인 값을 찾아 d를 구하지만 해당 방법은 속도가 너무 느리기 때문에 위와 같은 방법을 사용하였다.
임의의 상수 k를 넣었을 때 e로 나누어 떨어지면 해당 값이 d가 된다.
그 다음으로 n을 factorization하여 p와 q를 구하는 문제가 나왔다. sqrt(n)을 하여 해당 값부터 2씩 감소시켜 찾는 방법으로 수행했지만 시간이 오래걸려 다른 방법을 찾다가 MAGMA라는 사이트를 알게 되었다.
Magma : http://magma.maths.usyd.edu.au/calc/
해당 사이트에서 Factorization(n)을 수행하니 바로 p와 q가 나오는 것을 확인할 수 있었다.
그 다음은 위에서 수행했던 방식대로 d를 구하여 통과할 수 있었다.
마지막으로 m을 구하는 문제였다. 즉, 복호화를 하라는 문제였다.
처음에는 python으로 단순하게 pow(c,d) mod n으로 수행하여 풀려고 했지만 수가 너무 커서 그런지 오래 걸려 이 방법으로는 할 수 없다는 것을 알게 되었다.
그래서 이것도 magma를 이용하여 해결할 수 있었다.
Modexp(c, d, n)을 실행하니 바로 m이 나왔고 m을 입력하니 flag가 출력되었다.
Answer & Flag
FLAG : TUCTF{RSA_1$_R34LLY_C00L_4ND_1MP0RT4NT_CRYPT0}
yeahright
Category : Reversing
Problem : Difficulty: very easy
What an insensitive little program.
Show it who's boss!
Challenge Link : nc 18.224.3.130 12345
nc로 접속할 수 있는 주소와 binary파일 하나가 주어져있었다.
binary파일을 열어 소스 코드를 decompile하여 확인해보았다.
buf에 0x40 만큼 읽고 memcpy를 통해 pass와 비교한다.
다르다면 "yeahright"을 출력하고 프로그램이 종료된다.
같다면 system("/bin/cat ./flag");를 실행하여 flag를 출력해준다.
pass의 값을 확인하기 위해 클릭해보았다.
pass를 클릭했더니 위와 같은 값을 볼 수 있었고 이 값을 따라들어가보았다.
full string이 나왔고 해당 string을 입력으로 넣었더니 flag가 출력되었다.
Answer & Flag
FLAG : TUCTF{n07_my_fl46_n07_my_pr0bl3m}
Shoop
Category : Reversing
Problem : Difficulty: easy Black Hole Sun, won't you come
and put sunshine in my bag
I'm useless, but not for long
so whatcha whatcha whatcha want?
Challenge Link : nc 18.220.56.147 12345
nc로 접속할 수 있는 주소와 binary파일 하나가 주어져있었다.
binary파일을 열어 소스 코드를 decompile하여 확인해보았다.
decompile한 소스를 확인해보니 크게 3가지 부분으로 구성되어있었다.
일단 입력을 받게 되어있었다.
1. 1번째 for문
- reverse를 수행하여 src에 입력받은 s를 뒤짚어 넣음. 0~20을 20~0으로 뒤집는다.
2. 2번째 for문
- 입력받은 s의 각 문자에 -5를 수행
3. 3번째 for문
- src[k] = s[(k+10)%21]를 수행하며 permutation을 수행한다.
이렇게 3개의 for 문을 거친 후 값이 "jmt_j]tm`q`t_j]mpjtf^"라면 flag를 출력해준다.
즉, 이것을 역으로 수행하여 기존의 평문을 찾을 수 있다면 문제를 통과할 수 있을 것이다.
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 | #include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ char *s = (char *)malloc(sizeof(char *)*21); char *src = (char *)malloc(sizeof(char *)*21); memset(src, 0, sizeof(src)); read(0,src,0x15); int k,i,j; for(k = 0; k < 21; k++) { s[k] = src[(k-10)>=0 ? k-10 : k-10+21]; } for(j = 0 ; j < 21; j++) { s[j] += 5; } for(i = 0; i <= 20; i++) { src[21-i-1] = s[i]; } for(i = 0 ; i <=20; i++){ printf("%c",src[i]); } printf("\n"); } | cs |
이것을 역으로 수행하기 위해 위와 같은 source를 작성했다.
1. 1번째 for문
- 먼저 (k+10)%21에 들어갔던 값들을 역으로 -10하여 넣어주었다.
- s[k] = src[(k-10)%21]
2. 2번째 for문
- s의 각 문자에 5를 -해줬던 것을 다시 +5를 해준다.
3. 3번째 for문
- reverse를 수행했던 것을 다시 reverse를 수행하여 기존의 문자열을 얻을 수 있다.
해당 프로그램을 작성 후, "jmt_j]tm`q`t_j]mpjtf^"을 input으로 하니 원래의 문자열을 확인할 수 있었고 nc로 접속하여 해당 문자열을 입력하니 flag를 획득할 수 있었다.
Answer & Flag
FLAG : TUCTF{5w337_dr34m5_4r3_m4d3_0f_7h353}
'CTF > Write-up' 카테고리의 다른 글
[2018 IceCTF] Write-up (0) | 2018.09.14 |
---|---|
[2018 Angstrom CTF] Write-up(Web, Reversing, Binary) (0) | 2018.03.19 |
[2018 Angstrom CTF] Write-up(MISC,Crypto) (0) | 2018.03.19 |
[2018 Pragyan CTF] Write-up & 후기 (0) | 2018.03.05 |
[2017 SECCON CTF Quals] Write-up & 후기 (0) | 2017.12.10 |