[Lord of SQL Injection] #4

김태현·2022년 8월 29일

Lord of SQL Injection

목록 보기
4/7

1. 문제

2. 풀이

  • preg_match($pattern, $subject, [, $matches]) : 문자열 안에서 특정한 정규식 패턴의 존재 여부를 찾는데 유용한 함수

  • $pattern : 문자열로 검색할 패턴

  • $subject : 입력 문자열

  • [$matches] : 사용 시 패턴에 매치되는 내용을 배열에 담아둔다.

따라서 얻을 수 있는 정보로는 pw의 입력 값 필터링 규칙으로 다음과 같은 정보를 필터링한다는 것이다.

1) prob

2) _

3) .

4) ( )

  • addslashes() : DB의 질의에서 처리할 필요가 있는 문자 앞에 백슬래시()를 붙인 문자열 반환, 이때 처리할 필요가 있는 문자에는 싱글 쿼터('), 더블 쿼터("), 백슬래시(), NUL(NULL)이 있다.
    ex) It's a pen --오류 발생--> It\'s a pen

해당 문제를 해결하기 위해서는 admin 계정의 정확한 PW를 입력해야만 한다.


PW를 알아내기 위해 가장 먼저 length()를 이용하여 pw의 길이를 알아보았다.

pw=' || length(pw)=8%23을 입력했을 때 'Hello admin'이 출력된 것을 보아 pw의 길이가 8이라는 것을 알 수 있다.

pw의 길이를 알아냈기 때문에 실제 pw의 값을 알아내기 위해서는 0~9, A~Z, a~z를 하나씩 대입하여 'Hello admin'이 출력되는 값이 참값이라는 방법을 사용할 수 있지만, 이는 오랜 시간이 걸리기 때문에 파이썬 코드를 통해 pw를 알아내고자 한다.

파이썬 코드 참고 블로그, 출처 : 프로그램 개발 및 보안 블로그

MySQL은 대문자와 소문자를 구분하지 않아 대문자 A와 소문자 a 모두 참의 결과를 보여준다.

따라서 소문자 a로 바꾼 pw=095a9852를 대입하면 문제를 해결할 수 있다.

profile
보안을 공부중입니다

0개의 댓글