분류 전체보기
-
[Webhacking.kr] Challenge 3Wargame/Webhacking.kr 2022. 12. 11. 23:47
Challenge 3을 풀어보자. 드디어 프록시 도구를 사용해보았다. 문제 화면을 보면 퍼즐인 것 같다. 소스 코드를 보면 숫자로 둘러 쌓인 5*5의 사각형들은 클릭하면 한 칸씩 색이 변한다. 이것을 이용해 색 배열을 맞춰 이 퍼즐부터 해결해보도록 하자. 퍼즐은 간단하다. 1은 한 칸씩, 그보다 큰 숫자들은 연속으로 색을 칠해 가로와 세로를 교차하면 되겠다. 답은 아래의 사진과 같다. 색을 맞춰준 뒤 solved를 누르니, Clear!가 나타나며 기록을 위한 이름을 적으라고 한다. 이것으로 문제를 해결한 것 같다. 접속 ID를 입력하고 submit을 누르니 name, answer, ip의 로그가 출력된다. 그런데, 문제가 해결되지 않는다. (당연한 것이겠지..) 혹시나 싶어 SQL Injection을 위..
-
[Webhacking.kr] Challenge 2Wargame/Webhacking.kr 2022. 12. 9. 07:57
Challenge 2를 풀어보자. L.O.S를 풀면서 어느 정도 SQL Injection에 익숙해졌으므로, 묵혀뒀던 문제를 풀어본다. 문제 화면을 보면 제한 구역이라는 말로 접속을 환영해준다. 중요한 부분은 없는 것 같으니 페이지 소스를 보도록 하자. 페이지 소스를 보면 방금의 환영 문구와 함께 다른 두 개의 구문이 보인다. 처음 것은 시간을 보여주는 듯하고, 두 번째 것은 admin.php라는 힌트를 주는 것 같다. 힌트를 받았으니 이용을 해주는 것이 맞는 것 같다. url에 admin.php를 입력하니 비밀번호를 입력하는 페이지가 나왔다. 비밀번호를 알아내 이 곳에 입력을 하면 문제가 해결될 것이라고 생각한다. 앞의 Challenge 처럼 Cookie 값에 힌트가 있을 것이라 생각해 확인을 해보았다...
-
[L.O.S] Level 21 - iron_golemWargame/L.O.S 2022. 12. 9. 04:30
Level 21 - iron_golem을 풀어보자. 새로운 공격 방법을 이용해야 하는 문제이다. 얼핏 보기에 코드에서 필터링하는 부분은 많이 없는 것 같다. 그런데, 앞의 Level들과는 달리 Blind SQL Injection을 하기 위해 출력을 보여주던 부분이 없다. 어떻게 해결해야 할까?? sleep과 benchmark 함수가 필터링되는 것을 보니, Time Based SQL Injection은 아닌 것 같다. 중간의 if문에 mysqli_error가 있으니, Error Based SQL Injection을 이용해 공격해보도록 하자. 우선 에러가 났을 때의 변화를 확인해보도록 하자. pw 파라미터를 싱글쿼터(')로 닫았을 때 MySQL의 옳은 구문을 사용하라는 내용의 에러가 나타난다. 이것을 보니,..
-
[L.O.S] Level 20 - dragonWargame/L.O.S 2022. 12. 8. 05:20
Level 20 - dragon을 풀어보자. 코드를 살펴보면 pw 파라미터를 이용해 id 파라미터의 값으로 admin을 넣으면 된다. 그런데 기본적으로 id에 guest가 넣어져 있고, 뒤의 입력은 주석 처리가 되어 있다. 그로 인해 페이지에 접속만 해도 Hello guest가 출력되는 것을 볼 수 있다. 이 상태로는 pw에 어떤 값을 넣더라도 주석 처리로 인해 뒤의 쿼리문이 실행되지 않는다. 이것을 해결하기 위해서는 주석이 처리하는 범위를 알아야 한다. 기본적으로 주석 문자는 해당 문자 뒤의 한 줄을 주석 처리한다. 이러한 특성을 이용해 pw의 값을 개행을 한 다음 입력해주면 문제가 해결될 것이다. sql 구문은 몇 줄에 걸쳐 입력을 하더라도 ';' 문자가 없으면 끝 처리를 하지 않는다. pw 파라미터..
-
[L.O.S] Level 19 - xavisWargame/L.O.S 2022. 12. 7. 04:57
Level 19 - xavis를 풀어보자. 어려운 문제인 것도 맞는 것 같고, 생각의 유연함이 필요한 문제인 것도 맞는 것 같다. 문제의 코드를 보면 필터링은 regex와 like를 하고 있다. regex가 뭔지는 잘 모르겠지만, 넘어가도 될 것 같다. 얼핏 보기에 필터링되는 것도 별로 없고, 제한 사항이 없어 쉬운 문제인 것 같다. pw의 길이를 알아보기 위해 입력을 했더니, 이전의 Level들 보다는 길다는 것을 알 수 있다. 파이썬 코드를 이용해 정확한 pw의 길이를 알아보니 12가 나왔다. 이제 admin의 pw를 알아보기 위해 코드를 작성해 실행하면 문제가 풀릴텐데, 수월한 문제이다. 하지만, 코드를 실행시키고 기다려봐도 결과가 출력되지 않는다. 무엇이 문제일까?? 생각을 조금 해보면 파이썬 코..
-
[L.O.S] Level 18 - nightmareWargame/L.O.S 2022. 12. 6. 03:26
Level 18 - nightmare를 풀어보자. 이번 문제는 pw 파라미터에 값을 입력하는데 몇 가지 필터링과 제약조건이 있다. 우선 기본적으로 필터링되던 문자들에 '#'과 '-' 문자가 필터링되는데, 주석에 관련된 문자이다. 다음으로 입력하는 pw의 길이가 6이 넘어가면 공격이 진행되지 않는다. 알고있던 주석 처리인 '#'과 '-- '를 제외하고 다른 주석 처리 방법이 필요하다. 먼저 '/**/' 같은 경우는 입력하기에 짧기도 하고 뒤에 다른 입력이 없기에 사용하지 못한다. 또 다른 방법으로는 ';%00'이 있는데, 이것은 sql의 마지막을 의미하는 ';'과 NULL을 이용한 주석이다. 이 주석 방법을 이용해 참 값을 입력해보도록 하자. 싱글쿼터(')와 괄호를 넣어 pw의 입력을 닫아주고, ||와 1..
-
[L.O.S] Level 17 - zombie_assassinWargame/L.O.S 2022. 12. 5. 04:15
Level 17 - zombie_assassin을 풀어보자. 코드를 살펴보면 앞의 succubus와 비슷한 문제이다. 하나가 추가되었는데, 입력받는 id와 pw에 addslashes 함수와 strrev 함수가 적용되었다. strrev 함수는 처음 본 것인데, 입력 받는 것을 반대로 출력하는 함수이다. 아래의 사진을 보면 id와 pw 파라미터에 모두 123을 입력했는데, 321로 출력이 되었다. 우선 succubus와 비슷하게 입력을 해보자. 순서만 바꾸어 입력을 했는데, 백슬래시(\)가 두 개 입력되는 것을 볼 수 있다. 이것은 addslashes 함수에 의해 백슬래시가 하나 더 입력이 된 것이다. 어떻게 입력해야 succubus처럼 싱글쿼터(')를 우회할 수 있을까? addslashes 함수는 ', "..
-
[L.O.S] Level 16 - succubusWargame/L.O.S 2022. 12. 5. 03:55
Level 16 - succubus를 풀어보자. 새로운 우회 방법을 적용해야 한다. 코드를 살펴보면 id 파라미터와 pw 파라미터에 값을 입력해야 한다. id가 참 값이 되면 문제가 해결되는 것처럼 보인다. 그런데 두 파라미터 모두 싱글쿼터(')를 필터링하고 있다. 문제를 해결하기 위해서는 위에서 설명한 것처럼, 새로운 우회 방법이 필요하다. 지금처럼 특수한 경우에 사용할 수 있는 방법이다. 두 파라미터 모두 싱글쿼터가 입력되어 있고, 그 사이에 어떤 방해가 될 만한 특수문자가 없다. 아래 사진을 보면 백슬래시(\)를 id 파라미터에 입력을 했다. 이를 통해 백슬래시 뒤의 싱글쿼터가 문자처럼 입력이 된다. 이것의 의미는 값을 입력받는 특수한 기능을 가진 싱글쿼터가 아닌 화면에 출력되는 문자가 되었다는 것..