워게임/HackTheBox

[HackTheBox] Neonify - 웹해킹 / SSTI / Ruby

SecurityMan 2023. 7. 26. 11:00

 

HackTheBox에서 제공하는

 

EASY 난이도의 웹해킹 문제

 

Ruby 로 개발된 웹페이지에 대한 SSTI 취약점과 관련된 문제이다.

 

반응형

 

 

문제 소스파일과 함께

 

문제페이지 주소가 주어진다.

 

문제 페이지에 들어가면

 

Ruby로 개발된 것을 어필하는듯 빨간 보석들이 보이고

 

중간에 입력할 수 있는 칸이 하나 보인다.

 

 

웹 페이지의 기능은

 

사용자가 입력한 텍스트를

 

아래쪽에 네온 효과를 줘서 출력시키는 것이 전부이다.

 

 

처음엔 SSTI 관련 문제인지 모르고

 

XSS 페이로드를 테스트 해보고자

 

<script> 를 입력해 보았다.

 

그랬더니 Malicious Input Detected 라는 문구가 출력된다.

 

class NeonControllers < Sinatra::Base

  configure do
    set :views, "app/views"
    set :public_dir, "public"
  end

  get '/' do
    @neon = "Glow With The Flow"
    erb :'index'
  end

  post '/' do
    if params[:neon] =~ /^[0-9a-z ]+$/i
      @neon = ERB.new(params[:neon]).result(binding)
    else
      @neon = "Malicious Input Detected"
    end
    erb :'index'
  end

end

 

그래서 같이 제공된 소스코드를 확인해 봤더니

 

입력칸에 /^[0-9a-z ]+$/i 라고 정규식을 걸어놓은것을 봤다.

 

0부터 9까지, a 부터 z까지, 스페이스바를 제외한 다른 입력은

 

Malicious Input 으로 취급받게 된다.

 

https://st98.github.io/diary/posts/2017-12-08-harekaze-ssti-problem.html

 

Harekaze 内で出題した SSTI 問の解説

これは Harekaze Advent Calendar 2017 の 8 日目の記事です。

st98.github.io

 

이것저것 검색해보다가

 

어느 일본분의 블로그에서 힌트를 발견했다.

 

입력값에 %0A를 넣으면 정규식을 우회 가능하다는 것이다.

 

 

curl을 이용해 문제 페이지에 요청을 보내보았다.

 

1%0Apwn@ 이라고 파라미터를 전달했는데

 

원래라면 필터링 되어야할 골뱅이가

 

응답에서 보이는것을 확인했다.

 

우회가 된다는 뜻이다.

 

 

다음으로 SSTI 국룰인 7*7 을 보내보았다.

 

파라미터가 URL 인코딩 되어있는데

 

 

이런 의미이다.

 

<%= 7*7 %> 라고 보낸것이다.

 

응답 패킷을 보면 7*7이 계산되어서

 

49가 출력되는것이 보인다.

 

SSTI 취약점이 존재한다는 것이다.

 

 

한번 시험삼아 /etc/passwd 파일도 뽑아봤다.

 

File.open('/etc/passwd').read 해주면 된다.

 

역시나 잘 되는것을 볼 수 있다.

 

 

플래그는 그냥 flag.txt 에 있었다.

 

아까 /etc/passwd 부분만 바꿔주면

 

플래그의 내용을 확인할 수 있다.

반응형