deayzl's blog

TyphoonCon CTF [2022] Web - hidden character writeup 본문

CTF writeup/TyphoonCon CTF

TyphoonCon CTF [2022] Web - hidden character writeup

deayzl 2022. 6. 24. 19:26

문제  typo 같은 경우, 소스코드가 제공되어서 writeup 쓰기 좋았는데 이번엔 없다..

캡쳐라도 해놓았어야 했나 생각이 드는데, 시각적 자료가 그리 필요한 문제는 아니기에 글을 써본다.

 

/

그림판으로 그린 로그인 창이다.

대충 이거랑 비슷하게 생겼으니까 그냥 진행하겠다.

이 form은 username과 password 두개의 data를 받고 post request를 /auth 로 보내는 역할을 한다.

username과 password 칸에 ', ' or sleep(1)-- , ", \, %0a, %aa' 등등을 보냈는데 아무런 반응도 없었다.그래서 username=admin&username=admin&password=yeah&password=yeah' or 1=1--  이런식으로 여러개를 보냈다.

그랬더니 ER_PARSE_ERROR 가 발생했다.

 

mariadb ER_PARSE_ERROR sql syntax error near '','admin' and password='yeah','yeah\' or 1=1-- '

이런식으로 떳는데, mariadb를 쓰는 것을 알 수 있고 입력한 값이 comma로 나뉘어지면서 escape 되어 입력된 것을 볼 수 있다. (추가적으로 http 헤더에서 powered by "express" 라고 떠서 node js express 로 만든 웹사이트임을 알 수 있었다)

 

제목부터 hidden character 라길래 뭔가 어떤 특정 문자를 보내면 뚫릴지 모르겠다 싶어서, 이상한 문자들을 좀 보냈었는데 아무런 반응도 없었다.

그래서 구글링을 했고 node.js에서 unexpected value를 escape하는 것에 대한 글을 봤다.

 

Finding an unseen SQL Injection by bypassing escape functions in mysqljs/mysql | by Flatt Security Inc. | Medium

 

Finding an unseen SQL Injection by bypassing escape functions in mysqljs/mysql

It was found that unexpected behaviors in the query’s escape function could cause a SQL injection in mysqljs/mysql

flattsecurity.medium.com

 

password[password]=1

 

이런식으로 입력하면

 

password=`password`=1

 

이렇게 되고

 

(1=1)=1

 

이것과 마찬가지라는 내용인데, 이를 넘겨주니 login에 성공하게 되었다.

 

로그인에 성공하고 난 후, node js로 된 소스코드를 보여주었고

/home (이었던 것 같다) 으로 가면 http header로 토큰을 받게 된다.

그 토큰을 endpoint로 접근하면

The Invisible JavaScript Backdoor – Certitude Blog

 

The Invisible JavaScript Backdoor – Certitude Blog

The Invisible JavaScript Backdoor A few months ago we saw a post on the r/programminghorror subreddit: A developer describes the struggle of identifying a syntax error resulting from an invisible Unicode character hidden in JavaScript source code. This pos

certitude.consulting

이 포스트에 나온 소스코드가 그대로 똑같이 나오게 된다.

저기서 소개된 방식으로 한글 인코딩을 이용해서 remote code execution을 할 수 있었고,

flag 경로를 찾고 flag를 얻고 제출하면 200 포인트를 얻게 된다.

 

이 문제에 나온 인터페이스, 코드가 거의 다 여기서 소개된 것들과 똑같아서 아쉽긴 했지만 꽤 재미있었다.

'CTF writeup > TyphoonCon CTF' 카테고리의 다른 글

TyphoonCon CTF [2022] Web - Typo writeup  (0) 2022.06.24
Comments