writeup 20

[h4cking game] easy

쉽나봅니다 파일을 한번 확인해볼게요 아무것도 보이지 않습니다.. 이 친구는 paint 문제 풀때(2023.06.08 - [보안/ctf writeup] - [h4cking game] paint)와 마찬가지로 https://incoherency.co.uk/image-steganography/#unhide 를 이용하여 풀어봅시다 QR 코드가 나옵니다. 이 친구가 근데 흰검 반전이 되면 참 좋을텐데... 라는 생각이 들어서 https://stegonline.georgeom.net/image 라는 사이트를 이용하여 사진을 반전 시켜봅시다 StegOnline stegonline.georgeom.net Inverse RGB를 눌러서 색 반전 시키고 저장합시당 그리고 QR 코드를 읽기 위해서 https://webqr...

WARGAME/forensic 2023.06.08

[h4cking game] paint

전에 동아리 활동을 하면서 세션에서 풀었던 문제이다. 우선 png를 한번 살펴보자 뒤에 부분이 지워져 있는 것 처럼 보인다. 이는 간단한 스테가노그래피 툴로 보면 될 것 같다. https://incoherency.co.uk/image-steganography/#unhide Image Steganography Each channel (red, green, blue) of each pixel in an image is represented by an 8-bit value. To hide the secret image inside the cover image, we replace the n least significant bits of the cover pixel value with the same numbe..

WARGAME/forensic 2023.06.08

[dreamhack] [wargame.kr] strcmp

웹해킹을 재작년에 잠깐 공부하고 한동안 손 안대다가 그냥 레벨1이니깐 쉽게 풀리지 않을까? 해서 한번 풀어봤다 제목부터 strcmp의 취약점을 이용하여 플래그를 찾는것 같다. 우선 웹페이지를 한번 볼게용 password를 입력 받고 있네요 chk를 눌러서 올바른 password 인지를 확인하는 것 같습니다 이때 source에서 $password = sha1(md5(rand().rand().rand()).rand()); if (isset($_GET['view-source'])) { show_source(__FILE__); exit(); }else if(isset($_POST['password'])){ sleep(1); // do not brute force! if (strcmp($_POST['passwor..

WARGAME/web 2023.06.02

[dreamhack] video_in_video

이 문제를 다운로드 해보면 다음과 같은 jpg 이미지가 있습니다. 한번 열어 보니, 다음과 같이 생겼습니다 Hex Fiend를 이용하여 이미지의 헥스 값을 한번 확인해보겠습니다 일단은 헤더가 FFD8FFE0~로 시작하는 것을 보니 JPG 파일은 맞긴 맞는가 보다. 그럼 JPG 파일의 푸터(FFD9)를 한번 찾아보자! 정말.. 수상한 위치에 나온다..... 왠지 뒤에는 다른 형식의 파일이 붙여진것 같은데?! 라는 기분에 헤더를 한번 검색해봤더니 이게 mp4의 ftyp-mmp4-mdat 파일의 구조인데, 이를 참고하면 우리는 ftyp-isom-moov 파일임을 알 수 있다! 즉, 영상이 숨겨져 있다는 것... 그렇다면 처음의 jpg만 따로 추출하면 어떤 사진이 나올까? 처음이랑 똑같은 이미지가 나온다......

WARGAME/forensic 2023.06.02

[dreamhack] ROT128

문제 설명 다운로드 해 보면 encfile과 rot128.py 파일이 존재합니다. 이때, rot128.py로 이미 암호화된 파일이 encfile이겟죵 ​ rot128.py를 복호화할 수 있는 코드를 짜면 되겠다! 그럼 한번 rot128.py 코드를 분석해봅시다 with open('flag.png', 'rb') as f: plain_s = f.read() 1. flag.png를 바이너리 파일로 열고 plain_s 라는 변수로 읽어옵니다 ​ plain_list = [hex(i)[2:].zfill(2).upper() for i in plain_s] 2. plain_list 리스트를 생성하고 각 바이트의 값을 16진수로 변환한 후 2자리로 맞추고 대문자로 변환하여 저장합니다. ​ enc_list = list(r..

[dreamhack] sleeping shark

역대급... 시간이 오래 걸린 문제 ㅜㅜ ​ 문제 파일을 다운 해보면 pcap라서 저는 와이어샤크로 분석을 했습니다 ​ 일단 tcp follow 해봤는데 별로.. 쓸모 있는 정보는 나오지 않았습니다 ​ ​ http follow를 했더니 흥미로운게 중간에 보입니다. ​ 보이시나요? ​ 보이시나요? ​ 이 문장이... 상당히 흥미롭습니다. SQL 인젝션으로 보이죠 ​ url decode 해보면 SELECT IF(ASCII(SUBSTRING((SELECT flag FROM s3cr3t LIMIT 1), 35, 1)) = 156, SLEEP(3), 0) 인데 이 문장의 의미는 다음과 같다: 주어진 s3cr3t 테이블에서 35번째 문자의 ASCII 코드 값이 156인지 확인하고 나서 맞으면 3초 대기하고 틀리면 ..

WARGAME/forensic 2023.05.30

[dream hack] baby-linux

참 재밌는 문제입미다 웹사이트를 실행해보면요 요렇게 생겼습니다 ​ 그럼 이제 python 파일을 한번 볼게여 ​ 이 코드를 한번 분석해 봅시다. ​ user_input = request.form.get('user_input') cmd = f'echo $({user_input})' 우선 요 부분을 보면 웹페이지에서 볼 수 있는 text 입력 칸이 user_input이라는 변수로 받게 되고 cmd라는 변수에 저장됩니다. ​ if 'flag' in cmd: return render_template('index.html', result='No!') 그리고 만약 우리가 입력한 값에 'flag'라는 철자가 들어가게 된다면 무조건 No!를 출력하도록 되어있는 걸 볼 수 있습니다. ​ try: output = subp..

WARGAME/misc 2023.05.30

[써니나타스] 18번

뭔가 딱봐도 아스키 같아보이지 않나요?? 아스키로 변환 해보겠습니당 ​ https://onlineasciitools.com/convert-decimal-to-ascii 온라인 툴 사용해서 아스키로 바꿨는데도 이상한 암호문이네요 ​ 근데 써니나타스에 자체 툴이 있는걸 아시나요? 저는 18번을 풀면서 알았습니다...... 바로 디코드 해봅시다.. ​ 딱보면 base64같죠? 써니나타스 툴로 디코드하면 비번이 나와용 ​

[h4cking game] ROX

flag.py 파일을 살펴보자 여기서 보면 known_plaintext를 알맞게 바꿔서 result를 올바른 거를 출력하도록 하는것으로 보인다! ​ 그대로 "?????"로 해놓고 출력해보면 결과는 요렇게 이상하게 나온다.. ​ 근데 우리는 결정적인 힌트를 알죠 바로 flag 형식이 H4CGM{~~} 인거를 아니깐 known_plaintext에 H4CGM을 넣어보자! enjoy~어쩌구의 결과가 나왔다. ​ 여기서 중요한 사실! result를 연산할때 XOR연산이 있다는것에 주목해라. XOR연산의 특징 중 하나는 a ^ b = c a ^ c = b 요렇게 연산이 가능하다는 것이다. 즉, enjoy를 넣어서 해보면 우리가 원하는 flag 형식이 나온다는것! ​ 해보면 다음과 같이 flag가 나온다 ​ ​