문자열 받기
글쓴이: bosungs2y / 작성시간: 화, 2012/11/13 - 9:59오후
안녕하세요 웹방화벽을 제작 중인 학생입니다.
지금 현재 SQL injection 공격의 패턴을 막고 있는데
공백 부분을 어떻게 처리해야 할 지 모르겠습니다.
예) admin'## (로그인 인증우회 공격으로 admin ID로 접속 가능)
이 공격에 대해선 Rule을
if( '%' == pkt_data[i] && '2' == pkt_data[i+1] && '7' == pkt_data[i+2] )
{
if( '%' == pkt_data[i+3] && '2' == pkt_data[i+4] && '3' == pkt_data[i+5]) // 아스키 코드로 '##
if( '%' == pkt_data[i+6] && '2' == pkt_data[i+7] && '3' == pkt_data[i+8])
{
printf(" SQL injection \n");
}
}
이런식으로 잡았는데 만약
admin' ## (이런식으로 해도 공격은 되는군요... 제 방어Rule은 문자 순서대로 받는거라 탐지 불가...)
' 문자열 이후 공백을 제외해고 ##이 순서대로 오면 printf문이 실행되는 구문을 어떻게 짜면 될까요?
조언 부탁드립니다.
Forums:
## 앞만 지우면 될거 같은데요
1. 정규식을 사용한다고 합니다. 근데. 저는 모릅니다. ㅡ_ㅡ;;;
2. 저라면.
a~z/ A~Z/ 특수문자/ 공백등을 먼저 제거하고. ## 일 경우. 출력하겠습니다.
아니면.
## 이전을 모두 제거. 하고 출력.
//참고용 링크
http://allimter.tistory.com/37
http://blog.naver.com/max32767?Redirect=Log&logNo=110150502293
http://paransilverlight.tistory.com/188
http://www.unixwiz.net/techtips/sql-injection.html
http://www.mikesdotnetting.com/Article/113/Preventing-SQL-Injection-in-ASP.NET
http://cafe.naver.com/boanproject/book1330515/3853
http://cafe.naver.com/secuholic/9166
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
음 ..
단순히 문자열 파싱으로는 변형된 패턴에 대응을 못 할 뿐더러, 패턴이 늘어날 때마다 소스를 수정해야 하니 비효율적입니다.
간단하게나마, 공격 패턴을 정규식으로 별도 파일에 저장하고, regcomp 로 미리 컴파일 한 후에 공격 패킷을 regexec 로 검사해 보세요.
패턴이 늘어나면 룰 파일에 정규식만 수정하면 되니, 소스를 건드릴 필요가 없죠.
man regex
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기