[XSS Challenge] Stage #1
2021. 3. 27. 01:07
Study/Web Hacking
Stage #1 입장! 해당 Stage에서 해야하는 일은 alert(document.domain);을 실행시키는 것이다. Stage #1에 들어오면 사용자 입력을 받을 수 있는 Search창이 있다. XSS 공격은 사용자의 입력으로 실행된다. 따라서 사용자의 입력을 받을 수 있는 Search창의 보안 취약점을 찾기 위해 일단 아무 값이나 입력해봤다(hi 입력). 사용자의 입력이 Search창 아래에 출력됐다. 특별한 변경사항이 없는지 확인하기 위해 개발자도구를 실행했다. 개발자도구를 열어보면 Search form아래에 태그로 감싸진 사용자 입력이 생긴 것을 알 수 있다. 사용자 입력이 아무런 필터링 없이 소스코드에 그대로 노출되고 있다. 따라서 script코드를 삽입하면 alert(document.dom..
[LOS] gremlin
2021. 3. 27. 00:29
Study/Web Hacking
gremlin에 접속! gremlin에 접속하면 php코드를 바로 볼 수 있다. 코드를 살펴보면 GET방식으로 id와 pw 값을 입력 받아서 query에 포함시키고, 데이터베이스에 전달해서 return되는 값이 있으면 gremlin이 solve되는 것 같다. 그러면 id나 pw에 어떤 값을 넣어야 mysqli_fetch_array()에 대한 return값을 받을 수 있을지 생각해야 한다. where문을 항상 참이 되게 하면 prob_gremlin 테이블에서 id 컬럼의 데이터를 가져오기 때문에 반환 값을 받을 수 있을 것 같다. 그렇다면 where문을 항상 참이 되게 하려면 어떻게 해야할까. [variable] or 1 일 때 [variable]이 참이든 거짓이든 or 연산자와 1 때문에 항상 참이 될 ..
SQL Injection
2021. 3. 26. 17:18
Study/Web Hacking
www.hackerschool.org/Sub_Html/HS_Posting/?uid=42 www.hackerschool.org/Sub_Html/HS_Posting/?uid=43 해커스쿨 - SQL Injection 정리 - SQL query를 Injection해서 데이터베이스를 공격하는 기법 - 데이터베이스는 서버사이드 언어와 구분되는 하나의 프로그램이라서 SQL Injection은 다른 해킹기법과 조금 다름. - 데이터베이스 자체에서 SQL Injection 을 방어하는것은 어렵고 비효율적 개발자는 데이터베이스에 가해지는 공격을 서버사이드에서 방어해야 함. - 보통 싱글쿼터 (') 앞에 백슬래시를 붙이거나 magic_quotes_gpc = on 으로 설정하는 것으로 SQL Injection에 대한 방어를..
[natas] Level 0 ~ Level 1 -> Level 2
2021. 3. 26. 16:05
Study/Web Hacking
(크롬에서 진행 / 윈도우) : level 0 username: natas0 password: natas0 URL: http://natas0.natas.labs.overthewire.org level 0에 접속하면 "You can find the password for the next level on this page."라는 문구가 제일 먼저 보인다. 해당 페이지에서 level 1로 가는 password를 알아낼 수 있다. 소스코드를 자세히 보기 위해 F12를 눌러보자. F12를 누르면 개발자도구 창이 뜨는데, body태그 부분을 클릭해서 하위 코드들의 내용을 살펴봤다. 주석부분에 natas1로 가는 password가 있는 것을 확인했다. natas1 password: gtVrDuiDfck831PqWsL..
[WEB]: XSS game 06
2021. 2. 17. 19:19
Study/Web Hacking
[Mission] [해결방법] 이번에 해결해야 할 문제 페이지다. 딱 봤을 때 페이지의 로고와 아래 문구외에는 별다른게 없어 보인다. 사용자의 입력이 들어갈 수 있는 부분은 URL창밖에는 없는 것 같다. 페이지의 동작을 확인하기 위해서 URL창에 이것 저것 입력해봤다. URL에서 #뒤에 입력된 부분이 페이지 아랫부분 문구에 출력되고 있었다. 더 정확히 파악하기 위해 코드를 확인해봤다. function includeGadget(url) { var scriptEl = document.createElement('script'); // This will totally prevent us from loading evil URLs! if (url.match(/^https?:\/\//)) { setInnerText(..
[WEB]: XSS game 05
2021. 2. 8. 22:17
Study/Web Hacking
[Mission] [해결방법] 처음 시작화면이다. URL창과 화면 로고, 그리고 sing up 링크 외에는 별다른게 없다. sign up 링크를 눌러봤다. 그랬더니 signup 페이지에 next라는 URL 파라미터가 전달됐다. 이 next가 어떻게 사용되는지 알기 위해 소스코드를 확인해봤다. 확인해보니 Next 링크의 주소로 활용되고 있었다. next 변수를 잘 활용하면 pop up 창을 띄울 수 있을 것 같다. next 파라미터에 confirm" onclick="alert();을 전달해봤다. 하지만 원하는 결과를 얻진 못 했다. 이외의 공격 방법이 떠오르지 않아서 hint를 확인해봤는데 4번째 힌트에서 도움을 받았다. 드래그 된 부분을 보니까 a 태그 href에 javascript:doSomething..
[WEB]: XSS game 04
2021. 2. 1. 16:34
Study/Web Hacking
[Mission] [해결방법] 문제 페이지에 기본 value로 주어진 3으로 타이머를 작동시켜보았다. 그 결과 사용자의 입력이 timer라는 파라미터로 전송된다는 것을 알게 됐다. timer.html에서 위 코드를 보면 startTimer 함수에 사용자가 입력한 timer 값을 인자로 사용하는 것 같다. 더 정확하게 하기 위해 입력창에 333을 입력하고, 우클릭 -> 검사로 들어가서 소스코드를 확인해봤다. 사용자의 입력 333이 startTimer 함수의 인자로 사용되는 것을 확인했다. 사용자 입력으로 alert 함수를 주면 해결할 수 있을 것 같다. 3'); alert('XSS을 입력으로 주었더니 문제를 해결할 수 있었다. [결과]
[WEB]: XSS game 03
2021. 1. 27. 00:49
Study/Web Hacking
[Mission] [해결방법] script를 살펴보니 html코드가 삽입된 걸 볼 수 있었다. 사용자가 URL의 #뒤에 입력하는 값이 num으로 전달된다는 사실을 알 수 있다. 따라서 num으로 전달되는 값으로 존재하지 않는 이미지의 이름과 onerror 속성을 사용하면 된다. 나는 이미지의 이름을 0으로 설정하고 URL을 작성했다. "0.jpg' onerror='alert()'>" [결과]
[WEB]: XSS game 02
2021. 1. 19. 19:22
Study/Web Hacking
[Mission] [해결방법] level 1에서 했던 것처럼 script 태그를 사용했는데 level 2에서는 이 방법이 통하지 않았다. hint를 확인해보니 onerror 속성을 사용하라고 했다. 따라서 img 태그에 src을 없는 주소로 설정하고 onerror 속성에 alert()함수를 삽입했다. [결과]