본문 바로가기
webhacking.kr

[Webhacking.kr] old - 38 풀이

by jwcs 2023. 8. 23.
728x90

https://webhacking.kr/challenge/bonus-9/

 

Challenge 38

 

webhacking.kr

 

Log Injection 문제이다.

 

문제에서 친절하게 로그 인젝션이라고 알려주고 있다.

 

관리자 도구를 통해 확인해보니 admin.php 페이지가 있다는 것이 보인다. 들어가보자.

 

 

admin을 로그로 남기라고 한다. 

admin 입력 시에는 필터링이 걸려있다.

 

adadminmin과 같이 admin이 포함된 문자열은 정답으로 처리해주지 않는다.

이를 우회하는 방법에 대해서 생각해보자.

 

admin.php

admin.php에서 내 아이피 주소와 내가 입력한 값을 출력해준다. 각각 개행문자, 즉 새줄문자로 구분되어 있다. 우리가 개행문자와 내 아이피 주소, admin을 함께 입력하면 내 아이피주소: admin 과 같이 나타날 것이다. 그렇다면 문제에서 요구하는 admin 로그를 남길 수 있으므로 문제가 풀릴 것이다. 그럼 개행 문자에 대해서 알아보자.

 

개행 문자를 사용하기 위해선 CR(carriage return)과 LF(line feed)에 대해서 알고 있는 것이 좋다. 옛날 타자기에서 사용 하던 방식이다.

CR은 현재 커서를 줄 올림 없이 가장 앞으로 옮기는 동작

LF는 커서는 그 자리에 둔 채로 종이만 한 줄 올려 줄을 바꾸는 동작

이라고 한다. 출처: https://jwcs.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F 

 

Tistory

좀 아는 블로거들의 유용한 이야기

www.tistory.com

 

현재에도 CR과 LF를 줄바꿈에 사용한다. CR은 \r로 나타내고 LF는 \n으로 나타낸다.

우리가 엔터를 눌러 줄바꿈을 할 때, 운영체제 따라 사용되는 개행문자가 다르다.

 

리눅스는 줄바꿈을 위해 LF만 사용된다.

윈도우즈는 줄바꿈을 위해 CR과 LF 모두 사용된다.

http 프로토콜에서는 CR과 LF 모두 사용된다.

 

참고 자료: https://owasp.org/www-community/vulnerabilities/CRLF_Injection

 

CRLF Injection | OWASP Foundation

CRLF Injection on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.

owasp.org

 

그럼 우리는 이제 어떻게 개행문자를 넣을지 생각해보자. 첫번째로 입력창에 줄바꿈을 넣는 방법이 있다.

단, input 태그에는 줄바꿈을 할 수 없다. input 태그는 w3c 표준에 한줄 문자 편집이라고 나와있다.

출처: https://html.spec.whatwg.org/multipage/input.html#text-(type=text)-state-and-search-state-(type=search) 

 

HTML Standard

 

html.spec.whatwg.org

 

따라서 우리는 input 태그를 textarea 태그로 바꿔서 입력해주자.

관리자 도구를 통해 쉽게 바꿀 수 있다. 그럼 위 처럼 입력창이 바뀐다.

위와 같이 입력한 것을

버프 스위트로 잡았더니 다음과 같이 나타난다.

 

여기서 %0D%0A가 뭘까?

CR = \r = %0D 이다. \r의 url 인코딩된 값이 %0D이다. 마찬가지로 \n의 url 인코딩된 값이 %0A이다.

http 통신 프로토콜의 쓰임에 따라 CR과 LF가 모두 사용되는 것으로 보인다.

 

문제는 \r\n내 아이피 주소:admin을 입력한 후 admin.php에 들어가면 풀리게 된다.

짜잔

 

로그 인젝션이 발생했을 때 발생할 수 있는 피해

- 문제가 발생했을 때 우리는 로그를 보며 문제를 해결하려 할 것이다. 하지만 이러한 로그가 공격자에 의해 조작되어 있다면 거짓된 정보로 인해 문제 해결 및 감지가 어려울 것이다.

 

취약점 분석

- 위 문제에서는 입력값 검증이 미비하여 로그 인젝션 취약점이 발생하였다. 입력한 문자열이 정확히 admin일 경우에만 필터링이 이루어지고, 개행 문자에 대한 이스케이프가 이루어지지 않아 취약점이 발생한 것으로 보인다.

 

해결 방법

- 개행 문자와 본인의 아이피를 나타낼 수 있는 점(.)에 대한 필터링이 충분히 이루어져야 할 것 같다.

 

 

728x90
반응형

'webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old - 24 풀이  (0) 2023.08.03
[webhacking.kr] old - 61 풀이  (0) 2023.07.20
[Webhacking.kr] old - 39 풀이  (0) 2023.07.14
[webhacking.kr] Challenge 16 풀이  (0) 2023.07.14
[webhacking.kr] old - 26 풀이  (0) 2023.06.27