문제의 소스 코드입니다.
admin의 email을 알아내면 성공입니다.
일단 email을 넣어보면 admin, rubiya 2개의 데이터를 가지고 있습니다.
order by에 대해 검색하던 중 case로 정렬하는 방법에 대해 찾았습니다.
case when [조건] then [참일 때 값] else [거짓일 때 값] end
이 방법을 활용해 admin을 첫번째로 올린 다음
limit 1을 설정해서 해당 조건이 참일 때만 admin이 보이게끔 만들어 줍니다.
id가 admin이면서 pwLen이 admin의 email 길이보다 작을 때 참이 됩니다.
request 요청 결과를 beautifulsoup를 이용해 원하는 부분(table 태그)만 잘라내줍니다.
조건식이 참이면 table 태그 안에 admin이 있습니다.
만약 pwLen이 admin의 email과 같아지는 순간 조건식은 거짓이 되고
table 태그에는 admin이 아닌 rubiya가 나오게 됩니다.
이를 이용해서 email의 길이와 각 문자별 비트 길이를 구해줍니다.
email의 길이는 28이며 전부 아스키 값임을 확인했습니다.
이제 각 문자별로 값을 구해줍니다.
이진 탐색으로 구해줍니다.
얻어낸 pw를 email 파라미터로 전달해주면 문제가 풀립니다.
참고
https://ssongkit.tistory.com/91
'write-up(web) > LOS' 카테고리의 다른 글
[Lord of SQLInjection] green_dragon write-up (0) | 2022.08.06 |
---|---|
[Lord of SQLInjection] evil_wizard write-up (0) | 2022.08.04 |
[Lord of SQLInjection] dark_eyes write-up (0) | 2022.08.04 |
[Lord of SQLInjection] iron_golem write-up (0) | 2022.08.03 |
[Lord of SQLInjection] dragon write-up (0) | 2022.08.02 |