OSCP/HackTheBox

[Linux] Popcorn

우와해커 2020. 9. 1. 10:49

배운점

1. 커널 익스는 메이저 버전만 일치하다면 Exploit 가능성이 있다.

그 이유는, searchsploit 검색 제목과 내용이 다른 경우가 있기 때문이다..
제목은 2.6.37로 나와있지만, nelson.c 코드의 첫번째 줄을 보면 2.6.37 이하는 모두 해당된다고 나와있다.

3. 익스플로잇 코드 사용전에 잘 읽어보자. 컴파일 방법이 나와있다.

4. DB자체에서 보안성 강화를 위해 계정별로 명령어 제한을 걸 수 있다. outfile, load file

5. Enumeration은 필수, 숨겨진 디렉토리, 소프트웨어가 있다면 searchsploit을 검색하자

6. ssh key 방식 로그인을 추가하고 싶다면 유저의  홈디렉토리에 write 권한이 있어야한다.

7. 파일업로드 테스트시 큰 범주에서 시도 가능한 것 다 해보자 확장자와 content-type

- 자주 느끼는거지만 설마 이거?라고 생각들면 시도해봐야한다. 그게 맞다. ㅡㅡ

 

 

Error based SQLInjection

1. 주석 -- - ,로그인 bypass

2. load_file과 into outfile 명령어에 제한이 존재함, 한줄웹쉘 실패

 

File Upload Bypass

1. 확장자 우회, .php%00.jpg

2. Content-type 우회를 시도해보아야 함  text/html -> image/jpg 

 

권한상승

- misconfig: 취약한 설정이 존재하는지?
- 커널: gcc가 설치되어있는가? 취약한 소프트웨어가 설치되어 있는가? 

 

 

* motd 취약한 software 익스플로잇 
유저디렉토리에 존재하는 .cache에 저장된 software에 관한 exploit을 검색함

패키지 버전체크

dpkg -l | grep -i pam 


PAMM 1.1.0(ubuntu 9.10/10.04)- MOTD FILE TAMP
ubuntu 버전은 일치하지않지만 exploit된다고함 
> 공식 writeup에 나온 방식이지만 나는 이거 안됨

> 찾아보니 나와 같은 케이스가 존재함, 수정이 있었던 것으로 보인다.

 

 

*커널 익스플로잇 full-nelson.c
Linux Kernel 2.6.37 (RedHat / Ubuntu 10.04) - 'Full-Nelson.c' Local Privileg | exploits/linux/local/15704.c

커널 minor 버전도 일치하지 않고 ubuntu 버전도 일치하지 않음, ubuntu 플랫폼에 major 버전만 일치하는데 exploit이 됨 블로그들 읽어보면 커널에 관련된 local 익스플로잇 노가다를 통해 유일한 exploit을 찾았다고 함.

searchsploit 검색 제목과 내용이 다른 경우가 있음 제목은 2.6.37로 나와있지만, nelson 코드의 첫번째 줄을 보면 2.6.37 이하는 모두 해당된다고 나와있다.

$> uname -a
Linux popcorn 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux

$> cat /proc/version
Linux version 2.6.31-14-generic-pae (buildd@rothera) (gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8) ) #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009

 

또 다른 방법
* 커널 익스플로잇 dirtycow, 컴파일 주의, 코드에서 제시한 컴파일 방법으로 컴파일할 것 
Linux Kernel 2.6.22 < 3.9 — ‘Dirty COW’ ‘PTRACE_POKEDATA’ Race Condition Privilege Escalation (/etc/pa……

$> gcc -pthread 40839.c -o dirty -lcrypt

아래링크에서 더티카우가 취약하지 않은 버전 리스트를 확인할 수있음
https://github.com/dirtycow/dirtycow.github.io/wiki/Patched-Kernel-Versions

 

SSH 키방식 로그인
- ssh키를 만들어서 서버와 클라이언트에 public-private 키가 쌍으로 존재해야함
- 두가지 방법이 존재함, 키 생성하는 엔드포인트의 차이

- 핵심은 pub파일을 ssh서버의 authorized_key에 추가시키고 클라이언트에서 사설키로 로그인하는 것
1. 타겟에서 key생성 후 public키를 authorized_key에 복사 kali로 private키 복사시켜서 private키로 로그인
2. kali에서 key생성 후 타겟의 authorized_key에 public키를 복사시켜서 private키로 로그인

* www로 쉘을 딴 후 일반유저 .ssh에 public key를 추가해서 로그인하려고 했으나 당연히 디렉토리 권한이 없어서 키파일을 넣을 수 없었음, (만약 write 권한이 존재했다면 취약한 설정이므로 이것을 이용해 권한상승이 쉽게될 수 있음)
=> www-data로 접근이 됬기 때문에 여기서 키파일을 넣으면 ssh 로그인이 가능함

 

1번 솔루션

www-data@popcorn:/var/www$ mkdir .ssh
www-data@popcorn:/var/www$ ssh-keygen -q -t rsa -N '' -C 'pam'
Enter file in which to save the key (/var/www/.ssh/id_rsa): 
www-data@popcorn:/var/www$ ls .ssh/
id_rsa  id_rsa.pub
www-data@popcorn:/var/www$ cp .ssh/id_rsa.pub .ssh/authorized_keys
www-data@popcorn:/var/www$ chmod 600 .ssh/authorized_keys 

If I grab a copy of the private key, bring it back to my host, and then SSH to Popcorn as www-data, not only do I get a shell:
root@kali# ssh -i /tmp/key www-data@10.10.10.6

 

 

 

 

 

 

'OSCP > HackTheBox' 카테고리의 다른 글

[Linux] Node (CTF, no OSCP level)  (0) 2020.09.03
[Linux] Cronos  (1) 2020.09.02
[Linux] Jarvis  (0) 2020.08.28
[Linux] FriendZone  (0) 2020.08.26
[Linux] SolidState  (0) 2020.08.25