웹해킹 4 (file upload vulnerabilities)
file upload vulnerabilities
1. 원인 : 웹 서버가 파일 이름, 유형, 내용, 크기 등의 유효성 검사를 제대로 하지 않고 사용자가 파일을 업로드하도록 허용하는 경우 발생
2. 실습1 (Remote code execution via web shell upload)
일단 php파일을 업로드하면 해당 파일의 내용이 실행?되는건지 아니면 서버에서 코드를 바로 인식해서 이를 응답하는 건지 모르겠음.



일단 이걸로 답을 제출해서 문제는 풀었는데, 하단은 추가 공부 내용.
POST를 한다고 php파일이 바로 실행되는 것은 아님.
- 일반적인 과정
1. 파일이 실행되는 시점 : 보통 업로드된 경로로 GET 요청 보냈을 때
1) Upload(POST) : php파일을 특정 경로에 저장|
2) Request(GET) : 해당 경로 URL로 접속(ex. www.test.com/path/test.php)
3) Excution(server-side) : 웹서버(nginx등)가 .php를 확인하고 php 인터프리터로 넘겨 실행됨
4) Response : php가 실행된 결과가 HTML 응답에 담겨 전달됨.
- 예외의 경우
1) 이미지 처리 라이브러리 : 프로필 사진 등 서버가 자동으로 리사이징 하면서, 파일 내부의 메타데이터나 특정 구조를 건드리다가 취약점 발생
2) 바이러스 스캔 : 서버가 파일 검사하기 위해 파일 열거나 명령어 수행 시
난 URL 접속하지 않았는데, GET 요청이 바로 뜬 이유가 burp suite 프로그램 특성 덕분 같음. target에 디렉토리 뜨는거 때문 같음.
실제 솔루션에서는 POST 요청과 GET 요청을 각각 Repeater에 넣고 post 내용을 직접 수정해서(로컬에서 파일 생성 안하고) php 코드 입력하고, GET요청을 해당 경로로 함.
결론 : php 파일같은건 업로드 막자
3. 실습2에 대한 배경지식
MIME 유형이라고 파일 업로드같은거 할 때 content-type 유형 맞는지 확인을 할 수 있음.
ex. 이미지 파일 원하면 <image> 같은 태그(헤더값)가 있어야함.
근데 image/png나 image/jpg 같은 헤더값을 burp suite는 속일 수 있음..
따라서 실제에서는
이에 대한 추가적인 확인 절차가 필요할 수도.4. 실습 2 (Web shell upload via Content-Type restriction bypass)

실습1과 비슷하게 파일 업로드 해보고 저장 위치 찾고, php 내용을 post하면 됨.
대신 이번엔 post내용을 직접 수정(burp suite의 repeater 사용)해서 내용 보냄.. 실습1이랑 이후 동일
OS command injection
1. 정의 : 웹 애플리케이션의 입력값을 조작하여 서버의 시스템 명령어를 임의로 실행하는 공격 기법
2. useful commands

3. 실습 (OS command injection, simple case)
모르겠어서... 솔루션 봄.. ㅠㅜ
파라미터 값에 1|whoami 라고 입력하고 post 하는 것이었다. 나는 계속 1&whoami 라고 쳤음...
gemini로 알아보니 '파라미터변수X=1&whoami' 라고 치게 된다면 파라미터변수가 X와 whoami라는 것 두 개가 있는 것으로 인식이 된다고 함. 따라서 'X=1%26whoami' 라고 입력해야함. 이렇게 하니 X=1도 인식이 되고, whoami 명령어도 인식이 되는 것을 확인할 수 있었음.
| 가 동작하는건.. 뭐 대충 알거 같음. 근데 실무에서는 |, ||, ; 등 다양한 것을 입력한다고 하니까 보안적으로 더 신경써야할 듯?
SQL injection
해당 내용은 내가 이미 잘 알고, 실습도 어려운 것 없었음...
단어 정리
without sufficiently validating things 충분한 검증 없이...
fairly 꽤, 아주
inherently 본질적으로
robust 건장한
validation 확인
deploy 배포하다
unrestricted 무제한
perspective 관점
trivial 하찮은
exfiltrate 유출하다
versatile 변하기 쉬운
compromise 타협(하다), 절충(하다) & 손상시키다, 위태롭게 만들다(뜻이 정반대인게 같이있냐 외우기 힘들게)
retrieve 검색하다
Subvert 전복시키다(파괴하다)