자 웹 해킹 3번 문제를 풀어보자

[그림 1]

음 난해한 화면이다..... 빈칸을 클릭해보니 검은색으로 색칠이 된다.

어릴 때 심심하면 풀어본 스도쿠(?) 같은 느낌이 들어 한번 풀어봤다.

[그림 2]

위와 좌측에 적힌 숫자를 참고하여 체크해보니 저런 식으로 표시가 된다. 버튼을 클릭하면 다음 화면으로 넘어간다.

[그림 3]

아무생각 없이 이름을 넣어 보았다..

그럼 안풀릴꺼다 본인도 그랬다.

몇 번을 시도 해도 똑같았다.

name은 입력한 대로 잘 출력되고  value(앞에서 풀었던 스도쿠) 값과 ip주소 값이 변함 없이 같은 값으로 출력된다.

바로 F12를 눌러 코드를 살펴 보았다.

[그림 4]

name에 어떤 값을 넣든 그대로 출력된다 그렇다면 value를 건드려 보자

value에 sql injection을 사용하여 값이 참이 되게끔 만들자

'or 1=1을 넣어 보았다

[그림 5]
[그림 6]

query error가 나온다.

음 거의 다온 거 같다!

 

1010100000011100101011111이 값을 참이 되게 만드는 문제인 거 같다.

혹시나 해서 주석 처리 문도 시도해봤다.

[그림 7]
[그림 8]

마찬가지로 query error가 나왔다.

 

다시 한번 싱글 쿼터를 이용해 1010100000011100101011111이 참이 되게 만들어보자

1.value='1010100000011100101011111'

2.value='1010100000011100101011111' or '1' ='1'

2번처럼 되려면? ' or '1' ='1 이 값을 넣어주면 된다 넣어보자!!

 

[그림 9]

입력값은 내 이름으로 아! 주목해야 될 것은 Element의 value 값이다.

보내주면 submit 하면?

[그림 10]

풀린다!

 

음 이 문제 덕에 sql injection이 text영역에 한정된 것이 아닌 다양한 iput태그에  쓰일 가능성이 있다는 사실을 알 수 있었다.

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 7번 문제 풀이  (0) 2020.02.03
Webhacking 6번 문제 풀이  (1) 2020.01.30
Webhacking 5번 문제 풀이  (0) 2020.01.30
Webhacking 4번 문제풀이  (0) 2020.01.29
Webhacking 1번 문제풀이  (0) 2020.01.28

[그림 1]

 

level표시와 view-source라는 부분이 눈에 띄인다.

view-source를 눌러 소스코드를 확인해 보자.

 

[그림 2]

소스코드가 보이는데 phphtml로 작성되어져 있다.
검은색 글씨로 된 html 코드는 [그림 1]에 보이는 화면을 나타내는 것이기에 신경을 쓰지 않아도 될거 같다.

<?php> php구문을 한번 살펴 보자 ‘../../’ 2개 위에 위치해 있는 ‘config.php’파일을 불러온다(포함시킨다). 그 다음에는 if문으로 조건을 걸어 주었다.

 

{$_GET[‘view-source’] == 1} {view_source(); }

$_GET[‘view-source’] 1이면 소스코드를 보여준다는 구문이다.

이 구문이 정상적으로 실행이 되어 클라이언트인 나에게 코드가 보여지는 것이다.

*이부분은 유사한 형태로 계속해서 나온다. 뒷 풀이에서는 따로 다루지 않겠다.

 

if(!$_COOKIE['user_lv']){

SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");

SetCookie 형식을 보면 SetCookie(“쿠키명”, “쿠키값”, “만료시간”,“사용가능 위치”); 로 되어있으면 여기서 user_lv라는 값은 쿠키이름을 나타낸다.

만료시간을 보면 약 한 달로 설정되어있다.(86400 = 60 x 60 x 24 , 24시간)

 

[그림 3]

이번에는 하단의 <?php> php구문을 살펴보자 쿠키값을 본격적으로 검사하는 구문이다.

 

if(!is_numeric($_COOKIE['user_lv'])) 쿠키값이 숫자가 아닐 경우 쿠키값을 1로 설정한다라는 구문이며 is_numeric은 변수 값이 숫자인지를 판별하는 구문이다.

 

기본적으로 쿠키값은 1로 세팅되어져있다.

 

1.if($_COOKIE['user_lv']>=6) 쿠키 값이 6보다 크거나 같을 경우 $_COOKIE['user_lv']=1;

쿠키값을 1로 세팅한다.

 

2. if($_COOKIE['user_lv']>5) 쿠키 값이 5보다 클 경우 문제가 풀리다.

 

위 두 경우가 동시 만족할 때 문제가 풀리도록 설계되어있다.

 

6보다 크거나 같으면 값이 1이 되고 5보다 클 경우 문제가 풀린다. 그렇다면 어떻게 해야될까

56사이에 값이 쿠키값이 되면 문제가 풀린다! [5 < user_lv < 6]

 

그렇다면 쿠키값은 어떻게 바꾸는가? 필자는 chrome 확장프로그램으로 EditThisCookie

를 다운 받아 사용하였다.

[그림 4]

user_lv 값이 1로 나타나는 것을 볼수 있다. 이 값을 56의 사이값으로 바꿔주면 solve!

[그림 5]

난 풀었어서 already solved....

 

이 문제는 Cookie 개념을 위한 문제인거 같다.

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 7번 문제 풀이  (0) 2020.02.03
Webhacking 6번 문제 풀이  (1) 2020.01.30
Webhacking 5번 문제 풀이  (0) 2020.01.30
Webhacking 4번 문제풀이  (0) 2020.01.29
Webhacking 3번 문제풀이  (0) 2020.01.29

+ Recent posts