본문 바로가기

Dreamhack/Web

[Dreamhack] BISC board

반응형

이번엔 BISC board 문제를 풀어볼 거다.

 

웹페이지 정찰

 

먼저 접속을 하면 아래와 같이 로그인을 하라고 alert이 뜬다.

웹페이지 접속 후 뜨는 화면

 

그러면 아래와 같이 /login 페이지가 나오는데 계정이 없으니 ID: 1111 PW: 1111로 회원가입 후 로그인 해보겠다.

 

/login 페이지

 

로그인하면 아래와 같이 글 목록 페이지가 나온다.

 

로그인하면 나오는 글 목록 페이지

 

Write 버튼을 눌러서 글쓰기도 가능하다.

 

XSS가 될까 싶어서 아래처럼 글을 써봤는데 XSS는 안 통하는 것 같다.

 

XSS 시도

 

 

글을 수정할 때도 XSS는 없는 것 같아 코드를 보고 문제를 풀어보겠다.

 

코드 확인

 

먼저 app.js 코드를 봤는데에 계정 정보가 하드코딩 돼있었다.

var accounts={"BISC2023":"TeamH4C"}

 

그 다음 views 디렉터리를 봤는데 아래와 같은 파일 들이 있었다.

views 디렉터리 파일 내용

이걸로 해당 서버는 pug 템플릿을 쓰는 것을 알 수 있었다.

 

app.js에 /login 라우트 부분을 봤다.

app.js /login 라우트 부분

 

이걸로 일단 bisc2023 계정은 admin 계정이란 것을 알 수 있었고 로그인 시 id를 소문자로 변환 후 bisc2023와 비교 후 일치하면 'u r not admin'이라는 alert이 뜨면서 다시 로그인 페이지가 뜨는 것을 확인할 수 있었다.

 

그리고 app.js의 /edit 라우트가 있는데 내용은 아래와 같다.

 

app.js /edit 라우트 부분

 

여길 보면 게시글을 수정할 때 id가 BISC2023일 경우 pretty 설정이 가능한 것을 확인할 수 있다.

 

취약점 확인

 

Google에 html pug vuln을 검색하면  CVE-2021-21353이 검색된다.

 

Google에 html pug vuln을 검색한 결과

해당 취약점 내용은 아래와 같다.

취약점 내용은 [여기](https://www.piolink.com/kr/service/Security-Analysis.php?bbsCode=security&vType=view&idx=67&page=4)에서 가져왔다.

CVE-2021-21353의 내용

 

즉, 템플릿 엔진이 pretty 옵션을 처리하는 과정에 결함이 있어, 템플릿 내에 Mixin 호출 코드가 포함되어 있다면 이를 통해 RCE 공격을 수행할 수 있다. 해당 취약점은 Pug 3.0.0 버전에 존재하며, 패치되지 않은 3.0.1 미만 버전에서 유효하다.

 

그럼 bisc2023 계정으로 로그인한 후 글 수정 때 pretty 옵션에 임의 코드를 넣어서 rce를 일으킬 수 있다.

 

Exploit

먼저 BISC2023 계정으로 로그인해야 되는데 문제는 id를 소문자로 바꾼 후 bisc2023 문자열과 비교하여 "u r not admin"이라고 하면서 로그인이 안 되는 것이다.

 

이건 터키어 우회로 가능하다.

 

ID: BıSC2023 PW: TeamH4C를 입력하면 BISC2023 계정으로 로그인이 가능하다.

BISC2023 계정으로 로그인 성공

 

아무 게시글이나 누른 후 edit을 누른다.

이 때 나는 burp suite를 이용해서 request를 잡았다.

아래는 그 화면이다.

 

edit을 누른 후 burp suite 화면

 

여기에 pretty 옵션을 추가해서 github에서 발견한 poc 코드를 넣는다.

 

poc 코드를 pretty에 추가해서 넣은 모습

 

그리고 request를 전송하면 된다.

 

그런데 flag 값이 튀어나오지 않았다.

 

flag 값이 없는 모습

도저히 이유를 모르겠어서 ai한테 물어봤더니 exec는 비동기 함수라 execSync를 써야되고 flag 값을 화면에 뿌리기 위해 throw를 써야한다는 것이었다. 그래서

');throw process.mainModule.require('child_process').execSync('cat /flag.txt').toString();_=('

 

이 코드를 다시 pretty에 넣어주고 요청을 보냈다.

 

페이로드 수정 후 burp suite 모습

그렇게 했더니 깔끔하게 flag 값이 나온 것을 확인할 수 있었다.

 

flag값 출력

flag: BISC2023{C97AA493EB8C29FE438C829C0B99E96714928568}
반응형

'Dreamhack > Web' 카테고리의 다른 글

[Dreamhack] phpmyredis  (0) 2025.11.24
[Dreamhack] PATCH-1  (0) 2025.08.20
[Dreamhack] chocoshop  (0) 2025.08.13
[Dreamhack] Safe Input  (0) 2025.04.17