본문 바로가기
Webhacking.kr

[Webhacking.kr] old-38 풀이

by ris 2024. 12. 15.

이번 문제는 textarea와 input의 차이를 알면 풀 수 있는 문제였습니다.

필자는 몰랐습니다.

우선 들어가면 이런 화면이 나옵니다.

대놓고 spli를 시도하라고 하네요.

 

우선 아무거나 써서 login을 눌러보니 아무 일도 일어나지 않았습니다.

그럼 다른 무언가가 있다는 뜻이니 다른 것을 찾아봐야 합니다.

 

<html>
<head>
<title>Challenge 38</title>
</head>
<body>
<h1>LOG INJECTION</h1>
<form method=post action=index.php>
<input type=text name=id size=20>
<input type=submit value='Login'>
</form>
<!-- <a href=admin.php>admin page</a> -->
</body>
</html>

 

우선 대충 보면 post로 서버에 입력값을 전송하는 형태군요.

그리고 아래 주석처리된 부분을 보면 admin.php로 들어가라고 종용하는 듯합니다.

그리고 그 요구에 응해주면

 

이 화면과 함께 아래 ip:id의 형태로 로그가 출력됩니다.

admin으로 로그인하면 되는 문제 같군요.

 

다시 돌아와 admin으로 로그인을 시도해 보니 아무 일도 일어나지 않았습니다.

그리고 admin.php로 돌아와도 기록되지 않았습니다.

필터링되었군요.

 

그럼 이제 남은 선택지는 이번 문제의 이름과 같은 LOG INJECTION이 있습니다.

 

여기서 LOG INJECTION이란?

다양한 기법을 활용하여 로그를 추가하거나 기존 로그를 조작, XSS 공격을 하는 기법을 말합니다.

 

우선 XSS 기법부터 하자면

input창에 <script>alert("hi");</script>를 치니 admin.php에서 그대로 로그에 나왔습니다. 이건 htmlspeicalchars를 썼거나 다른 방법으로 스크립트 실행을 막았군요. XSS는 실패입니다.

 

그럼 다른 방법으로는 줄 바꿈입니다.

로그를 바꿔서 강제로 제 ip로 로그인을 하는 것이죠.

그리고 줄 바꿈을 할 때는 \r\n이 사용됩니다.

 

모르시는 분들은 \r과 초면일 겁니다.

 

여기서 \r이란 줄의 시작으로 가는 특수문자입니다.

예를 들어 Hello\rWorld라고 한다면 출력되는 것은 World밖에 없는 것이죠.

그럼 왜 vscode나 다른 인터프리터에서는 /r을 사용해 본 적이 없는가?

이에 대한 답으로는 python과 다른 대부분의 인터프리터, 그리고 windows를 제외한 다른 linux/macOS 등은 /n을 쓰기 때문입니다.

 

그리고 이러한 특수문자를 사용해서 로그를 변환하거나 조작하는 기법을 CRLF injection(Carriage Return Line Feed)이라고 합니다.

 

그럼 이제 /r/n을 사용해 공격해 보죠.

guset\r\n(자신의 ip):admin을 써주고 admin.php로 들어가면 끝!

 

 

덧붙여서

여전히 웹해킹은 어렵다.

그래도 이제는 조금은 나 스스로 문제를 파악하고 쓸 수 있는 기법들이 늘어나 즐겁기도 하다.

포너블이나 리버싱은 나중에 웹해킹을 어느 정도하고 나면 할 생각이다.

지금은 이거에 집중하고 싶다.

그리고 웹해킹에서 php를 아직 잘 못 다루는 것 같다. 그래서 이번에 php로 게시판이나 한번 만들어 보려 한다.

ai 도움은 최대한 안 받으면서 할 것이다.

 

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

[Webhacking.kr] old 20 해설  (0) 2025.01.04
[Webhacking.kr] old-39 풀이  (0) 2024.12.29
[Webhacking.kr] old-54 풀이  (1) 2024.12.14
[Webhacking.kr] old-24 풀이  (0) 2024.12.14
[Webhacking.kr] old-01 풀이  (0) 2024.12.14