New my XSS scanning tool - DalFox
Hi, hackers and bugbounty hunters ๐๐ผ
Today Iโm going to talk about my new XSS tool, DalFox. Iโm sure there are a lot of bugs because itโs still under development, but Iโm going to talk it lightly now because itโs somewhat functional and has a critical bug fixed!
์ ๋ง ์ค๋๋ง์ ๊ธ์ ์ฐ๋ ๊ฒ ๊ฐ๋ค์. ๋ณ๋ช ์ ๋์ฌ๋์๋ฉด, ๊ธ์ ์ธ ์๊ฐ์ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ ๋ง์ด ์์ ๋ชป๋์ต๋๋ค. ์ค๋์ ์ ์๋ก์ด XSS Scanning ๋๊ตฌ์ธ Dalfox์ ๋ํด ์ด์ผ๊ธฐํ๋ ค๊ณ ํฉ๋๋ค.
https://github.com/hahwul/dalfox
What is DalFox
It is a tool that analyzes parameters and scans XSS just like the existing XSpear. Most of the key feature of existing specs are inherited, and the new version addresses chronic slow speed and detection issues of detection. Andโฆ there was a big change from Ruby to Go.
๊ธฐ์กด XSpear์ ๋์ผํ๊ฒ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ถ์ํ๊ณ XSS๋ฅผ ์ค์บ๋ํ๋ ๋๊ตฌ์ ๋๋ค. ๊ธฐ์กด ์คํ์ ๋๋ค์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์น๊ณํ๊ณ , ๊ณ ์ง์ ์ธ ์๋ ๋ฌธ์ ์ ํ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฒ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ . Ruby์์ Go๋ก ๋ฐ๋๋ ๋๋์ ๋ณํ๊ฐ ์์๊ตฌ์.
This is Key features ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ด ๋๋ ๋ถ๋ถ์ ์๋์ ๊ฐ์ต๋๋ค.
- ํ๋ผ๋ฏธํฐ ๋ถ์์ ๋ฐ๋ฅธ ํ์ด๋ก๋ ์ตํฐ๋ง์ด์ง (Payload Optimization according to parameter analysis)
- ์ถ์ํ๋ฅผ ํตํด ์ฝ๋ ์ฝ์ ์์น๋ฅผ ๋ถ์ํ๊ณ , ์ข ๋ฅ์ ๋ง๋ ํ์ด๋ก๋ ์ฌ์ฉ (Analyse the location of code insertion through abstraction and use Payload for the type)
- DOM ๊ธฐ๋ฐ ๊ฒ์ฆ๋ก์ง (DOM-based verification logic)
- Pipeline ์ง์ (Pipeline support)
(What you see in git is the most accurate.)
Optimazation & Abstraction
Existing XSpear used multiple testing queries, DalFox has a Badchar-based payload verification logic. This selects the query to use for the actual test based on the data obtained from the parameter testing. And we talked about the abstraction concept above, which eventually divides the code into HTML and Script areas, as shown below, identifies the injected location and uses the payload according to the location.
๊ธฐ์กด XSpear๊ฐ ๋ค์์ ํ ์คํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, DalFox๋ ์ฒ ์ ํ Badchar ๊ธฐ๋ฐ์ ํ์ด๋ก๋ ๊ฒ์ฆ ๋ก์ง์ ๊ฐ์ง๋๋ค. ๊ทธ๋์ ํ๋ผ๋ฏธํฐ ํ ์คํ ์์ ์ป์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ ์คํ ์ ์ฌ์ฉํ ์ฟผ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ ์ถ์ํ ๊ฐ๋ ์ ์ด์ผ๊ธฐํ๋๋ฐ, ๊ฒฐ๊ตญ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ HTML ์์ญ๊ณผ Script ์์ญ์ผ๋ก ๋๋๊ณ , ์ธ์ ์ ๋ ์์น๋ฅผ ํ์ ํ ํ ์์น์ ๋ฐ๋ฅธ ํ์ด๋ก๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. (์๋๋ฉด.. ์ค์ ๋ก ํ ์คํ ํ ๋๋ javascript ๋ด๋ถ ์ฝ์ ๋ ์ฝ๋์ ํ์ถ ๊ตฌ๋ฌธ์ ์ ์ธํ html๋ฅผ ์ ์ฌ์ฉํ์ง ์์ฃ )
DalFox checked HTML, Javascript, Attribute
DOM Verify
For XSpear, the Selenium driver has verified that the alert actually occurs. This is a sure way to find it, but calling the headless browser is a very slow task. The system is overloaded, especially if you want to verify a huge number of data.
XSpear์ ๊ฒฝ์ฐ Selenium driver๋ฅผ ํตํด ์ค์ ๋ก alert์ด ๋ฐ์ํ๋์ง ๊ฒ์ฆํ์ต๋๋ค. ์ด๋ ํ์คํ๊ฒ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ด์ง๋ง, headless browser๋ฅผ ํธ์ถํ๋๊ฑด ๊ต์ฅํ ๋๋ฆฐ ์์ ์ ๋๋ค. ํนํ๋ ์์ฒญ๋๊ฒ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๋ ค๋ฉด ์์คํ ์ ๊ณผ๋ถํ๋ ๋ง์ด ๊ฑธ๋ฆฌ์ฃ .
So at DalFox, we boldly threw away Selenium, and we changed it to a DOM-based verification method. If you think the actual object is inserted, you can think of it as Verify. Verified parameters do not need to be tested further, so the remaining payload queues will be passed(not testing).
๊ทธ๋์ DalFox์์ ๊ณผ๊ฐํ๊ฒ Selenium์ ๋ฒ๋ฆฌ๊ณ , DOM ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟจ์ต๋๋ค. ์ค์ Object๊ฐ ์ฝ์ ๋ฌ๋ค๊ณ ํ๋จํ๋ฉด Verify๋ฅผ ์ค๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. Verify๋ ํ๋ผ๋ฏธํฐ๋ ์ถ๊ฐ๋ก ๋ ํ ์คํ ํ ํ์๊ฐ ์์ผ๋ ๋๋จธ์ง ํ์ด๋ก๋ ํ๋ ํจ์คํ๊ตฌ์.
Pipeline
On DalFox, I paid a little more attention to the part where I got the factor value (io, file, arg) or log output so that I could fit into the pipeline in general. Basically, scan logging provides a variety of data, such as code views and actual payloads, but print only attack query it out if you with a pipeline option.
DalFox๋ก ์ค๋ฉด์, ์ ๋ฐ์ ์ผ๋ก Pipeline์ ๋ผ์๋ค์ด๊ฐ ์ ์๋๋ก ์ธ์๊ฐ์ ๋ฐ๋ ๋ถ๋ถ(io, file, arg)์ด๋ log output ๋ถ๋ถ์ ์กฐ๊ธ ๋ ์ ๊ฒฝ์ ์ผ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์บ ๋ก๊น ์์ Code view๋ ์ค์ ํ์ด๋ก๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ฃผ์ง๋ง, pipeline์ผ๋ก ์ถ๋ ฅ์ ํ์ ๊ฒฝ์ฐ์ ํ์ด๋ก๋๋ง ์ฐํ ์ ์๋๋ก ํ ๋ถ๋ถ๋ ์ด๋ฐ ๊ณ ๋ฏผ์ ๊ฒฐ๊ณผ ์ค ํ๋์ฃ .
So, just simple pipeline tip :D ์๋ฌดํผ ๊ทธ๋์.. ์ด์ ์๋์ ๊ฐ์ ํํ๋ก ๋ช ๋ น ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
cat target_list | waybackurls -no-subs | grep "https://" | grep -v "png\|jpg\|css\|js\|gif\|txt" | grep "=" | qsreplace | qsreplace -a | dalfox -pipe -blind https://hahwul.xss.ht
Finally
์๋ ๋ถํฐ ruby=>go๋ก ๋ฉ์ธ ์ธ์ด๋ฅผ ๋ฐ๊พธ๊ณ ์์๊ณ , ๋๋์ด ์ ๊ฐ ๊ฐ์ง ๊ฐ์ฅ ํฐ(์ธ๋ถ์ ์คํ๋ ๊ฒ ์ค) ํ๋ก์ ํธ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋์๋ค์. ์์ง ๋ฒ๊ทธ๊ฐ ๋ง์ด ์๊ฒ ์ง๋ง, ์ฌ์ฉํด๋ณด์๊ณ ์ข์ ์๊ฒฌ์ด๋ ๋ฒ๊ทธ๊ฐ ์๋ค๋ฉด git issue๋ก ๋ฑ๋กํด์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์ด๋ฆ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ฉด, DalFox์์ Dal์ ๋ฌ์ ๋๋ค. (and Dal of DalFox is the Korean pronunciation of moon.)
// and Fox = Finder of XSS, Haha happy hacking!