Today I Learned …

[Lord of SQL Injection] 2번 cobolt 풀이 본문

Wargame/Lord of SQL Injection

[Lord of SQL Injection] 2번 cobolt 풀이

염베리 2021. 10. 31. 00:27

* 워게임 풀이 과정을 기록합니다.


사담

백신 2차 때문인지... 너무 피곤하다...

보고서도 써야하는데 큰일...ㅠ

오늘은 정말 간단히!! 2번 문제 cobolt를 다뤄볼까 한다.

 

이전 문제

https://choco4study.tistory.com/49

 

[Lord of SQL Injection] 1번 gremlin 풀이

* 워게임 풀이 과정을 기록합니다. 소감 음.. 너무 바쁘다..ㅠ 오늘은 간단히 워게임 1번 풀이를 해보도록 하겠다... 핳 Lord of SQL Injection 간단 소개 말그대로 SQL Injection의 지배자(?)가 되자는.. 그런

choco4study.tistory.com


2번 문제 cobolt 분석

 

2번 문제는 다음과 같다.

 

 

저번 문제에서 이미 다뤘던 preg_match()가 반겨준다.

달라진 점은 없다.

이번에도 역시 필터링 문제는 없을 것 같다.

 

그 아래 쿼리문을 보겠다.

 

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

 

prob_cobolt에 저장된 사용자의 비밀번호는 해싱되어있다는 것을 유추할 수 있다.

id 값과 pw 값의 해시값이 동시에 일치하는 레코드의 id를 뽑아오는 구조다.

 

일단 아래로 넘어간다.

 

if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";

 

뽑아온 id 값이 admin인 경우에만 문제가 풀린다는 것을 알 수 있다.


2번 문제 cobolt 풀이

 

위 분석의 결론에 따르면,

그냥 admin 계정으로 로그인해주면 될 것 같다.

 

위에서 pw의 해시값을 쓰는 것을 보고 잠깐 멈칫했으나,

어차피 #을 필터링하고 있지 않기 때문에 아이디 뒷부분을 주석 처리해주면 간단히 풀릴 것 같다.

 

admin' #

 

를 입력하면 될 것 같은데,

저번 문제에서 언급했다시피 #은 %23으로 대체해서 입력해준다.

 

 

엔터를 쳐보면!

 

 

두번째 문제가 풀렸다!

 

아직까지는 단순한데... 앞으로는 어떤 문제들이 기다리고 있을지 기대가 된다.

 

너무 간단하지만, 오늘은 더 이상 무리일 것 같아서... 끝!

프로필사진
berry
FE Developer, loves React & better DX
Comments