Webhacking.kr
prob59
Webhacking.kr 59번 문제입니다.
딱 보니 sql injection을 위한 문제인 것 같습니다.
소스를 한번 확인해 보도록 하죠.
get이 아닌 post로 요청을 하네요.
id와 phone이 join에 필요한 파라미터, lid와 lphone이 로그인에 필요한 파라미터입니다.
만약 로그인 했을때 결과값의 lv이 admin일 때 클리어 할 수 있는 조건이 붙어있습니다.
join을 할 때는 여러가지 필터링이 걸려있는데, id와 phone 모두 admin이라는 단어를 필터링하고 sql injection을 위한 핵심 키워드들이 필터링 되어있습니다.
여기서 저는 id 부분에서 SQLi를 시도해보았지만 결국 모두 실패했습니다. Single Quotation으로 묶여있기 때문에 문자열 취급을 받아 정상적인 쿼리로 날아가는게 원인이었습니다. 이 문제에서는 id가 아닌 phone 부분을 공격 벡터로 이용하여 injection을 해야합니다.
위와 같이 쿼리를 작성했습니다. id에는 quotation이 먹히지 않기 때문에 단순히 참조하기 위한 수단으로만 사용합니다.
우리는 phone에서 reverse(id)를 이용해 admin을 입력해주기 위해 id의 값에 admin의 반대인 nimda를 입력해줍니다.
그리고 위와 같이 입력할 때 완성되는 쿼리문은 아래와 같습니다.
insert into c59 values('nimda',1,reverse(id)),(1,1,'guest');
(이 쿼리문은 insert문을 이용할때 insert into table values('A', 'A'),('B', 'B')와 같은 쿼리를 날려줄 때 한번에 여러 값을 동시에 넣을 수 있는 것을 이용한 쿼리문입니다.)
그렇다면 db에 들어갈 때는 reverse(id)에 의해 admin으로 변환되어 nimda/1 계정의 lv은 admin으로 들어갑니다.
로그인 해 봅시다.
짠!
-thx to Zairo(http://zairo.tistory.com)
'Wargame > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr old-01(200) (0) | 2019.09.22 |
---|---|
Webhacking.kr Prob40 (0) | 2016.05.13 |
Webhacking.kr Prob53 (0) | 2016.05.11 |
Webhacking.kr Prob48 (0) | 2016.05.11 |
Webhacking.kr Prob60 (0) | 2016.05.11 |