Lord of sql injection - Hell Fire 풀이 |
los 23번 문제 hell fire에 대한 풀이 포스팅입니다.
문제 접근
if(preg_match('/prob|_|\.|proc|union/i', $_GET[order])) exit("No Hack ~_~"); |
우선 union에 대한 필터링이 걸려있다. 그리고 이전 문제들과 다르게 order by 절에 sql injection이 들어가고, 입력 쿼리로 order를 넣어주어야한다. select한 컬럼이 id,email,score 세개이다. 만약 컬럼의 수를 모를때는
Non Blind SQL Injection - ORDER BY를 이용한 컬럼 수 맞추기(이분법)
Non Blind SQL Injection - ORDER BY를 이용한 컬럼 수 맞추기(이분법) • ORDER BY를 이용한 컬럼 수 맞추기(이분법) - ORDER BY 절은 정렬할 때 사용 - ORDER BY 절 뒤에 숫자를 사용할 경우 해당 순서의 컬..
girrr.tistory.com
위의 제시된 글을 참고해서 해결할 수 있다.
order by 절 뒤에 숫자를 사용하면, 해당 순서의 컬럼으로 정렬한다는 의미이기떄문에 만약 그 숫자가 select 문의 컬럼 개수보다 더 크다면 오류가 반환된다. 이를 이용하여 컬럼 수를 알아낼 수 있다.
이 문제는 3개의 컬럼이 제시되었기때문에 필요하지않다.
우선 admin의 이메일을 알아내야하므로, id를 기준으로 해서 정렬해서 출력해보았다.
위와 같은 테이블이 출력되고, admin의 이메일은 ************** 로 가려져있다. 즉 admin의 이메일을 알아내야하는
blind sql injection 문제이다. 필터링에 time based sql injection을 제한하는 조건이 없으므로, 먼저 time based sql injection으로 방향을 틀고 진행해보았다.
id= admin , score= 200, email = ?? 인 상태이기때문에 조건으로 id를 주거나 score을 주어 admin을 설정하고, 이메일의 길이를 유추하면 될 것 같다
?order=if(id='admin' and length(email)>any number,sleep(5),1) |
위와 같은 쿼리를 넣어서 any number에 내가 유추하고 싶은 길이를 넣고, 시간이 지연되는 것을 체크해서 확인할 수 있다.
위와 같이 확인가능하다.
sfw2에서 진행했던방식과 같이 start time과 end time을 체크해서, 시간지연을 확인해서 이메일의 길이를 확인해보자
brute force를 통한 풀이
코드를 짜는것은 약간의 수정만 해서 금방했는데 email의 길이를 구하고 탐색할때 id=admin이라는 조건 대신 score=200으로 해야 잘 탐색되었다. 그 이유는 뭘까?..
'개인 공부 > WEB' 카테고리의 다른 글
[웹해킹] LOS 25 - (Green Dragon) (0) | 2021.07.03 |
---|---|
[웹해킹] LOS 24 - (Evil_Wizard) (0) | 2021.07.03 |
[웹해킹] LOS 22 - (Dark_eyes) (0) | 2021.07.03 |
[웹해킹] LOS 21 - (Iron Golem) (0) | 2021.07.03 |
[웹해킹] LOS 20 - (Dragon) (0) | 2021.06.19 |
댓글