난 이번에 One of the dummiest라는 4인 팀중 3명이 같이 참가 하였다.
우리는 총 11문제를 풀었다.
난 이제 그 문제들을 write up 하는 시간을 가져 볼것이다.
물론 다시 풀어본 문제도 라업을 쓸 것이다.
1. Sanity Check
이 문제는 ctf에 출석체크용 문제인데, 그래서 1점 짜리다.
이건 디스코드에서 flag를 찾을수 있다.
2. Just Run it!
이건 아주 쉬운 리버싱문제이다.
리버싱도 아니다. 실행권한을 주고 파일을 실행시키면 된다.
chmod u+x ./run으로 실행권한을 주고 실행을 시켜보면 이렇게 flag가 나온다.
3. Damez
이 문제도 생각보다 매우 쉬운 문제이다. 물론 100점 짜리지만 보너스 문제 수준이었다.
일단 IDA pro를 이용해서 디스어셈블 해보자.
main 함수 밑에 loc_1298함수에 flag로 추정되는 부분이 있다.
이 부분이 flag가 맞다.
4. Shark on wire
이건 쉬운 포렌식(네트워크) 문제이다.
일단 겉모습으로 보면 알 수 없다.
그래서 conversations을 확인 했더니,
바이트가 제일 큰 부분이 의심스러워서 Follow TCP stream을 해보자.
이렇게 맨 밑에 flag가 있는 것을 확인할 수 있다.
5. Wooooww
findit.mp3를 들어보니 모스코드 의심되는 부분이 있다.
그래서 morsecode.world/international/decoder/audio-decoder-adaptive.html 여기서 mp3를 넣어서 모스코드를 분석 하기로 했다.
모스부호가 찍힌 부분이 있었다!!!
저 부분이 flag인것 같으니 flag를 만들면 shaktictf{LOLMORS3I5FUNN}이다.
6. Easy Encoding
01001110 01111010 01001101 00110010 01001111 01000100 01011001 01111000 01001110 01101101 01001001 00110011 01001110 01000100 01011001 00110101 01001110 01101010 01001101 00110011 01001110 01000100 01011001 00110010 01001110 00110010 01001001 00110001 01001110 01111010 01001101 00110000 01001110 01111010 01001001 00110010 01011010 01000100 01010101 00110001 01001110 01111010 01000001 00110001 01011010 01101010 01010001 01111010 01001110 01101010 01100111 01111010 01001110 01000100 01011010 01101010 01001110 01101101 01001101 01111010 01001101 01111010 01011010 01101100 01001110 01101010 01100011 01111010 01001101 01111010 01100100 01101011
위의 코드를 분석하는 것이다.
일단 바이너리 코드인 것 같으니 바이너리 decoding을 해보자.
NzM2ODYxNmI3NDY5NjM3NDY2N2I1NzM0NzI2ZDU1NzA1ZjQzNjgzNDZjNmMzMzZlNjczMzdk
이렇게 의문의 문자열이 나온다.
나 이 문자열을 base64라고 의심 해보고 base64로 디코딩했다.
7368616b74696374667b5734726d55705f4368346c6c336e67337d
이렇게 또 다른 문자열이 나온다.
이 문자열은 hash라고 의심할 수도 있지만, hex라고 의심되기도 한다.
그래서
echo "7368616b74696374667b5734726d55705f4368346c6c336e67337d" | xxd -p -r
이렇게 명령어를 넣으니 shaktictf{W4rmUp_Ch4ll3ng3} flag값이 나왔다.
7. Ancient Warfare
이 문제는 funxgvpgs{byq3e_1f_a0g_nyj4lf_gu3_o3gg3e!} 이 문자열을 힌트로 준다.
Caesar cipher 인 것같다.
그래서 간단한 python code를 만들었다.
def makeDisk(k):
dec_disk = {}
for i in range(26):
alp = (i+k)%26 + 65
dec_disk[chr(alp)] = chr(i+65)
return dec_disk
def caesar(msg, key):
ret = ''
msg = msg.upper()
disk = makeDisk(key)
for c in msg:
if c in disk:
ret += disk[c]
else:
ret += c
return ret
def attack(msg):
for key in range(1, 26):
decmsg = caesar(msg, key)
print('SHIFT[%d]: %s' %(key, decmsg))
if __name__ == '__main__':
msg = 'funxgvpgs{byq3e_1f_a0g_nyj4lf_gu3_o3gg3e!}'
attack(msg)
코드를 실행하면 13를 shift 했을 때 flag가 나온다.
8. Biscuits
http://34.72.245.53/Web/Biscuits/
이 주소를 접속하면 되는데 지금은 접속이 안된다.
그래도 문제는 풀어보겠다.
이 사이트 쿠키중 THE_FLAG_IS라는 쿠키가 있다.
그 쿠키의 값은 shaktictf%7Bc00k13s_m4k3_phr3n0l0gy%26m3sm3r15m_3asy%7D이다.
url encoding한 암호인 것 같다.
그럼 url decoder를 실행해서 보면 flag값이 나온다.
shaktictf{c00k13s_m4k3_phr3n0l0gy&m3sm3r15m_3asy}
9. AuthEN
http://104.198.67.251/authen
이 사이트의 페이지의 소스를 보면 JS부분이 있었다.
~~~
<script>
$(“.c_submit”).click(function(event) {
event.preventDefault()
var email = $(“#cuser”).val();
var password = $(“#cpass”).val();
if(username == “admin” && password == String.fromCharCode(115, 104, 97, 107, 116, 105, 99, 116, 102, 123, 98, 51, 121, 48, 110, 100, 95, 112, 117, 114, 51, 95, 99, 52, 108, 99, 117, 108, 97, 116, 105, 48, 110, 115, 125)) {
if(document.location.href.indexOf(“?password=”) == -1) {
document.location = document.location.href + “?password=” + password;
}
} else {
$(“#cresponse”).html(“<div class=’alert alert-danger’>Wrong password sorry.</div>”);
}
})
</script>
~~~
username이 admin이고 password가 char함수로 즉 ascii로 만들어 졌다.
그럼 ascii를 decode하면 flag가 나올 것 이다.
shaktictf{b3y0nd_pur3_c4lculati0ns}
10. PharAway
이건 설명하기 까다로워서 간단히 설명하겠다.
1. flag0이 900000000보다 커야한다. ?flag0=900000001
2. secret이 13글자를 넘고 1337이어야한다. ?secret=1337aaaaaaaaa
3. sha1은 배열을 전달하면 0이 전달된다. ?a[]=0&b[]=0
4. medium.com/@sbasu7241/hsctf-6-ctf-writeups-a807f0b25ae4 여기서 md4랑 md4를 md4로 해싱한 값과 같을려면
?md4=0e251288019 이다.
5. strcasecmp는 배열을 전달하면 0이 반환된다. ?abc[]=0
http://34.72.245.53/Web/PHPhar/?flag0=900000001&secret=1337aaaaaaaaa&a[]=0&b[]=0&md4=0e251288019&abc[]=0
flag : shaktictf{An4ly71c4l_Eng1n3!=D1ff3r3nc3_Eng1n3}
11. Invisible
stegsnow를 이용해서 문제를 풀어보자.
file.jpg는 아무런 힌트가 없다.
stegsnow로 file.txt를 분석할 것 이다.
일단 cat하면 Nothing here :( 이라고 나오고,
stegsnow로 실행하면 의문의 ascii 코드가 나왔다.
-C 옵션은 숨겨진 경우 데이터를 압축하고 추출하는 경우 압축을 해제한다.
그래서 -C로 데이터를 추출하면 morse부호가 나온다.
이걸 decode해보자.
AM1V1SIBL3N0W이라는 문자열이 나오는데 이것이 flag이다.
flag : shaktictf{AM1V1SIBL3N0W}
12. Hidd3n
피카츄 사진이다.
일단 strings로 확인해보자.
base64되어있는 것 처럼 보인다. base64로 디코딩 해보자.
passphrase=ju5tfindm3
이렇게 나온다.
passphrase라고 나오니 steghide를 사용해서 풀 수도 있다는걸 추측했다.
steghide.sourceforge.net/documentation.php
이 사이트에서 extract -sf 옵션을 설명한다.
그래서
steghide extract -sf image.jpg
steghide 명령어를 주었다.
결과는 이렇다.
passphrase에 ju5tfindm3를 넣으면 flag.txt라는 파일이 생성된다.
그 파일을 cat 하면 flag값이 나온다.
13. Not that easy
문제이름이 Not that easy라서 살짝 어려울거라고 생각했지만 아니었다.
이런식으로 여러 내용이 전달된다.
일단 Coversation 탭에서 Tcp부분을 Byte 내림차순으로 나열해보자.
유난히 마지막에 바이트가 큰 부분이 있다.
Follow Tcp Stream을 해보자.
역시 안에 PNG파일이 있다.
일단 밑에 ASCII를 Raw로 바꾸고 Save as를 눌러 저장한다.
그리고 flag.PNG라고 저장한다.(.PNG는 확장자니깐 꼭 붙혀야 한다.)
그러면 qr code인 사진이 추출된다.
그럼 zxing.org/w/decode.jspx 여기에 파일을 올리면 다음과 같은 결과가 나온다.
flag : shaktictf{sh3_w4s_h0n0r3d_by_3lectr0nic_fr0nti3r_f0und4ti0n}
The end
'CTFs' 카테고리의 다른 글
redpwnCTF - beginner-generic-pwn-number-0 (0) | 2021.07.25 |
---|---|
S.H.E.L.L ctf - under Development (0) | 2021.06.07 |
S.H.E.L.L CTF - haxxor (0) | 2021.06.06 |
S.H.E.L.Lctf - EASY-RSA (0) | 2021.06.06 |
S.H.E.L.L ctf - encoder (0) | 2021.06.05 |