네 안녕하세요. Godhaword 입니다.
맨날 Lord Of SQL Injection(이하 los, 혹은 LOS) 정리해서 올려야겠다고 생각은 하는데 귀찮아서 안올리게 되더라구요.
LOS의 앞 쪽 문제는 SQLI에 대한 기본 상식을 물어보는 문제들 입니다.
그래서 생각난 김에 한 번 진도 쫙 뽑아보겠습니다.
<?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__);
?>
이 문제를 어려워하신다면 웹 해킹에 대해 방금 입문한 초심자라고 생각합니다.
1. 아니 입력창이 있어야 뭐 입력을 하지
- POST 방식이 아닌 GET 방식에선 url에 { ?[변수] = } 이런 식으로도 값을 넘겨줄 수 있습니다.
2. 내가 알던 웹해킹 사이트랑 다른데?
- $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
이 쿼리문을 보시고
if($result['id']) solve("gremlin");
solve 까지 유도해 내시면 됩니다.
위 문제는 풀이 방식이 크게 두가지로 나뉜다고 생각합니다.
- ' or 1=1#
- 제가 생각하는 정석 풀이입니다. - admin'#
- admin 이란 계정이 해당 DB에 있을지 없을지 모르는 상황이므로 통상적으로 사용하기엔 1번 방법이 더 좋다고 생각합니다.
- 이번 문제로 알 수 있는 것
- LOS의 문제 유형과 내가 지금 LOS를 풀어도 되는가를 확인(1번 못 풀어서 답보러 오신분은 아직 LOS 푸시면 안된다고 생각합니다. 기본부터 공부하고 오세요) - Key Point
' or 1=1#
'web_security > Lord Of SQL' 카테고리의 다른 글
[LOS : Lord Of SQL Injection] 6번 Darkelf 문제 풀이 (0) | 2022.06.04 |
---|---|
[LOS : Lord Of SQL Injection] 5번 Wolfman 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 4번 Orc 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 3번 Goblin 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 2번 Cobolt 문제 풀이 (0) | 2022.06.04 |