반응형
웹 어플리케이션에서 사용자가 입력한 URL에 요청을 보내는 기능이 구현되어야 하는 경우도 존재.
URL을 통해 사용자가 입력한 사진을 업로드하는 기능을 구현하면 사용자가 입력한 URL을 웹 어플리케이션에서 접근해야 함.
CSRF와 차이점은 변조된 요청을 보내는 대상의 차이.
CSRF는 변조된 요청을 웹 클라이언트(브라우저)가 보내며, SSRF는 웹 어플리케이션에서 보냄.
웹 어플리케이션에서 요청을 보내기 때문에 웹 어플리케이션이 작동하고 있는 포트, 서버와 연결된 내부망에 요청 보낼 수 있음
External
from flask import Flask, render_template, request
import requests
from dreambank import imgcheckFunc, adminFunc, configFunc, logFunc
app = Flask(__name__)
adminIP = ["127.0.0.1"]
def adminCheck():
if request.remote_addr in adminIP:
return True
else:
return False
@app.route("/")
def index():
if adminCheck():
return render_template("admin_index.html")
else:
return render_template("index.html")
@app.route("/imgCheck")
def imgcheck():
url = request.form['url']
img = requests.get(url).content
checkResult = imgcheckFunc(img)
return checkResult
@app.route("/admin")
def admin():
if adminCheck():
return adminFunc()
@app.route("/config")
def config():
if adminCheck():
return configFunc()
@app.route("/log")
def log():
if adminCheck():
return logFunc()
if __name__ == "__main__":
app.run(host='0.0.0.0')
Internal
from flask import Flask, render_template, request
import requests
from dreambank import userLevel, userList
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/user")
def user():
action = request.args.get('action')
if action == "grant":
name = request.args.get('name')
result = userLevel(name, 'admin')
elif action == "list":
result = userList()
else:
result = userList()
return result
if __name__ == "__main__":
app.run()
이미지 url을 통해 Internal 서버에 접근하여 권한 취득.
이미지 주소로 입력된 url은 request를 우선 수행함.
adminIP가 127.0.0.1
/admin, /config, /log 등의 경로는 adminCheck() 후에 동작함.
따라서 adminIP로 해당 경로들에 접근.
config 경로에서 internal-api-URL 획득가능.
internal server에 user에 action으로 grant 값 주고, name에 특정 값 입력시에 해당 name으로 admin 권한을 주는 것을 확인할 수 있다.
http://internal-api.dreambank/user?action=grant&name=dream
이렇게 접근하면
반응형
'Security' 카테고리의 다른 글
[wargame] csrf-2 (0) | 2021.09.25 |
---|---|
[Webhacking] file vulnerability (0) | 2021.09.24 |
[Webhacking] path traversal (0) | 2021.09.24 |
[Webhacking] server side template injection (SSTI) (0) | 2021.09.24 |
[Webhacking] Command Injection (0) | 2021.09.23 |