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
보통 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 페이지에서 리프레쉬를 해주면
풀립니다.
대충 로그가 다 날라가버리네요.
'해킹 & 보안 > webhacking.kr' 카테고리의 다른 글
[Rubiya] webhacking.kr old-18번 문제 풀이 (4) | 2019.10.11 |
---|---|
[Rubiya] webhacking.kr old-47번 문제 풀이 (0) | 2019.10.11 |
[Rubiya] webhacking.kr old-42번 문제 풀이 (0) | 2019.10.11 |
[Rubiya] webhacking.kr old-58번 문제 풀이 (0) | 2019.10.11 |
[Rubiya] webhacking.kr old-54번 문제 풀이 (0) | 2019.10.11 |