※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(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
※ 문제 푸는 방법이 다양할 수도 있습니다.
→ BurpSutie로 살펴본 결과 // [ Segfault CTF - (8주 차) SQL Injection Point 1 ] 참조
→ 3군데 SQLi point가 있었다.
→ 이 중 ②, ③은 SQL Injection 1에서 다루었고, [링크]
→ 새로운 ④ Sort부분을 살펴보겠다.
→ SORT인 것을 보아서 ORDER BY 절로 추측할 수 있다.
→ ORDER BY 뒤에 숫자를 직접 1,2 쓰는 것은 가능하지만,
→ CASE WHEN (조건) THEN 1 ELSE 2 END처럼 쓰면 생각대로 되지 않을 것이다.
→ 조건식의 결과에 따라 1, 2가 다르게 반환되어도 ORDER BY의 결과는 같다.(!)
→ 이를 해결하려면 아래와 같이 컬러명을 직접 써야 한다.
→ CASE WHEN (조건) THEN title ELSE username END
→ 공격 포맷을 설정한다.
→ CASE WHEN (SQL 구문) THEN title ELSE username END
→ 구문의 결과가 참이면 title기준으로 SORT 될 것이고, 거짓이면 username 기준으로 SORT될 것이다.
→ CASE WHEN (database()='sqli_8') THEN title ELSE username END
→ database()='sqli_8'을 넣어보니 참으로, title기준으로 sort되었다.
→ DB이름은 sqli_8이 확인되었다.
→ 다만, 이렇게 비교할 경우 대, 소문자를 구분하지 않아서 대문자가 끼어있을 수도 있다.
→ false의 경우도 확인해봐야 하니 거짓 값을 넣어보았다.
→ CASE WHEN (database()='sqli_81111') THEN title ELSE username END
→ title 기준이 아닌 username기준으로 정렬된 것 같다.(시간 순서대로 작성 한 그대로 나왔다)
→ Segfault CTF - (8주 차) SQL Injection Point 1에서 했던 방법으로
→ Table, Column, 값을 알아내면 될 것이다.
→ 아래는 결과이다.
→ 테이블 이름 board, flag_Table, member
→ flag_Table의 컬럼 이름 idx, flagData
→ flagData의 값 wjejjfji, segfault{플래그}
Segfault CTF - (10주 차) XSS 1 (1) | 2024.06.23 |
---|---|
Segfault CTF - (8주 차) SQL Injection Point 4 (0) | 2024.06.12 |
Segfault CTF - (8주 차) SQL Injection Point 2 (0) | 2024.06.12 |
Segfault CTF - (8주 차) SQL Injection Point 1 (1) | 2024.06.12 |
Segfault CTF - (7주 차) SQL Injection 6 (0) | 2024.06.05 |