
Keynote
1. 유추가 쉬운 패스워드 사용
2. 계정정보 관리미흡(database.php, env)
3. /etc/hosts 권한설정 미흡
이번에도 쉽지 않았던 문제.. 가보자!

엥.. http, https 모두 웹 접속부터 안된다. 웹 서비스가 없는걸까?

웹서비스를 하고 있지만 특이하게 80번이 아닌 85번 포트에서 http 서비스가 구동되고 있었다.

기분나쁘게 웃고 있는 용 말고는 클릭할 수 있는게 없다.

gobuster를 통해 /app 엔드포인트를 확인했고 해당 페이지로 접속해서 "JUMP" 버튼을 클릭하니 아래 페이지로 리다이렉트 됐다.

소스페이지에서 concrete5 8.5.2 버전의 CMS로 만들어진 웹페이지인 것을 알수 있었다.
<meta name="generator" content="concrete5 - 8.5.2"/>

concrete5 8.5.2버전에는 특별한 취약점이 없어보였다.

웹페이지에 있던 로그인 페이지. 구글링을 해보니 concrete5의 default user, password는 "admin", "admin"이라고 해서 입력했는데 실패했고 password를 "password"라고 입력했더니 admin계정으로 로그인이 됐다.

관리자페이지에 "file"이라는 메뉴에 파일업로드 기능이 있어서 리버스쉘을 업로드했더니 확장자 필터에 걸렸다.

다행히 관리자페이지 설정에서 허용가능한 확장자 수정이 가능했고 php를 추가했다.

성공적으로 서버에 접근할 수 있었다.
그리고 특히 이번 문제를 풀면서 이 처음에 얻은 쉘이 너무 멍청하게 동작하여 애를 상당히 먹었다.
원래는 python 코드로 bash쉘을 실행하는 것만 했었는데 이것만으로는 충분하지 않았고 hack-tools라는 add-on에 있는 코드로 똑똑한 쉘을 얻을 수 있었다.
이렇게 설정하면 똑똑하긴한데 단점은 반응이 좀 느리다.
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl + Z
stty raw -echo; fg
stty rows 38 columns 116
위 코드들을 하나씩 실행하면 되는데 정확히 이게 무슨 동작을 하는 코드인지는 차차 알아봐야겠다.

castle 폴더에 있는 robots.txt를 보니 application폴더에 접근을 못하도록 막아놨다.
application 폴더부터 조사를 해봐야겠다.

config로 들어가니 database.php라는 파일이 있었고 여기에 "toad" 라는 사용자의 계정정보가 들어있었다.

toad 계정 로그인 성공!
이후 toad 계정정보로 mysql에도 접속해서 뒤져보고 했지만 쓸만한 정보를 찾을 수 없었다.


권한상승 취약점을 파악하기위해 kali에서 linpeas를 받고 실행을 했다.

Environment쪽을 보면 PWD_token이라는 환경변수에 base64로 인코딩된 것 같은 문자열이 있다.

base64 디코딩된 문자열을 mario 계정 password로 사용하니 로그인이 되었다.

mario 디렉토리에 user.txt가 있었지만 cat으로 읽을 수 없었다.
user.txt 권한도 문제없는데 뭘까?

cat 명령어 파일의 소유자가 root가 아닌 toad로 되어있고 setuid가 설정돼있다.
cat 명령어가 toad 계정으로 실행되는데 해당 폴더는 toad에게 읽기 권한이 없다.
user.txt 파일을 /tmp로 복사해서 읽을 수 있었다.
이제 root로 권한상승하여 root.txt 파일을 찾으면 된다.
이번에도 권한상승 취약점을 찾기 위해 linpeas를 실행했다.


mario 계정으로 /etc/hosts 쓰기가 가능한 것을 알 수 있었다.
기본적으로 /etc/hosts는 644로 설정되어있다.

/etc/hosts 파일 수정이 가능하니 이를 활용할 수 있는 방법을 찾아야한다.

이번에는 pspy를 통해 실행 중인 프로세스를 모니터링하여 cron 작업 등을 파악해보자.

UID=0인 root 계정에서 실행되는 cron 작업을 확인할 수 있었다.
"mkingdom.thm"이라는 host에서 counter.sh를 다운받아 bash쉘로 실행한 결과를 /var/log/up.log에 저장하고 있다.
이제 우리는 /etc/hosts에서 "mkingdom.thm" host의 IP를 kali IP로 바꾸고 /app/castle/application 경로에 counter.sh이라는 이름으로 리버스쉘을 만든 뒤 호스팅하면 서버에서 파일을 다운받아 실행할 것이다.


드디어! root 접속 성공!!

엥.. 피날레인줄 알았는데 또 cat 명령어가 문제다.
root 권한 앞에서는 아무 문제 없지~
소유자를 root로 변경하고 root.txt 읽기 성공!!