suninatas-22번 BlindSQLi
SQL injection 문제는 재미있어서 계속 포스팅을 해보도록 하겠습니다.
로그인을 하면 GET 요청으로 서버측에 전송이 되는 것을 확인 할 수가 있었습니다.
그리고 정답이면 OK가 출력되는 것을 보니...블라인드 SQL 인젝션 문제라는 것을 확인할 수가 있었습니다.
id=guest' and 1=1-- &pw=guest를 입력했을 때의 반응입니다.
사실 여기서는 보이지 않았지만
id=guest'-- &pw=1
을 입력했을 때에도 guest로 로그인이 되며
id=admin'-- &pw=1일 때도 admin으로 로그인이 됩니다.
그렇다면 블라인드 sql 인젝션 공격을 시도해 볼 수 있게 되었습니다.
여러가지를 필터링하고 있어서 공격이 쉬울 것같다는 생각은 들지 않았습니다.
근데 저 white space 필터링이 공백 필터링인거 같은데, 공백 필터링을 하지 않더라구요
만약 space bar 즉, %20을 필터링한다면,
%0A(줄바꿈), %09(Tab), (), 로 우회할 수가 있습니다.
id=admin'and(1=1)-- 을 했을 경우에도 정상적으로 admin 로그인이 되었습니다.
방금까지 OK guest 또는 OK admin 이런 메시지를 확인할 수 있었는데 만약 거짓 조건을 줘버리면 False가 뜹니다.
필터링에 걸리게 되면 No hack 메시지가 뜨게 됩니다.
위 세개의 사진으로 admin의 password길이를 알 수가 있었습니다. 참과 거짓의 반응으로 원하는 답을 찾아가는 블라인드 sql 인젝션 공격임을 다시한번 확인할 수 있습니다.
이는 공격을 하기위한 python 스크립트 입니다.
문자열을 자르기 위해서
Oracle 서버에서는 substr 함수를 사용하고
Ms-SQL 서버에서는 substring 함수를 사용한다고 합니다.
계속 하던데로 substr을 했는데 계속 실패해서 많은시간을 소비했는데 substring으로 했을 때 된걸보니 Ms-sql 서버인가봅니다.
확실하진 않지만 서버차이인건 분명한거라 생각합니다.
0 개의 댓글