PHP: escapeshellcmd vs escapeshellarg

프로그래밍 언어 수준에서 시스템 명령을 실행하면 문제를 묻는 것처럼 들립니다 그러나 그것을 올바르게하고 안전하게하는 방법은 무엇입니까? – 오늘의 "0에서 pentesting 영웅"

PHP에서, 당신이 모든 프로그램을 실행할 수있는 시스템 명령어를 사용하고자한다면 운영 체제에서는 escapeshellcmd 또는 escapeshellarg 명령 중 하나를 사용해야합니다 그러나이 두 기능은 어떻게 다른가요? 그리고 사용법의 차이점은 무엇입니까? 그것들을 서로 바꾸어 사용할 수 있습니까? 첫 번째 함수 인 escapeshellarg로 시작해 보겠습니다 그 사용은 사용자가 우리가 선택한 명령에 정확히 하나의 매개 변수를 부여했음을 보증합니다 사용자는 더 많은 매개 변수를 제공하거나 다른 명령을 실행할 수 없습니다 표준 사용법은 다음과 같습니다 : 프로그래머가 원하는 실행을 선택합니다

예를 들어 dir을 허용하여 사용자가 모든 디렉토리를 나열 할 수 있도록합니다 사용자가 제공 한 매개 변수는 escapeshellarg 함수로 전달됩니다 두 번째 기능 – escapeshellcmd 하나의 명령 만 실행되도록합니다 세미콜론이나 파이프가있는 트릭을 사용하여 추가 명령을 주입 할 수 없습니다

하지만이 명령에는 무한 수의 매개 변수가 포함될 수 있습니다 따라서 사용하기로 결정하면 매개 변수를 잘못 사용할 수 없도록해야합니다 가장 일반적인 실수는 escapeshellarg 대신 escapeshellcmd 함수를 사용하는 것입니다 오늘의 예제 애플리케이션 코드를 살펴 보겠습니다 사용자는 wget을 사용하여 모든 웹 사이트를 다운로드 할 수 있습니다

이 페이지는 웹 서버 외부에있는 임시 디렉토리에 저장됩니다 요점은 다운로드 한 스크립트가 PHP에 의해 해석되어서는 안된다는 것입니다 우리는 –directory-prefix 매개 변수를 사용하여이 작업을 수행했습니다 다운로드 된 파일이 저장 될 디렉토리 이 애플리케이션 예제가 어떻게 작동하는지 확인해 봅시다

Google은 googlepl 웹 사이트를 다운로드하고 있습니다 실제로 indexhtml 파일이 tmp 디렉토리 프로그래머는이 코드에서 escapeshellcmd 함수를 사용 했으므로 다음 코드를 지정할 수 있습니다

wget에 추가 매개 변수 그러면 현재 디렉토리를 가리키는 두 번째 매개 변수`- directory-prefix '를 전달할 수 있습니다 Wget을 사용하면 여러 디렉토리 매개 변수를 지정할 수 있지만 마지막 매개 변수 만 사용됩니다 그래서 우리는 php 확장자를 가진 파일을 다운로드 할 수 있으며 현재 디렉토리에 저장됩니다 현재 디렉토리는 php 파일을 실행할 수 있기 때문에 – 이 서버에서 코드를 원격으로 실행할 수있는 능력

예를 들어, phpinfo () 함수가있는 exploitphp 파일을 다운로드하고 있습니다 주어진 설치에 대한 기본 정보를 제공합니다 파일이 현재 디렉토리에 다운로드되었으므로 이제는 문제없이 실행할 수 있습니다 그러면이 공격으로부터 어떻게 자신을 보호 할 수 있습니까? escapeshellarg 함수를 사용하십시오

이 주제에 관심이 있으시면 제 웹 사이트를 방문하겠습니다 자세한 내용은이 문제를 참조하십시오 그리고 그것은 오늘의 에피소드에 모두 있습니다 마음에 드시면 엄지 손가락을 올려 놓고이 채널을 구독하십시오 다음에 또 봐, 안녕!

PHP Create dropdown list using array – part 1

그럼 먼저 무엇을해야합니까? 배열을 만들어야합니다 가서 배열을 만들고, 그것을 색깔이라고 부르십시오

그리고 몇 가지 요소를 넣을 것이고, "blue", "green", "red"및 "yellow"를 넣을 것입니다 그래서 우리는 그 많은 원소들을 가진 배열을 만들었습니다 드롭 다운을 만들고 싶다면, 드롭 다운에 옵션이 있다는 것을 알고 있습니다 그래서,이 배열을 반복하면 인쇄 할 수 있습니다 배열의 값에 근거하는 옵션 그럼 먼저 해보도록하겠습니다

내가 갈거야, 만들거야 echo, 드롭 다운 이름과 태그 색상을 출력합니다 나는 이것을 닫고, 에코를 선택하고, 지금 내 태그 사이에서 루프를 시작합니다 나는 0과 동등하기 때문에, 나는 무엇보다 적은가? 어떻게해야합니까? 당신은 배열의 원소의 수를 얻는다 Count 또는 sizeOf, 둘 다 작동합니다

그래서, 색상을 사용하면이 루프를 통과 할 때마다 i의 값을 1 씩 증가시킵니다 이리 너가 여기 옵션을 인쇄하면됩니다 에코, 옵션 및 간단히 인쇄 달러 기호 "i"에서 배열 색상의 값을 지정하고 옵션 태그를 닫습니다 그것이 보이는지 보자

작품, 그냥 XAMPP, 로컬 호스트를 실행하자 800 무엇입니까? 포트 800, XAMPP 실행 중, XAMPP 제어판에서 시작을 클릭하십시오 이것은 포트 800이며 5 주째에 f1php를 저장합니다 너 여기있어

가기 드롭 다운 목록에서 파란색, 녹색, 빨간색 및 노란색 권리 지금이 드롭 다운을 제출하면 제출을 클릭하면 단추? 색상은 빨강, 파랑, 녹색, 색상은 무엇이든 상관 없습니다 색상 ID가 필요합니다 그래서, 색상 대신 숫자 값을 보내려면 값을 사용해야합니다

옵션의 속성 제가 지금 이것을 선택하고 양식을 제출하면 통과하고 있습니다 푸른 나는이 숫자 각각이 나타내는 하나, 둘, 셋, 넷을 전달하고 싶다 색깔

내가 뭘해야한다고 생각하니? 대신에 숫자를 전달할 수 있기를 원합니다 색상 이름을 전달합니다 그래서 배열의 첫 번째 요소부터 파란색은 하나, 녹색 두 개는 빨강, 세 개는 노란색, 노란색은 네 개입니다 내가 뭘해야하지? 무엇을 바꾸어야합니까? 그 번호를 전달할 수 있도록 내 코드에서? 옵션에 값 속성을 추가해야합니다

내가 여기 가서 가치를 평등하게한다면? 하나? 이것은 계속 변경됩니다 푸른 색의 경우 I 하나는 녹색, 나는 두 개, 빨간색은 3 개, 노란색은 4 개를 원해 가치 "(i + 1)"이라고하면 효과가 있습니까? 왜냐하면 나는 0부터 시작 했으니까 그래서 "(i + 1)"라고 말하면 간단히 말해서 각 옵션 값에 숫자를 추가하십시오 소스 코드를 보면 지금 여기, 파란색, 초록색, 가치 없어

이제 내가이 파일을 저장하고 페이지를 새로 고침하면 아무 것도 볼 수 없습니다 이리 너는 나가 근원을 지금 보는 경우에,이 가치의 각각이 1 개, 2 개, 3 개다는 것을 본다 넷 내가 어떻게했는지 알아? 그래서, 나는 값에 따라 각 색깔마다 이드를 가졌다 "i"의 "i"가 0부터 시작하기 때문에 하나부터 시작하여 하나만 더한 것입니다 – 말하기 학생들에게 – 그래서 당신이 볼 수 있듯이 나는 이드를 추가했다

그래서, 지금 나는 다른 값을 가지고 있습니다 가치 옵션 하나는 첫 번째 색을 나타내는 식입니다 제출 버튼을 추가하고 무엇이 있는지 확인하십시오 출현 버튼을 추가하고 어떤 값이이 양식으로 전달되는지 확인하십시오

그래서, 나는 앞으로 나아가고, 나는 단지 여기에 가야한다 PHP 밖에서 나는 폼을 추가하고 나서 나는 PHP를 실행 한 직후에 폼을 닫는다 그래서 제출할 수 있으려면 제출 버튼이 필요합니다 형태 입력 유형은 제출, 파일 저장, 페이지 새로 고침과 같습니다

색상, 그래서 그것은 색상 값 1을 전달합니다 다른 색상을 선택한 다음 색상을 전달합니다 이드는 그 색을 배정 받았다