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 세개이다. 만약 컬럼의 수를 모를때는
위의 제시된 글을 참고해서 해결할 수 있다.
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 |
댓글