Comments 22
Программа из одной строчки на JavaScript, ага. Между прочим, с пришествием node.js подобное стало возможным.
остается придумать как повысить права для ноды
Точно так же как и в оригинале, просто запустить node из под рута.
# echo "require('child_process').exec('whoami', (e, so, se) => console.log(so))" | node -
root
И часто вы из под рута сервера запускаете?
А при чём тут сервера? "Программа из одной строчки" предполагает что жертва просто сама запустит её в ближайшем доступном шелле, который с ненулевой вероятностью будет рутовым. С джаваскриптом, правда, всё сложнее, потому что ближайший доступный шелл — консоль браузера, но, как я писал выше, с пришествием node.js подобное стало возможным.
Например, в докере.
P.s. Выдавать код который со 100% вероятностью будут копипастить для теста в виде картинки — это, на мой взгляд, не очень умно.
for(A in {A(строка которую не рисует хром):0}) в этой скрытой строке и спрятано сообщение что выползает в алерте
Ну вот на закладке с хаброй запустил — ну выводит себе "А" да и все… А потом подумал, что скорей всего, конкретно твиттер (или любой другой ресурс) попросту может определить свойство в прототипе Object, ну или, на крайняк, переопределить метод escape()
.
Код запускал в Хроме, если что
UPD: в хроме же, на странице твиттера ничего подобного так же не наблюдаю. Зато заметил любопытный оверрайд методов объекта console:
> for (A in {A:0}) console.log(unescape(escape(A).replace(/u.{8}/g, [])));
undefined
> for (A in {A:0}) console.error(unescape(escape(A).replace(/u.{8}/g, [])));
VM381:1 A
Весёлая вещь. В Хроме работает, а в Сафари SyntaxError: Invalid character '\u56128'
.
Скрытые послания в именах свойств JavaScript