2주차에서는 XXE Injection, 권한상승 취약점 공략을 진행했다.
권한상승이 목전에 있어 계속 구글링과 익스플로잇 코드를 사용했다.
포렌식 Capture this 문제랑 병행하니 주말이 사라졌다.
XXE Injection 기초
SSTI 취약점
CVE 취약점 탐색(CVE 검색)
Request에서 XML 형식 사용 데이터 전송 시 XXE Injection를 고려할 수 있다.
XML 이란?
XML Injection 원리
XML Injection 결과의 의문점과 해답
왜 ls 등의 명령어는 조회되지 않는가? -> 명령어 결과로 나오는 값의 양식이 가져올수 없는 양식임.
로그인 후 페이지에서 Reflected XSS 및 SSTI 취약점을 찾아내 SSTI 취약점 활용으로 리버스 쉘 업로드를 진행했다.
웹 서버에서 리버스 쉘을 사용해 공격 대상으로 접속하면, 공격 대상에서 스터디 최종 목표인 관리자 계정(root)으로 권한상승에 이용할 수 있을 것이다.
파이썬 클래스와 상속
전제 : python의 모든 것은 객체이다. 모든 객체는 클래스에 속해있다.
python의 모든 자료형은 클래스로써 존재한다.
데이터는 데이터가 속하는 자료형의 인스턴스가 된다.
문자열 word 라는 데이터가 존재한다면, 해당 데이터는 문자열 클래스의 인스턴스이다.
모든 클래스는 object 클래스를 상속받고 있다.
('') : 빈 문자열
-> string 타입 객체
-> 문자열 데이터 타입을 나타내는 클래스 인스턴스
-> 문자열 클래스는 str 이다.
http://attack_target:9999/?name={{%27%27.__class__.__mro__[0]}}
이 URL은 ''(빈 문자열)이 문자열, 즉 문자열 클래스가 가진 MRO 튜플의 첫 번째 인덱스를 출력한다.
MRO(Method Resolution Order)는 뭘까? 직역하면 메소드 결정 순서이다.
python은 다중 상속을 지원한다.
다중 상속에서 발생할 수 있는 문제점인 부모 클래스가 똑같은 이름의 메소드를 소유한, 죽음의 다아이몬드 문제가 발생한다.
위 사진에서 D클래스가 foo() 메소드를 호출하면 어떻게 될까? B,C 클래스는 A로부터 상속받은 foo() 메소드를 호출해야 하지만, 선택할 수 없다.
따라서 이를 해결하기 위해 나온 개념이 MRO이다.
메소드 결정 순서를 지정해 죽.다.문 문제를 해결하고자 한 것이다.
클래스의 MRO를 확인하기 위해 mro 를 사용한다.
http://attack_target:9999/?name={{%27%27.__class__.__mro__[1]}}
이 URL은 ''(빈 문자열) 클래스의 MRO 튜플의 두번째 인덱스를 출력한다.
pyhton에서 모든 클래스의 최상위 클래스는 object이다.
다시 계속해서 SSTI 취약점을 파보자.
python에서 모든 클래스의 최상위 클래스인 object를 찾아냈다. 이제 해당 클래스를 상속받는 클래스를 찾을 수 있다.
http://attack_target:9999/?name={{%27%27.__class__.__mro__[1].__subclasses__()}}
최상위 클래스 object를 상속받는 하위클래스(subclasses) 확인하면 아래와 같이 여러개의 클래스를 확인할 수 있다.
이 여러 클래스 중, Popen() 클래스를 찾아야 한다.
subclasses의 인덱스를 범위를 지정하거나, 하나씩 대입해보면 Popen() 클래스가 존재하는 인덱스를 찾을 수 있다.
여기서는 254 인덱스에 존재한다.
그런데 왜 Popen클래스가 아니라 subprocess.Popen 이라고 나올까? subprocess.Popen은 subprocess모듈에서 제공하는 함수이다.
Subprocess 모듈 : 새로운 프로세스 실행, 프로세스 입/출력 및 에러 결과 리턴 값을 사용자가 지정 가능.
해당 함수를 이용해 악성 페이로드를 템플릿에 삽입하면(SSTI 취약점 공격) 웹 서버가 이를 실행시킨다.
따라서, 해당 메소드의 옵션을 아래와 같이 지정하면, 웹 서버가 이를 실행시킨다.
http://attack_target:9999/?name={{%27%27.__class__.__mro__[1].__subclasses__()[254](%27ls%27,shell=True,stdout=-1).communicate()}}
인덱스 참고
CVE 검색 사이트
위 사이트에서 키워드를 입력하면 관련 취약점이 나온다.
포렌식 문제나, 모의해킹을 진행하면서 CVE 검색을 진행하는데, 내가 느낀점은 여러 관점에서 CVE 검색 키워드를 사용해 접근하는게 더 높은 취약점 적중률을 보여주는 것 같다.