[LOS / LORD OF SQL INJECTION] cobolt
글 작성자: caputdraconis
반응형
https://los.rubiya.kr/gate.php
<?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-17
2020.08.14 -
[Webhacking.kr] Challenge old-16
[Webhacking.kr] Challenge old-16
2020.08.14 -
[LOS / LORD OF SQL INJECTION] gremlin
[LOS / LORD OF SQL INJECTION] gremlin
2020.08.12 -
Suninatas Web 4번
Suninatas Web 4번
2020.08.06