bWAPP A1 OS command Injection

2020. 10. 28. 23:10
728x90
728x90
728x90
 

itsecgames.com

 

www.itsecgames.com

[사진 1]
[사진 2]

리눅스 명령어 인젝션 문제이다. nslookup 명령어가 사용되는 것으로 보인다. 텍스트 값이 nslookup 명령어의 인자로 전달되는 것 같은데, linux의 ";" "&", "&&", "||" 명령어를 통해 추가적인 명령을 연속하여 실행할 수 있다.

 

low

[사진 3]

";" 세미콜론을 사용하여 추가적인 명령어를 사용할 수 있다.

 

medium

[사진 4]

medium 레벨이다. low 레벨에서 사용했던 ";" 세미콜론을 사용하면 추가적인 명령어가 실행되지 않는다.

 

[사진 5]

하지만, "|" 파이프를 통해 추가적인 명령어를 실행할 수 있다.

 

high

[사진 6]
[사진 7]

high 레벨이다. low, medium 레벨에서 사용했던 세미콜론, 파이프를 이용해도 추가적인 명령어를 실행할 수 없다.

 

[사진 8]

low 레벨의 경우 필터링이 되지 않고 있고 medium, high 레벨의 경우 각각 commandi_check_1(), commandi_check_2() 함수에 의해 텍스트 값이 변환된다.

 

[사진 9]

먼저, medium 레벨의 경우 "&", ";" 문자를 지워버린다. medium 레벨에서 "&" 세미콜론 문자를 사용하여 추가적인 명령어를 실행할 수 없었던 이유이다.

 

[사진 10]

다음으로, high 레벨의 경우 php escapeshellcmd() 함수로 전달한 텍스트를 변환한다. escapeshellcmd(0 함수는 다음 문자 앞에 백슬래시를 붙인다. `|*?~<>^()[]{}$\, \x0A and \xFF. ' 즉, 추가적인 명령어의 실행이 매우 어려워진다.

 

* PHP escapeshellcmd() function

 

PHP: escapeshellcmd - Manual

I've got a php script that needs to pass a username and password via exec to a perl script.  The problem is valid password characters were getting escaped...Here's a little perl function I wrote to fix it.sub unescape_string {      my $string = shift;�

www.php.net

따라서, 텍스트 값을 인자로 전달 받아 리눅스에서 명령어를 실행할 때 injection을 방어하려면 escapeshellcmd() 함수 사용을 고려할 수 있다.

728x90
728x90

+ Recent posts