-
|Lord of SQL_injection| #26 Red_dragonWargame Site/SQL injection 2019. 3. 2. 14:12
이제 어느덧 두 줄을 남기고 있다.
가볼까아
26단계 문제 Red_dragon 이다.
우선 id 의 문자 길이가 7 이하여야 한다는 가정을 미루어볼때 뭔가 특별한 구문을 넣는 것 같다.
그리고 no 에는 숫자만 넣을 수 있는 것으로 보아 hex 값을 이용하는 것 같다.
우선은 조건을 무조건 참으로 만들어볼까아??
문장을 참으로 만들면 admin 에 접근할 수 있는 것을 볼 수 있다.
그리고 no 에는 숫자 혹은 문자열만 들어갈 수 있다.
그.렇.다.면
id = ''||[field][부등식]# no=[줄바꿈][비교대상]
와 같은 접근을 생각해볼 수 있다. 필드와 비교대상을 연결하는 방식이다.
우선 호기심에 no 이라는 필드에 대해 탐색을 시작해보았다. (사실 pw 만 탐색하면 된다 ㅎㅎ)
이를 통해 no 이라는 필드는 존재하지 않는 필드일 수도,
존재하더라도 no 필드의 해당값을 가지는 계정이 없다는 것을 알 수 있다.
자, 그럼 이제 pw 필드에 대한 탐색을 해보자.
만약, 'abcd' 라는 문자열과 'z' 라는 문자열을 비교한다면 'z' 가 크기 때문에 한글자 한글자 탐색을 할 수 있다.
이런점을 이용해서 코딩해보았다.
코드를 돌려보니
짜잔!!
A53DD46A 라는 결과가 나왔다. MySQL 에서는 대소문자를 구분하지 않기 때문에 'A' = 'a' 가 성립한다.
하지만, WAS 인 php 에서는 대소문자를 구분하여 A53DD46A 라는 것을 pw 로 줬을 때 문제가 풀리지 않는 것이다.
그래서 스크립트 작성시에 패스워드 탐색에 ord 를 씌울 수 있는 상황이면 ord 를 활용하는 것이 좋다.
만약 소문자부터 탐색을 시작하면 a53dd46a 라는 결과를 얻을 수 있다.
대,소문자 관련해서 이해하는데 도움을 주신 KMC 님에게 다시한 번 감사하다는 말씀드립니다.
'Wargame Site > SQL injection' 카테고리의 다른 글
|Lord of SQL_injection| #28 Frankenstein (0) 2019.03.05 |Lord of SQL_injection| #27 Blue_dragon (0) 2019.03.04 |Lord of SQL_injection| #25 Green_dragon (0) 2019.03.01 |Lord of SQL_injection| #24 Evil_wizard (0) 2019.02.27 |Lord of SQL_injection| #23 Hell_fire (0) 2019.02.23 댓글