ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Renewal] webhacking.kr old-40 [500]
    $ 웹 해킹 $/webhacking.kr 2020. 1. 11. 16:02

     

    문제를 확인해 보면 위와 같이 no , id , pw에 입력이 가능한 폼이 존재 합니다.

    login을 눌러보면 다음과 같이 URL에 GET 방식으로 값이 서버로 전송이 되는것을 확인할 수 있습니다.

     

     

    또한 로그인에 성공을 하면 아래와 같이 Success - guest가 출력이 됩니다.

     

    그렇다면 이번에는 no, id, pw중 어디에서 SQL Injection이 터지는지를 확인해보겠습니다.

    위의 파라미터를 입력하면 아무런 일이 일어나지 않지만

    위의 파라미터를 입력하면 Success - guest 가 출력이 됩니다.

     

    그렇기 때문에 no에서 SQL Injection이 가능합니다.

    먼저 admin을 띄워 보겠습니다.

     

    위의 파라미터를 입력해 보면 필터링에 걸려서 아래와같이 출력됩니다.

     

    %20 인 띄어쓰기에서 필터링이 되는것 같습니다.

     

    띄어쓰기 쓰지않고 admin으로 True 값을 띄워 보면 아래와 같이 출력을 해줍니다.

     

    간단하게 pw의 길이를 알아 보겠습니다.

     

    pw의 길이는 10이였습니다. 

     

    위와 같이 get방식을 통해서 python 코드를 이용하여 문제를 해결해 보도록 하겠습니다.

     

    실행 결과는 아래와 같습니다.

     

    2번째 문자가 출력이 안되는 것을 알 수가 있습니다.

    그 이유는 DB에 존재하는 Table 에서 데이터를 뽑아 올때 guest의 2번째 pw와 admin의 2번째 pw가 똑같게 되면 아래와 같이 select가 되게 됩니다.

     

    그렇기 때문에 guest로 출력이 되면서 우리가 find 한 문자열인 "admin password : " 가 안나와서 출력이 안되는 것 입니다.

     

    그렇기 때문에 password는 luck_admin 입니다.

    password를 입력하면 Clear!

    댓글

Designed by Tistory.