(목차)
-What is SSRF?
-SSRF attacks against the server
-실습
-What is SSRF?
SSRF 는 '서버 측 요청 위조' 라는 뜻으로 , 공격자가 서버 측 응용 프로그램이 의도하지 않은 요청을 보내도록 하는 것을 허용하는 웹 취약점 입니다.
-SSRF attacks against the server
서버에 대한 SSRF 공격에서 공격자는 응용 프로그램이 루프백 네트워크 인터페이스를 통해 응용 프로그램을 호스팅하는 서버로 HTTP요청을 보내도록 유도합니다.
※루프백 인터페이스란? : 말 그대로 내 컴퓨터에서 나간 신호가 다시 내 컴퓨터로 돌아오는 통로라고 보시면 됩니다.
내 컴퓨터를 대상으로 프로그램이 정상적으로 작동하나 시험해볼때 사용하곤 합니다.
주로 127.0.0.1 이나 localhost 라는 이름으로 사용합니다.
SSRF 의 예를 들기위해서 쇼핑 홈페이지의 재고 확인 버튼을 생각해보겠습니다.
재고 확인버튼을 누르면 쇼핑 홈페이지는 Back-end로 이러한 요청을 보내게 됩니다.
그러나 이 요청을 밑에 코드로 수정한다면?
재고확인 버튼을 눌렀을때 데이터를 불러오는 경로를 localhost/admin 으로 바꾸어주었습니다.
이렇게 될경우 서버의 admin 경로에 있는 페이지를 들어갈수 있게됩니다.
하지만 아쉽게도 이런 어드민권한의 동작들은 일반적으로 인증된 유저만이 사용할 수 있게 되어있습니다.
결국 어드민 페이지를 들어가도 아무것도 못한다는 뜻이됩니다.
그러나 만약 /admin 에 대한 요청이 local machine 에서 온거라면 얘기는 달라집니다.
일반적으로 관리자 페이지에서 다른 사용자의 계정을 삭제하는 등의 관리자급 행위는 백엔드 서버에서 특별한 권한부여가 필요합니다. 그러나 서버자체에서 백엔드로 보내는 요청에는 그러한 권한을 확인할 필요가 없습니다.
※쉽게 생각하면 가장 가까운 친구이기 때문에 굳이 확인할 필요가 없다.
이 점을 이용하여 관리자 페이지에서 동작을 실행할 수 있는 취약점이 만들어집니다.
-실습
[실습환경]
내부 192.168.0.x 범위에서 포트 8080를 통해 admin interface 스캔할수 있다.
[목적] : 어드민 페이지에서 carlos 라는 사용자를 삭제하자.
우선 상품의 재고 홈페이지로 들어와서 London 의 Check stock 을 체크해 주었다. 658 units 이라는 재고가 확인되는것으로 back end 에서 그 정보를 가져오는 것을 알수 있으니 그 코드를 살펴보자.
192.168.0.1:8080 포트로 가길레 무작정 /admin 을 넣어봣지만 당연히 안됐다.
어드민페이지와 통신하는 주소를 Burp suite 의 intruder 를 사용하여 192.168.0.1~192.168.0.255 까지 넣어봐서 admin 페이지와 연결된 주소를 찾아봐야 겠다.
※하기에 앞서 실습환경에서 어드민페이지는 8080포트를 사용한다고 되어있었다.
기본적으로 192.168.0.1 라고 하면 80포트를 사용한다는 의미이므로 '192.168.0.1:8080' 이런식으로 포트를 꼭 지정해주자.
POST 라는 명령을 찾아서 재고확인을 위해 보냈던 요청의 내용을 바꿔서 다시 보내보겠습니다.
(범위는 192.168.0.1~192.168.0.255)
인트루더를 작동하던중 요청의 결과의 length 가 다른 부분을 발견했다.
192.168.0.58:8080 포트로 통신을 했을때 /admin 로 경로를 잡았더니 뭔가가 발생했다는 뜻이다.
그 결과를 살펴보자.
어드민 페이지 가 나와서 기분좋게 carlos 를 Delete 했더니 권한이 없다고 뜨면서 다시 홈으로 돌아가진다.
........
........
왜 그런가 생각을 해봣더니 이 챕터의 제목은 SSRF 이다.
local machine 인 서버가 carlos 를 delete 하게 했어야 햇는데 내가 delete 를 눌러버리면 서버가 행한것이 아닌 외부에 나란 존재가 요청을 한것이 되버려서 당연히 back end 서버는 "응 너 권한없어" 라고 판단을 해버린 것이다.
그러면 저 delete 버튼을 실행하는 주소를 저 어드민 페이지 소스코드에서 알아낸 후 stockApi 에다가 그 주소를 입력한후 재고확인 버튼을 눌러주게 되면 될 것 같다.
어드민 페이지 에서 delete 버튼을 누르면 작동되는 소스코드는 저 주소로 찍혀있다.
그러니깐 저 delete 요청을 재고확인이란 버튼을 이용하여 back end 로 ,서버가 대신 보내주기만 하면 된다는 것!.
역시! 이렇게 보내주고 사이트를 다시 확인해보니 LAB Solved 로 바뀌어 있었다.
정말 carlos 가 사라졋는지 확인한번 해보자.
nice! carlos 의 계정이 무사히 사라졋다.
이로써 SSRF 실습을 마치도록 하겠습니다.
'웹해킹' 카테고리의 다른 글
SQL Injection(SQLi) (0) | 2024.05.27 |
---|---|
File upload vulnerabilities (0) | 2024.01.30 |
Authentication vulnerabilities (1) | 2024.01.26 |
Access control (2) | 2024.01.25 |
Path traversal (1) | 2024.01.24 |