상세 컨텐츠

본문 제목

7주차 CTF

CTF

by ser-ser 2024. 12. 4. 16:13

본문

SQL Injection 첫 번째 문제

가장 기본적인것부터 진행해 보도록 하겠습니다

1. 정상 로그인
제공받은 아이디로 로그인이 되는지 확인해보도록합시다

 

로그인 정보:

  • id: normaltic
  • password: 1234

정상적으로 로그인이 이루어졌으며 로그인 후 index.php로 넘어가는 것을 확인했습니다

 

 

2. SQL 인젝션 시도 및 데이터 추출 (Error-based 방식)

normaltic' and '1'='1을 입력했더니 로그인이 잘 이루어졌습니다

  • SQL 인젝션이 가능한 환경임을 확인했습니다
  • Error-based 방식을 통해 DB 데이터를 추출하여 flag를 찾아보겠습니다

단계별 진행 순서

  1. DB 이름 확인
  2. Table 이름 확인
  3. Column 이름 확인
  4. Data 값 추출

 

 

1. DB 이름 확인

normaltic' and extractvalue('1', concat (0x3 a, (select database ()))) and '1'='1
다음과 같은 쿼리를 입력하여 'sqli_2'라는 DB 이름을 확인했습니다

 

 

2. 테이블 이름 확인

select table_name from information_schema.tables where table_schema = 'sqli_2' limit 0,1

 

select  구문만 위에 코드처럼 바꿔주고 입력해 주면  해당 테이블의 값이 나옵니다

0,1 = flag_table
0,2 = member

 

 

3. 칼럼 이름 확인

select 구문만 위에 코드처럼 바꿔주고 입력해 주면  해당 칼럼의 값이 나옵니다

[flag_table] 0,1 = flag

 

 

4. 플래그 값 추출

select flag from flag_table

select 구문만 위에 코드처럼 바꿔주고 입력해주면  저희가 찾던 flag 데이터 값이 나옵니다

 

 

SQL Injection 두 번째 문제

위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
sqlinjection 시도 ✔
error based로 데이터 추출 시도 ✔

 

 

1. 테이블 이름 확인

테이블 이름: flag_table

 

 

2. 칼럼 이름 확인

flag1 ~ flag8 까지 있는 것을 확인했습니다 이 flag들을 하나하나 다 확인해보도록 합시다

 

 

3. 플래그 값 추출

flag1 = segfault {1
segfault {1로 끊어지는 것을 볼 수 있습니다 아마도 이것은 모든 flag를 다 확인하여 연결하라는 것으로 보이네요 좀 더 정확하게 하기 위해 flag8을 확인해 보도록 하겠습니다

 

flag8 = job}
}로 끝난 것을 보아 아마 모든 flag를 확인해서 이어 붙이면 정답이지 않을까 싶습니다

 

flag1 = segfault {1
flag2 = ~_
flag3 = ~_
flag4 = ~_
flag5 = ~_
flag6 = ~_
flag7 = ~_
flag8 = job}

flag : segfault {1~_~_~_~_~_goodjob}

 

정답을 확인할 수 있었습니다

SQL Injection 세 번째 문제

위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
sqlinjection 시도 ✔
error based로 데이터 추출 시도 ✔

해당 페이지의 DB이름은 sqli_2_2로 확인됐으며 이제  Table -> column -> data 순으로 출력해 보겠습니다

 

 

1. 테이블 이름 확인

0,1 = flagTable_this
1,1 = member

 

2. 칼럼 이름 확인

0,1 = idx
1,1 = flag

 


3. 플래그 값 추출

해당페이지가 저에게 메시지를 보내고 있네요
총 몇 개의 데이터가 있는지 알아봅시다

 

 

16까지 있는 것으로 확인 됐으며 중간값 8부터 점차 올려서 flag를 찾아보겠습니다

 

 

13번째 행에 정답을 찾아냈습니다

 

 

SQL Injection 네 번째 문제

위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
sqlinjection 시도 ✔
error based로 데이터 추출 시도 ✖

error based이 먹히지 않네요 blind는 잘 통하는지 한번 테스트해보도록 합시다

 

normaltic' and (ascii (substr((select database()),1,1)) > 0) and '1'='1   을 입력하니 index.php로 넘어가는 것을 확인할 수 있습니다 이것은 참으로 간주하여 넘어간 것으로 blind가 먹히고 있다는 단서가 됩니다 
그러면 blind로 데이터를 한 땀 한 땀 출력해야겠습니다

시간을 아끼기 위해 f12 눌러 관리자 페이지로 들어가서 DB이름을 뽑아오겠습니다
그러면 이제 이 DB이름을 가지고 Table -> column -> data 순으로 출력해 보겠습니다

 

1. 테이블 이름 확인

  • 0,1 = flag_table
  • 1,1 = member

2. 칼럼 이름 확인

  • 0,1 = flag

3. 플래그 값 추출

  • 0,1 = segfault {~_~_~}

정답은 25글자로 생각보다 짧아서 좀 당황했습니다 7주 차 마지막 과제라 40글자 생각하고 있었는데 별로 안돼서 다행이었습니다

'CTF' 카테고리의 다른 글

9주차 CTF  (1) 2024.12.15
8주차 CTF  (0) 2024.12.10
SQL Injection 2 (6주차-CTF)  (0) 2024.11.26
SQL Injection 1 (6주차-CTF)  (0) 2024.11.26
ORDER BY, UNION 활용해보기 (6주차-CTF)  (0) 2024.11.26

관련글 더보기