티스토리 뷰

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

23단계 소스코드이다.

이번엔 union과 proc가 필터링되었다. 

이번 문제는 파라미터에 order by절이 들어가 있다.

1.order by n // n번째 칼럼의 오름차순으로 정렬하고, 전체 칼럼이 n개보다 작으면 오류가 생긴다.

에러를 출력하지 않으니 시간지연 기반 sql 이 먹힐 거라는 걸 추측할 수 있다.

일단 문제해결 조건은 admin에 해당하는 email 값을 넣으면 문제가 해결된다.

일단 email의 길이부터 알아내야한다.

query : ?order=if(id='admin'and(length(email)=28),sleep(2),1) // id=admin이고 email의 길이가 28이면 2초동안 멈춘다.

쿼리를 주입했더니 웹페이지가 2.15초가 지연되며 실행되었다.

email의 값은 28자릿 수 이다.

이제 인젝터를 만들어서 email을 추출한다.

하지만 시간기반 인젝터는 에러가 잦았다..

26번째 값 까지 출력되고 많은 시간을 기다려 봤지만 더이상 출력되지 않아 쿼리를 조금 바꿔 27,28번째는 따로 얻어냈다.

admin_secure_email@emai1.com

해결

 

기분이 시원찮아서 다시 했다.

 

시행착오

1. blind, error기반 공격은 조금 해봤었는데 시간기반은 처음 접하는거라 파이썬에서 어떻게 코드를 짜야할지 몰랐다.

import time을 통해 시간기반 코드를 짤 수 있다.

start=time.time() // start에 현재 unix time stamp( unix소수로 나타내주며 정수는 초 소수는 마이크로초 단위)를 넣어줌

end=time.time()-start // end에 현재 unix time stamp에서 start 값을 뺀걸 넣어준다.

if(end>n) // sleep(n)가 실행되었으면 시간이 2초이상 지연되었기에 참 거짓을 판별하는 조건으로 쓴다.

으로 시간기반인젝터를 작성하면 된다.

2. order by n은 n컬럼의 데이터를 오름차순으로 정렬해 출력한다.

3. mysql에서의if(조건,a,b) //조건이 참일때 a 거짓일 때 b가 된다.

4. order by 뒤에 바로 쿼리를 더 작성할 수 있다. ex)order by if()~~

 

댓글