LOS(The Lord of the SQLI) 2 - COBOLT

2021. 1. 14. 15:15카테고리 없음

첫번째 문제 GREMLIN에서는 문제를 푸는 밥법과 문제에 대한 설명을 하다보니 글이 길어지게 되었는데

이번 문제부터는 겹치는 부분은 다 생략하고 작성하려고 한다.

 

 

2번 문제 COBOLT

 

2번 문제인 COBOLT의 경우

if($result['id'] == 'admin')가 참일 경우 문제를 해결할 수있다 .

 

또 다르게 특이한 점으로는 쿼리를 보면 md5 함수를 통해 pw를 md5로 해쉬화하고 있는것을 볼 수 있다.

 

우선 1번 문제의 답과 같이 파라미터 값으로 ' or 1=1 %23 을 주면(%23은 #, 즉 주석문자)

 

select id from prob_cobolt where id=' 'or 1=1 #' and pw=md5('') 가 되어

주석문자 때문에 패스워드를 확인하지 않게되고, md5함수가 있던 없던 무용지물이 되어버린다. 

 

 

하지만 'or 1=1 %23 을 입력할 경우 

Hello rubiya You are not admin :(  이라는 문구가 출력되는데 이는 

문제에서 elseif($reslut['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; 때문에

id에 값은 있지만 그값이 admin이 아니라고 알려주고 있다.

 

그러므로 2번에서는 문제를 해결하기 위해서는 1번과 달리 

admin' # 을 파라미터로 주어 id를 admin으로 바꿔주면 문제 해결

 

 

2번 문제 COBOLT Clear!

 

[주의]

2번에서 or 1=1 을 사용하지 않아도 되는 이유는,

어짜피 id='admin'이 참이기 때문에 or 1=1을 이용해 where절을 참으로 만들어 줄 필요가 없기 때문이다.

 

만약 admin' or 1=1 # 를 입력하면 prob_cobolt에서 where이 id가 admin인 열을 반환하는것이 아닌

prob_cobolt 테이블의 모든 열을 반환하게 되므로 이를 주의해야 한다 .