Web/Lord of SQLInjection
-
Lord of SQLInjection-21 (iron_golem)Web/Lord of SQLInjection 2022. 4. 10. 21:56
[풀이] 소스코드는 위와 같다. 가장 먼저 time based sqli에 종종 사용되는 sleep과 benchmark와 같은 문자열이 필터링 되고 있는 것을 확인할 수 있다. 그리고 이후에 사용되는 mysqli_error()를 통해 error based sqli를 활용해 pw를 추출하는 문제임을 유추할 수 있다. double이 표현 가능한 범위 밖의 값을 연산해 임의로 error를 유발하고 이를 통해 blind sqli를 시도했다.
-
Lord of SQLInjection-19 (xavis)Web/Lord of SQLInjection 2022. 3. 26. 03:50
[풀이] 별다른 필터링이 적용되어 있지 않아서 곧바로 스크립트를 제작하고 실행했지만 아무런 결과도 반환하지 않았다. 이 문제의 경우 pw가 ASCII 값이 아닌 multibyte character set으로 저장되어 있기 때문에 기존에 작성했던 [0-9a-zA-Z]로는 pw를 찾는 것이 불가능했다. 이 경우 단순하게 데이터 셋을 추가할 수도 있지만 유니코드의 경우만 보더라도 2의 16승에 해당하는 경우의 수가 존재하기 때문에 이를 모두 조사하는 것은 굉장히 비효율적이다. 따라서 bit 연산을 이용한 injection을 통해 pw 추출을 시도했다. 우선 pw에 저장된 비트열의 길이를 확인해봤다. 여기서 참고해야 할 것은 ascii()는 8 bit character에 대해서 작동하는 함수이기 때문에 mult..
-
Lord of SQLInjection-16 (succubus)Web/Lord of SQLInjection 2022. 3. 22. 20:37
[풀이] 싱글쿼터가 필터링 되는 상황에서 injection이 이루어질 수 있는 또 다른 케이스다. 백슬래시를 통해 id 파라미터 뒤에 오는 싱글쿼터를 이스케이프 처리하고 pw 파라미터 뒤에 오는 싱글쿼터는 주석처리 함으로써 injection을 성공했다. 시큐어코딩을 배제하고 로그인 서비스를 구현한다면 대개는 위와 같은 코드가 될 것이다. 웹 방화벽이나 다른 보안 라이브러리에 의해 싱글쿼터가 필터링 되는 경우를 생각하면 충분히 있음직한 코드라고 생각이 된다.
-
Lord of SQLInjection-14 (giant)Web/Lord of SQLInjection 2022. 3. 21. 22:24
문제로 제시된 쿼리는 select 1234 fromprob_giant where 1 로 from 절과 테이블 명이 붙어있어 쿼리가 정상적으로 실행되지 않는다. from과 prob_giant 사이에 공백을 추가해 문법에 맞는 SQL 구문으로 만들어주기만 하면 문제 해결이 가능하다. 다만 입력값의 길이가 1보다 클 경우 차단되기 때문에 기존처럼 괄호나 주석을 통해 우회는 불가능하고 encoding 문자를 사용해야 한다.