recover 문제풀이

문제를 보면 암호화 방식은 chall 안에 있다는 것을 알 수 있다. 또 문제 구조를 보면 바이트 단위 반복 루프임을 알 수 있다.
i % 4 여기서 4바이트 반복이라는 사실도 알게 된다. 따라서 한 바이트 기준으로만 분석하면 된다.
b ^= key[i % 4];
b += 0x13;
> 프로그램 연산을 보면 XOR >> +0x13로 암호화된 것을 알 수 있고 이것을 반대로 복호화해야 한다.

파이썬으로 이 복호화 과정이 필요하다.

// 암호화할 때 사용된 4바이트 키
// encrypted 파일 읽기
//결과저장
//파일 한 바이트씩 처리
//복호화는 -0x13으로
//XOR
//파일로 저장



Simple & Swap 문제 풀이
https://dreamhack.io/wargame/challenges/2501
로그인 | Dreamhack
최대 52만원 지원금 받고 진짜 해커로 레벨업 하세요!
dreamhack.io
오늘은 이 문제 [Simple & Swap]

memcmp@plt을 먼저 찾아야 한다. 내 입력을 그대로 비교하는 게 아니라, 변환한 뒤. data 영역의 0x404070에 있는 16바이트랑 비교한다는 뜻이라 핵심 비교 지점을 찾는 데 중요하다.

그래서 0x404070 값을 확인해보면, 프로그램이 내 입력을 변환한 뒤 이 값과 똑같아져야 한다는 기준값이라는 걸 알 수 있다.
우리가 원하는 건 input인데, 지금은 output(변환된 값)을 알고 있으니까 거꾸로 가야 한다. 즉 output → 역연산 → input 이런 구조다.

변환 과정을 보면 각 바이트에 대해 nibble swap → ^0x5a → +i 순서로 처리되기 때문에, 이를 거꾸로 적용해야 한다.
그래서 계산은
· -i
· ^0x5a
· swap
순서로 하면 원래 입력을 복원할 수 있다.

서버에 진짜 flag가 있으니까 위에서 구한 값을 서버에 입력해서 flag를 얻는다.

flag 획득!
Lord of SQLInjection 2번
문제

풀이

규칙1) id의 값이 admin이여야하는 조건이 있다.

* preg_match($pattern, $subject, [ $matches]): 문자열 안에서 특정한 정규식 패전의 존재 여부를 찾는데 유리한 함수
$pattern: 문자열로 검색할 패턴
$subject: 입력 문자열
[$matches]: 사용 시 패턴에 매치되는 내용을 배열에 담아둠
규칙2) id와 pw 입력 값 필터링 규칙으로 다음과 같은 정보를 필터링 해야한다.
1. prob
2. _
3. .
4. ()
따라서 규칙1처럼 id값은 admin이고 md5로 암호화되는 pw부분은 규칙2를 지켜야하므로 주석처리(#)를 통해 PW인증을 무력화 시켜서 문제를 해결하는 방법을 생각했다.
id값이 admin으로 바뀌고 뒤에 #를 입력해주어서 뒤를 주석처리 해 주었다.
따라서
id=admin'%23
을 입력하면 문제를 해결할 수 있다.

'4-1. 2026-1 심화 스터디 > 워게임 도장깨기' 카테고리의 다른 글
| [3주차] 워게임 도장깨기_시스템 해킹 (0) | 2026.04.02 |
|---|---|
| [1주차] 워게임 도장깨기_웹 해킹 (0) | 2026.03.20 |