일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 보고서
- php
- 게시판 만들기
- 로그인페이지
- Los
- 웹 개발
- 증적 사진
- 웹개발
- blind sql injection
- sql injection point
- JS
- 과제
- MySQL
- 세션
- cookie 탈취
- sql injection
- 보안 패치
- 로그인
- XSS
- Error based sql injection
- CTF
- lord of sql injection
- union sql injection
- 문제 풀이
- csrf
- file upload
- Python
- 모의해킹
- css
- 웹 해킹
- Today
- Total
Almon Dev
[Lord of SQL Injection] assassin 문제 풀이 본문
assassin 문제 풀이
assassin 문제
문제 분석
문제 목표
pw 파라미터를 삽입한 쿼리를 실행한 후 조회된 데이터베이스의 id가 admin 계정인 경우, solve("assassin") 함수가 실행됩니다. 이 함수는 문제를 성공적으로 풀었을 때 호출되는 것으로 보입니다. 따라서 이 문제의 목표는 admin 계정의 비밀번호를 탈취하는 것입니다.
$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("assassin");
입력 제한
pw 파라미터에서 '(작은따옴표)를 필터링하여 문자열 탈출(SQL Injeciton 시도)을 방지하고 있습니다.
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
취약점 분석
pw 파라미터 처리에서 '(작은따옴표)를 필터링하여 SQL Injection을 방지하였으나 비밀번호 인증 조건문에 like를 사용하여 %, _(언더바)와 같은 와일드카드를 이용하여 admin 계정의 비밀번호를 탐색할 수 있습니다.
와일드카드
% → 0개 이상의 모든 문자를 뜻합니다.
ex)
'1%' => 1, 12, 123, 1234, 134 등 1로 시작하는 모든 경우의 수입니다.
'%가%' => 가수, 요가, 허가증 등 '가'가 포함된 모든 단어입니다.
_(언더바) → 임의의 1개 문자를 뜻합니다.
ex)
'_7' => 27, 37, 47 등 앞에 아무 문자 1개와 7인 단어입니다.
문제 풀이
1. Burp의 Intruder 기능을 이용하여 pw 파라미터에 페이로드 + % 문자를 삽입하여 요청을 반복하도록 설정합니다.
=> 페이로드는 키보드로 입력 가능한 모든 문자의 리스트입니다.
2. pw 파라미터에 9%를 삽입했을 때 Hello guest가 출력되는 것으로 비밀번호의 첫 번째 자릿수가 9인 것을 알 수 있습니다.
=> Hello admin이 아니라 guest인 이유는 fetch_array 함수가 데이터베이스 조회 결과 중 첫 번째 행의 값만 가져왔기 때문입니다.
3. pw 파라미터에 9 + 페이로드 + %를 삽입하여 요청을 반복하도록 설정합니다.
4. pw 파라미터에 90%를 삽입했을 때 Hello guest가 출력되는 것으로 비밀번호의 두 번째 자릿수가 0인 것을 알 수 있습니다.
5. pw 파라미터에 90 + 페이로드 + %를 삽입하여 요청을 반복하도록 설정합니다.
6. pw 파라미터에 902%를 삽입하면 Hello admin이 출력되는 것으로 pw 파라미터에 902%를 삽입했을 때 실행된 쿼리의 결과가 admin 계정인 것을 확인할 수 있습니다.
7. pw 파라미터에 902%를 삽입하여 문제풀이를 완료합니다.
'웹 해킹 > Lord of SQLi' 카테고리의 다른 글
[Lord of SQL Injection] zombie_assassin 문제 풀이 (0) | 2025.05.01 |
---|---|
[Lord of SQL Injection] succubus 문제 풀이 (0) | 2025.04.30 |
[Lord of SQL Injection] giant 문제 풀이 (0) | 2025.04.24 |
[Lord of SQL Injection] darkknight 문제 풀이 (1) | 2025.04.19 |
[Lord of SQL Injection] golem 문제 풀이 (0) | 2025.04.17 |