<워게임 18번_SQL 인젝션>
처음에 들어가면
이렇게 나와 있어서 일단 임의의 값으로 흔히 쓰는 1을 입력해보았다.
그랬더니 hi guest라고만 출력되고 아무말이 없다.
그래서 다른 임의의 값 9를 입력해보았다.
아무런 변화가 없다.
이때 알았어야 했는데!!!
보다시피 캡처도 URL을 빼고 캡처한 걸 보면 알겠지만
URL이 중요하다고는 생각도 못했다ㅋㅋ
아무튼 계속 해보자.
앞서 배운 가장 기본이 되는 SQL쿼리 조작 문장인
1' or '1'='1 을 입력해보았다.
좀 배운건 뭐든 써봐야 직성이 풀리는 성격
우왕 뭔가 색다른 문장이 나온다. no hack
뭔가를 더 알아내기 힘들다고 판단 source코드를 보러갔다.
소스 코드를 볼수 있는 버튼은 하단에 연두색으로 있다
내가 중심적으로 볼 건 페이지 디자인이 아니므로
php문만 캡처해왔다. (단어 선택이 적절한지 모르겠음 php)
if($_GET['no']){
$db = dbconnect();
if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest'
and no=$_GET[no]"));
// admin's no = 2
if($result['id']=="guest") echo "hi guest";
if($result['id']=="admin"){
solve(18);
echo "hi admin!";
}
}
preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no']
이 문장을 통해 ' ' , '/' , '(' , ')' , '|' , '&' , 'select' , 'from' , '0x' 가 필터링 되어
만일 입력에 이 문자가 들어가면 no hack이 출력됨을 알 수 있다.
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]"));
이 문장에서 입력값은 $_GET[no]의 no에 대입되는데 즉 만약 내가 2라고 대입하면 mysql에
select id from chall18 where id='guest' and no=2
(id가 guest의 no=2가 참이면 2의 id를 불러와라) 라는 구문이 전달되는 것이다.
그리고 다음으로 // admin's no = 2 라고 써져 있어서 이 문제를 풀고 싶으면
mysql에 no=2가 들어가도록하면 된다는 힌트를 얻을 수 있다.
그럼 내가 입력창에 뭐라고 넣어야 mysql문에 no=2를 전달할 수 있을까
select id from chall18 where id='guest' and no=$_GET[no]
생각 1) 요 빨간색에 들어갈 문장이다.
생각 2) id가 guest로 고정되어있으므로 OR을 이용,
앞의 연산은 거짓이고 뒷 연산은 참이 되도록 한다.
생각 3) 연산자의 우선순위에 의해 AND가 OR보다 먼저 연산됨
생각 4) 필터링 되는 문자가 필요하면 우회해야 한다.
이렇게 고려하여 입력할 문장은
99%09or%09no=2
%09는 tab의 우회문자!
이렇게 입력하면 쿼리문에
select id from chall18 where id='guest' and no=99 or no=2
이렇게 전달되어
id='guest' and no=99 이건 거짓이므로 패스
no=2는 참이므로 no=2의 id를 출력하도록 할 것이다.
그래서 입력했는데.......읭...?
아무것도 안뜬다...왜지?
왜 그런거지?
무심결에 URL을 봤는데
뭐야...나 뒤쪽에 입력할 때 저렇게 안 썼는데...?
어떡해야 하지???
의식의 흐름에 맡긴 진행
옛날에 다른 워게임 풀이에서 URL에 입력하는 걸 본 기억이 나서
URL에 직접 입력해보았다.
됬다!!!!!!!!!!!!!!!!!!!
일단 입력 구문은 맞았던걸로....
하지만 오늘도 나머지 공부가 남은 걸로...........
왜 URL에 입력해야 했을까?
소스코드에 뭐 암호화 이런 말은 없던데
왜 바뀌어서 들어간거지..?
알아올거다
약속
아ㅏㅏㅏㅏㅏㅏㅏㅏ 너무 어려웡
'about Security > 웹보안과 해킹' 카테고리의 다른 글
[웹해킹] # 파일 인클루젼 공격 (0) | 2020.11.12 |
---|---|
[웹해킹] # 커맨드 인젝션 (0) | 2020.10.08 |
[웹해킹] # sqlmap 자동화 공격 (0) | 2020.10.03 |
[웹해킹] # 블라인드 SQL 인젝션_level.low (0) | 2020.10.03 |
[웹해킹] # SQL 인젝션 (0) | 2020.10.03 |
댓글