1. 문제 설명 문제 링크에서 view-source를 클릭해 바로 소스 코드를 얻을 수 있다. 아래 php 코드를 살펴 보면, id의 값이 'admin'이면 풀린다는 사실을 알 수 있다. 2. 문제 풀이 1. preg_match 우회 하지만 preg_match() 함수에서 id의 값에 'admin'을 넣으면 exit()가 실행되어 solve()가 있는 if문에 도달할 수 없게 된다. 그러나 다음 라인에서 urldecode 함수가 실행되고 있으므로, 'admin'을 인코딩한 값을 넣으면 preg_match를 우회하면서 urldecode에서 'admin'으로 디코딩될 수 있다. 따라서 id의 값으로 admin을 인코딩한 값(%61%64%6D%69%6E)을 대입한다. 하지만 다시 'admin'으로 디코딩되며 ..
1. 문제 설명 문제 링크로 이동하면 아래의 alert 팝업이 뜬다. 2. 문제 풀이 1. 자바스크립트 차단 일단 alert 팝업이 뜬 후 사이트 홈으로 리다이렉션되는 것을 무력화해야 한다. 해당 상호작용은 자바스크립트에서 구현되므로, 브라우저 기능으로 자바스크립트를 차단한다. (크롬의 경우 사이트 고급 설정에서 차단할 수 있다.) 2. 소스 코드 확인 접속이 가능해지면서, DevTools를 통해 소스 코드를 확인할 수 있게 됐다. 9번째 라인의 document.write() 부분을 확인하면, '?getFlag'을 url에 추가함으로써 flag를 얻을 수 있는 것으로 보인다. 3. 정답 URL 접속 아래의 URL을 입력해서 접속하면, 문제가 바로 풀리게 된다.
1. 문제 설명 2. 문제 풀이 1. challenge.py 분석 challenge.py 코드를 살펴 보면, 초기 벡터(IV)와 키가 동일하며, CBC 모드를 사용하고 있음을 알 수 있다. 만약에 0으로 채워진 한 블록을 CBC 모드로 암호화한다면, $E_{K}(P+IV) = E_{K}(0+K) = E_{K}(K)$ 따라서 $E_{K}(K)$를 구할 수 있게 된다. 그리고 총 두 개의 블록을 복호화한다고 가정하면, CBC 모드의 마지막 암호문 블록을 복호화하는 과정은 아래와 같다. $P_{2} = D_{K}(C_{2}) + C_{1}$ 이때 $C_{1}$을 0으로, $C_{2}$를 $E_{K}(K)$라고 한다면, $P_{2} = K$가 된다. 2. 복호화 코드 작성 from pwn import * fro..
1. 문제 설명 2. 문제 풀이 1. 먼저 문제 파일의 압축을 푼다. 2. rot128.py의 코드를 확인한다. encfile이 어떻게 암호화됐는지 살펴보기 위해 rot128.py 코드를 확인해야 한다. 코드에 hex_list라는 게 먼저 나오는데, 이게 어떤 것인지 살펴봤다. 0부터 1씩 증가하는 hex 리스트인 것을 볼 수 있다. plain_list는 평문이 hex로 파싱된 list이다. 그리고 저 flag.png가 우리가 복호화해야 할 평문의 원본이다. 아래 코드에서 암호문이 카이사르 암호라는 걸 알 수 있다. 카이사르 암호는 간단한 치환암호 중 하나다. 평문의 각 단위를 일정한 거리만큼 밀어서 다른 문자로 치환하는 방식이다. 왜 카이사르 암호냐면, hex로 파싱된 평문을 순회하면서 hex_list..
1. 구름 IDE로 리눅스 개발 환경 구성 1-1. 구름 IDE 서비스 회원가입 및 로그인 구름 IDE에 접속해 먼저 회원가입 및 로그인을 진행했다. 1-2. 컨테이너 생성 컨테이너 생성을 위해 기본 템플릿 및 C/C++을 스택으로 설정했다. 추가 도구 항목에서는 VSC를 체크했다. 위의 설정대로 컨테이너를 생성했으며, 잘 실행하는 것을 확인할 수 있었다. 2. Sizeof 연산 코드 작성 2-1. 소스 코드 작성 char, short, float 등 다양한 자료형의 사이즈를 출력하는 코드를 작성했다. 이때 '%zu'는 sizeof 연산의 출력을 위한 형식 문자이다. 2-2. 실행 결과 3. 오버플로 예제를 언더플로로 변경 3-1. 소스 코드 작성 는 정수형 자료형의 유효 범위를 확인할 수 있는 헤더다...
1. 문제 설명 위의 pdf 파일에서 아래 3가지 정보를 찾아내면 된다. 고객 이름 거래 장소 거래 금액 2. 문제 풀이 2-1. 고객 이름 HEX 에디터에서 font를 검색해보면 정상적인 폰트 이름이 아닌, 고객 이름이 나타나는 것을 볼 수 있다. 'mycustomernameisNoliardaski'에서 고객 이름이 Noliardaski임을 확인할 수 있다. 2-2. 거래 장소 스크롤을 계속 내리다보면 (Line 670) 마지막 부분쯤에 자바스크립트 코드가 한 줄 등장한다. 앞에 있는 'x\x9c'는 hex로 '78 9c'인데, 이것으로 app.alert에 쓰인 데이터가 zlib 파일이라는 것을 알 수 있다. (포렌식에서 앞 hex는 문서의 종류를 밝히는 데에 항상 중요하다고 한다.) 위의 출처에 표기..
1. 문제 설명 2. 문제 풀이 1. 접속 정보를 확인하여 타겟 Host와 포트 번호를 알아낸다. 2. 리눅스의 netcat (nc) 툴을 사용하여 tcp 연결을 시도한다. netcat host3.dreamhack.games 23229 3. DH{...} 형식의 플래그 응답을 확인하고 정답을 입력한다.