일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- tuple
- 레나튜토리얼.
- set
- 오블완
- 숫자분리
- flask설치
- flask 구조
- Python
- NMAP
- 파이썬
- 플라스크
- pe구조
- 티스토리챌린지
- L
- flask blueprint
- 리버스엔지니어링
- AQ
- 레나튜토리얼
- 포트스캐너
- 플라스크 애플리케이션 팩토리
- 삼성노트동기화오류
- 클립보드간공유기능
- flask
- 리버싱
- 삼성클라우드오류
- portswigger
- 멀티컨트롤오류
- 리버스 엔지니어링
- Today
- Total
정보보안
Portswigger Lab: SSRF, Path Traversal, xxe(1) 본문
1. SSRF : Open Redirect 취약점과 콜라보레이션
check stock 버튼을 누르면 /product/stock POST 요청을 보낸다.
/product/stock 엔드포인트에서는 문제에서 나와있듯이 로컬 애플리케이션에 접근하도록 제한되어 있었다.
stockApi 파라미터를 통해 접근할 path를 입력할 수 있는 것이 중요 포인트이다.
stockApi=/product/stock/check?productId=1&storeId=1
다음 제품을 클릭하면 /product/nextProduct 엔드포인트를 요청하는데,
path 파라미터에 http://192.168.0.12:8080/admin/ 를 입력하면 찾아가려고 한다. 오픈 리다이렉트 취약점이 있다.
다만 해당 ip는 내부이기 때문에 이 포인트에서 사용할 수가 없다.
그래서 해당 파라미터를 로컬 애플리케이션에 제한된 stockApi에 넣어준다.
stockApi=/product/nextProduct?currentProductId=3%26path=http://192.168.0.12:8080/admin
그러면 192.168.0.12:8080/admin 페이지에 접속이 가능하며, carlos를 삭제할 수 있다.
SSRF는 아쉽게도 위 문제 빼고 다 풀어져 있어서(*burp pro 버전 문제 제외) 끝이났다.
2. Path Traversal: url decoding
문제에서 말한 대로 이미지에 공격이 가능하게 생긴 param이 있다.
url decoding을 수행한다기에, 그러면 더블 인코딩도 막을 것인가 하면서 ../../../../etc/passwd를 더블인코딩 해서 보냈더니 바로 끝났다. 이런 것도 기록을 남겨야 하나.. 흠.
3. Path Traversal: 경로 지정 우회
번역이 잘 안 되어서 무슨 상황인지 잘 모르겠다. 일단 들어간다.
이미지를 확인하면 filename 파라미터가 있는 것을 볼 수 있다.
filename 값을 /etc/passwd로 바꿔 보내면 filename 파라미터가 없다는 오류가 나타난다.
filename 파라미터는 존재하는데 왜 이런 에러가 나타나는지 모르겠지만 일단 후퇴한다.
아마 지정된 경로(여기선 /var/www/image)를 확인하는 코드가 있는 것 같다.
/var/www/image를 그대로 두고 뒤에 path traversal 구문을 넣어주면 /etc/passwd를 에러없이 확인할 수 있다.
Path traversal도 남은 문제가 2개였어서 종료.
4. XXE: XXE를 이용하여 SSRF 취약점 실행
문제에서 언급한 대로, 재고 확인 기능이 있다. Check stock을 클릭한다.
클릭 시 xml 형식으로 data를 보낸다. xxe를 실행하는 source인가 보다.
xml에 'haru'라는 외부 entity를 추가했다. (system은 이 개체가 외부 시스템 리소스를 가리키고 있음을 의미)
그리고 productId에 haru를 참조했다. &haru;는 xml 이 파싱될 때 "http://169.254.168.254/" 내용으로 대체된다.
전송 후 invalid product ID: latest 라는 응답이 왔다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [
<!ELEMENT stockCheck ANY>
<!ENTITY haru SYSTEM "http://169.254.169.254/">
]>
<stockCheck>
<productId>&haru;</productId>
<storeId>1</storeId>
</stockCheck>
latest를 path로 붙여서 전송하니 응답에서 meta-data라는 값이 출력됐다.
meta-data도 path에 넣으며 계속 이어간다.
출력된 값을 모두 path에 넣었더니 결국 key가 노출되었다.
xxe는 2탄에서 계속...
'Public > Portswigger Lab' 카테고리의 다른 글
Portswigger Lab: 안전하지 않은 역직렬화(Insecure deserialization)(1) (0) | 2025.02.02 |
---|---|
Portswigger Lab: XXE(2) (0) | 2025.02.02 |
Portswigger Lab: SSTI(2) (1) | 2025.02.01 |
Portswigger Lab: SSTI(1) (0) | 2024.11.13 |
Portswigger Lab 재시작 (2) | 2024.11.13 |