명령 주입에 대해 약간의 연습을 하고 있는데 주입할 수 있는 명령이 있습니다.
grep -i $key dictionary.txt
$key
뭔가를 주입할 수 있는 부분이 어디인가요? 이제 여기서 의도된 해결책은 ;
문을 종료한 다음 새 문을 구성하는 것입니다. 하지만 내가 할 수 있는지 보고 싶어사용grep
내 시도 에서 .
내가 하고 싶은 일은 ls
특정 디렉터리에 있는 파일을 볼 수 있도록 실행하는 것입니다. 나는 이 두 가지를 다음과 같이 결합하고 싶다.
ls | grep -i "."
그런데 주사를 맞으니까 grep -i
먼저 주사를 맞아야 해요. 그럼 제가 할 수 있는 일이 있나요? 어쩌면 "역순"으로 작동하는 파이프 연산자일까요?
grep -i "." <| ls
편집하다
내가 여기서 무엇을 하고 있는지, 무엇을 달성하려고 하는지에 대해 약간의 혼란이 있는 것 같습니다.
펜 테스트에 대한 몇 가지 입문 연습을 하고 있습니다.
현재 연습에서는 다음 문자열이 포함된 웹사이트에 삽입하고 있습니다.
grep -i $key dictionary.txt
그런 다음 이 문자열은 명령을 실행하는 데 사용됩니다. 해당 문자열에 뭔가를 주입해야 하는데, 이는 명령 주입이 될 것입니다. 문자열은 이미 서버에 기록되어 있으므로 제어할 수 없으므로 왼쪽에 아무것도 넣을 수 없습니다 grep -i
.
다음을 주입하는 솔루션이 이미 있습니다.
; ls /etc/natas_webpass #
그런 다음 (삽입할 때) 서버에서 실행되는 명령을 만듭니다.
grep -i ; ls /etc/natas_webpass # dictionary.txt
나는 세미콜론을 사용하지 않고 이 연습문제를 해결하고 싶지만 실제로 grep
는 이미 있는 세미콜론을 사용할 수도 있습니다.
편집 2
누군가 내가 찾고 있는 것에 대한 조언을 가지고 있습니다 <(ls)
. 나는 다음을 실행하여 이것을 테스트하려고했습니다.
$ grep -i <(ls)
그러나 이것은 작동하지 않습니다. 아무 일도 일어나지 않습니다.
답변1
당신은 거의 그것을 이해합니다. 주입
. <(ls)
또는
^ <(ls)
을 위한 $key
. 검색을 하셔야 합니다무엇출력에서 ls
. 가리키다(.
)는 모든 문자와 일치하므로 공백이 아닌 모든 줄과 일치합니다. 캐럿( ^
)은 모든 줄의 시작 부분과 일치하므로 일치합니다.어느줄, 심지어 빈 줄. (달러 기호를 사용할 수도 있습니다.)