2021. 1. 14. 15:15ㆍ카테고리 없음
첫번째 문제 GREMLIN에서는 문제를 푸는 밥법과 문제에 대한 설명을 하다보니 글이 길어지게 되었는데
이번 문제부터는 겹치는 부분은 다 생략하고 작성하려고 한다.
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번에서 or 1=1 을 사용하지 않아도 되는 이유는,
어짜피 id='admin'이 참이기 때문에 or 1=1을 이용해 where절을 참으로 만들어 줄 필요가 없기 때문이다.
만약 admin' or 1=1 # 를 입력하면 prob_cobolt에서 where이 id가 admin인 열을 반환하는것이 아닌
prob_cobolt 테이블의 모든 열을 반환하게 되므로 이를 주의해야 한다 .