old 38번 문제입니다. 뭐 문제에서 대놓고 LOG Injection이라고 써있습니다.

 

 

아무거나 쓰고 login눌러봅시다.

 

아무 반응이 없습니다. 소스보기를 해보겠습니다.

 

 

 

admin.php로 가달라고 써있네요.

 

 

로그뷰어라고 써잇고, admin으로 로그를 써야한다고 합니다.

 

첫 페이지에서 버튼 이름이 login인 것으로 봐서 그 부분에 아이디를 넣는것인가 봅니다.

 

 

 

가장 아래에 제가 썼던 값들이 나타나있네요, 아이피도있고요.

 

첫 페이지에서 admin이라고 쳐보겠습니다.

 

 

 

막혀있네요.

 

로그가 아래로 쌓이는 것으로 보아, \r\n 인젝션이 가능할 것 같습니다. (Carrige Return, Line Feed)입니다.

 

(질문이 들어와서 추가적인 설명을 덧붙입니다.)

여기서 CR-LF 인젝션에 대하여 조금 더 부가적인 설명을 해 보도록 하겠습니다.

https://www.owasp.org/index.php/CRLF_Injection

 

CRLF Injection - OWASP

This is a Vulnerability. To view all vulnerabilities, please see the Vulnerability Category page. Last revision (mm/dd/yy): 03/14/2018 Vulnerabilities Table of Contents Description The term CRLF refers to Carriage Return (ASCII 13, \r) Line Feed (ASCII 10,

www.owasp.org

보통 CR-LF Injection이라고 하면 HTTP 패킷에 개행 문자를 넣어서 HTTP 응답값의 파라메터 변조를 하는 HTTP Response Split 같은데에 사용되는데, 여기서는 개행문자 끼워넣기 공격이라고 보시면 됩니다.

 

CR-LF는 리눅스에서 개행 문자, 즉 다음 줄로 바꾸는 줄바꿈 문자가 Carriage Return문자 + Line Feed 문자인데, 이를 줄여서 CR-LF라고합니다.

 

HTTP 패킷에서 파라메터들을 구분하는 문자열이기도 합니다.

 

admin.php에 로그가 쌓이는 형식을 보면

 

[ip주소1]:[아이디2]

[ip주소2]:[아이디2]

...

 

이러한 형식이 쌓입니다.

 

만약 내 아이피 주소가 192.168.0.123이라고 한다면

 

192.168.0.123:admin

 

이러한 값을 넣고 싶은데, 입력값에서 admin이라는 문자열을 필터링 하기 때문에 admin이라는 값을 넣을 수는 없습니다.

 

하지만 우리가 입력한 값이 guest\r\n192.168.0.123:admin 이라면, 다음과 같은 값이 입력되게 될 것입니다.

 

 

192.168.0.123:guest\r\n192.168.0.123:admin

 

여기서 \r\n는 개행문자, 즉 줄바꿈 문자를 뜻하므로 결과적으로 다음과 같은 모양이 됩니다.

 

192.168.0.123:guest

192.168.0.123:admin

 

첫줄에는 guest라는 계정으로 로그인 되었지만, 두번째 줄에는 admin계정으로 로그인 된 것처럼 로그가 남게 됩니다.

 

 

그러면 계속해서 진행해보도록 하겠습니다.

 

버프슈트 쓰기가 귀찮기 때문에 input text 항목을 textarea로 바꾼 뒤 CR-LF 인젝션을 해보겠습니다.

 

Login을 누른 뒤 admin 페이지에서 리프레쉬를 해주면

 

풀립니다.

 

대충 로그가 다 날라가버리네요.

+ Recent posts