2012-01-18 1 views
2

안녕하세요. 저는 회사에서 사용하는 독점적 인 웹 서버 프로그램을 중단시키려는 임무를 맡았습니다. 실제로 운이 좋지는 않습니다. 그것은 c에 내장되어 있습니다.웹 서버 해킹

루트로 실행되며 명령을 실행하려고합니다. 웹 서버는 URL에 게시 된 명령을 취해 이러한 접두사가있는 명령을 실행합니다. 이제 '& _cmd = gettimeout'또는 '& _cmd = rm'과 같은 명령을 전달할 수 있습니다. 프로그램은 실제로 "접두어 rm"을 실행합니다

접두사 프로그램은 유용한 UNIX 명령이없는 일련의 디렉토리에서 해당 명령을 실행하려고하므로 다시 명령을 찾을 수 없다는 것을보고합니다. '& _cmd = rm % 20-f'와 같이 공백을 +로 변환하기 때문에 URL에 공백을 넣을 수도 없습니다. 어쨌든 & _cmd 문자열을 포맷하여 실제 유닉스 명령을 실행합니까?

이상한 일이지만 나는 보안 강좌를 수강중인 배치 학생이고 나의 일은 내 과정과 관련하여 나를 위해 몇 가지 일을 찾으려고하고있다. 당신의 도움이

+0

& _ cmd = rm; pwd? 그것은 pwd 명령을 실행합니까? ".."가있는 상위 디렉토리에 액세스 할 수 있습니까? "/ usr/bin"과 같은 절대 경로에 액세스 할 수 있습니까? "rm % 20-rf % 20 /"과 같은 하나 이상의 인수를 전달할 수 있습니까? – vaugham

+0

왜 태그가 C입니까? 태그가 삭제되었습니다. – pmg

+0

커맨드 rm; pwd를 찾을 수 없다 그냥 전체 텍스트를 취해서 하나의 커맨드로 해석하는 것처럼 보입니다. –

답변

1

일부 아이디어를

덕분에,하지 않을 수도 작동 할 수 있습니다 :

  1. 역 인용 부호를. 운이 좋으면 prefix 실행 전에 평가됩니다. 운이 없다면 그들은 여전히 ​​당신을 어떻게 든 봉사 할 것입니다.
  2. 공백이 작동하지 않으면 다른 공백을 사용하지 않는 이유는 무엇입니까? 탭이 있습니다.
  3. 정확히 사용할 수있는 명령을 찾아서 도움이되는지 알아야합니다.
  4. 허용 된 명령 중 하나에서 버퍼 오버런을 발견 할 수 있습니다. 일반적으로 이러한 오버런은 보안 위험이 아닙니다 (vi을 인수하면 수행 할 수없는 일은 모두 할 수 없습니다). 그러나 이러한 맥락에서, 당신은 그것들을 이용할 수 있습니다.
  5. 실행할 수있는 경우 실행 파일은 /proc/에 있습니다. 각 프로세스의 명령에 대한 링크가 포함되어 있습니다.
+0

접두사가있는 뒤로 틱을 사용하여 유망했습니다 명령 줄에서 먼저 명령을 실행할 수 있습니다. 그러나 웹 서버의 exec 호출은 항상 프로그램 및 다른 모든 인수로 exec 호출에서 arguements를 실행하는 것으로 보입니다. –