[LOS / LORD OF SQL INJECTION] cobolt
글 작성자: caputdraconis
                    
        반응형
    
    
    
  
https://los.rubiya.kr/gate.php
https://los.rubiya.kr/gate.php
los.rubiya.kr
<?php
  include "./config.php"; 
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id'] == 'admin') solve("cobolt");
  elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; 
  highlight_file(__FILE__); 
?>$_GET['id']와 $_GET['pw'] 둘다 이전단계와 같은 문자 필터링을 거친다.
이번에 차이점은 Get방식으로 주어진 비밀번호를 md5 암호화해서 mysql DB에 요청한다.
처음 노렸던 부분은,, 이전 gremlin 문제에서 했던 것과 똑같이 pw='1' or '1'='1'를 md5 decrypt한 버전으로 넣어서 md5 암호화를 진행했을 때 온전한 공격 쿼리가 되도록 해보려고 했다. 근데 온라인 md5 암호화 복호화 사이트에 저 값을 넣었을 때 기호는 되지 않는 것 같았다. 그래서! 다시 한 번 php 코드를 봤을 때 pw 값은 공격쿼리에서만 이용하고 뒤에서는 다시 사용하지 않는 것 같았다. 즉, pw 값을 따로 주지 않고 그냥 id가 admin이라는 것만 보여주면 $result['id']에 'admin'이 저장되고 그렇게 되면 solve('cobolt')다!
주석을 의미하는 # 기호를 주소창에 작성했을 때 제대로 되지 않더라구요,,,, 그래서 찾은 방법이!!! 아스키코드!
#은 아스키코드로 %23이다. 그래서 작성한 파라미터는 아래와 같다.

위처럼 작성하면!!??!!??!!?? 아래와 같이 짜란~

반응형
    
    
    
  댓글
이 글 공유하기
다른 글
- 
[Webhacking.kr] Challenge old-17[Webhacking.kr] Challenge old-172020.08.14
- 
[Webhacking.kr] Challenge old-16[Webhacking.kr] Challenge old-162020.08.14
- 
[LOS / LORD OF SQL INJECTION] gremlin[LOS / LORD OF SQL INJECTION] gremlin2020.08.12
- 
Suninatas Web 4번Suninatas Web 4번2020.08.06