반응형
문제 링크
https://portswigger.net/web-security/ssrf/lab-ssrf-with-blacklist-filter
목표 & 사용 도구
목표: admin 인터페이스에 접근하여 carlos 계정을 삭제하는 것입니다.
사용도구: Burp Suite
문제 설명
해당 문제를 풀기 위해서는 admin 인터페이스에 접근해서 carlos의 계정을 삭제해야 합니다. 강도가 낮은 SSRF 방어 로직을 사용 중이며 우회를 할 필요가 있다고 합니다.
문제 풀이 - Lab: SSRF with blacklist-based input filter
- ACCESS THE LAB을 클릭하여 랩에 접속합니다.

- 웹 사이트에 접속한 뒤 게시물 중 하나를 택해서 View details를 클릭하여 게시물로 이동합니다.

- Check stock 버튼을 클릭합니다.

- Check stock 버튼을 클릭했을 때의 요청을 Burp Suite의 Repeater 기능에 세팅합니다.

- stockApi 파라미터 값을 admin 인터페이스 주소로 바꾸고 요청을 보내면 유효하지 않은 URL이라는 응답 메시지가 반환되며 외부 주소에서는 접근이 불가능하다는 것을 알 수 있습니다. (요청을 아래로 내리면 stockApi 파라미터가 있습니다.)
| [설명] stockApi 파라미터 값은 서버가 재고 확인 API로 요청을 보내기 위해 사용하는 URL입니다. 응답을 보면 알 수 있듯이 admin 인터페이스의 경우 외부 주소에서는 접근이 불가능하기 때문에 접속할 수 없는 상황입니다. |

- stockApi 파라미터의 값을 임의의 URL로 바꾸고 응답을 확인해 보면 연결 에러 응답을 받고 있는 것을 확인해 볼 수 있습니다.
| [설명] stockApi 파라미터에 입력했던 URL을 보면 결과는 다음과 같았습니다. stockApi=http://localhost/admin (접근 불가, 차단 메시지) stockApi=http://test/test (연결 에러) 프로토콜은 같고 도메인, 경로가 다를 때 응답 결과가 다른 것을 볼 수 있는데 처음 시도했던 페이로드의 경우 차단 메시지가 반환되지만 두 번째 페이로드의 경우 도메인, 경로가 달랐을 때 연결 에러 메시지를 반환하는 것을 볼 수 있습니다. 도메인, 경로가 달라졌을 때는 차단 메시가 반환이 되지 않고 있기 때문에 localhost, admin 문자열과 같이 특정 문자열만 필터링이 되고 있다고 생각해 볼 수 있습니다. |

- stockApi 파라미터에 삽입했던 임의의 URL에서 경로에 localhost를 삽입해 보고 요청을 보냈을 때 응답을 보면 차단을 당하고 있기 때문에 localhost 문자열이 필터링 되고 있다는 것을 알 수 있습니다.

- 이번엔 localhost가 아닌 admin을 삽입해 보고 응답을 확인하면 똑같이 차단당하고 있기 때문에 admin 문자열도 필터링 되고 있다는 사실을 알 수 있습니다.

- localhost 문자열이 필터링 되고 있는데 첫 글자만 대문자로 바꿔서 우회를 시도해 보면 차단 메시지가 반환되지 않고 있기 때문에 우회에 성공했다는 것을 알 수 있습니다.

- admin 문자열도 첫 글자만 대문자로 바꿔서 우회를 시도해 보면 차단 메시지가 반환이 되지 않기 때문에 우회에 성공했다는 것을 알 수 있습니다.

- stockApi 파라미터를 통해 admin 인터페이스에 접근할 때 알아낸 우회 방법을 통해 접근을 해보면 admin 인터페이스에 성공적으로 접속할 수 있기 때문에 SSRF 취약점이 존재하고 있으며 필터링이 미흡하다는 것을 알 수 있습니다.
| [페이로드] stockApi=http://Localhost/Admin [설명] localhost, admin 문자열을 사용하면 필터링에 의해 차단되는 것을 확인했었고 앞 글자만 대문자로 바꾸면 우회를 할 수 있다는 것을 통해 서버 측 필터 로직은 대소문자를 구분하여 필터링하고 있다는 것을 알 수 있었습니다. 따라서 admin 인터페이스 URL을 입력할 때 localhost, admin 문자열의 앞 글자만 대문자로 바꿔주면 우회가 가능하고 admin 인터페이스에 접근이 가능하다는 것을 알 수 있습니다. 결과적으로 stockApi 파라미터에 대해서 필터링이 미흡했기 때문에 서버가 공격자가 입력한 내부 주소로 요청을 보내게 하여 내부 주소에 접근이 가능했기 때문에 SSRF 취약점이 존재합니다. |

- 응답에서 Raw를 클릭하고 carlos 계정 삭제 버튼을 찾은 뒤 해당 URL을 복사합니다.

- stockApi 파라미터에 복사했던 carlos 계정 삭제 URL을 admin 인터페이스 경로에 추가하여 요청을 보냅니다.

- 이전 과정을 끝내고 웹 사이트로 돌아가 보면 문제가 클리어 된 것을 볼 수 있습니다.

- admin 인터페이스에 다시 접속해서 확인해 보면 carlos 계정이 삭제되어 있는 것을 볼 수 있습니다.

반응형
'[WEB] CTF & Wargame > PortSwigger Web Security Academy' 카테고리의 다른 글
| Lab: CSRF where token validation depends on request method (0) | 2026.07.17 |
|---|---|
| Lab: 2FA simple bypass (0) | 2026.07.16 |
| Lab: SSRF with whitelist-based input filter (0) | 2026.06.26 |
| Lab: SSRF with filter bypass via open redirection vulnerability (0) | 2026.06.21 |
| Lab: SQL injection UNION attack, retrieving multiple values in a single column (0) | 2026.06.18 |
| Lab: Web cache poisoning with an unkeyed header (0) | 2026.05.02 |