GoogleCTF#beginners/misc-media-db

2453 단어 CTFGoogleCTF


문제





풀어 보았다.



통신처로 작성된 다음에 액세스해 봅니다.



대화할 수 있는 사람입니다.
가수와 노래를 등록하거나 무작위로 가수를 선택할 수 있는 시스템인 것 같습니다.

그런 다음 첨부 파일을 다운로드하여 열어보십시오.



파이썬 파일이었습니다.
내용을 보는 한, 아까의 접속처에 놓여져 있는 Python 파일같기 때문에, 이 소스로부터 취약한 부분을 찾아 flag를 get한다고 하는 흐름이 될 것 같습니다.

소스를 보면 oauth_token이라는 파일에 쓰여진 flag를 oauth_tokens라는 테이블에 쓰고 있습니다.
가수와 곡은 media라는 테이블에 쓰거나 읽거나 하는 것 같습니다.

SQL 인젝션을 어떻게 할 것인가라는 점이 문제인 것 같습니다.
SQL 문을 살펴 보겠습니다.



2나 3이 제일 빠르기 쉽습니다만, 「'」를 하늘에 치환하고 있는 처리가 있는 것을 알았습니다.
그래서
' or 1 = 1 --

처럼 할 수 없다는 것입니다.

잘 보면 1도 치환하고 있지만 "'"는 치환하지 않은 것을 알 수 있습니다.
그리고 4를 보면 가수를 select하고, 그 문자열로 한층 더 select하고 있는 것을 알 수 있습니다.

그렇게 하고 싶은 것은 다음의 흐름입니까?
  • 1로 SQL 주입 할 수있는 문자열을 가수로 DB에 저장합니다.
  • 4에서 그 가수를 select하고, SQL 인젝션을 하고, flag를 get한다.

  • 음악 테이블과 플래그 테이블이 다르기 때문에 union을 사용해야 할 것 같습니다.
    테이블의 컬럼에 대해서는 CREATE TABLE의 곳을 보면 써 있으므로 알았습니다.
    요약하면 어떤 SQL을 던지고 싶습니까?
    SELECT artist, song FROM media WHERE artist = '' union SELECT 1, oauth_token FROM oauth_tokens --
    

    라는 느낌입니까?
    실제로 해보겠습니다.



    할 수 있었습니다.

    좋은 웹페이지 즐겨찾기