본문 바로가기

SWUFORCE 워게임👊🏻

[Webhacking] old - 38 ; web

1. Log injection 글자와 함께 입력할 수 있는 칸이 있다. 우선 log injection에 대해 검색해 정보를 얻었다.

 

<Log Injeciton이란?>

공격자가 로그 파일에 악의적인 데이터를 삽입함으로써, 로그의 무결성을 해치고, 보안 경고 탐지를 우회하거나, 로그를 조작하여 포렌식 분석을 어렵게 만드는 공격 기법이다. 이 공격은 입력값을 제대로 검증하지 않고 로그에 기록할 때 발생한다. 로그 인젝션 공격에서는 보통 줄바꿈(\n)을 이용해 로그 포맷을 깨거나 조작한다.

 

  • 정의: 사용자 입력을 로그에 기록할 때, 이 입력값이 로그 형식을 깨뜨리거나 로그에 악성 정보를 삽입하게 만들어 시스템 관리자나 분석자가 오해하도록 유도하는 공격.
  • 목적:
    • 로그 조작 및 위조
    • 포렌식 회피
    • 관리자 혼란 유도
    • 추가 공격(예: 로그 파서 취약점 이용) 기반 마련

 

 

2. 아무값이나 입력해보았는데 먹히지 않고 다시 입력화면으로 돌아온다. admin을 입력했을 때는 you are not admin 문자가 떴다.

 

3. 페이지소스를 확인하니 'admin.php' 로 이동할 수 있는 듯 하였다.

 

4. admin.php로 이동하니 지금까지 시도한 로그인 흔적이 남아있다. log인 듯 하다.

 

저장 형식은 <나의 ip주소: 입력값>이다.

따라서 로그 조작으로 <나의 ip주소: admin> 을 만들어내면 될 것 같다.

 

위에서 log injection에 대해 찾아봤을 때, 보통 줄바꿈을 통해 로그 포맷을 깨거나 조작한다고 하였으니 이를 이용해보겠다.

 

 

5. 줄바꿈으로 새 로그 라인을 만들 수 있기에,

우선 줄바꿈을 할 수 있도록 index.php의 html의 'input' 부분을 'textarea'로 변경해주겠다.

 

(원래 로그인 폼이 <input type="text">였다면, 입력할 수 있는 내용이 한 줄로 제한되며, %0a와 같은 줄바꿈 코드를 입력해도 실제로 줄바꿈이 반영되지 않을 수 있다. 하지만 이를 <textarea>로 바꾸면 사용자가 여러 줄을 직접 입력할 수 있고, 줄바꿈 문자(\n, %0a)도 정확히 반영된다.)

 

 

6. 윗 줄에는 아무 글자나 입력했고, 아랫줄에는 <내 ip주소:admin> 을 입력했다. 

 

7. 해결 완👊🏻