[Normaltic's CTF] SQL Injection 2

2024. 5. 29. 13:41정보보안 및 해킹/CTF

지금까지 찾았던 것들은 가짜였던가....

진짜 데이터를 찾으러.. 시작합니다.

이번에는.. 유저를 찾는 검색 시스템 인 것 같습니다

우선 검색 미리보기에 normaltic이 쓰여있었으니 그대로 한 번 적어서 검색해봅니다.

my name is normaltic이라는 info에, ID와 info를 제외한 모든 것이 마스킹처리된 정보가 나옵니다.

근데 이렇게 할거면 왜.. 랭킹 검색이...

우선 SQL Injection 공격이 가능한지 확인하기 위해 ' and '1'='1을 사용합니다.

비교를 위해 틀린 정보를 넣었을 때에는 info에 아무것도 도출되지 않는 다는 것을 확인하고

맞는 정보가 나오는 것을 확인합니다.

확인되었으면 union 공격을 위해 order by로 컬럼 갯수를 세줍니다.

6줄까지 응답코드 302로 오고,

7줄부터는 200으로 결과값이 도출되지 않는 것을 확인할 수 있습니다.

그러면 ID와 info말고는 볼 수 있는 곳이 없기 때문에, ID에는 아무래도 저희가 쓴 문구가 들어가고 있는 듯 하니,

info에는 몇 번째 컬럼의 정보가 들어가는지 확인하기 위해 일부러 검색을 비우고 1 2 3 4 5 6으로 어떤 컬럼인지 확인해줍니다.

6번째 컬럼의 자리네요! 그런 저 자리에 나오는 정보를 확인할 수 있겠습니다.

데이터베이스 이름부터 도출해볼까요?

 

데이터베이스 이름은 sqli_5라고 합니다.

그럼 테이블 이름 도출합니다.

테이블 이름은 flag_honey라고 합니다.

컬럼 이름 도출합니다.

컬럼 이름은 flag! 쭉쭉 나가네요.

컬럼 내용물은????

우와 농락

저런.. 당했습니다.

아무래도, 하나가 아닌 것이 있는 모양입니다.

다시 거슬러 올라갑니다.

테이블 갯수부터 다시 세야겠습니다.

count(*)로 테이블 갯수를 도출시켜봅니다.

역시, 테이블이 3개입니다.

테이블 이름을 전부 도출시켜봅니다.

아까는 flag_honey만 나왔는데, game_user와 secret이 있었네요.

한 줄만 도출이 되어서 나머지 두 줄은 숨겨져 있었습니다.

secret이 수상하죠?

바로 컬럼 뽑아봅니다. 이것도 전부 도출할 수 있도록 합니다.

이건 다행히 컬럼이 하나네요. flag

바로 뽑아봅니다. 혹시 몰라서 마지막까지 전부 도출할 수 있도록 합니다.

긴장의 끈을 놓치 맙시다.

역시 마지막까지...

하나만 도출하게 했으면 또 낚였을겁니다.

플래그가 두 번째에 있네요.