본문 바로가기

Web

[DEV] chromedriver를 이용한 XSS 봇

내가 예전에 만들었던 문제는 단순히 한 가지 스크립트 구문만 주어주고 해당 구문을 필터링시켜 해당 구문을 우회시키는 방법의 문제를 출제했었다.

 

 

단순히 php 페이지에 bypass된 페이로드를 입력하게 하고 결과가 문제와 정확히 일치하면 플래그를 뱉는 문제였다.

 

왜 reflected방식만 고수했냐면 stored 방식의 XSS문제를 만들기엔 DB를 이용해야 하고 또한 특정 아이디가 아닌 유저들이 많이 들어와서 풀기 때문이기도 했다. 그리고 문제를 만드는 시간이 너무 촉박했었다.. 잘 생각하면 충분히 만들 수는 있을 것이라 본다..

 

그래서 그동안 XSS문제에 대한 한계에 부딪히고 있던 중 드림핵 문제의 소스코드에서 chromedriver를 이용해 reflected를 유도하는 것을 알 수 있었다.

 

스포일러가 될 수 있어 문제의 정보는 적지 않지만 관련 소스코드를 응용해 쉽게 구현할 수 있었다.

 

from selenium import webdriver

options = webdriver.ChromeOptions()
for _ in ['headless', 'window-size=1920x1080', 'disable-gpu', 'no-sandbox', 'disable-dev-shm-usage']:
    options.add_argument(_)
driver = webdriver.Chrome('/Users/Alona/chromedriver',options=options)

driver.get(f'https://kong.alonalab.kr/xss.php?xss=[페이로드]')

 

먼저 이 크롬드라이버는 크롤링에서 많이 쓰이는 selenium에서 webdriver를 로드하여 사용한다.

크롬 이외에도 파이어폭스, 엣지, IE, 블랙베리, 안드로이드 등 여러 가지 브라우저를 제공하는 것을 알 수 있다.

 

 

 

물론 위 예제는 파이썬 기반이므로 다른 언어를 사용할 때에는 webdriver를 제공해주는 다른 수단을 사용해야 할 것 같다.

https://github.com/php-webdriver/php-webdriver/wiki/ChromeDriver

 

php-webdriver/php-webdriver

PHP client for Selenium/WebDriver protocol. Previously facebook/php-webdriver - php-webdriver/php-webdriver

github.com

위 repository를 보니 데몬방식으로 구동 후 접근할 수 있게 하는 것으로 보인다.(해보지는 않았다)

 

결론은 문제를 어떻게 짜느냐에 따라 다르겠지만 webdriver를 통해서 stored 방식의 문제도 응용하여 만들 수 있을 것 같다.

 

추후 가상머신에 구축하여 Stored 문제를 한번 만들어봐야겠다.