• writeup

    ASIS 2019 Final – Trust Zone

    서버에 접속하면, 먼저 링크가 하나 주어집니다. 접속하면 문서 내용이 표시되는데, 특별한 내용은 없습니다.인자의 URL 부분을 퍼징해 보면 앞의 http://66.172.33.59/ 와 끝의 .doc 에 static 한 비교를 수행하고 있다는 것을 알 수 있습니다.어느 한 부분이라도 만족하지 못하면, Security Error 를 반환합니다. http://66.172.33.59/.doc 을 URL 에 넣어 확인해 보면이 처럼 디렉토리 리스팅이 되는 것을 확인할 수 있습니다. 정리해보면, 내부 웹 서버 구조는…

  • docs

    Prototype Pollution to RCE

    Prototype pollution 은 객체 기반 스크립트 언어라는 자바스크립트 특이성으로 인해 발생합니다. 따라서 Nodejs 등 자바스크립트 엔진 기반 서버에서 존재하는 취약점입니다. 자바스크립트의 자료형은 prototype 속성을 포함하는데 특정 객체 / 클래스의 prototype 데이터의 변조가 가능하다면 이후 그 객체의 생성자를 통해 새로운 인스턴스를 생성 할 때에 참조하는 프로토타입 객체의 속성이 변경됩니다. 위처럼 특정 객체 클래스의 인스턴스의 __proto__ 속성을 추가해 주는 것으로 다음 생성될…

  • writeup

    Seccon 2019 – SPA

    Vue로 구성된 XSS 문제입니다.소스는 긴 편이지만, 취약한 부분이 보이지 않았기에문제에서 사용하는 jQuery 함수에 대해 검색해 보았고, 정답을 찾을 수 있었습니다. jQuery의 getJSON 함수는 인자로 전달되는 url에서 callback 파라미터가 ? 으로 지정되어 있을 때, ?을 jQuery34107409498085120296_1571575807022 와 같은 랜덤 문자열으로 치환하여 전송합니다.이는 jsonp 에 대응하기 위해서 존재하는 부분인데, 이러한 상황에서 jQuery 는 가져온 문자열을 스크립트로 해석하여 실행합니다.hash 를 통해, 서버에 전달되는…

  • writeup

    Seccon 2019 – fileserver

    플래그를 랜덤 이름의 디렉토리에 보관하고 있습니다.본 문제를 해결하기 위해서는, 먼저 %00을 이용하여 /tmp/flags/ 디렉토리를 리스팅해 폴더명을 확인하고, 정규식을 사용해 파일을 읽으면 됩니다. Index /tmp/flags Ruby의 Dir.glob 함수에서는, 인자로 전달된 문자열에 널 바이트가 포함되어 있으면, 널바이트를 포함하여 이전 문자를 모두 무시합니다.따라서 위와 같은 url을 호출하면 앞의 . 이 무시되므로, /tmp/flags 폴더를 리스팅 할 수 있게 됩니다. Read Flag Ruby의 Dir.glob 함수에서…

  • writeup

    Hitcon 2019 – bounty-pl33z

    hitcon 2019 에서 출제된 xss 문제로 알려진 풀이는 두가지입니다. Intended Solution 오렌지가 공개한 의도된 풀이로 --> 문자를 사용해 해결하는 방법입니다.다만 --> 를 문자열 직후에 넣는다면, -- 가 postfix 연산자로 해석되어 Invalid left-hand side expression in postfix operation 오류를 발생시키므로 crlf 등을 통해 개행 처리를 해 주어야 합니다.일반적인 화이트 스페이스는 필터링 되어 있지만, \u2028, \u2029 등을 통해 대체할 수 있습니다. 이외에…

  • docs

    Redis SSRF

    redis는 인메모리 캐시 서버로 데이터를 메모리에 보관하기에 상당한 성능을 보입니다. 기본 설정에서 6379번 포트를 사용하고, 수신된 명령어를 라인 단위로 수행합니다. redis는 http 프로토콜을 지원하고 있지 않으므로 gopher 등을 이용하여 ssrf를 유발해야 합니다. 예외적으로 request method 를 자유롭게 수정 가능하거나 첫 라인에 CRLF Injection이 가능한 경우 http 요청을 통해서도 발생할 수도 있습니다. redis 버전에 따라 http request 의 첫 라인과 같이…

  • writeup

    PwnThyBytes CTF – Baby sql is not baby anymore

    PHP의 session.upload_progress 에 관한 문제입니다.기본 상태에서 활성화 되어있는 session.upload_progress 옵션은, session_start 함수의 실행 없이 $_SESSION 변수가 설정될 수 있도록 합니다. 문제의 index.php 에서는 내부 변수들에 대해 필터링 과정을 거친 후, templates 폴더 내부의 스크립트를 참조하는 방식으로 구성됩니다. /templates/login.php 페이지 등은 최상단에서 isset($_SESSION) 구문으로 하여금, 페이지의 직접 참조를 방지하고 있습니다.index.php 페이지를 통해 참조될 때에는 session_start 로 인해 $_SESSION 가 설정된다는 점을…

  • writeup

    BSides Delhi CTF – Eval Me

    LD_PRELOAD + Imagick ffmpeg 을 통한 disable_functions bypass 문제입니다.자유롭게 PHP 코드 실행이 가능한 상태입니다. 대부분 필수 함수들이 필터링 되어 있지만putenv 사용이 가능하므로 LD_PRELOAD 에 모듈 탑재가 가능하고copy 함수를 사용해 컴파일된 모듈 파일을 복사할 수 있습니다. 위 코드를 통해 서버로 모듈을 업로드 하고 명령을 실행할 수 있습니다. file 함수를 사용해 결과를 확인할 수 있었습니다. 익스플로잇에 사용한 모듈의 소스코드는 다음과 같습니다.

  • writeup

    Lord of SQL Injection(LOS) Complete Solution

    The Lord of the SQLI : The Fellowship of the SQLI, 2019 https://los.rubiya.kr/ 정도원(rubiya) 님이 운영하시는 LOS 워게임의 문제 풀이입니다. 1. gremlin 최소한의 필터링만 적용된 기본형의 문제입니다.싱글쿼트를 넣어주는 것으로 간단하게 우회할 수 있습니다. 2. cobolt 이전 문항과 거의 다르지 않습니다.싱글쿼트을 삽입하고 뒷부분을 한 줄 주석으로 처리해 주면 우회가 가능합니다. 3. goblin 쿼트가 필터링 되어있어 통상적인 방법으로는 문자열을 삽입할 수 없지만mysql…