(Lord of SQLInjection) hell_fire 문제입니다.
일단 코드가 두개로 나뉘고 입력한 email을 확인하는 if문이 있으니 블라인드 SQL입니다.
다음으로 항상 입력하던 where조건 부분이 아닌 order by 부분에 값을 입력할 수 있게 되어있습니다.
일단 order by는 정렬을 해주는 구문으로 입력한 숫자에 따라 열을 기준으로 정렬을 해줍니다.
1을 입력하면 id를 기준으로 해서 a가 있는 admin을 먼저 정렬해주고
2를 입력하면 email을 기준으로 정렬해주는데 email이 *로 난독화 되어있는데
정렬시에 admin을 먼저 정렬해주는 것으로 보아 rubiya의 r 보다는 앞에있는 값으로 예측됩니다.
3을 입력하면 scroe를 기준으로 정렬해주기에 100이 먼저 정렬되기에
rubiya가 먼저 정렬됩니다.
다른 2개의 결과를 찾았으니 if문을 이용해 해결해보겠습니다.
if(id='admin' and length(email)>1, 1, 3)
if문이 필터링되지 않았기에 이전에 iron_golem을 해결했던 방법과 비슷하게 코드를 구현했습니다.
코드를 문제사이트 전달해보면
admin의 email길이가 1이상이므로 결과값이 1이 출력되어 admin이 먼저 정렬되었습니다.
반대로 100을 넣어보면
admin의 email길이가 100보다 작으므로 결과로 3이 출력되고 rubiya의 score값으로 정렬되었습니다.
위 내용을 토대로 파이썬 코드로 코드를 구현해보면 아래와 같이 구현이 가능합니다.
처음에는 if "200 rubiya" in re.text: 형태로 넣어봤는데 값이 구해지지 않더라구요.
해서 F12를 눌러 Html부분을 살펴봤는데 테이블형태라 </td>같은 태그가 필요하다는 것을 알았습니다.
(이것 때문에 2시간을 삽질했습니다...)
아무튼 태그도 같이 삽입해 score가 200이 먼저 정렬되는, 즉 admin이 먼저 정렬,
if문이 True가 되어 1이 출력되는 경우를 찾는 방식으로 코드를 구현했습니다.
파이썬 코드를 실행시켜보면
pw인 email의 길이는 28
* 로 난독화된 email의 값도 함께 찾았습니다.
찾은 email 값을 문제사이트에 전달하면 문제가 해결되었습니다.
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) green_dragon 문제 (0) | 2022.10.28 |
---|---|
(Lord of SQLInjection) evil_wizard 문제 (0) | 2022.10.09 |
(Lord of SQLInjection) dark_eyes 문제 (0) | 2022.10.09 |
(Lord of SQLInjection) iron_golem 문제 (2) | 2022.09.27 |
(Lord of SQLInjection) dragon 문제 (0) | 2022.09.25 |