nfs 가 열려있는 피시는 어떤 방식으로 해킹이 가능한지 배웠다
nfs란 네트워크 파일 시스템의 약자로 네트워크 상에서 다른 피시의 파일을 사용할 수 있게 해주는 시스템이다
nfs는 포트번호 111번을 사용한다
nmap을 통해 피해자 피시에서 111번 포트가 열려있고 nfs가 사용 중인 것을 확인할 수 있다.
showmount -e [ip주소] 명령어를 사용하여 nfs가 설정되어 있는 파일목록을 확인할 수 있으며
mount [타겟ip]:[파일경로] [마운트 할 내 파일 경로] 명령어를 사용해 내 파일과 해당 파일을 동기화시킬 수 있다
정보 수집
먼저 해당 머신의 아이피를 알기 위해 호스트 스캔을 해보자
192.168.206.131가 오늘 실습 머신의 아이피 주소이다
해당 아이피에 포트스캔을 해주었다
22번, 80번, 111번, 2049번 포트가 열려 있는 것을 확인할 수 있다
웹서비스가 열려 있으니 확인을 해보자
happycorporation 이라는 웹 사이트를 확인할 수 있는데 해당 페이지 내에서는 특별한 점을 찾기 어려워 보인다
해당 웹사이트에 디렉터리 스캔을 진행해보자
gobuster dir -u http://192.168.206.131/ -w /usr/share/wordlists/dirb/big.txt -t 100 -f
gobuster [모드선택] -u [url주소] -w [디렉터리 단어 리스트] -t [스레드 갯수] -f (디렉터리내의 파일 찾기)
여러 디렉터리가 스캔이 되었다.
해당 경로들로 접속을 해보았지만 의미 있는 정보는 찾지 못했다
nikto를 실행시켜 보자
nikto -h [url주소]
/admin.php 파일이 있음을 알려준다
해당 경로에 접속해 보자
로그인 페이지가 나온 것을 확인할 수 있다
우리는 현재 아무런 정보가 없기 때문에 일단은 hydra를 통해 브루트포싱을 해둔 상태로 더 많은 정보를 수집해 보자
exploit
먼저 hydra를 사용하기 위해 어떤 파라미터를 이용해 값이 입력되는지, 어떤 방식으로 전송되는지를 확인해야 한다
웹 브라우저에서 f12를 눌러 네트워크화면에 들어가서 값을 보내게 되면
post방식으로 전송되는 것을 확인할 수 있다
그리고 우측 하단의 Resend를 눌러 body를 확인하면 파라미터의 이름을 확인할 수 있다
그리고 실패했을 경우 로그인창 위에 invalid username.이라는 문구가 뜨는 것을 확인할 수 있는데
해당 문구로 실패와 성공의 여부를 구분 지을 것이다
hydra -L /usr/share/wordlists/rockyou.txt -P /usr/share/wordlists/rockyou.txt 192.168.206.131 http-post-form "/admin.php:user=^USER^&pass=^PASS^:Invalid username."
# hydra -L [id단어리스트] -P [pw단어리스트] [해당ip] [프로토콜과 전송방식] [페이지이름]:[파리미터에 들어갈 값]:[실패했을때 뜨는 문구]
# ^USER^부분에 id단어리스트의 값들이 들어감
# ^PASS^부분에 pw단어리스트의 값들이 들어감
이렇게 hydra를 켜놓은 상태로 다음 포트인 111번 포트를 확인해 보자
111번 포트는 nfs서비스를 하는 포트임으로 nfs가 되어있는 파일을 확인하는 것이 중요하다
showmount -e [ip주소]
/home/karl 가 nfs로 지정되어 있는 것을 확인할 수 있다
해당 파일을 나의 파일과 동기화를 시켜 보자
먼저 동기화할 파일을 만들어 줘야 하는데
편의상 /tmp/test로 만들었다
해당 파일을 동기화해 보자
mount 192.168.206.131:/home/karl /tmp/test
해당 파일에 들어가 확인을 해보면
동기화에 성공한 것을 확인할 수 있다
파일에서는 .ssh를 확인할 수 있는데
해당 경로에 들어가 개인키를 가져올 수 있다면 ssh로 접근이 가능할 것이다
.ssh 파일에 들어가 보자
.ssh로 접근할 수 있는 권한이 없다고 한다
위의 사진을 보면 1001번의 uid를 가진 유저만이 접근을 할 수 있게 한 것을 알 수 있다
얼핏 보면 문제가 생긴 것 같지만 그냥 단순하게 생각하면 1001번의 uid를 가진 유저를 만들어서 접근하면 된다
유저를 만들기 위해서는 useradd 명령어를 사용하면 된다
useradd --uid 1001 test
만들어진 test유저로 접속을 해보자 이때 su 명령어를 사용하면 된다
su test
해당 유저로 아까 접근이 불가능했던 .ssh 디렉터리에 들어가 보자
접근이 잘 되며 ssh키까지 확인이 가능했다
해당 키를 /tmp디렉터리로 옮겨주자
그 후 다시 root 계정으로 돌아와 /tmp에 있는 개인키를 사용해 ssh로 접속을 해보자
개인키의 비밀번호를 묻는다
해당 키의 비밀번호를 알아내기 위해 john을 사용해 보자
먼저 john을 사용하기 전 john을 사용할 수 있게 ssh키를 변경시켜줘야 한다
그 후 john을 사용해 보자
비밀번호는 sheep임을 알아냈다
다시 ssh로 접속을 해보자
성공적으로 karl의 계정을 획득하였다
Post-Exploit
권한 상승을 위해 setuid가 걸려있는 파일을 찾아보자
find / -perm -4000
여기서 가장 눈에 보이는 건 /bin/cp가 setuid가 걸려 있다는 것이다
모든 파일을 복사할 수 있다는 건 큰 취약점이 될 수 있다
cp를 이용한 가장 쉬운 권한 상승 방법은 /etc/passwd 파일을 복사해서 가져와 수정한 뒤 cp 명령어를 통해 다시 덮어쓰기를 하는 것이다
먼저 /etc/passwd를 cp 명령어를 통해 가져와보자
그 후 해당 파일을 수정을 해야 하는데 현재의 폴더에서는 수정이 불가능하다
그렇기 때문에 다시 root의 계정으로 와 해당 파일을 다른 디렉터리로 옮긴 후 수정을 해주면 된다
/tmp 디렉터리에 옮겼으니 /tmp로 들어가 에디터를 사용해 수정을 해보자
root의 내용을 그대로 옮겨 비밀번호와 유저 이름만 바꿔주면 된다
유저의 이름은 test2로 하였고 비밀번호는 password로 지정해 줬다
하지만 이렇게 지정할 경우 리눅스에서는 해당 유저의 비밀번호를 인지하지 못한다
/etc/passwd 에 저장되는 비밀번호는 해시가 되어 있어야 된다
문자열을 해시시키기 위해서는 mkpasswd를 사용하면 된다
이렇게 해시된 문자열로 다시 바꿔주자
수정된 파일을 다시 karl 계정에 옮기기 위해 서버를 열어 wget을 통해 옮겨 보자
passwd.1이란 이름으로 저장된 것을 확인할 수 있다
이제 해당 파일을 /etc/passwd로 덮어쓰게 하면 된다
그 후 su 명령어를 통해 test2의 계정에 접속하게 되면
성공적으로 root 계정을 획득하였다.
'Hacking > Hacking Beginner Class (normaltic)' 카테고리의 다른 글
[해킹 비기너 클래스] Drill Course 3주차 정리 (WordPress exploit) (0) | 2023.10.05 |
---|---|
[해킹 비기너 클래스] Drill Course 2주차 Practice (0) | 2023.09.27 |
[해킹 비기너 클래스] Drill Course 1주차 Practice (0) | 2023.09.19 |
[해킹 비기너 클래스] Drill Course 1주차 정리 (1) | 2023.09.15 |
[해킹 비기너 클래스] 8주차 정리 (metasploit) (0) | 2023.09.13 |