본문 바로가기
개인 공부/WEB

[웹해킹] LOS 23 - (Hell_Fire)

by 아메리카노와떡볶이 2021. 7. 3.
728x90
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 세개이다. 만약 컬럼의 수를 모를때는

https://girrr.tistory.com/73

 

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으로 해야 잘 탐색되었다. 그 이유는 뭘까?..

 

이메일의 길이는 28
이메일 = admin_secure_email@emai1.com

728x90

'개인 공부 > 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

댓글