В настоящее время я пытаюсь решить задачу «Захватить флаг», которая заключается в попытке повысить привилегии, воспользовавшись эксплойтом в скрипте bash.

Сначала скрипт делает следующее, чтобы получить все сокеты с протоколом TCP в состоянии LISTEN:

output=$($_netstat -ntpl 2> /dev/null | $_egrep '^t')

а затем он анализирует вывод за строкой. Одна из вещей, которую он делает для каждой строки:

if [[ "$cur_syn" == "0" ||  "$max_syn" != "$cur_syn" ]]
    then    continue
fi

$cur_syn - это значение Recv-Q возвращаемое netstat, а $max_syn - это значение столбца Send-Q .

Таким образом, только сокет, который находится в состоянии LISTEN и с Recv-Q!= 0 и Recv-Q == Send-Q пройдет эти проверки.

Человек netstat утверждает, что:

Recv-Q
Установлено: Количество байтов, не скопированных пользовательской программой, подключенной к этому сокету. Прослушивание: начиная с ядра 2.6.18, этот столбец содержит текущее отставание синхронизации.

а также

Send-Q
Установлено: Количество байтов, не подтвержденных удаленным хостом. Прослушивание: начиная с ядра 2.6.18, этот столбец содержит максимальный размер журнала ожидания синхронизации.

Дело в том, что мне кажется, что я не могу создать сокет с Send-Q, отличным от 0.

Если моя интерпретация верна, значение Send-Q для сокета, который прослушивает, является максимальным размером backlog, который является параметром backlog в функции listen(2) Си. Но даже когда я создаю сокет прослушивающего сервера с резервом размера 3, netstat все равно сообщает Send-Q как 0! Что я делаю неправильно?

К вашему сведению, мне удалось внести изменения в Recv-Q , подключив несколько клиентов к сокету сервера, который получил SIGSTOP. Recv-Q поднимается до maximum size of the syn backlog + 1 , а затем все соединения отклоняются. Но увы, Send-Q остается без изменений.

0