문제의 소스 코드입니다.
이 문제는 쿼리가 2개입니다.
첫 번째 쿼리의 결과가 두 번째 쿼리의 입력으로 들어갑니다.
하지만 아무리 참인 조건을 넣어도 두 번째 쿼리가 나타나지 않습니다.
이를 통해 prob_green_dragon 테이블은 데이터가 없는 빈 테이블이라는 것을 알 수 있습니다.
그래서 union을 통해 데이터를 넣어줘야 합니다.
같은 테이블인지 모르고 참인 조건을 넣는 삽질을 하다가
같은 테이블임을 깨닫고 두 번째 쿼리를 첫 번째 쿼리와 같도록 만들어줘야 함을 알게 되었습니다.
아스키 값으로 바꿔준 후 넣어주면
이렇게 나옵니다.
char() 함수의 괄호 안에 있는 admin을 아스키로 인코딩 해서 넣어줘야 합니다.
char() 함수 마지막 인자에 23(#)도 넣어줘야 합니다.
값을 바꿔주고 쿼리를 전송해주면 문제가 풀립니다.
문제의 포인트는 테이블이 빈 테이블이라서 union으로 직접 데이터를 추가해줘야 한다는 점과
첫 번째 union select char(92), char(...)# 쿼리에서
char(92)의 결과인 \ 문자가 두 번째 쿼리의 id 값으로 들어가고
char(...)의 결과가 두 번재 쿼리의 pw 값으로 들어간다는 점입니다.
pw에 union select char(97,100,109,105,110)#을 아스키로 인코딩한 값이 들어가면 문제가 풀리는 구조입니다.
'write-up(web) > LOS' 카테고리의 다른 글
[Lord of SQLInjection] blue_dragon write-up (0) | 2022.09.17 |
---|---|
[Lord of SQLInjection] red_dragon write-up (0) | 2022.08.09 |
[Lord of SQLInjection] evil_wizard write-up (0) | 2022.08.04 |
[Lord of SQLInjection] hell_fire write-up (0) | 2022.08.04 |
[Lord of SQLInjection] dark_eyes write-up (0) | 2022.08.04 |