WEB/PHP(27)
-
PHP 게시판 제작 - 파일 다운로드
저번에는 파일을 업로드 했습니다. 이제 업로드 한 파일을 다운로드 해 봅시다. 다운로드를 하기 전, 게시판에서 어떤 파일을 올렸는지 확인이 필요합니다. 1번 게시글에서는 index.png를 올리고 2번 게시글에서는 myphoto.png를 올렸다고 생각해봅시다. 그러면 그냥 Database Table에 파일 경로 Column을 추가해주면 되죠. 하지만 파일이 여러개라면 말이 달라집니다. 1번 게시글에 index.png, hello.png가 있다고 가정하면 테이블에는 1번 게시글 - index.png 1번 게시글 - hello.png 2번 게시글 - myphoto.png 이런 형식으로 올 것입니다. 이렇게 된다면 데이터가 중복되어 성능 저하가 발생합니다. 따라서 파일 경로만 있는 테이블을 따로 빼 버리는 거..
2023.06.02 -
Web Shell 찍먹
저번에는 아무런 검증을 하지 않는 파일 업로드 페이지에 간단하게 index.php를 업로드 해서 공격을 했습니다. 하지만 더 대단한 공격이 있습니다. PHP에서 Shell script를 실행시킬수 있습니다. 여기서 Shell script란 시스템 명령어에 해당합니다. 그래서 파일 업로드를 통해 해커가 시스템 명령어를 간접적으로 실행해서 서버를 장악할 수 있습니다. 일단 테스트를 위해서 서버측에서 Shell Script를 실행시켜 보겠습니다. index.php에 다음과 같은 코드를 입력합니다. ls는 dir와 똑같은 명령어죠. 디렉토리 내용을 출력하는 명령어 입니다. 서버측에서 접속했더니 내용들이 모두 나오네요! (localhost) 하지만? 해커 컴퓨터에서 접속해도 똑같은 화면이 나옵니다. 당연하게도 서..
2023.06.01 -
PHP 웹 개발 - 서버 네트워크 세팅
현재 서버는 가상머신 안에서는 접속이 되었는데 밖에서는 힘들었습니다. 하지만 상황을 연출하기 위해서 다음과 같은 환경 세팅을 해 보려고 합니다. 먼저 피해자와 공격자는 공유기에 바로 접속 할 수 있어서 서버 즉 Vmware의 세팅이 필요합니다. Change Setting를 클릭합니다. VMnet0의 bridged 를 변경합니다. 저는 wifi니까 wifi로 변경했습니다. 가상머신 스펙 설정에서도 Bridged로 변경합니다. 끝났습니다. 이제 가상 머신을 키고 할당된 ip 주소를 확인합니다. (윈더우는 방화벽때문에 80포트를 열어줘야합니다.) 상단에 wired setting 에서 확인 가능합니다. 154번이군요. 이제 진짜 컴퓨터 (해커 or 피해자) 에서 서버의 ip 주소를 입력하고 경로를 입력하면 정상..
2023.05.30 -
PHP 게시판 제작 - 조회수 기능
이제 게시판에 조회수를 구현 해 보겠습니다. 조회수는 간단하게 구현할 수 있습니다.. 게시글 테이블에 조회수 컬럼을 생성하고 게시글 페이지에 요청이 들어가면 조회수 + 1을 해주면 됩니다. 먼저 Table을 수정합시다.. view_count 컬럼을 추가합니다. 이제 모든 정보를 삭제합니다. 조회수 컬럼에 not null, default 0을 설정합니다. (기본값 0) 게시글을 하나 생성 해 보면.. 정상적으로 되었습니다. 이제 조회수 처리를 해야합니다. $row = $result->fetch_assoc(); $sql = "update board set view_count = view_count + 1 where bno = ?"; $stmt = $conn->prepare($sql); $stmt->bind_..
2023.05.27 -
PHP - 게시판 제작 - 파일 업로드
게시판에 사진이나 다른 파일이 빠질수는 없죠. 한번 제작 해 봅시다. 먼저 board/register.php에 파일 업로드 형식을 지정합니다. Write page 파일 업로드 file을 넣습니다. 파일 업로드 형식이 추가되었습니다. 아무 파일이나 넣고 요청을 보냈습니다. HTTP 요청 BODY를 보니 이런식으로 파라미터가 보내지는것을 볼 수 있습니다. 이상한 점 눈치채셨나요? 네. file에 진짜 데이터가 아니라 그냥 단순한 file name만 파라미터 값으로 들어가네요. 이것은 요청 방식에 문제가 있습니다. 현재 HTTP 요청 헤더를 보면 Content-Type: application/x-www-form-urlencoded 라고 보입니다. Content-Type는 요청 바디에 있는 데이터의 타입을 결정..
2023.05.26 -
PHP - 게시판 제작 10 - 페이징
저번 시간에는 게시판 검색까지 제작했습니다. 하지만 여기서 문제점이 있습니다. 게시글이 많아진다면 계속해서 스크롤을 내려야 한다는 문제가 있습니다. 글들을 페이지로 나눠서 보여줍시다. 이런식으로 말이죠! 페이징을 하려면 limit를 사용해야합니다. limit에 뭐가있었죠? 첫번째 칸은 몇번째 행부터 출력할 것인가를 의미합니다. 두번째 칸은 출력할 데이터 양을 의미합니다. 즉 limit 0,10 은 0번째부터 10개의 데이터를 가져와. 이런 느낌이죠. 그러면 1페이지는 limit 0,10이고 2 페이지는 limit 10,10 이네요. 3 페이지는? limit 20,10이겠네요! 규칙이 보이시나요? 10씩 늘어나고있습니다. 즉 (페이지-1) x 10 을 하면 limit에 들어가는 값을 구할 수 있습니다. 직..
2023.05.20