3/31/2020

Recon using fzf and other tools. for bugbounty

Hi hackers and bugbounty hunters. today, I'm going to share with you how to use fzf for bugbounty.
Sometimes when you do bugbounty, you get a lot of files. In particular, the amount of results using recon tools such as megg and gospider is beyond imagination.
때때로 버그바운티를 하다보면, 굉장히 많은 파일을 만나게 됩니다. 특히 meg, gospider 등 recon 도구를 사용한 결과의 양은 상상을 초월합니다.

hahwul@fire:~/test/bmw/out$ ll
합계 6412
drwxrwxrwx 1377 root   root    69632  3월 28 02:50 ./
drwxrwxr-x    3 hahwul hahwul   4096  3월 28 02:36 ../
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 3gio-int.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-ahag-bochum.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-ahag-coesfeld.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-ahag-duelmen.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-ahag-gelsenkirchen.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-ahg-gmbh.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-arnold.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-augsburg.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-auto-eggert.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-auto-fischer.bmw.de/
drwxr-x---    2 hahwul hahwul   4096  3월 28 01:16 ah-auto-motorrad-auer.bmw.de/
...snip...

I used one site as an example in this article, but I actually test more than 1.5 million URLs.... wtf..
이 글에선 한 사이트를 예시로 들었지만, 실제로 제가 테스트하는 URL은 150만개가 넘습니다..

오늘은 fzf를 이용하여 버그바운티 엔드포인트를 쉽게 찾는 방법에 대해 이야기할까 합니다.

What is fzf

fzf is a command-line fuzzy finer that makes it easy to retrieve large directory. This tool was made by a Korean and is close to me.
fzf는 command-line fuzzy finder 로 대량의 파일을 검색하기 용이한 cli 도구입니다. 자랑스럽게도 한국분이 만든 도구이고, 한다리 건너 아는분이다 보니 뭔가 반갑고 뿌듯하네요.

https://github.com/junegunn/fzf




How to use it for bugbounty

When you run fzf, a search window appears, such as the screen below, and you can easily find data with the keyword you want.
fzf 를 실행하면 아래 화면과 같은 검색 창이 나오며, 원하는 키워드로 쉽게 데이터를 찾을 수 있습니다.

The result of the search is the absolute path of the file.
찾는 데이터에 커서를 맞춘 후 엔터를 누르면 해당 파일의 경로를 반환합니다.

I find "test" string


$ fzf
mein-test.bmw-motorrad.de/43aa4ed4dc23df89e1b2b251e47901455d7152ee


So when you're managing data based on files, it's easy to find, and you can find the path in the following ways and use it right away.
즉 파일 기반으로 데이터를 관리할 때 이를 이용해서 쉽게 찾을수가 있는데, 아래와 같은 방식으로 경로를 찾아 바로 사용할 수 있습니다.

$ cat `fzf`
http://www.essen.mini.de:80/

> GET / HTTP/1.1
> Host: www.essen.mini.de
> User-Agent: Mozilla/5.0 (compatible; meg/0.2; +https://github.com/tomnomnom/meg)

< HTTP/1.1 302 Moved Temporarily
< Server: Apache
< Cache-Control: max-age=1800
< Expires: Fri, 27 Mar 2020 17:55:25 GMT
< Set-Cookie: visitorid=04e43517c37d000005377e5e66030000a5060000; expires=Tue, 26-Mar-2024 17:25:25 GMT
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=63072000; includeSubdomains;
< Location: http://www.essen.mini.de/de_DE/home.html
< Content-Length: 224
< Content-Type: text/html; charset=iso-8859-1
< Date: Fri, 27 Mar 2020 17:25:25 GMT

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.essen.mini.de/de_DE/home.html">here</a>.</p>
</body></html>

Pipeline-1 :: fzf + waybackurls

$ cat `fzf` | head -1 | ~/go/bin/waybackurls

< e.g >
hahwul@fire:~/test/bmw/out$ cat `fzf` | head -1 | ~/go/bin/waybackurls
http://essen.mini.de
http://essen.mini.de:80/360/index.html
http://essen.mini.de:80/7gruende/index.html
http://essen.mini.de:80/abschluss/index.html
http://essen.mini.de:80/accessories/car_care_special/index.html
http://essen.mini.de:80/accessories/championship/index.html
http://essen.mini.de:80/accessories/detergents/index.html
http://essen.mini.de:80/accessories/index.html
http://essen.mini.de:80/accessories/information/index.html

Pipeline-2 :: fzf + Burp & ZAP Scanning

fzf + burp scanning
The API provided by Burpsuite(pro) allows certain hosts to be passed to the scanning queue through fzf. Of course you have to set up the REST API before using it.
Burp에서 제공하는 API를 이용하면 fzf를 통해 특정 호스트를 스캐닝 큐로 전달할 수 있습니다. 당연히 사용에 앞서 REST API 세팅은 먼저 해주셔야하구요.



$ curl -vgw "\n" -X POST 'http://127.0.0.1:1337/v0.1/scan' -d "{\"urls\":[\"$(cat `fzf` | head -1)\"]}"

실제로 해보면...

curl -vgw "\n" -X POST 'http://127.0.0.1:1337/v0.1/scan' -d "{\"urls\":[\"$(cat `fzf` | head -1)\"]}"


hahwul@fire:~/test/bmw/out$ curl -vgw "\n" -X POST 'http://192.168.0.10:1337/v0.1/scan' -d "{\"urls\":[\"$(cat `fzf` | head -1)\"]}"
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.168.0.10...
* TCP_NODELAY set
* Connected to 192.168.0.10 (192.168.0.10) port 1337 (#0)
> POST /v0.1/scan HTTP/1.1
> Host: 192.168.0.10:1337
> User-Agent: curl/7.58.0
> Accept: */*
> Content-Length: 41
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 41 out of 41 bytes
< HTTP/1.1 201 Created
< Location: 4
< X-Frame-Options: DENY
< Content-Security-Policy: default-src 'self'; script-src 'self'; img-src 'self'; style-src 'self'; frame-src 'self'; connect-src 'self' ws://localhost:3333; font-src 'self'; media-src 'self'; object-src 'none'; child-src 'self' blob:
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Burp-Version: 2020.2.1-1699
< Keep-Alive: timeout=15
< Content-Length: 0
<
* Connection #0 to host 192.168.0.10 left intact


Added scanning

ZAP can also be easily add to scanning via za-cli or REST API.
ZAP 또한 za-cli나 REST API를 통해 쉽게 스캐닝으로 넘길 수 있습니다.
fzf + zap-cli

$ zap-cli quick-scan -s xss,sqli --spider -r -e "some_regex_pattern" $(cat `fzf` | head -1)


Pipeline-3 :: fzf + sending proxy(burp)

$ proxychains4 curl $(cat `fzf` | head -1)
hahwul@fire:~/test/bmw/out$ proxychains4 curl $(cat `fzf` | head -1)
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/i386-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.12
[proxychains] Strict chain  ...  192.168.0.10:8080  ...  www.essen.mini.de:80  ...  OK
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.essen.mini.de/de_DE/home.html">here</a>.</p>
</body></html>

Conclusion

It's a simple tool, but sometimes it's really useful.
간단한 도구이지만, 때론 정말 쓸만하게 다가옵니다. 잘 활용해서 해피해킹합시다!

Happy hacking +_+

Share: | Coffee Me:

How to solv "argument list too long: grep" error using grep

There was an unusual phenomenon in which grep did not work in a particular directory. The directory was a result of testing multiple url with a meg, and I thought it was a phenomenon that was caused by a large number of subfiles and directories, but the funny thing is that the grep works normally in the parent directory of that directory.
특정 디렉토리에서 grep이 동작하지 않는 특이한 현상이 있었습니다. 해당 디렉토리는 meg로 다수의 url을 테스팅한 결과였고, 하위 파일과 디렉토리가 많아서 발생하는 현상으로 생각했었는데, 웃긴게 해당 디렉토리의 상위 디렉토리에서 grep은 정상 동작합니다.

grep "hahwul" *
zsh: argument list too long: grep

I don't know the cause, but I'm going to write out the case that I've solved.
원인은 알 수 없지만 제가 해결했던 케이스를 정리해봅니다.

using grep on parent directory

This is an easy solution for my case. doing a grep in the parent directory. However, if you randomly specify the location of the grep, the same error will appear, which is slightly insufficient to see as a solution.
제가 쉽게 해결한 부분인데, 상위 디렉토리에서 grep을 할 시 정상적으로 됩니다. 다만 grep의 위치를 임의로 해당 디렉토리를 지정했을 경우 동일하게 에러가 나타나기 때문에 해결 방법으로 보기엔 약간 미흡합니다.

$ cd ../
$ grep -r 'i-find-this-text' *

using grep with find+xargs

There is a way to search for the names of all the files with a find, read them with a xargs, and a grep.
find로 모든 파일의 이름을 검색하고 읽어서 grep을 거는 방법이 있습니다.

find . -name "*" | xargs -n 20 grep 'i-find-this-text 
Share: | Coffee Me:

3/27/2020

MacOS 외부모니터 연결 시 색상 문제(보라색화면?) 해결방법 / Display Profile RGB 모드 강제 설정

최근에 모니터를 바꿨습니다. (역시 43인치는 모니터로 쓰기엔 좀 불편하네요. 걍 33 와이드로!)

사용하던 중 특정 맥북에서 연결 시 화면이 무조건 보라색으로 보이는 현상이 있었고, 구글링해서 얻은 정보 토대로 고쳤던 내용 간략하게 정리해둡니다. (나중에 또 이럴수도 있으니)

* 솔직히 왜 그 맥북안 이런 현상이 있는지는 모르겠습니다. 같은 맥북 프로에 똑같은 OS 버전인데....
생산년도를 타는건가.. *

TL;DR

1) root 권한 사용을 위해 보안모드 해제
2) Display mode 패치
3) 보안모드 재 활성화 및 리부팅
oneline script
# 먼저 root 권한 사용을 위해 SIP 해제 부터 진행해야합니다.

$ sudo mount -uw / ; wget https://gist.githubusercontent.com/adaugherity/7435890/raw/00ff3ead17ae77d2f1c376e90831c037b7dea7ed/patch-edid.rb ; ruby patch-edid.rb ; sudo cp -r DisplayVendorID* /System/Library/Displays/Contents/Resources/Overrides/ ; 
echo 'please reboot :D' 

원인

검색해보면 충분히 많이 나오는 내용입니다. MacOS에서 외장 디스플레이 연결 시 특정 모니터들을 TV로 인식한다고 합니다. 그러다보니 당연히 색상이나 이런 설정 부분들이 달라지게 되고 결과적으로 색감이나 동작에 문제가 생기는거죠.
MacOS가 해당 모니터를 사용할 때 TV가 아닌 일반 모니터의 설정정보를 적용할 수 있도록 강제로 프로파일을 RGB 모드로 변경하여 해결할 수 있습니다.

잠깐 봤는데도 눈이 나갈지경..


root 권한 사용을 위해 SIP 해제

SIP(System Integrity Protection)는 애플에서 MacOS 보호를 위해 만든 보안 기능입니다. 10.11 El Capitan 부터 생긴 기능이며, 여러가지 보호 기법 중 일부 중요 시스템 파일에 대한 보안 대책으로 특정 디렉토리는 root 권한이 있더라도 추가/변경/삭제할 수 없도록 바뀐거지요. 그래서 해당 디렉토리들을 수정하기 위해선 복구모드로 진입 후 SIP를 해제한 후 맥을 사용해야 가능합니다.

부팅 시 cmd+R 을 꾹 눌러주어 복구모드 진입 > 우측 상단 유틸리티 눌러서 터미널 열어줍니다.
$ csrutil disable



Cmd+R을 꾹 눌러주어 복구모드 진입




Display mode 패치

강제로 RGB Profile을 사용하도록 하기 위해선 MacOS 내 Display Profile을 수정해야합니다. 다만 능력자분이 간단하게 스크립트로 만들어두어 쉽게 모니터 종류에 따라 변경이 가능합니다.

우선 시스텝 디렉토리에 파일을 쓰기 위해선 write 권한이 포함되도록 리마운트가 필요합니다.
(기본적으로 read-only라서 해당 과정없이 진행하시면 나중에 에러가 발생합니다. 물론 그때하셔도 늦진 않습니다)

$ sudo mount -uw /

이후 코드를 받아줍니다.

$ wget https://gist.githubusercontent.com/adaugherity/7435890/raw/00ff3ead17ae77d2f1c376e90831c037b7dea7ed/patch-edid.rb
https://gist.github.com/adaugherity/7435890

루비로 만들어진 코드이며 실행해주면 디스플레이 종류에 따라 프로필 데이터를 생성해줍니다.

$ ruby patch-edid.rb

이를 /System/Library/Displays/Contents/Resources/Overrides 디렉토리로 넣어주어 디스플레이 설정을 덮어줍니다.

$ sudo cp -r /Users/hahwul/DisplayVendorID-25ce /System/Library/Displays/Contents/Resources/Overrides


자 이제 모든 과정은 끝났습니다. 재부팅해주시면 됩니다!

good! 그런데, 똑같은 버전의 맥북 중 한대만 안되는건 좀 의아하네요....


이후 SIP 재설정

SIP는 MacOS에서 보안적인 문제가 생겼을 때 한번 막아줄 수 있는 완충제 역할을 합니다. 되도록이면 활성화하고 사용하시는게 좋습니다. (보통 MacOS의 시스템 디렉토리를 건드릴일은 많이 없겠죠 뭐..)

MacOS Sierra 버전 기준으로 해당 버전 미만(El Capitan 아래)는 무조건 복구모드로 재 진입하셔서 풀어주셔야합니다.
맨 위에 해제했던 것과 동일하게 접근 후 csrutil 로 clear or enable 로 옵션을 넣어주시면 됩니다.

$ csrutil clear

or

$ csrutil enable


Sierra 버전 이후부턴 복구모드 없이 설정은 가능하도록 변경이 되었습니다. 아래 경로의 csrutil 바이너리를 실행해주시고 위와 동일하게 옵션을 주시면 됩니다.

$ sudo /usr/bin/csrutil clear

or 

$ sudo /usr/bin/csrutil enable
Share: | Coffee Me:

3/24/2020

Ways to XSS without parentheses

Introduction

Yesterday, [@garethheyes] shared a very useful technique. It's a method to bypassing parentheses using DOMMatrix, and it's a technique to refer to when you're having difficulties with existing methods. Make sure to read it!
간만에 @garethheyes 가 굉장히 쓸만한 테크닉을 하나 공유했습니다. DOMMatrix 를 이용해서 괄호 검증을 나가는 방법이고, 기존에 사용하던 방법들에 어려움이 있을 때 참고해볼만한 기법입니다. 꼭 한번 읽어보세요.!
https://portswigger.net/research/javascript-without-parentheses-using-dommatrix

x=new DOMMatrix;
matrix=alert;
x.a=45;
location='javascript'+':'+x

So today, we're going to write about ways to bypass XSS when we have tests for parentheses. I've written about each case separately before, but I'll try to collect them today.
그래서 겸사겸사.. 오늘은 이 방법과 함께 괄호에 대한 필터링이 있는 경우 XSS를 풀어나가기 위한 방법에 대해 정리해둘까 합니다. 이전까지 따로따로 글을 작성했었는데, 간만에 한 글에 모아봅시다!


Bypass technic 1 - Backtick

Backtick(''') is used for many purposes inside javascript. and you can replace parentheses.
backtick(```) 은 javascipr 내부에서 여러 용도로 사용됩니다. 그중엔 괄호를 대체할 수도 있습니다.

alert`45`

자세한 내용은 예전에 작성한 글 중 Bypass Point 3 을 보시면 될 것 같습니다 :D
https://www.hahwul.com/2017/06/web-hacking-bypass-xss-filter-with-back.html

Bypass technic 2 - location

As Garethheyes said, location is a good way to turn trigger, but it is true that the policy on location is getting tighter and narrower. There are also issues in Safari.
garethheyes 이야기대로, location은 좋은 우회방법이긴 하지만, 점점 location에 대한 정책이 강화되고 있어서 입지가 좁아지고 있는건 사실입니다. 또한 safari에서의 이슈도 있구요.

document.location="javascript:alert%2845%29"

Bypass technic 3 - throw

This is a method of putting an alert function in onerror, overwriting the value so that onerror() becomes alert() in case of an error, and forcing an error with throw to cause onerror() to be called. In conclusion, it has the same effect as alert(45). It's a good way, but it blocks a lot on WAF.
좋은 방법이긴하나 WAF에 많이 막히긴합니다. onerror에 alert 함수를 넣어주어, 에러 시 onerror()alert()이 되도록 값을 덮어쓰고, throw로 강제로 에러를 발생시켜 onerror()가 호출되게 하는 방법입니다. 결론적으론 alert(45)와 같은 효과를 내죠.

onerror=alert;throw 45

https://portswigger.net/research/xss-without-parentheses-and-semi-colons

Bypass technic 4 - XDE(XSS DOM-base Evasion)

This is XDE using location or innerHTML, ETC... The key is to find as many special characters as possible within HTML objects (if you can just insert them and write them) and configure the attack code in the DOM.
location이나 innerHTML 등을 이용한 XDE입니다. 핵심은 HTML Object 내에서 특수문자를 최대한 찾아(삽입할 수 있는 경우엔 그냥 넣고 쓰면 됩니다) DOM안에서 공격코드를 구성하는 방법입니다.

NAME: <input type="text" id="v1" value="z<iframe ">
PHONE: <input type="text" id="v2" value=" src=javascript:alert(45)><">
DESC: <input type="text" id="v3" value="/iframe>">

<script>
document.body.innerHTML=window.v1.value+window.v2.value+window.v3.value;
</script>

https://www.hahwul.com/2016/05/web-hacking-xdexss-dom-base-evasion.html

P.S
The name XDE is just a word I made for easy talking. You don't have to worry.
XDE란 이름은 그냥 제가 편하게 부르려고 지은거니 신경안써도 됩니다.

Bypass technic 5 - DOMMatrix

The long-awaited DOMMatrix. If you look at the attack code first, it's as below.
대망의 DOMMatrix입니다. 우선 공격코드부터 보면 아래와 같습니다.

x=new DOMMatrix;
matrix=alert;
x.a=45;
location='javascript'+':'+x

If you create a DOMMatrix object, insert an alert function into the matrix object and pass it along with the javascript syntax in the location, as a result, the x variable contains matrix (45,0,0,1,0,0) which is the same as alert(45,0,0,0) because you put an alert in the matrix.
DOMMatrix 객체를 만들고, 해당 객체(matrix)의 원형에 alert을 넣고 location에 javascript 구문과 함께 넘겨주면, 결과적으로 x 변수에는 matrix(45,0,0,1,0,0) 이 들어가며, 이는 matrix에 alert을 넣었기 때문에 alert(45,0,0,1,0,0) 와 동일하게 동작합니다.

javascript:matrix(45, 0, 0, 1, 0, 0)
$ matrix
ƒ alert() { [native code] }


Conclusion

Bypassing XSS with javascript is awesome. If you use the DOM object or Javascript characterization well, you can bypass special characters that are difficult to use, and trigger XSS.
javascript 를 이용한 방법은 정말 끝도 없습니다. DOM 객체나 Javascript의 특성적인 부분을 잘 이용한다면 사용하기 어려운 특수문자들을 우회하여 결국 XSS까지 이뤄질 수 있겠죠.

Happy hacking!
부디 이 글로 막히던 XSS가 뚫리긴 바랍니다. 해피해킹!

Reference

https://portswigger.net/research/javascript-without-parentheses-using-dommatrix
https://www.hahwul.com/2017/06/web-hacking-bypass-xss-filter-with-back.html
https://www.hahwul.com/2016/05/web-hacking-xdexss-dom-base-evasion.html
https://portswigger.net/research/xss-without-parentheses-and-semi-colons
Share: | Coffee Me:

3/22/2020

Find S3 bucket takeover , S3 Misconfiguration using pipelining(s3reverse/meg/gf/s3scanner)

Hi hackers! Today, i'm going to talk about easy-to-find methods using S3 Bucket takeover and Misconfiguration (Write/Read...).
오랜만에 글을 쓰는 것 같네요. 요즘 코로나19로 인해 재택근무를 한달넘짓 한 것 같은데, 평소보다 일을 더 많이하게 되는 것 같습니다. 덕분에 블로그에 약간 소흘했던 것 같은데요, 다시 가다잡고 글 작성해봅니다. 오늘은 S3 Bucket takeover와 Misconfiguration(Write/Read, etc..) pipelining을 이용하여 쉽게 찾는 방법들에 대해 이야기하려고 합니다.

What is pipelining

As defined in the wikipedia, the result of a particular command or tool is often used in build scripts, distributions, and so on, hackers automate a lot of testing.
위키에 정의된 내용과 같이 특정 명령이나 도구의 결과가 다음 도구의 인풋이 되는 것을 의미하는데요, 보통 빌드스크립트, 배포등에 많이 사용되고 해커들 또한 이를 통해 굉장히 많은 테스팅 부분을 자동화하여 사용합니다.
https://en.wikipedia.org/wiki/Pipeline_(computing)

e.g (nmap 스캔 결과를 msf로 밀어넣음)
nmap -PN {target-address} | msf_db_importer 

저의 경우엔 사실 별로 중요시하지 않던 부분이였는데(그냥 버프키고 한땀한땀..), 유명 해커들(톰놈놈, 남섹 등등)이 사용하는 방법들을 보고 약간 후회하며 급히 자동화 부분에서 많이 개발을 진행했던 것 같네요..

제 트윗을 보면.. 작년부터 이런 파이프라인에 대한 글이 좀 많을겁니다..
find subdomain takeover
https://twitter.com/hahwul/status/1228364474282733568
https://www.hahwul.com/2019/10/find-subdomain-takeover-with-amass-and-subjack.html

naabu + httprobe + meg
https://twitter.com/hahwul/status/1236335091044855808

등등...

Tools to Use Today

s3reverse
https://github.com/hahwul/s3reverse

meg
https://github.com/tomnomnom/meg

gf
https://github.com/tomnomnom/gf

s3scanner
https://github.com/sa7mon/S3Scanner

Find S3 bucket takeover

https://twitter.com/hahwul/status/1236334555000274944
First, create a host file. Read the tweet above to create a list of http services based on multiple targets through the pipeline.
먼저 hosts 파일을 하나 만들어줍니다. 위에 트윗을 잘 읽어보면 파이프라인을 통해 다수의 타겟을 기반으로 http 서비스의 리스트를 만들 수 있습니다.

$ cat hosts
www.hahwul.com:80
www.hahwul.com:443
www.google.com:443
www.google.com:4435
...


meg를 통해 get 요청을 발생시키고 이에대한 결과 중 gf로 s3 주소 리스트를 뽑아냅니다. 이 때 뽑히는 주소는 path-style, virtual-hosted style, s3 url 등등 여러가지 패턴이고 s3reverse를 통해 한가지 포맷으로 치환할 수 있습니다. -verify 옵션의 경우 현재 버킷의 상태를 읽어옵니다.

$ meg -d 1000 -v / ; cd out ; gf s3-buckets | s3reverse -verify | grep NoSuchBucket > takeovers

Find S3 Misconfiguration

$ meg -d 1000 -v / ; cd out ; gf s3-buckets | s3reverse -tN > buckets ; s3scanner buckets

Pipelining!!!

$ subfinder -d {target} >> domains ; assetfinder -subs-only {target} >> domains ; amass enum -norecursive -noalts -d {target} >> domains ; naabu -silent -hL {target} | httprobe | tee hosts ; meg -d 1000 -v / ; cd out ; gf s3-bucekts | s3reverse -verify

Reference

https://twitter.com/hahwul/status/1236209674799558657
https://twitter.com/hahwul/status/1228364474282733568
https://www.hahwul.com/2019/10/find-subdomain-takeover-with-amass-and-subjack.html
https://github.com/hahwul/s3reverse
https://github.com/tomnomnom/meg
https://github.com/tomnomnom/gf
https://github.com/sa7mon/S3Scanner
Share: | Coffee Me:

3/07/2020

Recon with waybackmachine. For BugBounty!

I'm busy with work these days, so I think I'm writing in two weeks. (Actually, I couldn't write it because I was tired. LOL)
Today I'm going to share a tip that I used a lot on bugbounty.
요즘 일로 인해 바빠서 거의 2주만에 글을 쓰는 것 같습니다. (사실 피곤해서 못썼어요..ㅋㅋ)
오늘은 내가 버그바운티에서 자주 사용하던 팁 하나를 공유하려고 합니다.

This is an endpoint analysis using waybackmachine from archive.org.
archive.org 의 waybackmachine을 이용한 endpoint 분석 방법입니다 :)


What is waybackmachine?

Waybackmachine is a site where you can view changes in web pages year by year based on records collected from the web.
This allows you to see the pages and changes that existed at the end of each day.
waybackmachine은 웹에서 수집된 기록을 토대로 년도별로 웹 페이지의 변화를 볼 수 있는 사이트입니다.
이를 통해서 각 서비스들의 옜날 존재했던 페이지들이나 변화를 볼 수 있죠.

https://web.archive.org/web/sitemap/https://www.hahwul.com

도메인을 바꾼 2016년 이후 데이터는 모두 누적되어 있네요 :)


It's usually used for human curiosity, but it's a slightly different tool for collecting information from a bugbounty perspective.
보통은 사람의 호기심으로 사용하겠지만, 버그바운티를 하는 입장에선 약간 다른 정보 수집 도구가 됩니다.

Recon with waybackmachine(for bugbounty)

The important function we need to see is sitemap.
우리가 중요하게 봐야할 기능은 sitemap 입니다.

waybackmachine => input target site => sitemap

It provides visualization of the crawling data on the site, and shows changes in the year.
For example, let's look at hackerone.com.
여기에는 해당 사이트의 크롤링 데이터를 시각화해서 보여주게 되어있으며, 년도별로 변화를 알 수 있습니다. 예를들어... hackerone.com을 보겠습니다.



By default, a list of pages exists inside a circular graph, and the more you go outside, the more detailed the page is.
It depends on the service, but sometimes the old pages are alive because of compatibility or a person's mistake. Such pages are old and can be security-sensitive, making them a good prey from hunters.
기본적으로 원형 그래프 내부에는 페이지의 리스트가 존재하며, 내부에서 바깥으로 나갈수록 디테일한 페이지입니다.
서비스에 따라 다르겠지만, 호환성이나 담당자의 실수로 인해서 구형 페이지가 살아있는 경우가 있습니다. 그러한 페이지는 오래되었고, 보안적으로 취약할 수 있어 좋은 먹잇감이 됩니다.


How to embed and use on your page

waybackmachine url is so simple

https://web.archive.org/web/sitemap/https://hackerone.com
https://web.archive.org/web/[function | e.g sitemap]]/{url}

<iframe style="width:80%;height:600px;" src="https://web.archive.org/web/sitemap/https://hackerone.com"></iframe>


How using Rawdata from waybackmahcine

There's one more thing you can do. It's using the API of the waybackmachine, and you can get the original data from the graph at the request below.
활용할 수 있는 방법이 하나 더 있습니다. 바로 waybackmachine의 API를 이용하는건데요, 아래 요청으로 그래프의 원본 데이터를 받아올 수 있습니다.

https://web.archive.org/web/timemap/json?url=hackerone.com/&fl=timestamp:4,original,urlkey&matchType=prefix&filter=statuscode:200&filter=mimetype:text/html&collapse=urlkey&collapse=timestamp:4&limit=100000




Data in response can be parse. and using other tools. it is array!
Response 내 데이터는 Array로 파싱해서 사용하면 다른 도구에 쉽게 연동할 수 있습니다.

< Request >
GET /web/timemap/json?url=hackerone.com/&fl=timestamp:4,original,urlkey&matchType=prefix&filter=statuscode:200&filter=mimetype:text/html&collapse=urlkey&collapse=timestamp:4&limit=100000 HTTP/1.1
Host: web.archive.org
....snip..


< Response >
[["timestamp:4","original","urlkey"],
["2005","http://www.hackerone.com:80/","com,hackerone)/"],
["2009","http://www.hackerone.com:80/","com,hackerone)/"],
["2014","https://hackerone.com/","com,hackerone)/"],
["2015","https://hackerone.com/","com,hackerone)/"],
...

Conclusion

별거 아니지만, 잘 활용한다면 생각보다 괜찮은 결과를 얻어낼 수 있습니다! 해피해킹!

happy hacking!! 

Share: | Coffee Me:

2/26/2020

Using the Flat Darcula theme(dark mode) in ZAP!!(dev version)


Today I just saw a nice tweet from Simon.
It was about ZAP's Dark Mode support. I did a light retweet, i listen it's already commited and ready to use.
So it hasn't been included in the Weekly version yet, but I'll try it in advance.
트위터를 보던 중 사이먼의 어마어마한 트윗을 보게되었습니다..
바로 ZAP의 Dark 모드 지원에 대한 이야기였는데요. 가볍게 리트윗했더니 이미 commit 된 내용이고 바로 사용해 볼 수 있다고 합니다.
그래서 아직 Weekly 버전에도 반영되지 않았지만, 미리 체험해보기로 하겠습니다.


Commit?

I think this commit is a code for a new theme.
아마 이 커밋인 것 같네요.

https://github.com/zaproxy/zaproxy/commit/53679ebc57e00b79da2f8f012e4059423e77ca78

Pulling and Build ZAP

$ git pull -v 


Build to weekly version
Weekly로 빌드해줍시다.

$ ZAP_WEEKLY_ADDONS_NO_TEST=true ./gradlew :zap:prepareDistWeekly && \


ZAP 빌드 경험이 있다면 아시겠지만.. 매우 느려요 (very slow..)

Once the build is complete, results will be generated in the path below.
빌드가 완료되면 아래 디렉토리에 생성됩니다.


$ cd zap/build/distFilesWeekly


Run ZAP!
ZAP을 실행해줍니다.

$ ./zap.sh


Change Look and feel! Options > Display > Look and Feel
Options > Display > Look and Feel 에서 바꿔줍시다.




and reboot ZAP!

오 만족스럽네요!

https://i.giphy.com/103liSxCY1NpLO.gif




Share: | Coffee Me: