문제 페이지는 해당 페이지와 같다.
입력창 하나가 존재하며 로그를 인젝션하면 문제가 풀리는 것 같다.
먼저 입력창에 임의로 test라고 입력해본다.
페이지의 화면이 초기화면과 같아진다.
페이지 소스 코드를 확인한다.
주석 처리된 부분을 참고하여 admin.php 로 이동한다.
admin으로 로그인한 기록이 있어야 한다는 문구와 다른 로그기록들이 존재하는 것을 확인할 수 있었다.
마지막에 방금 test로 접속한 로그 기록이 존재한다. (블럭처리는 나의 IP 주소이다.)
메인페이지로 돌아가 admin 으로 로그인 한다.
"you are not admin" 이라는 문구가 뜨는 것을 확인할 수 있으며, admin은 필터링 되는 것 같다.
로그가 위에서 아래로 출력되는 것으로 보아 CRLF injection이 가능할 것 같다.
[참고] CR-LF injection
CR(Carrige Return: \r): 커서의 위치를 현재 줄의 맨 처음으로 보내는 기능
LF(Line Feed: \n): 커서를 다음 줄로 옮기는 기능
HTTP 응답 분할 Injection으로 CRLF를 이용해 생기는 취약점을 통해 HTTP Response에 악의적인 코드나 스크립트를 삽입해 XSS를 생성하거나 캐시를 조작하는 공격이다. CRLF를 이용하여 Response를 두개 이상으로 분리하면서 원래의 HTTP Response와 별개로 새로운 HTTP Response를 만들어 조작할 수 있다
\r 이나 \n을 이용하여 줄바꿈을 넣어 공격이 가능하다.
먼저, 개발자 도구를 확인한다.
input 태그 대신 여러 줄의 텍스트의 입력이 가능한 textarea 태그를 이용한다.
입력폼의 을 input 이 아닌 textarea로 수정한후 입력항에 아래와 같이 입력한다.
블럭처리된 부분은 나의 IP 주소이다. 이렇게 입력하면 해당 [ip주소]:test \n [ip주소]:admin 으로 로그가 기록된다.
상단 처럼 입력하고 다시 admin.php 페이지로 이동하면 해당 문제가 풀리는 것을 확인할 수 있다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 41번 문제 (0) | 2021.07.14 |
---|---|
[Webhacking.kr] Challenge(old) 39번 문제 (0) | 2021.07.14 |
[Webhacking.kr] Challenge(old) 36번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 35번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 28번 문제 (0) | 2021.07.13 |