GoogleCTF#beginners/misc-media-db
문제
풀어 보았다.
통신처로 작성된 다음에 액세스해 봅니다.
대화할 수 있는 사람입니다.
가수와 노래를 등록하거나 무작위로 가수를 선택할 수 있는 시스템인 것 같습니다.
그런 다음 첨부 파일을 다운로드하여 열어보십시오.
파이썬 파일이었습니다.
내용을 보는 한, 아까의 접속처에 놓여져 있는 Python 파일같기 때문에, 이 소스로부터 취약한 부분을 찾아 flag를 get한다고 하는 흐름이 될 것 같습니다.
소스를 보면 oauth_token이라는 파일에 쓰여진 flag를 oauth_tokens라는 테이블에 쓰고 있습니다.
가수와 곡은 media라는 테이블에 쓰거나 읽거나 하는 것 같습니다.
SQL 인젝션을 어떻게 할 것인가라는 점이 문제인 것 같습니다.
SQL 문을 살펴 보겠습니다.
2나 3이 제일 빠르기 쉽습니다만, 「'」를 하늘에 치환하고 있는 처리가 있는 것을 알았습니다.
그래서
' or 1 = 1 --
처럼 할 수 없다는 것입니다.
잘 보면 1도 치환하고 있지만 "'"는 치환하지 않은 것을 알 수 있습니다.
그리고 4를 보면 가수를 select하고, 그 문자열로 한층 더 select하고 있는 것을 알 수 있습니다.
그렇게 하고 싶은 것은 다음의 흐름입니까?
통신처로 작성된 다음에 액세스해 봅니다.
대화할 수 있는 사람입니다.
가수와 노래를 등록하거나 무작위로 가수를 선택할 수 있는 시스템인 것 같습니다.
그런 다음 첨부 파일을 다운로드하여 열어보십시오.
파이썬 파일이었습니다.
내용을 보는 한, 아까의 접속처에 놓여져 있는 Python 파일같기 때문에, 이 소스로부터 취약한 부분을 찾아 flag를 get한다고 하는 흐름이 될 것 같습니다.
소스를 보면 oauth_token이라는 파일에 쓰여진 flag를 oauth_tokens라는 테이블에 쓰고 있습니다.
가수와 곡은 media라는 테이블에 쓰거나 읽거나 하는 것 같습니다.
SQL 인젝션을 어떻게 할 것인가라는 점이 문제인 것 같습니다.
SQL 문을 살펴 보겠습니다.
2나 3이 제일 빠르기 쉽습니다만, 「'」를 하늘에 치환하고 있는 처리가 있는 것을 알았습니다.
그래서
' or 1 = 1 --
처럼 할 수 없다는 것입니다.
잘 보면 1도 치환하고 있지만 "'"는 치환하지 않은 것을 알 수 있습니다.
그리고 4를 보면 가수를 select하고, 그 문자열로 한층 더 select하고 있는 것을 알 수 있습니다.
그렇게 하고 싶은 것은 다음의 흐름입니까?
음악 테이블과 플래그 테이블이 다르기 때문에 union을 사용해야 할 것 같습니다.
테이블의 컬럼에 대해서는 CREATE TABLE의 곳을 보면 써 있으므로 알았습니다.
요약하면 어떤 SQL을 던지고 싶습니까?
SELECT artist, song FROM media WHERE artist = '' union SELECT 1, oauth_token FROM oauth_tokens --
라는 느낌입니까?
실제로 해보겠습니다.
할 수 있었습니다.
Reference
이 문제에 관하여(GoogleCTF#beginners/misc-media-db), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/samohan/items/3b661216cba667f4c492텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)