TASK 1 Overpass
1. ANSWER : 머신을 해킹하여 user.txt 를 획득하시오.
먼저 nmap 부터 돌려보겠습니다.
nmap -sV -sC -A [머신 IP]
출력내용
nmap -sV -sC -A 10.10.60.35
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-03 15:37 KST
Nmap scan report for 10.10.60.35
Host is up (0.25s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 37:96:85:98:d1:00:9c:14:63:d9:b0:34:75:b1:f9:57 (RSA)
| 256 53:75:fa:c0:65:da:dd:b1:e8:dd:40:b8:f6:82:39:24 (ECDSA)
|_ 256 1c:4a:da:1f:36:54:6d:a6:c6:17:00:27:2e:67:75:9c (ED25519)
80/tcp open http Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
|_http-title: Overpass
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.94SVN%E=4%D=10/3%OT=22%CT=1%CU=31305%PV=Y%DS=2%DC=T%G=Y%TM=66FE
OS:3BE5%P=x86_64-pc-linux-gnu)SEQ(SP=105%GCD=1%ISR=109%TI=Z%CI=Z%II=I%TS=A)
OS:SEQ(SP=106%GCD=1%ISR=10B%TI=Z%CI=Z%TS=A)SEQ(SP=106%GCD=1%ISR=10B%TI=Z%CI
OS:=Z%II=I%TS=A)SEQ(SP=106%GCD=2%ISR=10B%TI=Z%CI=Z%II=I%TS=A)OPS(O1=M509ST1
OS:1NW7%O2=M509ST11NW7%O3=M509NNT11NW7%O4=M509ST11NW7%O5=M509ST11NW7%O6=M50
OS:9ST11)WIN(W1=F4B3%W2=F4B3%W3=F4B3%W4=F4B3%W5=F4B3%W6=F4B3)ECN(R=Y%DF=Y%T
OS:=40%W=F507%O=M509NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T
OS:2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T4(R=Y%DF=Y%T=4
OS:0%W=0%S=O%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=O%F=AR%O=%RD=0%Q
OS:=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A
OS:%A=Z%F=R%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=O%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%D
OS:F=Y%T=40%W=0%S=Z%A=O%F=AR%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%
OS:O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD
OS:=G)IE(R=Y%DFI=N%T=40%CD=S)
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 995/tcp)
HOP RTT ADDRESS
1 267.90 ms 10.21.0.1
2 267.97 ms 10.10.60.35
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 45.40 seconds
홈페이지로 들어가보겠습니다
Welcome to Overpass
특별한건 없으니
경로를 탐색해보겠습니다
gobuster dir -u http://10.10.60.35/ -w '/home/madanokr/Downloads/directory-list-2.3-medium.txt'
현재
/admin 경로가 있습니다
/admin 경로로 들어가보겟습니다
admin 로그인 페이지이군요
혹시나해서 SQL INJECTION 취약점이 있을거같아
아니군요
확실한건 SQL INJECTION 취약점이 아닙니다
소스페이지를 확인해봅시다
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Overpass</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="/css/main.css">
<link rel="stylesheet" type="text/css" media="screen" href="/css/login.css">
<link rel="icon" type="image/png" href="/img/overpass.png" />
<script src="/main.js"></script> 자바스크립트
<script src="/login.js"></script> 자바스크립트
<script src="/cookie.js"></script>
</head>
<body onload="onLoad()">
<nav>
<img class="logo" src="/img/overpass.svg" alt="Overpass logo">
<h2 class="navTitle"><a href="/">Overpass</a></h2>
<a class="current" href="/aboutus">About Us</a>
<a href="/downloads">Downloads</a>
</nav>
<div class="content">
<h1>Administrator area</h1>
<p>Please log in to access this content</p>
<div>
<h3 class="formTitle">Overpass administrator login</h1>
</div>
<form id="loginForm">
<div class="formElem"><label for="username">Username:</label><input id="username" name="username" required></div>
<div class="formElem"><label for="password">Password:</label><input id="password" name="password"
type="password" required></div>
<button>Login</button>
</form>
<div id="loginStatus"></div>
</div>
</body>
</html>
현재
<script src="/main.js"></script>
<script src="/login.js"></script>
<script src="/cookie.js"></script>
자바스크립트 형식으로된 파일이 존재하다는걸 알았습니다
"/login.js" 경로로 들어가봤습니다
login.js 코드 내용
async function postData(url = '', data = {}) {
// Default options are marked with *
const response = await fetch(url, {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *client
body: encodeFormData(data) // body data type must match "Content-Type" header
});
return response; // We don't always want JSON back
}
const encodeFormData = (data) => {
return Object.keys(data)
.map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
.join('&');
}
function onLoad() {
document.querySelector("#loginForm").addEventListener("submit", function (event) {
//on pressing enter
event.preventDefault()
login()
});
}
async function login() {
const usernameBox = document.querySelector("#username");
const passwordBox = document.querySelector("#password");
const loginStatus = document.querySelector("#loginStatus");
loginStatus.textContent = ""
const creds = { username: usernameBox.value, password: passwordBox.value }
const response = await postData("/api/login", creds)
const statusOrCookie = await response.text()
if (statusOrCookie === "Incorrect credentials") {
loginStatus.textContent = "Incorrect Credentials"
passwordBox.value=""
} else {
Cookies.set("SessionToken",statusOrCookie)
window.location = "/admin"
}
}
if 문에서 수상한점을 발견했습니다
if (statusOrCookie === "Incorrect credentials") {
loginStatus.textContent = "Incorrect Credentials"
passwordBox.value=""
} else {
Cookies.set("SessionToken",statusOrCookie)
window.location = "/admin"
}
}
로그인 함수에서 로그인 성공 시 쿠키에 세션 토큰을 저장하고 admin 페이지로 리다이렉트 합니다.
그러므로 admin 페이지에 세션토큰을 저장하는걸 알아냈습니다.
F12 를 눌러 storage 항목으로 들어갑니다
그럼 위 사진과 같이 쿠키를 저장하는걸 보실수 있습니다
name 은 SessionToken , value 이부분을 1로 바꿧을때 어떤 변화를 하는지 알아보겟습니다
RSA PRIVATE KEY 가 나옵니다
이게 뭔지 찾아보니깐
암호화 된 개인 키 인거 같습니다.
암호하된 키를 한번 크랙을 해보겠습니다
RSA PRIVATE KEY 를 그대로 복사한다음
echo "RSA KEY" > id_rsa1
이런형식으로 저장해줍시다
성공적으로 저장이 됬습니다
이제 john the ripper 를 이용해 크랙해봅시다
네 성공적으로 해쉬가 완료되었습니다
엄....
사전파일 문제인가
아님
내가문제인가
어떤이유로 크랙이한게 안보이고
0 password hashes cracked, 1 left 만 보인다..
john --incremental rshkey
사전파일을 직접 집어넣지 않아도 이 명령어로 모든 가능한 비밀번호를 조합할수도 있다는걸 알았다
ssh -i id_rsa1 james@IP
Enter passphrase for key 'id_rsa1': james13
이렇게하여 user.txt 에 플레그를 획득하였다 !
2. ANSWER : root.txt 플레그를 획득하세요
현재 권환으로는 root.txt 를 획득할수가 없다.
그러므로 root 권환 상승을 해줘야한다.
해석
빌드 스크립트에 뭔가 있는거같다
파일을 다운로드 하자
이것까지 같이다운로드
현재 빌드스크립트 내용이다
흠...
crontab?
cat /etc/crontab
현재 이경로에서 root 와 관련된걸 볼수있다
cat /etc/hosts
호스트와 관련된 ipv4 가 나온다
nano 편집기로 다가 현재 overpass-thm 에 ipv4 를 변경하여
reverse shell 를 작동시켜보겟다.
성공적으로 변경이 되였다.
아 개같은 오류떄문에 리버스쉘은 무리일거같다
이걸 그냥 크랙해주겠다
LQ?2>6QiQ$JDE6>Q[QA2DDQiQD2J5C2H?=J:?8A:4EFC6QN
마침 비밀번호를 크랙해줄 사이트를 찾다가
https://www.dcode.fr/rot-47-cipher
이런사이트를 봤는데
디코딩 해주는 사이트인거같다.
ㄴㅇㅅ !!
saydrawnlyingpicture
bruh...
어찌어찌 해서
root.txt 플레그를 얻는데 성공했다..
thm{7f336f8c359dbac18d54fdd64ea753bb}
난이도 : 5/10
root.txt 얻는부분에서 복잡하고 어려웠다
'TryHackMe | CTF' 카테고리의 다른 글
TryHackMe | Wgel CTF - 모의해킹 (0) | 2024.10.19 |
---|---|
TryHackMe | Year of the Rabbit - 모의해킹 CTF (1) | 2024.10.12 |
TryHackMe | Bolt - 웹해킹 CTF (0) | 2024.09.29 |
TryHackMe | Startup - 모의해킹 CTF (0) | 2024.09.22 |
TryHackMe | Anonymous - 모의해킹 CTF (0) | 2024.09.17 |