본문 바로가기

4-1. 2026-1 심화 스터디/워게임 도장깨기

[2주차] 워게임 도장깨기_리버싱

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

을 입력하면 문제를 해결할 수 있다.