일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 소프트맥스함수
- BOJ
- 파이썬
- 신경망구현
- c언어
- 달고나bof
- 딥러닝
- 머신러닝
- 스트림암호
- 항등함수
- 8086CPU레지스터
- 정보보안
- C언어알고리즘
- 밑바닥부터시작하는딥러닝
- 보안
- 백준알고리즘
- 백준
- 신경망파이썬
- 활성화함수파이썬
- 딥러닝파이썬
- 파이썬신경망
- 신경망
- BOF
- 인공지능
- FTZlevel10
- 알고리즘
- 버퍼오버플로우
- C언어 알고리즘
- 신경망 학습
- C알고리즘
- Today
- Total
목록<CTF> (95)
HeeJ's

이 문제는 URL 인코딩과 관련된 문제라는 것을 알 수 있다. 여기 있는 수상한 문자열을 온라인 디코더로 Base64로 디코딩 해주었다 그랬더니 16진수로 이루어진 문자열을 얻을 수 있었고, %를 모두 제거한 뒤 이 문자열을 다시 ASCII코드 변환기에 돌려주었더니 답을 찾을 수 있었다. * ASCII코드 변환기 사이트 https://www.easycalculation.com/ascii-hex.php String to ASCII chart, ASCII to decimal convertor, String to decimal converter, string hexadecimal / hex conversion www.easycalculation.com

password가 myBytes와 동일하면 true를 반환해준다. byte[] myBytes를 보면 맨 첫 줄은 10진수, 두 번째 줄은 16진수, 세 번째 줄은 8진수, 네 번째 줄은 char?인 것을 알 수 있었다. 위의 값들을 전부 문자로 바꿔주면 flag를 찾을 수 있다.

소스코드를 살펴보면 buffer와 문자열을 비교해 flag를 찾는 문제인 것 같다. 근데 for문 분기를 보면, 0-8은 그대로, 8-16은 23-i, 16-32는 2씩 뛰어서 64-i, 17-31은 -2씩 뛰어서 그대로 비교를 한다는 것을 확인하고 이 반복문을 다시 작성하여 올바른 flag를 찾아주었다.

이번에도 java 파일을 메모장으로 열어주었다. 이름이 password인 배열이 선언되어있는데 여기에 순서가 뒤죽박죽인 배열을 순서대로 맞춰주면 flag를 찾을 수 있을 것이다.

java 파일을 일단 간단하게 보고 싶어 메모장으로 열어주었다. 코드에서 바로 정답 문자열을 찾을 수 있었다. 주석 내용을 살펴보면 비밀번호를 소스 코드에 넣어두는 것은 누군가 소스 코드를 훔쳐갔을 때, 비밀번호가 노출될 수 있다. 다른 방법으로 보안을 높일 수 있는 방법을 찾아봐야겠다. 라고 써있는데 중요한 이야기 같다.

welcome_rev파일을IDA로 열어 주었다. main 함수에서 답이 맞는지 틀린지 분기되는 부분인데, 입력 값과 답을 비교하기 위해 check_password라는 함수가 call 되는 것을 볼 수 있었고, check_password 함수의 그래프를 보면 뭔가 이상한 값이 있는 걸 찾을 수 있었다. 이 값을 더블 클릭해서 자세히 보면 문자열 마지막 =로 끝나는 것을 통해 base64로 인코딩 된 것을 알 수 있었다. (base64 인코딩 과정에 '='문자가 생성되는 이유; 비트 수를 맞춰 원본 바이너리 데이터가 없던 비트가 생기는 것을 방지) 이 문자열을 온라인 디코더로 돌려주면 Flag를 찾았다.

Strncmp라는 파일을 다운받아 기드라로 열어 main함수를 찾아 주었다. main 함수를 보면 변수들을 선언하고, 값을 hex로 넣어주고, scanf로 값을 받아 strcmp_함수로 값을 비교해 일치하면 Good game 일치하지 않으면 Always dig deeper가 뜨는 것 같다. 그래서 strcmp_ 함수를 더블 클릭 해보면 입력되는 parameter 값이 char 형인걸 보아 hex값으로 입력되었던 값을 ASCII코드로 변환해주어야 하는 것 같다. 그리고 그 입력된 값들을 일일이 key 값과 XOR연산 하면서 일치하는지 확인하는 것 같다. key 값은 무엇일까? key 변수를 더블 클릭 해보면 strcmp_함수와 check함수에서도 나오는 걸 확인하고, check 함수를 찾아 들어가봤다. 이..