Learning Web 13

[Web Hacking] File Download 취약점

File Download 취약점 [설명]사용자가 원래 의도된 파일이 아닌 서버의 임의의 파일을 다운로드할 수 있는 취약점. 주로 디렉터리 트래버설(Directory Traversal) 공격을 통해 발생합니다. [원인]download.php가 사용자의 입력값을 신뢰하고 직접 파일과 연결하는 것.  [해결책]  주요 해결책1. 파일 이름을 블랙리스트 기반으로 관리합니다. → 늘 그렇듯 블랙리스트는 우회 가능성이 있음.2. 파일 경로를 DB에 저장합니다. → sql injection 등 우회 가능성 남아있음. 3. 파일을 DB, NAS에 저장합니다. → 근본 해결책, 그러나 현실적으로 힘들 수 있음.  추가적인 해결책1. 다운로드할 파일의 경로를 정해진 디렉토리에서만 허용합니다.2. 사용자 입력값에서 ../등..

[Web Hacking] File Inclusion 취약점

File Inclusion 취약점  웹사이트를 만들 때, 특히 PHP로 구현하다보면 include(), require() 등의 함수로 같은 디스크의 다른 파일 또는 네트워크 너머의 파일에 있는 코드를 포함하는 경우가 있습니다. 이는 웹 애플리케이션이 더욱 강력하고 역동적이 되게 하는 대신 치명적인 risk를 유발하는데, 바로 민감한 정보를 제거하지 않은 사용자 데이터를 include()에 전달할 수 있다는 점입니다.  File Inclusion은 크게 두 가지, LFI(Local File Inclusion, 로컬 파일 인클루전)와 RFI(Remote File Inclusion, 원격 파일 인클루전) 으로 나뉩니다. 하나씩 살펴보고, 예제도 하나 풀어보겠습니다.  RFI (원격 파일 인클루전) [설명] 공..

[Web Hacking] 인증/인가 취약점

인증과 인가  인증(Authentication)  "신분증 보여주세요."그 사람 본인이 맞는지 확인하는 작업ex) 비밀번호(지식), 소지수단(핸드폰, otp) 등등 취약해지면? 인증 절차를 무시하게 됩니다.  인가(Authorization)  "출입을 허가하겠습니다."특정 권한을 부여하는 것  ex) 글을 읽는 것, 쓰는 것, 삭제하는 것, 개인 정보를 열람하는 것 등등  취약해지면? 원래는 못해야 하는 걸 할 수 있게 됩니다.  Authentication(인증) 취약점인증 취약점은 이해하기 쉽기 때문에 간단하게 핵심만 정리하겠습니다.  Case 1 : Cookie를 통해 인증하는 케이스 [문제] 로그인 후 cookie를 어떻게 처리하는지 살펴보니, 서버에서 이 쿠키값만 받고서 인증을 하고 있다. →  ..

[Web Hacking] File Upload 취약점

File Upload 취약점 정의공격자가 원하는 임의의 파일을 업로드할 수 있는 공격. 발생 원인파일을 업로드 할 때 검증 및 검사를 하지 않는 것. 발생 위치파일을 업로드할 수 있는 곳 어떤 방식으로 공격이 가능할까?피싱, deface 공격(index 파일 덮어쓰기), stored XSS 등등.. 파일 업로드를 통해서 이루어질 수 있는 공격 방식은 여러 가지를 떠올려볼 수 있으나, 통상적으로 file upload vulnerabilities 라고 함은 주로 Web Shell, 즉 서버 측 실행 파일을 업로드하여 피해자의 서버를 장악하는 것을 지칭하며, 앞으로도 이 부분에 대해서 중점적으로 다뤄볼 것입니다. 먼저 이해해야 할 것  1 : MIME type 우선 MIME (Multipurpose Inter..

[KRATOS] #1 로그인페이지를 DB와 연결하자

** 오늘의 할 일 ** 1. 메인 페이지, 로그인 페이지 디자인 시안 만들기 2. 로고 제작하기3. 메인 페이지 뼈대 만들기4. 로그인 페이지 뼈대 만들기 5. 로그인 페이지 DB 연결하기  1. 메인 페이지, 로그인 페이지 디자인 시안 만들기 우선 맥북 freeform으로 간단하게 시안을 만들어 보았다.   2. 로고 제작하기 KRATOS는 고대 북유럽의 신비를 통해 마법과 같은 커피맛을 선사하고자 하는 커피 브랜드로, 로고 역시 노르드풍의 특별함을 뽐내야만 했다. 이를 위해 본사 디자인 팀장과의 열띤 토론이 오고갔다.   팀장이 건네준 디자인 시안을 직접 그림판으로 (무려 2시간 넘게) 열심히 수정해준 뒤에야, 마침내 로고가 완성될 수 있었다.   3. 메인 페이지 뼈대 만들기  몇 가지 주요 사항..

로그인 페이지에서 SQL injection 방지 : prepared statement

로그인 페이지(login.php)를 작성하는데, 사용자 정보를 확인할 때 다음과 같은 코드를 작성한 것을 볼 수 있다.  // DB와 연결하기$servername = "localhost"; $username = "root"; $password = ""; $dbname = "my_db"; $conn = new mysqli($servername, $username, $password, $dbname);$sql = "SELECT id, password FROM users WHERE user_id = ?";$stmt = $conn->prepare($sql);$stmt->bind_param("s", $user_id);$stmt->execute();$result = $stmt->get_result(); 이는 SQL..

원격 DB (MySQL) 와 연결하기

지금 내가 쓰는 컴퓨터(macOS)로는 frontend만 다루고, 다른 컴퓨터(Linux)에 DB를 구축하고 싶었다.약간의 시행착오를 토대로, 원격지의 DB에 연결하는 방법을 정리해두었다.참고로 클라이언트 측 컴퓨터에 굳이 MySQL이 깔려있을 필요는 없다. 글은 다음과 같은 순서로 진행될 예정이다.1. 권한이 있는 사용자 만들기 2. 방화벽과 MySQL 설정3. 최종 접속 테스트 1. 권한이 있는 사용자 만들기 물론 사용자를 새로 만들지 않고, 이미 있는 사용자에게 권한을 부여할 수도 있다. 그 방법도 함께 적어두겠다. 또한, ubuntu 기준으로 작성하였으므로 참고가 되었으면 좋겠다. 먼저terminal을 실행한다. 1) MySQL 루트 계정으로 로그인한다.sudo mysql -u root -p 2)..

[IT사전] Payload란 무엇인가?

Payload - pay : 지불하는, 이익을 주는 - load : 하중, 적재물 운송업에서 기름값, 인건비 등등 빼고 남은 진또배기 '돈 되는 적재물'→ 본론, 핵심, 진짜 중요한거 → 핵심 데이터, 실제 수행되는 데이터 분야와 문맥에 따라 다르게 쓰이는 용어입니다. 일상적인 예시로, 우리가 이메일을 보낼 때 메일의 본론을 payload라고 할 수 있습니다. 최근에는 주로 네트워크 또는 보안 분야에서 사용되고 있습니다.  1. 네트워크의 HTTP 패킷에서패킷(Packet) 이라는 용어도 생각해보면 결국 화물(Package) + 덩어리(Bucket)의 합성어죠. 말하자면 이 화물 덩어리를 서버와 클라이언트와 서로 주고받는 것입니다. 이 패킷은 크게 시작 줄(Start Line), 헤더(Header)와 바..

[KRATOS] #0 밑그림 작업

연습용으로 만들기 위한 웹사이트를 구상중에 있다. APACHE, PHP, MySQL 로 개발할 것이다. 이 사이트 개발이 끝나고 여유가 된다면 다른 웹사이트를 구상하여 JSP와 ORACLE로 도전해보면 좋을 것 같다.  주제요즘 맛있는 커피를 많이 마셔보고 있으니 커피 관련 웹사이트가 재미있을 것 같고, 대충 권위있는 느낌을 주기 위해 웹사이트 이름은 KRATOS(Korea Roastery and Tasting Organization Society) 로 정했다.    페이지 구성 페이지 구성은, 스페셜티 커피 협회(SCA)나 스프러지(sprudge) 등을 참고하기로 했다. https://sca.coffee/ https://sprudge.com/ 1. HOME (홈 화면, 비로그인시 HOME 화면 말고는 ..

로그인 페이지 업그레이드

오늘의 목표 1. 구글의 다양한 예제를 참고하여 내가 만든 코드 좀 더 그럴듯하게 수정하기2. 로그인 페이지 꾸며보기 우선 로그인 페이지를 어떻게 꾸밀 것인가?처음에는 내가 좋아하는 게임 중 하나인 레드 데드 리뎀션2의 서부극 스타일로 만들어보려고 했으나,옆에서 지켜보던 남편이 귀여운 걸로 만들어달라고 하도 졸라대서 하는 수 없이 알겠다고 했다.(만드는건 난데;;)천천히 수영하던 귀여운 해달이 로그인에 성공하면 기뻐하는 모습을 만들어달란다. 음..내 수준에 그건 좀 많이 힘든 것이었기에 우선 지피티 선생님께 조언을 좀 구했다.   친절한 선생님 덕에 코드를 좀 더 깔끔하게 수정할 수 있는 방법을 많이 배웠고,내가 구현하고자 하는 것에 대한 힌트도 얻을 수 있었다. 1. 코드 수정1-1. 로그인 정보가 맞..