Hack The Box/Lab

Oopsie - 경로 하이재킹

YujinSec 2026. 5. 8. 04:00

1. 기본 개념

1) web crawler(=web spider = web robot)

: www을 자동으로 탐색해주는 프로그램. 

 

- 웹 크롤링 = 웹 스파이더링

 

2) suid = set owner user id

: 해당 명령을 실행하는 누구든 항상 소유자 권한으로 실행되는 것. 

 

> s: 실행권한 o + suid

> S: 실행권한은 x + suid

 

3) PATH

: 유닉스 계열 os에서 사용하는 환경 변수. 간단히 생각해서 명령어 파일들을 어디서 찾을지 적어놓은 목록 

 

ex)

/usr/local/bin:/usr/bin:/bin

-> 리눅스가 명령어 찾을 때 다음 순서대로 파일 찾을 거임

1. /usr/local/bin

2. /usr/bin

3. /bin

 

 

 

 

2. 문제 풀이

ssh, http 2개가 보임. 

 

가진 정보 없으니 http로 ㄱㄱ. 

 

홈페이지 아래 설명을 보면 로그인해야한다 뜸. 

근데,, gobuster로는 로그인 페이지 같은 게 안 보임. 

 

라이트업을 보니, 이번에는 burp suite를 쓸 거라 함. 

 

우선 파이어폭스 설정 변경 먼저. 브라우저가 프록시를 통해 트래픽을 바로바로 전송하도록 하려한다. 

 

 

프록시 인터셉트는 off해줌. 

 

이제 브라우저 방금 사이트 새로고침 해보면, burp suite에 새로 뜰거임. 

보면 윗 줄에 로그인 디렉터리 경로가 보임. 

 

gobuster로는 워드리스트에 cdn-cgi 같은 경로가 없어서 못 찾았나보다,,

대신 burp 는 내가 사이트 동작해서 브라우저가 자동으로 요청한 모든 경로를 전부 기록하기 때문에 로그인 디렉터리 찾는 데에 사용가능한 좋은 방식 같다..! 업로드 디렉터리 같은 건 자동 요청 되는 경우가 적어서 걘 gobuster같은 걸로 찾아줘야 할 듯..!

 

해당 url 검색 ㄱㄱ

 

아는 정보 없고, 기본도 안 되니 그냥 guest로 접속 먼저 ㄱㄱ. 

 

페이지가 다양하게 뜬당. 

 

업로드 해서 리버스 셸 하려 했는데, 보면 운영자 권한 필요함. 

 

우선 쿠키 혹은 세션 정보를 획득해야 한다고 함. 

우클릭 > inspect

storage로 감. 

 

브라우저 url을 보면 내가 접속한 id에 대해 값이 부여되어 있음 (contents 변수는 그냥 내가 어느 페이지에 있는 지 보여주는 거)

보면 client ID랑 번호가 같긴 하다,, 

 

이걸 1로 바꿔보면?

엄,,, 라업과는 다르게 존이 보임... 

페이지 contents에서 해야 하는 것 같당 변수 자체가 다른 듯. 

 

이 정보를 어떻게 활용하냐? 바로 우리 세션 값을 저 값으로 수정해 볼거임. 

role 에는 user -> admin으로, 

guest는 2233 -> 34322로 ㄱㄱ

일단 업로드 페이지로는 진입 성공!

 

리버스 셸만 업로드 하면 됨. 

지금 난 패럿 os이니, 기본 리버스 셸 코드 파일이 존재한다 함. 

/usr/share/webshells/php/php-reverse-shell.php

열어서 ip만 바꾸장 (sudo 로 열어야 함)

업로드 성공!

이제 업로드 된 페이지 url을 알아야 함. 그래야 요청해서 다운받을 수 있으니!

근데 이미 앞에서 gobuster로 찾음.

 

금지되든 말든, url요청 걸거라 상관 ㄴㄴ. 

 

우선 포트 먼저 리스닝 해주고!

 

curl요청 하면 됨. 근데 보니까 걍 url로 바로 쳐서 해도 되더라 ㅇㅇ. 

처음 할 떄는 안 되서 다시 해보니 됨. 삭제 될 수 있다 하긴 하더라 라업에서. 

재빨리 해야하나??

일단 shell업글먼저. 

 

이제는 디렉터리를 뒤져야 함,,,

뭔가 credentials정보를 얻어야 하는데,,, 이럴 때는 이전에 찾은 웹 페이지 디렉터리를 뒤져보면 좋음. 

특히 login경로 아니까 거기로 ㄱㄱ. 

 

여기서 좋은 팁!

파일 하나하나 뒤지는 것 보다, grep 써서 passw라는 키워드 포함된 걸 찾는 게 더 효율 굿. ㅎㅎ 

 

-i: 대소문자 구별 x

id: admin

passwd: MEGACORP_4dm1n!!

 

=> 바로 admin이 아니라, 유저를 찾을 거임. 

이 정보는 /etc/passwd로 가서 찾아보자. 

 

/etc/passwd: 시스템 사용자 계정 정보 저장 파일

 

유저 같은 robert가 보임. 

아래 mysql도 있는데,,, 이 db도 봐야 하나.. 

 

일단 저걸로 su해서 시도해봤으나 ㄴㄴ,,,

 

그럼 걍 파일 코드 하나하나 뒤지는 게 나음. admin파일은 일단 별 거 없어보이고,,

다음은 db.php임. 

 

찾았다! su시도 ㄱㄱ

유저는 성공!

 

 

이제 루트로 상승 ㄱㄱ

앞에서 나온 방식을 쭉 보니~ id로 그룹확인해서 권한 상승을 노리는 방식이 많은 것 같음. 여기도 그렇게 해주자. 

 

bugtracker가 그룹이름이란다. 

find / -group bugtracker 2>/dev/null

 

=>

find / : 루트 부터 시작해서 파일 전~부 검색. 

-gruop bugtracker: 그룹이 bugtracker인 파일만 찾기 

=> 리눅스 시스템 상 파일은 소유자와 그룹이 존재함. 

2>/dev/null: 에러 숨기기

그룹명과 똑같은 bugtracker라는 파일이 존재함. 

이 파일을 보자. suid가 있으면 될텐데,,

ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker

=> 

&&: 명령 2개 연달아 실행

앞 명령어: 권한 검색

뒤: 파일 종류 분석

오! 다행이도 setuid이다. 

즉, 파일 소유자 권한으로 실행가능하다는 소리인데, 보면 권한 옆에 적힌 소유자가 root다. ㅇㅋ 완벽!

 

저 파일로 권한 상승해서 shell 따보자. 

우선 그전에, 저 파일 실행 먼저 해봄. 

이 결과가 뭘 나타낸건지 보아하니, 파일 내용을 읽어서 보여준거라 함. 

내가 준 번호가 뭔가 파일 번호같은 거였나 봄. 

 

라업에서 보니 에러가 나는 경우가 좀 다르다 함,, 이걸 힌트없이 어케 아나 싶지만 일단 따라 해봄. 

cat이라는 프로그램이 실행되며 없다 뜸. 

여기서 중요한 게 ! cat이 경로는 따로 없이, 프로그램 명만 달랑 적혀있다는 것이다. 

 

즉, PATH라는 환경변수를 참조하고 있다는 소리가 됨.

=> 여기서 저 cat 프로그램 정상 경로보다 먼저 찾아지도록, 경로 하이재킹! 이라는 걸 해볼거임. 

 

일단 PATH값 확인 해봄. 

 

저기 맨 앞에 다른 경로를 추가할 거임.

 

우선 조작된 cat파일을 생성하자. 우린 /tmp라는 디렉터리 밑에 할 거임. bash 셸 명령어로.. 

권한도 줘야 함 주의!!

 

그리고 /tmp라는 경로는 PATH에 새로 추가 ㄱㄱ

export PATH=/tmp:$PATH

=> path의 맨 앞에 /tmp 경로 추가하기

 

 

이제 다시 bugtracker를 실행시키면, root권한으로 bash셸을 열 수 있게 됨. 

id는 안 중요하고 cat 프로그램만 실행시키면 됨. 

 

 

이제 그냥 디렉터리에서 플래그 찾으면 끝~~

근데 여기서 중요한 점!! 우리가 cat프로그램을 수정해버렸기 때문에,,, cat 명령어로 파일 쓰면 그 조작된 애가 실행됨. 

절대 경로로 해주자...ㅋㅋ

 

 

 

'Hack The Box > Lab' 카테고리의 다른 글

Facts  (0) 2026.05.23
Voleur  (0) 2026.05.16
Included - LFI 2 & tftp & lxd  (1) 2026.05.07
Planning - ffuf & netstat & cron  (0) 2026.05.07
Base - swp & reverse shell 2  (0) 2026.05.04