세이박스

'보안'에 해당되는 글 21건

  1. [부산, 무료 보안세미나] 07/16 "경남권 정보보호 컨퍼런스" 행사안내
  2. 주민번호클린센터 한국인터넷진흥원에서 사이트 오픈 개인정보 도용 조회 가능
  3. [개발스토리] 아이핀 결국 보안 문제 발생
  4. 비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)
  5. 비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)
  6. MD5 Decript 암호화 된 값을 해독해 주는 사이트
  7. [컴퓨팅] 네이트온 쪽지를 이용한 해킹 및 악성프로그램 유포 주의!
  8. [보안] 서버 설치 후 기본적으로 해야할 보안 사항을 간단하게 정리 해보겠습니다.
  9. 웹방화벽 TuTELA T-2010
  10. [해킹] Cain & Abel 카인과아벨 스푸핑 프로그램 공격 유형 및 보안 방법
  11. 보안 윈도우 서버 원격데스크탑 접속 포트 변경 및 접속하기
  12. [PHP] 보안 국내 IP 대역만 접속 하도록 응용
  13. Apache Web Server 의 DOS공격 막기
  14. iframe 삽입 공격 보안
  15. DB injection script 스크립트 공격 복구 및 보안
  16. SQL Injection 공격과 방어 방법 - php, asp 등
  17. 이 웹사이트의 보안 인증서에 문제가 있습니다. 해결방법
  18. 공개웹방화벽을 이용한 홈페이지 보안
  19. Gif.ASA 파일 주의!
  20. mssql 전체 테이블 문자 검색 변경
  21. ASP 해킹 방지 보안 방법(injection, cross site scripting...)

[부산, 무료 보안세미나] 07/16 "경남권 정보보호 컨퍼런스" 행사안내

서버,보안

 

 

7월16일 토요일 오후 1시~5시 "경남권 정보보호 컨퍼런스" 행사를 개최 합니다.
웹과 시스템, 모바일, 개발 등 다양한 분야 '정보보호'를 주제로 공유하는 자리입니다.

 

일시 : 2016.07.16(토) pm 1:00~5:00
장소 : 부산 해운대구 수영강변대로 104 부산문화콘텐츠콤플렉스 3층 콘퍼런스홀...
주최 : 시원포럼 ( Security One )
주관 : 시원포럼(Security One), 부경대학교(CERT-IS), 부산대학교(KEEPER),
UNIST(HeXA), 동명대학교(THINK) , 대구가톨릭대학교(I-KEEPER), 울산대학교(UnKnown),
영산대학교(Focus), 창원대학교(CASPER), 경성대학교

 

세션내용
13:00 ~ 13:40 악성코드 동향 | 빛스캔 문일준 대표
14:00 ~ 14:40 악성코드 대응기술 | 세인트시큐리티 김기홍 대표
15:00 ~ 15:40 GPU 키로거 CERT-IS 윤지환
16:00 ~ 16:40 사이버범죄 유형과 예방법 울산지방경찰청 박영진 경장

 

온라인 신청접수
https://www.facebook.com/l.php?u=https%3A%2F%2Fdocs.google.com%2Fforms%2Fd%2Fe%2F1FAIpQLSd3HjHr7fIsvD9VInH4mQwaMfX8XqhALKPvOspUlJqMdjiA6w%2Fviewform%3Fc%3D0%26w%3D1&h=EAQFvQnNyAQGHHE6MVho0KTDOGx7HAQW7Ij9JOU4KWxnT6Q&enc=AZM7Bu_lyq4IWHqPXloaEDv5mb2sUL2BFHGAHYK2XIqnaeDKFJScoYdphn1reRjtOdOVZwJoa2RKIw-1XSSeYtNRZqGPoXKofyYmrNdHrNe2Lwf8_O5FgXBWRwjmOQ2PH_rAQjlCDde0BzJrPZWyqE79qIkiXGmR-1jcbY56XCPLSR3lN7s04ii-SZ-CNUbmfvIlBMrGVAGjlk_HP-P_ee8d&s=1

 

관련기사
http://www.etnews.com/20160610000155?m=1

주민번호클린센터 한국인터넷진흥원에서 사이트 오픈 개인정보 도용 조회 가능

기타

사용자 삽입 이미지

인터넷 시대에 살고 있는 우리는 현재 남녀 노소 불문하고 인터넷을 이용하고 있습니다.
인터넷이 시작한 이래 불과 몇 십년 되지 않았지만 현재까지 운영되고 있는 홈페이지 수는 헤아릴 수 없을 만큼 많아 졌습니다.
이러한 홈페이지(사이트)들 중 네이버, 다음, 네이트 등 왠만큼 큰 규모의 사이트들은 회원 가입 되어 있을 겁니다.
회원 가입시 입력한 회원정보는 관리자가 소홀히 관리할 경우 그 피해는 고스란히 회원에게 돌아가게 되는 실정인데 옥션이라는 큰 규모의 사이트또한 회원정보 유출 해킹 사건이 발생 했었습니다.
이처럼, 어떠한 사이트도 개인정보를 100% 보안 할 수 없다고 보시면 됩니다.
그런데, 더심각한 문제는 보안 체계가 아예 없는 사이트들도 굉장히 많다는 것입니다.
일부 사이트는 관리자의 경우 회원정보의 아이디, 비번, 주민번호를 모두 열람할 수 있어서 퇴사시 회원정보를 모두 복사해서 팔기도 하는 사건이 많이 발생했습니다.
그렇다고 인터넷을 더이상 사용할 수도 없는 시대에 살고 있으므로 이용은 하되 불필요한 가입을 최소화 해야 합니다.
꼭 이용하는 사이트에 한해서만 가입을 하며 아이핀과 같은 개인정보를 최소한으로 남기도록 합니다.
가입시 약관 및 동의 부분도 꼼꼼히 체크 햐셔야 합니다.
그리고, 더이상 이용하지 않는 사이트는 탈퇴 하셔서 개인정보를 남기지 않도록 하셔야합니다.
하지만, 저역시 지금까지 가입한 사이트가 수백개라서 어디에 가입했는지 조차 생각이 안나는 분들이 의외로 많을텐데요.
최근까지 이와 같은 고민을 해결해주기 위해 가입된 사이트를 조회 할 수 있도록 해주는 유료 서비스가 한동안 많이 눈에 띄었습니다.
저역시 돈을 내면서 까지 조회 할 필요는 없다고 생각했었는데 오늘 한국인터넷진흥원에서 주민번호 클린센터 라는 사이트를 개설해서 자신이 가입한 사이트를 조회 할 수 있도록 해주고 있습니다.

오전까지만 해도 접속이 잘 되었는데 현재는 접속자가 몰려서 제대로 페이지가 뜨지를 않네요.

회원조회후 탈퇴를 하실때 해당 사이트에서 직접 탈퇴요청을 해야하며, 만약 해당 사이트에서 탈퇴처리를 제대로 해주지 않거나 사이트내 오류로 탈퇴처리가 되지 않을경우 국번없이 118로 전화후 요청하시면 관련 법령에 의거해서 도움을 준다고 합니다.

회원가입 여부를 판단하는 기준이 회원가입시 이용하는 실명확인제공기관에 등록된 자료를 바탕으로 조회하는 것으로써 가입유무 결과가 상이할수도 있다고 합니다.


주민번호 클린센터 조회 방법을 간단히 설명 해드리겠습니다.


1. 주민번호 클린센터 접속
http://clean.kisa.or.kr



2. 실명확인

사용자 삽입 이미지


주민등록번호 이용내역 조회 메뉴를 클릭후 실명확인을 합니다.
해당 페이지에서 성명과 주민등록번호를 입력후 "실명확인" 버튼을 클릭합니다.
아무래도 보안상 본인 확인은 거쳐야 겠죠.


3. 본인인증 수단 선택

사용자 삽입 이미지

실명확인후 다시한번더 휴대폰, 신용카드, 공인증서 중 하나로 본인 확인을 받습니다.
전 편의상 휴대폰으로 확인을 받아 봅니다.
휴대폰에 체크후 확인을 클릭하면 인증창이 팝업으로 하나 뜹니다.


4. 휴대폰 인증

사용자 삽입 이미지



휴대폰으로 받은 인증 번호로 본인확인 받습니다.
간혹 스팸문자로 잘못 수신될수도 있으니 기다려도 문자가 오지 않을경우 스팸함을 확인해봅니다.

어라....창이 닫혀 버리네요 잠시후 이용하라고 합니다.
사이트에 접속자가 많다고 하네요.
이용자가 너무 많은가 봅니다.
더이상의 설명 진행 불가....사이트 정상화 되면 다시 추가 내용 붙이겠습니다. ^^;

사용자 삽입 이미지


  최신영화 보러가기... 

[개발스토리] 아이핀 결국 보안 문제 발생

기타

앞전 아이핀 적용 방법 및 도입시 발생할 수 있는 문제점들에 대해 예측 해봤었는데요.
역시나 어제 뉴스에 아이핀 보안 문제 관련 소식을 접하게 되었습니다.
그리고, 오늘 아이핀 도입 업체로 부터 조만간 보안 개선해서 적용한다고 하더군요.
결국, 이용률도 거의 없는 아이핀 작업을 추가로 하게 되었습니다.
개발자들의 인력낭비는 물론이거니와 기업들의 지출만 늘린건 아닌지 생각이 드는군요.
사실 제가 관리하는 사이트중 일 방문자 100만명 이상 되는 사이트의 경우 아이핀 이용자 거의 제로에 가깝습니다.
물론 시간이 지나면 이용자가 늘어 나겠지만, 어제와 같은 뉴스를 접하고도 이용자가 있을지가 의문입니다.
저역시 보안 문제가 우려되어 개발당시 잠시 이용하고 바로 이용중지 했습니다.
소잃고 외양간 고치기 보다 이번에 보안 적용될 때 좀더 신경써서 내놓기를 바랄 따름입니다.

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

MD5 Decript 암호화 된 값을 해독해 주는 사이트

서버,보안

사용자 삽입 이미지
사용자 삽입 이미지


MD5는 Hash 방식으로 암호화 하는 것으로 한번 암호화 된 값은 decode, Decript 복호화 할 수 없는게 원칙이며 입력한 사용자의 값을 MD5로 암호화 해서 두개의 암호화 된 값이 일치 한지 유무만 판별 하는 방식이다.
요즘은 SHA 암호화 방식을 많이 이용하고 있으며, 모두 hash 암호화 방식이다.

이와 달리 base64_encode(), base85_encode() 과 같은 암호화 방식은 언제든지 복호화 할 수 있다.
base64_decode() 를 이용하면 base64로 encode된 값을 원래 값으로 손쉽게 변경 가능하다.
따라서, 암호화라고 하기엔 다소 부족함이 있다.

하지만, MD5 역시 복호화 할수 있는 방법이 있다.
http://www.md5decrypter.com

사이트에서 MD5로 암호화 된 값을 원래의 값으로 변경 해줍니다.
하지만, 이건 어디까지나 꽁수? 입니다.
조회 해 보시면 그의 대부분의 암호화 값을 못찾아 줄겁니다.
하지만, 우연히 찾게되는 값도 있습니다.
이유는 encrypter 메뉴를 클릭후 생성한 MD5 암호화 생성에서 DB에 저장시 암호화 값 뿐만 아니라 원래 값 까지 보관 해뒀다가 암호화 값이 들어오면 함께 넣어둔 원래 값을 보여 주는 원리 입니다.

현재 글을 작성하는 시점까지 등록된 MD5암호화 값이 총 5,988,457 까지 이군요.
즉, MD5 암호 해독은 위 갯수만큰 등록된 암호에 한해서 복호화 가능 합니다.

예전에 MD5 암호를 역으로 찾아 주는 프로그램도 본듯 한데 기억이 안나네요 ^^
가끔 특정 암호를 복호화 해야할 일이 생길때 활용 해보시는것도 좋을듯 합니다.

[컴퓨팅] 네이트온 쪽지를 이용한 해킹 및 악성프로그램 유포 주의!

서버,보안
사용자 삽입 이미지
최근 네이트온 해킹으로 인해 지인을 사칭하여 쪽지로 발송하고 있다.

"이 신발 어때?" 등의 메시지와 함께 악성코드 프로그램을 바로 설치 하도록 하는 사이트 URL 주소 내용으로 보내고 있으며, 해당 사이트로 접속시 바로 설치 파일이 뜨도록 설정 되어 있다.

마치 "화면 보호기" 파일 설치를 요청하게 되는데 "see.scr" 파일을 설치하게 되면 화면 보호기가 동작하는게 아니라 악성코드가 PC에 설치 되는 것이다.

이와 같이 다양한 방법으로 악성 프로그램을 유포하는 사태가 속출하고 있는 만큼 인터넷 사용에 항상 주의를 해야한다.

다행이도 네이트온 쪽지에서 링크를 클릭시에는 해당 사이트 접근을 차단하고 있지만, 만약 친구가 보낸것으로 판단하여 브라우저에 직접 해당 URL 주소를 입력후 접속한다면 바로 설치 요청창이 나타 날 것이다.

만약 해당 프로그램이 설치가 되었다면 사용자의 비밀번호등 개인정보가 유출 될 수 있으므로 반드시 백신으로 치료를 받아야 한다.

[보안] 서버 설치 후 기본적으로 해야할 보안 사항을 간단하게 정리 해보겠습니다.

서버,보안
1. 서버패치 주기적으로 설치
서버 패치는 항상 주기적으로 해주셔야겠죠!
윈도우 서버의 경우 윈도우업데이트 기능이 있으며 리눅스의 경우 yum으로 편리하게 업데이트 가능하죠
yum -y upgrade

2. 비번 주기적으로 변경
루트 뿐만 아니라 일반 개정 까지 주기적으로 변경 해주시는게 좋습니다.
요즘, 같은 네트워크 대역의 서버 또는 라우트 등의 장비등이 해킹 당하면 지나 다니는 모든 패킷을 수집하여 관리자 개정등을 분석하여 접속하게 됩니다.
따라서, 주기적으로 변경 한다면 수집된 개정이 이전 개정이라 접속 못하게 되겠죠.
어디까지나 조금이라도 피해를 줄이기 위해선 변경 해주시는게 좋습니다.

3. OS 방화벽 및 포트 설정
윈도우든 리눅스든 OS 자체에 방화벽이 있습니다.
원리는 포트를 막느냐 열어 주느냐 정도 이지만 불필요한 포트를 막아 두므로써 취약한 서비스를 통해 공격 받는것을 최소화 할 수 있겠죠
리눅스의 경우
setup > Firewall.... 항목에서 방화벽 레벨을 high로 하시고 열어줄 port를 추가로 지정 해주시는게 좋습니다.
이때 포트는 기본 포트를 이용하시지 마시고 5자리 정도로 만들어 주세요!
예로 FTP의 경우 21포트 이지만 21포트는 막고 21123 처럼 5자리로 열어주시는게 좋습니다.
telnet 23 사용 하지 마시고 SSH 사용하시되 기본 포트인 22을 5자리로 변경해서 이용하세요.
기타 웹서비스를 하신다면 80포트는 기본 사용 하셔야겠죠.
외 DB를 이용하신다면 MySQL의 경우 3306 포트를 열어 두셔야겠죠.
물로 MySQL역시 포트를 변경 할 수 있습니다.
기본 포트를 그대로 이용하기 보다는 5자리 이상으로 변경해서 사용하시는게 좋습니다.
이유는 대부분 해킹 프로그램이 포트를 스켄할때 기본 포트 부터 스켄하며 높은 숫자로 갈수록 스켄하는 시간이 많이 걸리므로 그만큼 노출될 확률도 적어 집니다.

4. 라우팅테이블
라이우팅 테이블을 통해서 특정 공격 IP등을 차단하거나 허용하는 방식을 이용하세요!
만약 특정 서버에서만 접속을 하면 되는 서버라고 한다면 모든 IP를 다 막고 해당IP만 허용한다던지 하면 아주 좋겠죠.
글데 라우팅 테이블 관련된 건 자세히는 모르겠네요.
그냥 라우팅 관련해서 보안 할 필요가 있다고 들은적이 있어서 ^^;

5. 패턴분석차단
방어의 기본은 분석입니다.
분석을 위해선 로그를 쌓아야 분석하겠죠!
웹의 경우 아파치 로그, DB 의 DB로그 등등 서버는 여러가지의 로그들을 남기고 있습니다.
그리고, 프로그램을 추가로 설치하여 다양한 로그를 기록 하고 분석 할수 있습니다.

6. 웹로그 분석 차단
웹방화벽이 없다면 웹로그를 면밀히 분석해서 특정 스크립트를 웹소스에서 차단 하거나 특정 페이지를 특정IP가 지속적으로 요청하지 않는지 등 분석후 차단 적용 합니다.

7. 취약점 분석툴 설치 분석
서버의 취약점을 분석해주는 툴 프로그램을 설치 하셔서 내 서버의 어떤 취약점이 있는지 리포트를 통해서 점검 하셔서 보안 하시기 바랍니다.

8. 포토 50000~65000 사이로 설정
위에서 말한바 있듯이 포트 범위를 5만~6만5천 사이로 설정 해서 이용하세요.


이외에도 보안해야할 사항이 많고 많지만 제가 서버를 설치후 운영하면서 나름 보안하고 있는 사항입니다.
하지만, 위와 같이 힘들게 보안을 해도 뚤리게 마련입니다.
해커들은 나날이 발전하고 있으니깐요.
제생각엔 보안 담당자들 보다 해커들이 항상 우위를 차지 하고 있는 것 같습니다.
그러니, 언제든지 내가 관리하고 있는 서버는 뚤릴수 있다라는 생각으로 보안에 신경을 써야 겠습니다.
전 기획부터 개발까지 맡으면서도 서버 100여대를 혼자서 모두 관리 하고 있습니다.
그중에서도 가장 힘든게 서버 보안 인듯 하네요!
아무튼 보안 담당자님들 화이팅 입니다.

위 글은 세이박스에서 작성한 글이므로 마음껏 퍼가셔도 되지만 출처는 반드시 남겨 주세요!

웹방화벽 TuTELA T-2010

서버,보안
TUTELA WebFirewall

(주)토리넷 업체에서 만든 웹방화벽 제품

nis 국가정보원 - IT보안 인증 사무국 인증제품

http://www.kecs.go.kr/certify/detail.jsp?ci=GOOD&di=159

인증제품명 : TUTELA WebFirewall V1.3
인증일 : 20080424
제품유형 : 웹방화벽 
보증등급 : EAL4 
인증보고서번호 : CR-08-18 
인증번호 : NISS-0101-2008 
공통평가기준 버전 : 2.3 
준수 보호프로파일 : N/A 
평가기관 : KISA 
개발사/신청기관 : 토리넷

사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지

사용자 삽입 이미지

 [출처] 세이박스 - http://www.saybox.co.kr/bbs/board.php?bo_table=hserver&wr_id=4

[해킹] Cain & Abel 카인과아벨 스푸핑 프로그램 공격 유형 및 보안 방법

서버,보안

카인과 아벨이라 왠지 최근 인기 있는 드라마 제목 같다.
하지만 이름만 비슷할뿐 해킹 프로그램이다.
일종의 세션 하이재킹 과 IP스푸핑이 섞여 있는 형태라고 할 수 있습니다.

몇년 전 L전자 신입사원 시험에 떨어진 한 청년이
홧김에 L전자를 해킹을 했다 라는 보도가 있었는데
이또한 Cain & Abel 프로그램을 이용한 것 이었습니다.

적을 알아야 막든지 공격하던지 해야 할터
나를 공격한놈이 도대체 어떤 놈인지 여기 저기 자료를 찾아봤다
http://www.oxid.it/index.html
사이트에서 만든 프로그램인 듯했다 즉, 해당 설치 파일을 쉽게 구할 수 있는 것이었다.
다운받아 설치 해보니 역시나 네트워크상의 데이터를 수집하는 것이었다.

사용법은 http://www.oxid.it/ca_um/ 에 설명이 간략하게 되어 있습니다.
프로그램 이름이 카인과 아벨 즉, 좋은 용도와 나쁜 용도로 해당 프로그램을 이용할 수 있는데
메뉴얼을 보면 cain , abel 두개의 카테고리로 되어 있습니다.
abel 은 좋은 용도 순수하게 네트워크 패킷을 분석하는등에 대한 설명이며
cain 은 나쁜 용도로 사용하는 방법 스나이핑 등에 대해 그 용도를 설명 하고 있습니다.
성경에 나오는 착한 동생 아벨과 동생을 죽인 형 카인의 모습처럼 하나의 프로그램이 나쁜쪽과 좋은쪽의 용도로 사용할 수 있다는것을 보여 주는 것이죠.

간단하게 기능을 설명하자면 해당 프로그램을 실행하고서 기다려 보면 수백건의 스캔된 정보가 자신의 컴으로 들어와 있는것을 확인 할수 있습니다.
즉, 네트워크 상에 지나 다니는 모든 패킷을 캡쳐해서 보여주는 것으로 홈페이지 로그인 아이디 및 비번등을 모두 보여 줍니다.

보통 윈도우 서버를 취약점을 이용해 해당 서버에 카인과아벨 프로그램을 설치해
목적 서버를 수푸핑하는 형태입니다.

위와 같은 프로그램이 서버에 설치 되었다면 다음과 같이 처리 하세요!
일단 해당 프로그램을 일단 지우셔야 하겠죠.
보통 c:\windows\system32\server 폴더등 시스템 경로쪽에 설치가 되어 있습니다.
그외에 다른 프로그램들 설치 되어 있는지 꼭 확인하시구요
개정 정보에서 추가된 개정이나 불필요한 개정 모두 사용 정지하거나 삭제 해버리세요
그리고, 터미널 접속은 할 수없게 하세요.
만약 꼭 사용 해야 한다면 포트를 변경하세요.
포트 변경 방법은 유포유에 글이 있으니 참고 하세요!
윈도우 서버가 워낙 취약점이 많은지라 보안에 신경 많이 써 주셔야 할겁니다.
특히 사용하지 않는 포트는 모두 잠거 두시는게 좋습니다.

그리고, 로그인시 SSL 적용을 꼭 하시기 바랍니다.
SSL 관련해서 유포유에 자료 있으니 참고 하시구요.
SSL 적용시 로그인 정보를 암호화 해서 보내므로 그나마 회원들의 개정이나 기타 정보를 보호 해줄 수있습니다.

이외에도 보안할 사항을 저역시 찾아보구서 찾으면 추가적으로 글을남겨 놓겠습니다.

 

보안 윈도우 서버 원격데스크탑 접속 포트 변경 및 접속하기

서버,보안
사용자 삽입 이미지
 

보안상 원격데스크탑의 기본 포트인 3389포트를 다른 포트로 변경 할 필요성이 있습니다.
원격 데스크탑 포트를 변경하기 위해선 레지스트리에서 변경 해주시면 됩니다.

먼저 시작 > 실행 에서 regedit 르고 실할한뒤

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber

사용자 삽입 이미지



클릭후 10진수 체크하신뒤 3389 를 다른 포트로 변경 해주세요.
물론 사용하지 않는 포트로 바꾸셔야 겠죠 이왕이면 5~6자리로 만드세요!


사용자 삽입 이미지



적용 할려면 재부팅 하셔야 합니다.

원격 접속을 하실려면 서버 IP주소:변경한 포트 번호 로 접속 하셔야 합니다.
예로 127.0.0.1:9999 이런식으로 ^^

사용자 삽입 이미지

[PHP] 보안 국내 IP 대역만 접속 하도록 응용

웹프로그램


국내 아이피 대역을 확인 하실려면
https://ip.nida.kr/ip_cate_stat/stat_05_04.act

에서 확인 가능하며 엑셀 파일로도 다운 가능 합니다.
https://ip.nida.kr/ip_cate_stat/stat_05_04_toexcel.act

다운 받은 엑셀 파일내용 중 시작IP 와 마지막 IP 값을
각 자리수가 3자리가 되도록 수정후 . 점을 제거 합니다.
202.6.95.0 인경우 202006095000 처럼 바뀌겠군요.
이렇게 바뀐 값을 "시작IP_마지막IP" 처럼 변경해서 배열로 담습니다.
저의 경우 에디트 플러스를 활용 했습니다.
$ipgroup = array("2020060950000_202006095255","202014103000_202014103255");
처럼 배열로 담습니다.
이후 추가되는 IP만 배열에 계속 추가 해주면 됩니다.
이와 같은 변경하는 작업을 어럽게 느끼시는 분을 위해 제가 오늘 날짜로 올라온것 까지 작업해서 첨부 해놨습니다.
첨부파일 다운받으실려면 회원가입후 이메일 인증 받으시고 등업요청후 제가 승인하면 다운 가능 해 집니다.
워낙 광고 도배하는 회원이 있어서 이와 같은 복잡한 절차를 거치도록 했으니 양해 바랍니다.

이제 저 배열을 활용하기만 하면 되겠군요.
접속자 IP를 받아서 비교를 한번 해보겠습니다.
$userip = getenv("REMOTE_ADDR");
//. 점으로 구분해서 변수로 담습니다.
$tmpuserip = explode(".",$userip);
//str_pad 함수를 이용해서 자리수를 "0"으로 채워 하나의 값으로 합칩니다.
$userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
//배열 IP만큼 돌립니다.
for($i=0;$i<count($ipgroup);$i++) {
 //변수값을 분리합니다.
 $tmpip = split("_",$ipgroup[$i]);
 //접속자 IP가 시작IP값보다 크거나 마지막 IP보다 작은 값이면 포함되는 값이므로 차단
 if($tmpip[0]<=$ip || $tmpip[1]>=$ip) {
  echo "국내 IP만 접속 허용합니다.";
  exit;
 }   
}
배열 값은 "대역 시작 IP _ 대역 끝 IP" 로 저장 되어 있습니다.
따라서 접속한 사용자의 IP를 받아서 루프를 돌며 해당 대역에 포함되는지 체크하시면 됩니다.

참, IP6 IP에 대해서는 별도로 처리 하셔야함을 잊지 마세요! ^^

Apache Web Server 의 DOS공격 막기

서버,보안
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.8.20(수) apache v1.3.x
수정일 : 2003.8.25(월) apache v2.x 부분 추가

특정 URL이나 IP일 경우나 특정한 브라우저를 이용하여 DoS(Denial of Service, 서비스거부)
공격이 들어온다면 httpd.conf 에서 SetEnvIf, SetEnvIfNoCase 등과 Allow, Deny 설정으로
간단히 막을 수 있겠지만 일정한 유형이 없다면 해결점을 찾기가 쉽지 않다.

다행히 Apache용 mod_dosevasive 모듈로 DoS 공격을 쉽게 막을 수 있다.
며칠전 1.7버전 발표로 apache 2.x에서도 정상적으로 이 모듈을 이용할 수 있게 됐다.

1. mod_dosevasive 설치

http://www.nuclearelephant.com/projects/dosevasive/
에서 mod_dosevasive (현재 최신버전은 1.7)을 받아온다.

1) 기존에 사용하던 apache 1.3.x에 모듈만 추가할 때

mod_dosevasive.tar.gz 을 푼다음 apxs로 설치

----------------------------------------------
# tar xvfz mod_dosevasive.tar.gz 
# cd dosevasive
# /bin/apxs -iac mod_dosevasive.c
...
[activating module `dosevasive' in /usr/local/apache/conf/httpd.conf]
cp mod_dosevasive.so /usr/local/apache/libexec/mod_dosevasive.so
chmod 755 /usr/local/apache/libexec/mod_dosevasive.so
...
----------------------------------------------

httpd.conf의 LoadModule, AddModule는 apxs가 알아서 추가해준다.

2) apache 1.3.x부터 새로 컴파일할 할 때

mod_dosevasive.tar.gz 을 apache_source_홈/src/modules 에 푼 다음
기존에 apache 컴파일하는 것과 동일한 방법으로 하되, --add-module=... 옵션만
추가해준다.

----------------------------------------------
./configure --prefix=/usr/local/apache \
--enable-module=all --enable-shared=max \
--add-module=src/modules/dosevasive/mod_dosevasive.c  <-- 추가함
make
make install
----------------------------------------------

3) apache 2.x에 모듈만 붙일 때

/bin/apxs -iac mod_dosevasive20.c

2. 설정

httpd.conf 에 아래 설정이 있는지 확인한다.

apache 1.3.x
----------------------------------------------
...
LoadModule dosevasive_module libexec/mod_dosevasive.so
...
AddModule mod_dosevasive.c
----------------------------------------------

apache 2.x
----------------------------------------------
LoadModule dosevasive20_module modules/mod_dosevasive20.so
----------------------------------------------

httpd.conf에는 다음과 같이 설정을 추가한다.
( 단, 아래 설정 중에 apache 2.x일 때는 < IfModule mod_dosevasive20.c> 로 )
----------------------------------------------
< IfModule mod_dosevasive.c>
  DOSHashTableSize  3097
  DOSPageCount    3
  DOSSiteCount    50
  DOSPageInterval   1
  DOSSiteInterval   1
  DOSBlockingPeriod  30
< /IfModule>
----------------------------------------------
DOSHashTableSize  3097

hash table의 크기. IP, URI등을 분석하기 위한 공간으로 쓰이는 것 같은데 정확히는
모르겠다. 접속이 많은 서버이면 수치를 높인다.

DOSPageCount    3
DOSPageInterval   1

DOSPageInterval에서 지정한 시간(초단위)동안 같은 페이지를 3번 요청한 경우
해당 클라이언트 IP를 블럭킹한다. 블럭킹되는 동안에 사용자에게는 403(Forbidden)
코드가 전송된다.

DOSSiteCount    50
DOSSiteInterval   1

DOSSiteInterval에서 지정한 시간동안 어느 페이지나 이미지든 요청 건수가 50번을 넘는
경우 해당 클라이언트 IP를 블럭킹한다. 403코드 보내는 것은 마찬가지.
HTML 내에 이미지가 10개이면 요청 건수는 HTML포함하여 11번이 되므로 이미지가 많은
사이트는 숫자를 크게한다.

DOSBlockingPeriod  30

블럭킹된 IP는 30초동안 접속을 할 수 없다.

3. 모듈 사용을 중지하려면

차단 기능을 이용하지 않기 위해

DOSPageCount 0
DOSSiteCount 0

와 같이 하면 모듈 내부의 default값을 이용해서 동작하므로 LoadModule, AddModule를
주석 처리하는 방법을 써야한다. 또는 Count값을 상당히 큰 수를 지정할 수도 있겠다.

4. 차단하는지 테스트

간단한 테스트 툴로 test.pl을 제공한다.
12번째 줄에

printf("%03d ", $_ );

를 추가하고

apache를 실행시킨 다음 perl test.pl을 해보면 200 OK, 403 Forbidden 된 것을 쉽게
확인할 수 있을 것이다.

DOSPageCount, DOSSiteCount 수치를 너무 낮게 하면 정상적인 접속에 대해서도 차단될 수
있으므로 주의해야 한다. 수치를 낮추고, 같은 페이지를 reload(Ctrl+R)를 여러번했더니
바로 403 페이지가 등장.

403 페이지를 별도로 만드는 것이 좋을 듯 싶다. httpd.conf에 ErrorDocument 403 ... 설정
으로 html을 만들어두면 방문자에게 도움이 되지 않을까...

이젠 ab, lynx 등으로 게시물 조회수를 순간적으로 올린다거나, 시스템 로드를 증가시키는
것까지도 어느정도 막을 수 있을 것이다.

※ syslog 로 로그 남기는 기능과 DOSEmailNotify, DOSSystemCommand 옵션은 제대로 적용
  되지 않아 이 글에 적지 않았다. 정상동작이 확인되면 그 때 추가할 것이다


iframe 삽입 공격 보안

서버,보안

1. 사건 배경
평소 꾸준히 방문하던 쇼핑몰에 어느날 갑자기 뽀로록 소리가 나면서 상단 바에 노란줄이 생기며 경고가 뜬다 혹은 알약 등 백신에서 감시프로그램이 "치명적인 바이러스에 감염되었습니다."라고 뜬다. 너무나 당황한 A군 해당 쇼핑몰에 접속하기 겁이 난다 ㅜㅜ;

2. 사건 원인
해당 쇼핑몰은 iframe 삽입 공격을 받은것이다. DB인젝션 공격과는 좀 다른 유형으로써 윈도우 웹서버 개정관련 보안 취약점을 공격하는 방식이다.
원인은 홈페이지 폴더에 everyone 개정에 쓰기권환까지 줬기 때문에 생긴 문제이다.
폴더에 속성 > 보안 눌러보세요 분명 everyone 개정으로 설정되어 있을겁니다.
윈도우 2000서버 등 초기 IIS 서비스 당시 everyone으로 설정한 운영자가 더러 있었을 겁니다.
이유야 어찌 되었던 이제라도 발견 하셨다면 다행인거죠! ^^ 화이팅!

3. 보안 방법
홈페이지 폴더에 IUSR_서버명, IWAM_서버명 의 두 개정을 추가하고 everyone 개정은 삭제 합니다. 그리고, IUSR_, IWAM 권환에 읽기,실행 권환만 줍니다. 그리고, 게시판 첨부파일이 업로드될 폴더등 쓰기 권환이 꼭 필요한 곳에만 쓰기 권환을 줍니다.
저의 경우엔 웹서비스 디렉토리 바깥쪽에 폴더를 만들어 업로드 하도록 해놨습니다.


윈도우 서버 보안 취약점으로 인해 생기는 문제가 참 많군요 ^^;

DB injection script 스크립트 공격 복구 및 보안

데이타베이스

DB injection 공격?
구글에서 <script src= 0.js 라고 검색하면 놀랄 정도로 많은 사이트들이 DB 공격을 받았음을 확인 하실 수 있을겁니다.
제가 관리하는 사이트 또한 위와같은 스크립트 삽입되어 수많은 사이트를 찾아 다니며 복구하고 나름대로 보안하는 방법을 접하게 된 것을 올려 봅니다.


1. 공격 유형 :
SQL injection 홈페이지 상의 DB사용하는 페이지를 공격 즉, 웹소스 취약한 곳을 통해 DB를 공격.
특수 코드 삽입해서 DB에 스크립트를 삽입하여 접속하는 사용자에게 악성코드를 설치하는 유형.


2. 조치 시 주의 사항
참조 : http://swbae.egloos.com/1747128
1) 홈페이지 변조를 통해 악성코드 링크를 삽입한게 아니라, SQL injection 기법을 이용해 DB 컨텐츠에 삽입한 것입니다.
2) 조치 시 DBA 의 도움을 받는게 좋습니다.
3) 공격 때문에 기존의 데이터가 일부 덧씌워져 변경되었을 수 있습니다. 이럴 땐 백업의 도움을 받아야 겠지만, 일부 데이터의 유실은 어쩔 수 없을 듯...
4) 근본 원인은 사이트가 SQL injection 공격에 취약하게 개발되어 있어서 그렇습니다. 공격 포인트를 파악해서 외주개발 업체, 혹은 내부개발팀을 통해 소스를 수정하세요.
5) 소스를 수정할 수 없는 경우 웹 방화벽이 도움이 될 수도 있습니다. 그러나, 제품 도입시 면밀히 검토하실 필요가 있습니다. 단순 패턴 매칭 형태를 사용해서, 보유패턴과 1byte 만 틀려도 탐지 못하는 제품이 몇 개 있더군요.


3. 공격으로 생긴 DB table 삭제
comd_list 테이블 삭제
ahcmd 테이블 삭제
foofoofoo 테이블 삭제
Reg_Arrt 테이블 삭제
comd_list 테이블 삭제
D99_CMD 테이블 삭제
D99_TMP 테이블 삭제
Kill_kk 테이블 삭제
jiaozhu 테이블 삭제


4. 삽입 스크립트 제거 복구
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script src=http://s.ardoshanghai.com/s.js></script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

'스크립트 부분은 삽입된 스크립트를 입력


5. 보안 적용 1 - MSSQL 메모리에서 위험한 sp들을 내린다.
보안상 위협이 될 수 있는 개체들에 대하여 일반 사용자 그룹의 사용권한을 제한한다.
참조: http://blahblah.springnote.com/pages/351077
SP 등록해제는 위험을 감안해야 하므로 메모리에서만 내린다. 단점, 재부팅되거나 DB 재시작시 다시 아래 쿼리 실행 할것!

dbcc xp_cmdshell(free)
dbcc xp_dirtree(free)
dbcc xp_regdeletekey(free)
dbcc xp_regenumvalues(free)
dbcc xp_regread(free)
dbcc xp_regwrite(free)
dbcc sp_makewebtask(free)


6. 보안 적용 2
무엇보다 DB 인젝션이 발생한 원인인 로그인, 회원가입, 게시판 등 사용자가 DB를 접하게 되는 소스 개발시 특수 문자 보안 적용 안된 경우가 가장 유력하다.
로그인, 회원가입, 아이디 비번찾기, 게시판 등이 개발자가 개발하면서 DB를 공격할만한 특수 문자에 대한 차단 기능을 적용하지 않은 문제로 판단됨. 소스를 모두 개선 해야함.
보안참조 : http://magic.littleworld.net/ai/kmod.asp?no=327&amp;isn=&amp;mymsg


위 글은 세이박스에서 작성한 글입니다.
출처를 적어 주시고 많은 국내 사이트들이 공격을 받고 있으니 도움이 되기 위해 많이 많이 올려주세요! ^^
출처 : 세이박스  http://saybox.tistory.com/453

SQL Injection 공격과 방어 방법 - php, asp 등

서버,보안

사용자 입력값이 SQL injection 발생시키지 않도록 수정

다수 사이트, SQL Injection 취약점 공격에 무방비 상태


웹 취약점을 이용한 공격이 식을 줄 모르고 있다. 공격의 목적은 게임정보 탈취와 궁극적으로는 이를 이용한 게임아이템 거래로 돈을 벌기 위한 것이다.


정보통신부와 KISA는 이에 대한 대책으로 중국에서 들어오는 IP들을 차단하고 있고 자금 여력이 없는 중소기업의 웹사이트 관리자에게 공개 웹방화벽 구축을 권유하고 있으며 개인 PC의 보안패치율을 높이기 위해 각종 캠패인을 벌이고 있다.


KISA에서 운영하는 ‘보호나라’에서는 대국민 서비스로 원격 PC점검을 해주고 있고 대기업을 중심으로 보안솔루션 도입과 시스템 구축이 한창이다. 하지만 이러한 노력에도 불구하고 해킹 관제 서비스를 실시하고 있는 업체에서는 하루에도 2백~3백건의 해킹이 이루어지고 있고 이를 통한 악성코드 유포가 지속적으로 이루어지고 있다고 지적하고 있다.


KISA 관계자는 “지난해 정부기관 사이트와 주요 웹사이트를 대상으로 대대적인 웹사이트 모의 해킹을 실시한 결과 대부분의 사이트들이 SQL Injection 취약점 공격에 맥없이 뚫렸다”며 “SQL Injection 취약점 공격에 대한 대비책을 개발자들이 기본적으로 알고 있어야한다”고 강조했다.


<보안뉴스>는 얼마전부터 웹개발자들이 기술,정신적으로 보안강화에 더욱 노력해야 한다는 기사와 관련정보를 제공해 오고 있다. 이번에는 SQL Injection 취약점에 대해 알아보자. 자료 제공은 KISA 해킹대응팀이다. 


<기획3> 악의적인 명령어 주입 공격(SQL Injection)


현재 대부분의 웹 사이트들은 사용자로부터 입력받은 값을 이용해 데이터 베이스 접근을 위한 SQL Query를 만들고 있다. 사용자 로그인 과정을 예로 들면, 사용자가 유효한 계정과 패스워드를 입력했는지 확인하기 위해 사용자 계정과 패스워드에 관한 SQL Query문을 만든다. 이때 SQL injection 기법을 통해서 정상적인 SQL query를 변조할 수 있도록 조작된 사용자 이름과 패스워드를 보내 정상적인 동작을 방해할 수 있다. 이러한 비정상적인 SQL Query를 이용해 다음과 같은 공격이 가능하다.


-사용자 인증을 비정상적으로 통과할 수 있다.

-데이터베이스에 저장된 데이터를 임의로 열람할 수 있다.

-데이터베이스의 시스템 명령을 이용하여 시스템 조작이 가능하다.


이러한 취약점을 ‘SQL Injection 취약점’이라고 하며, 사용자가 데이터 입력이 가능한 수많은 웹 페이지 상에 이러한 취약점이 존재할 수 있다.


■위협 사례


(1) 사용자 인증 공격


아래의 그림과 같이 인증을 처리하는 모듈이 입력 값에 대해 적절히 검사하지 않았을 때 공격자는 비정상적인 SQL Query를 삽입 할 수 있고 이를 이용해 사용중인 데이터베이스에 영향을 줄 수 있다.



다음은 SQL 구문을 이용하여 인증을 처리하는 일반적인 웹 페이지 구조를 나타낸다.

$row = mysql_query (" SELECT 신청인명, 접수번호 from USER_TABLE where 신청인명='첫번째입력값' and 접수번호='두번째입력값' ");

if ( $row == 1 )

// 인증 성공 루틴

else 

  // 인증 실패 루틴


이 스크립트에 공격자가 test라는 신청인명을 입력하고 인터넷접수번호 대신 A' or 'A'='A 이란 값을 입력하면 아래와 같은 SQL Query가 완성된다.


SELECT 신청인명,접수번호 FROM user_table WHERE 신청인명=‘test?? AND 접수번호=??A' OR 'A'='A'


이 경우 구문의 WHERE 절은 ??참 AND 거짓 OR 참??의 WHERE 절이 생성되며 무조건 참이 되어 SQL 구문은 올바른 입력 값으로 처리하게 되며 공격자는 웹 인증 페이지를 쉽게 통과할 수 있게 된다.


(2) MS-SQL상에서의 시스템 명령어 실행


MS-SQL 데이터베이스를 사용하는 경우를 예를 들어 보자. 만약 데이터베이스 접근 권한이 시스템 권한을 사용하고 있다면 MS-SQL에서 기본적으로 제공하고 있는 xp_cmdshell이라는 Stored Procedure를 이용하여  시스템 명령어를 실행할 수 있다.


예로 위의 인증 페이지에서 신청인명에 test, 접수번호에 ??; exec master..xp_cmdshell ??ping 10.10.1.2'-- 값을 입력했다고 가정하면 SQL Query는 다음과 같이 완성될 것이다.


SELECT 신청인명, 접수번호 from USER_TABLE where 신청인명='test' and 접수번호='; exec master..xp_cmdshell 'ping 10.10.1.2'--


이 SQL Query는 SELECT Query와 xp_cmdshell Query를  SQL Query가 순차적으로 실행되게 되며, 마지막의 -- 문자는 이후의 모든 문자열을 주석 처리하여 문장을 완성시켜 준다.


(3) 취약성 판단


-검색어 필드 및 로그인ID, PASSWD 필드에 큰따옴표("), 작은따옴표('), 세미콜론(;) 등을 입력한 후, DB error가 일어나는지 확인하자.


-로그인 모듈 점검

MS SQL인 경우: ID 필드에 ['or 1=1 ;--], 비밀번호 필드에는 아무 값이나 입력한 후 로그인을 시도한다.

Oracle인 경우: ID 필드에 ['or 1=1 --], 비밀번호 필드에는 아무 값이나 입력한 후 로그인을 시도한다.


-기타

ID 필드에 ['or ''='], 비밀번호 필드에 ['or ''=']을 입력한 후 로그인을 시도한다.


※ 위 예제 이외에도 다양한 방법이 가능하기 때문에, 로그인 및 사용자 입력 값을 사용하는 소스에서 DB Query 생성 방식을 직접 점검해야 한다.


■ 보호 대책


(1) 일반 대책

-데이터베이스와 연동을 하는 스크립트의 모든 파라미터들을 점검하여 사용자의 입력 값이 SQL injection을 발생시키지 않도록 수정한다.


-사용자 입력이 SQL injection을 발생시키지 않도록 사용자 입력 시 특수문자(' " / \ ; : Space -- +등)가 포함되어 있는지 검사하여 허용되지 않은 문자열이나 문자가 포함된 경우에는 에러로 처리한다.


-SQL 서버의 에러 메시지를 사용자에게 보여주지 않도록 설정한다. 공격자는 리턴 되는 에러 메시지에 대한 분석을 통하여 공격에 성공할 수 있는 SQL Injection 스트링을 알아낼 수 있다. 따라서 SQL 서버의 에러 메시지를 외부에 제공하지 않도록 한다.


-웹 애플리케이션이 사용하는 데이터베이스 사용자의 권한을 제한한다. 가능하면 일반 사용자 권한으로는 모든 system stored procedures에 접근하지 못하도록 하여 웹 애플리케이션의 SQL Injection 취약점을 이용하여 데이터베이스 전체에 대한 제어권을 얻거나 데이터베이스를 운용중인 서버에 대한 접근이 불가능하도록 한다.


-php.ini 설정 변경

  : php.ini 설정 중 magic_quotes_gpc 값을 On으로 설정한다.


; Magic quotes

;

; Magic quotes for incoming GET/POST/Cookie data.

magic_quotes_gpc = On  ; Off에서 On으로 변경한다.

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.

magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').

magic_quotes_sybase = Off


■ 개발 언어별 대책

-사용자로부터 입력받은 변수로 SQL 쿼리 구문을 생성하는 CGI는 입력받은 변수를 체크하거나 변경하는 로직을 포함하고 있어야 한다.


-입력받은 변수와 데이터 베이스 필드의 데이터형을 일치 시켜야 하고, 사용 중인 SQL 구문을 변경시킬 수 있는 특수문자가 포함되어 있는지 체크해야 한다.


-검색 부분과 같이 클라이언트로부터 생성된 SQL 구문을 받는 부분이 있다면 이를 제거해야 한다.


□ ASP

-취약한 SQL Injection 예제

prodId = Request.QueryString("productId")

Set conn = server.createObject("ADODB.Connection")

Set rs = server.createObject("ADODB.Recordset")

query = "select prodName from products where id = " & prodId

conn.Open "Provider=SQLOLEDB; Data Source=(local);

Initial Catalog=productDB; User Id=dbid; Password="

rs.activeConnection = conn

rs.open query

If not rs.eof Then

response.write "제품명" & rs.fields("prodName").value

Else

response.write "제품이 없습니다"

End If


-안전한 SQL Injection 예제

prodId = Request.QueryString("productId")

prodId = replace(prodId, "'", "''")' 특수문자 제거

prodId = replace(prodId, ";", "")

set conn = server.createObject("ADODB.Connection")

set rs = server.createObject("ADODB.Recordset")

query = "select prodName from products where id = " & prodId

conn.Open "Provider=SQLOLEDB; Data Source=(local);

Initial Catalog=productDB; User Id=dbid; Password="

rs.activeConnection = conn

rs.open query

If not rs.eof Then

response.write "제품명" & rs.fields("prodName").value

Else

response.write "제품이 없습니다"

End If


□ PHP

-addslashes() 함수 사용

  : 사용자가 입력하는 값들($_GET, $_POST)을 모두 addslashes() 함수를 이용하여 처리하여 준다.

addslashes()

용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 붙여서 반환한다. 해당 문자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다.

- 적용 가능한 PHP : PHP 3 이상


-취약한 SQL Injection 예제

$query = "SELECT id, password, username FROM user_table WHERE id='$id'";// 사용자로부터 입력받은 id 값을 사용자 table에서 조회

$result = OCIParse($conn, $query);

if (!OCIExecute($result))

echo "<META http-equiv=\"refresh\" content=\"0;URL=http://victim.com\">";// 메인 페이지로 redirect

OCIFetchInto($result, &$rows);

... 중략 ...


-안전한 SQL Injection 예제

$query = sprintf("SELECT id,password,username FROM user_table WHERE id='%s';",addslashes($id));

// id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다.

// @ 로 php 에러 메시지를 막는다.

$result = @OCIParse($conn, $query);

if (!@OCIExecute($result))

error("SQL 구문 에러");

exit;

@OCIFetchInto($result,&$rows);

... 중략 ...


□ JSP

-취약한 SQL Injection 예제

String sql="SELECT*FROM user_table"+"WHERE id=" + response.getParameter("id")

+ " AND password = " + response.getParameter("password");

Class.forName("org.gjt.mm.mysql.Driver");

conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);

stmt = conn.createStatement();

rs = stmt.executeQuery(query);

while(rs.next())


-안전한 SQL Injection 예제

String sql = "SELECT*FROM user_table"+"WHERE id = ?"+"AND password = ?";

ResultSet rs = null;

PreparedStatement pstmt = null;

try

conn = DBManager.getConnection();

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, request.getParameter("id"));

pstmt.setString(2, request.getParameter("password"));

rs = pstmt.executeQuery();

[길민권 기자(boannews@infothe.com)]

출처 : http://www.superuser.biz/tag/sql%20%C0%CE%C1%A7%BC%C7

이 웹사이트의 보안 인증서에 문제가 있습니다. 해결방법

컴활용
사용자 삽입 이미지

네이버 로그인 중 위 이미지와 같은 오류가 발생했다면 네이버 문제 보다는 자신의 컴퓨터 시간의 문제로 보시면 됩니다.
우측 하단 시간을 더블 클릭하셔서 현재 시간으로 맞혀 보세요!

왜 이런 증상이 나냐구요! 보안 인증서란 네이버라는 사이트에 대해 보안을 인증해주는 기관이 있는데 보통 1년 또는 2년 정도의 인증기간을 주며 해당 서버에 접속시 사용자의 아이디, 비번등 개인 정보를 네이버 서버로 보낼때 암호화 해서 보냅니다. 그런데 네이버 인증서기간이 2008년 10월 30일이 종료 인데 사용자 컴이 2009년 10월 30일로 되어 있다던가 그런경우 인증서 기간이 지난것으로 판단해서 오류 발생하는 겁니다.

하지만, 간혹 어떤 사이트에서는 정말 인증서 기간이 지났는데도 관리자가 연장하지 않아서 위와 같은 문제가 발생 하는 경우도 간혹 있습니다.

아니면 2007년 하반기 개인정보보호진흥원에서 개인정보 보호를 위해 하루 1만명 이상방문자 사이트 등에 대해 의무적으로 보안 적용을 하도록 지시하여 수많은 사이트들이 보안 적용을 하고 있는것으로 알고 있습니다. 따라서, 기술적인 문제로 제대로 적용 안된 이유 일수도 있습니다.
그런경우엔 해당 사이트에 문의를 하셔야 합니다. ^^;

공개웹방화벽을 이용한 홈페이지 보안

서버,보안
공개웹방화벽 WebKnight 를 이용한 홈페이지 보안에 대해 설명을 드리도록 하겠습니다.

WebKnight는 ISAPI 필터 형태로 동작하며, IIS 서버 앞단에 위치하여 웹서버로 전달되기 이전에 IIS 웹서버로 들어온 모든 웹 요청에 대해 웹서버 관리자가 설정한 필터 룰에 따라 검증을 하고 SQL Injection 공격 등 특정 웹 요청을 사전에 차단함으로써 웹서버를 안전하게 지켜준다. 이러한 룰은 정기적인 업데이트가 필요한 공격 패턴 DB에 의존하지 않고 SQL Injection, 디렉토리 traversal, 문자 인코딩 공격 등과 같이 각 공격의 특징적인 키워드를 이용한 보안필터 사용으로패턴 업데이트를 최소화하고 있다. 이러한 방법은 알려진 공격 뿐만 아니라 알려지지 않은 공격으로부터도 웹서버를 보호할 수 있습니다.

먼저 AQTRONIX Webknight.zip 파일을 다운 받습니다.

AQTRONIX Webknight.zip  파일은 본인이 아티보드로 프로젝트를 여러번 하면서 아티보드 에 맞도록 설정한 파일입니다. (설정 하는 부분이 나름 어려워)

C:\Program Files\AQTRONIX Webknight
이곳에 압축을 푼다
LogFiles, :로그 폴더
Config.exe, :설정파일
denied.htm,
Loaded.xml,
LogAnalysis.exe, :로그 뷰어
readme.htm,
robots.txt, :검색로봇 관련
Robots.xml,
WebKnight.dll, :IIS 로드
WebKnight.xml

폴더 및 파일이 있습니다.

자 이제 윈도우 2003 서버 기준으로 - 인터넷 정보 서비스 (IIS) 관리를 실행 시키고
/웹사이트/ 오른쪽마우스/속성클릭/ - ISAPI필터 클릭/ 우측 - 추가 클릭 필터 이름에 WEBARTY
실행파일에 C:\Program Files\AQTRONIX Webknight\WebKnight.dll 삽입
서비스 탭에서 /격리모드에 IIS 5.0 격리 모드에서 WWW 서비스 실행 (I) 채크 하시고
IIS 다시 시작 하시면 정상 작동 합니다.

격리모드 채크 안하면 오류가 날수 있으므로 각별히 신경 써야 합니다.

-아래-

관련 정보
http://www.krcert.or.kr/firewall2/index2.jsp

설치 메뉴얼 http://www.krcert.or.kr/firewall2/fwDown2.jsp?fkind=11

동영상 메뉴얼 http://www.krcert.or.kr/firewall2/fwDown2.jsp?fkind=13

참고 하세요.

Gif.ASA 파일 주의!

서버,보안
윈도우 서버에 Gif.ASA이 있으면 필히 소스를 확인 해보시기 바랍니다.
VBScript-x.Encode 로 되어 있다면 Decode 프로그램으로 디코더 해서 보시면
소스 내용이 서버의 파일을 수정 가능하게 하는 부분이 있을겁니다.
반드시 제거 하셔야합니다.

mssql 전체 테이블 문자 검색 변경

데이타베이스
 
어느날 갑자기 DB에 "<script src=http://...></script>" 와 같은 내용이 삽입 된경우는 스크립트 삽입 공격을 받으신 겁니다.
 
참고로, 구글(http://www.google.co.kr) 에서 "<script src=http://...></script>" 내용을 검색해보세요.
국내 사이트중 어마어마 하게 많이 공격받은걸 확인 하실 수 있을겁니다.
 
MSSQL 을 사용중인 서버들이 공격 대상입니다.
항상 느끼는거지만 윈도우 관련 서버들이 취약점이 많다 보니 이런 문제가 생기는 것 같네요 저도 더 자세히 관련 공격 원인과 방어를 찾아봐야겠지마 끝이 없는듯 ㅡㅡ;
 
그럼, 테이블 마다 일일이 삽입된 스크립트를 일일이 지우는것도 끝이 없죠 그래서 다음과 같이 쿼리를 실행 해주시면 문제의 스크립트가 있는 테이블, 컬럼을 일일이 자동으로 찾아서 삭제 해줍니다.
 
 
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script src=http://...></script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
 
 
위 진하게 표시된 부분을 삽입된 스크립트 내용으로 넣어 주시면 됩니다.
만약 여러 종류의 스크립트가 삽입된경우 ''%<script%</script>''' 처럼 넣어 주셔도 됩니다. 하지만 정상적인 스크립트가 사라지는 경우가 발생하겠죠! 주의!
 
하지만, 안타깝게도 위 쿼리로 100% 복구 안될 가능성 있습니다.
가장 좋은 방법은 백업해두신거 복구하는게 가장 좋겠죠!
 
아무튼 행운을 빌며 해당 공격에 대해 더 자사한 정보 찾으면 올리겠습니다.

ASP 해킹 방지 보안 방법(injection, cross site scripting...)

웹프로그램
정리해서 올려야하는데..귀찮아서 일단 문서 일부분에서 발췌한것만 올린다.
참고로 이 보안관련 문서는 대외비라서 일부분만 올린것인데 이 문서에는
asp 뿐만 아니라 php, jsp 용도 있다.

혹 필요해서 요청하면...-_-;;;;;


<%
'////////////////////////////////////////////////////////////////////
'//가.  명령어 삽입(Command Injection) 가능성
'////////////////////////////////////////////////////////////////////
Dim title, str
title = "What's Up!!! <what happen> Oh my god!!!! & goodness"
str = ""
//변환을 수행할 함수
Sub ReplaceStr(content, byref str)
    content = replace(content, "'", """)
    content = replace(content, "&", "&")
    content = replace(content, "<", "<")
    content = replace(content, ">", ">")
   
    str = content
End Sub

ReplaceStr title, str
response.write str

%>

'////////////////////////////////////////////////////////////////////
'//나.  크로스 사이트 스크립팅 (XSS) 가능성
'////////////////////////////////////////////////////////////////////
/include/config.inc.asp
<%
atag = "p,br"       'XSS 허용할 태그 리스트
UploadedPath = "/Uploaded_Files/"   '업로드 기본 경로
fileext = "jpg,gif,png,pcx"     '허용할 확장자 리스트
%>


/include/secure.inc.asp
<%
'공격 위험성이 존재하는 문자들을 필터링
'문자열 입력값을 검증
'숫자형은 데이터 타입을 별도로 체크하도록 한다.
Function sqlFilter(search)
    Dim strSearch(5), strReplace(5), cnt, data
   
    'SQL Injection 특수문자 필터링
    '필수 필터링 문자 리스트
    strSearch(0)="'"
    strSearch(1)=""""
    strSearch(2)="\"
    strSearch(3)=null
    strSearch(4)="#"
    strSearch(5)="--"
    strSearch(6)=";"

    '변환될 필터 문자  
    strReplace(0)="''"
    strReplace(1)=""""""
    strReplace(2)="\\"
    strReplace(3)="\"&null
    strReplace(4)="\#"
    strReplace(5)="\--"
    strReplace(6)="\;"
   
    data = search
    For cnt = 0 to 6 '필터링 인덱스를 배열 크기와 맞춰준다.
        data = replace(data, LCASE(strSearch(cnt)), strReplace(cnt))
    Next

    sqlFilter = data
End Function

'XSS 출력 필터 함수
'XSS 필터 함수
'$str - 필터링할 출력값
'$avatag - 허용할 태그 리스트 예)  $avatag = "p,br"
Function clearXSS(strString, avatag)
    'XSS 필터링
    strString = replace(strString, "<", "<")
    strString = replace(strString, "\0", "")
   
    '허용할 태그 변환
    avatag = replace(avatag, " ", "")       '공백 제거
    If (avatag <> "") Then
        taglist = split(avatag, ",")
   
        for each p in taglist
            strString = replace(strString, "<"&p&" ", "<"&p&" ", 1, -1, 1)
            strString = replace(strString, "<"&p&">", "<"&p&">", 1, -1, 1)
            strString = replace(strString, "</"&p&" ", "</"&p&" ", 1, -1, 1)
        next
    End If
   
    clearXSS = strString
End Function

'확장자 검사
'$filename: 파일명
'$avaext: 허용할 확장자 예) $avaext = "jpg,gif,pdf"
'리턴값: true-"ok", false-"error"
Function Check_Ext(filename,avaext)
    Dim bad_file, FileStartName, FileEndName
   
    If instr(filename, "\0") Then
        Response.Write "허용하지 않는 입력값"
        Response.End
    End If
   
    '업로드 금지 확장자 체크
    bad_file = "asp,html,htm,asa,hta"
   
    filename = Replace(filename, " ", "")
    filename = Replace(filename, "%", "")

    FileStartName = Left(filename,InstrRev(filename,".")-1)
    FileEndName = Mid(filename, InstrRev(filename, ".")+1)
       
    bad_file = split(bad_file, ",")

    for each p in bad_file
        if instr(FileEndName, p)>0 then
            Check_Ext = "error"
            Exit Function
        end if
    next
   
    '허용할 확장자 체크
    if avaext <> "" Then
        ok_file = split(avaext, ",")
   
        for each p in ok_file
            if instr(FileEndName, p)>0 then
                Check_Ext = "ok"
                Exit Function
            End If
        next
    End If
   
    Check_Ext = "error"
End Function

'다운로드 경로 체크 함수
'$dn_dir - 다운로드 디렉토리 경로(path)
'$fname - 다운로드 파일명
'리턴 - true:파운로드 파일 경로, false: "error"
Function Check_Path(dn_dir, fname)
    '디렉토리 구분자를 하나로 통일
    dn_dir = Replace(dn_dir, "/", "\")
    fname = Replace(fname, "/", "\")
   
    strFile = Server.MapPath(dn_dir) & "\" & fname '서버 절대경로
   
    strFname = Mid(fname,InstrRev(fname,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로 탐색은 제거 됨
    Response.Write strFname
   
    strFPath = Server.MapPath(dn_dir) & "\" & strFname '웹서버의 파일 다운로드 절대 경로

    If strFPath = strFile Then
        Check_Path = strFile '정상일 경우 파일 경로 리턴
    Else
        Check_Path = "error"
    End If
End Function

'IP 체크 함수
Function Check_IP(IP_Addr)
    If Request.Servervariables("REMOTE_ADDR") = IP_Addr Then
        Check_IP = "TRUE"
    Else
        Check_IP = "FALSE"
    End If
End Function
%>



/head.asp
<%
'페이지에서 에러가 발생하여도 페이지 오류를 외부로 출력하지 않기위해 사용
On Error Resume Next
'On Error GoTo 0도 가능하나 2003에서는 실행되지 않음
if err.number <> 0 then
    'Response.Write err.descript-xion & "<BR>" & err.source & "<BR>"
    err.clear
End if
%>


/content.asp
<!--#include virtual="/include/connection.inc.asp"-->   <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"-->   <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"-->   <% '전역변수리스트 %>
<!--#include virtual="/head.asp"-->             <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim strSQL
Dim intSeq, strName, strEmail, strSubject, strContent, intCount, dtmReg_Date, intExist
Dim blnTag, strUserIP
Dim atag

'입력값이 숫자형인 경우 IsNumeric 함수를 사용한다.
If IsNumeric(seq) Then
    intSeq = Request.QueryString("seq")
Else
    Response.Write "허용하지 않는 입력값입니다."
    Reponse.End
End If

'문자(열)인 경우 sqlfilter 사용
'intSeq = sqlFilter(Request.QueryString("seq")) 'SQL Injection 필터링

'읽은 횟수 검색
strSQL = "SELECT count(*) FROM board WHERE intSeq='" & intSeq & "'"

objRs.Open strSQL, objDBConn

intExist = objRs(0)
objRs.Close

If intExist <> 1 Then
    Response.Write "해당글이 없습니다."
Else
    '읽은 횟수 증가
    strSQL = "UPDATE board SET intCount=intCount+1 WHERE intSeq='" & intSeq & "'"
    objRs.Open strSQL, objDBConn

    '게시물 SELECTZ
    strSQL = "SELECT strName,strEmail,strSubject,strContent,intCount,strUserIP,blnTag,dtmReg_Date FROM board WHERE intSeq='" & intSeq & "'"
    objRs.Open strSQL, objDBConn

    strName = objRs(0)
    strEmail = objRs(1)
    strSubject = objRs(2)
    strContent = objRs(3)
    intCount = objRs(4)
    strUserIP = objRs(5)
    blnTag = objRs(6)
    dtmReg_Date = objRs(7)

    objRs.Close
    Set objRs = Nothing

    objDBConn.Close
    Set objDBConn = Nothing

    '게시물 출력값에 XSS 필터링
    '사용자가 입력하는 출력되는 값은 strName, strEmail, strSubject, strContent으로 이 부분은 XSS 공격이 가능한 부분들이다.
    '일반적으로 본문만 선택적으로 HTML 태그 사용을 허용하며 나머지 부분들은 사용할 수 없도록 하는것이 바람직하다.
    strName = clearXSS(strName, atag)
    strEmail = clearXSS(strEmail, atag)
    strSubject = clearXSS(strSubject, atag)
    strContent = clearXSS(strContent, atag)
   
    '줄넘김 처리
    strContent = replace(strContent, vbLf, vbLf & "<br>")
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
<title>내용보기</title>
</head>

<body>
<div align=center>
<table border=1>
<tr>
    <td>이름</td>
    <td><%=strName%></td>
    <td>등록일</td>
    <td><%=dtmReg_Date%></td>
</tr>
<tr>
    <td>이메일</td>
    <td><%=strEmail%></td>
    <td>조회</td>
    <td><%=intCount%></td>
</tr>
<tr>
    <td>제목</td>
    <td colspan=3><%=strSubject%></td>
</tr>
<tr>
    <td>내용</td>
    <td colspan=3><%=strContent%></td>
</tr>
<tr>
    <td colspan=4>
    <a href="list.asp">목록으로</a> <a href="edit.asp?seq=<%=intSeq%>">수정하기</a> <a href="delete.asp?seq=<%=intSeq%>">삭제하기</a>
    </td>
</tr>
</table>

</div>  
</body>
</html>
<%
End If
%>



'////////////////////////////////////////////////////////////////////
'//다.  SQL 구문 삽입 가능성
'////////////////////////////////////////////////////////////////////
SQL Injection은 쿼리문의 잘못 해석함에서 발생하는 문제이다. 이를 해결하기 위해서는 쿼리문을 생성시에 입력된 값에 대한 유효성 검사를 수행하면 된다. ‘, “ 문자를 \’, \”로 변경해 주거나 아예 공백으로 처리하는 방법이다.

삭제해야 할 프로시저
xp_cmdshell
xp_stratmail
xp_sendmail
xp_grantlogin
xp_makewebtask


'////////////////////////////////////////////////////////////////////
'//사.  다운로드 취약성
'////////////////////////////////////////////////////////////////////
<!--#include virtual="/include/connection.inc.asp"-->   <% 'DB연결 헤더 %>
<!--#include virtual="/include/secure.inc.asp"-->       <% '보안관련라이브러리 %>
<!--#include virtual="/include/config.inc.asp"-->       <% '전역변수리스트 %>
<!--#include virtual="/head.asp"-->         <% '초기 설정 페이지(에러 메세지 미출력) %>
<%
Dim dn_dir, fname, val_ok
Dim UploadedPath

dn_dir = Request("dir")
fname = Request("fname")    '파일 이름

' IE 5.01에서는 이 방식을 사용할때 메모리 관련 문제가 발생할 수 있다.
strUA = Request.ServerVariables("HTTP_USER_AGENT")
If Instr(strUA, "MSIE") Then
    intVersion = CDbl(mid(strUA, Instr(strUA, "MSIE")+5, 3))

    If intVersion < 5.01 Then
        Response.Write "error"
    End If
End If

if fname = "" Then
    Response.Write "<script-x language=javascript-x>"
    Response.Write "alert(""파일명을 입력해 주세요"");"
    Response.Write "history.back();"
    Response.Write "</script-x>"
End If

dn_dir = UploadedPath & dn_dir
val_ok = Check_Path(dn_dir, fname)

If  val_ok <> "error" Then  '사용자가 다운 받는 파일과 웹서버의 파일 다운로드 경로가 맞는지 비교
    Set objStream = Server.CreateObject("ADODB.Stream") 'Stream 이용

    Response.ContentType = "application/unknown"    'ContentType 선언
    Response.AddHeader "Content-Disposition","attachment; filename=" & fname
   
    objStream.Open
    objStream.Type = 1
    objStream.LoadFromFile val_ok

    download = objStream.Read
    Response.BinaryWrite download
End If

Set objstream = nothing '객체 초기화
%>