본문 바로가기
[보안]/[Webhacking.kr]

[Webhacking.kr] 48번

by Hevton 2020. 11. 15.
반응형

 

시작은 이렇다.

 

입력창에 텍스트를 입력한뒤 Send를 보내서 글을 메모할 수도 있고,

파일과 함께 글을 메모할 수도 있다.

 

파일을 남기면 위처럼 upload file 부분을 눌러서 내가 올린 파일을 확인할 수 있다.

그리고 Delete를 누르면 글이 사라진다.

 

내가 올린 파일의 경로는

webhacking.kr:10006/upload/파일명

으로 올려져 있다.

 

 

Delete를 사용해서 두 글을 지워봤다.

 

mode=del&time=시간값

을 인자로 데이터가 보내지고, 결과로 메모가 삭제된다.

 

webhacking.kr:10006/upload/파일명

를 통해 내가 올렸던 파일의 경로로 이동해보니 파일이 존재하지 않는다고 오류메세지가 나온다.

메모와 함께 삭제된 것이다. 그리고 운영체제가 Ubuntu인것이 오류메세지 상에서 확인된다.

 

/upload/ 경로에 업로드되어있는 파일을 Ubuntu 상에서 지우려면 어떤 방법을 사용했을까?

아마 rm 명령어일 것이다. 아래와 같은 방식일 것이다.

rm -rf 파일명

 

따라서 나는 이걸 이런 식으로 바꿔볼 것이다.

rm -rf 파일명;ls

연속으로 명령어를 실행하게끔 세미콜론을 넣음으로써, 뒤에 있는 ls를 통해 현재 디렉토리에 어떤 파일들이 있는지 확인해볼 것이다.

 

;ls의 파일명을 가진 파일을 업로드한 뒤에 삭제시켜봤다.

(안될경우엔 ';ls 나 ";ls를 해보면 될 듯 하다)

플래그값이 나온다

이 플래그값을 Auth 메뉴에 가서 넣어주면 끝.

 

 

이번 문제의 기법을 Command Injection이라고 한다.

커맨드 인젝션의  공격대상은 OS 쉘이다. 웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송하여 웹 서버에서 해당 명령어를 실행하도록 하는 공격이다.

 

 

Command Injection

 

Command Injection 은 웹 애플리케이션에서 시스템 명령을 사용할 때, 세미콜론 혹은 &, && 를 사용하여 하나의 Command Injection 하여 두 개의 명령어가 실행되게 하는 공격이다. OWASP Top10  1위에 속해 있는 Injection 공격으로 서버자체의 콘솔 명령어를 실행시킬 수 있기 때문에 공격이 성공한다면 매우 큰 피해가 발생할 수 있다.

 

 

해당 문제는 php상에서 실행되는 문제이므로 아마 아래와 같은 코드 형태로 작성되어 ;ls로 인해 크랙될 것이다.

system('rm -rf' . $file_name); 
// 또는
system('rm -rf {$file_name}');

 

둘은 문자열 안에 변수값을 넣는(합치는) 방법이다. 이렇게하면 문자열에 변수값을 넣을 수 있게 된다.

 

php 문자열과 변수 합치기 : opentutorials.org/course/3018/237

 

반응형

'[보안] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 50번  (0) 2020.11.15
[Webhacking.kr] 49번  (0) 2020.11.15
[Webhacking.kr] 47번 - 아시는분?  (0) 2020.11.14
[Webhacking.kr] 46번  (0) 2020.11.14
[Webhacking.kr] 45번 & 나중에 알게 되면 다시보기  (0) 2020.11.13