04.06.2017, 10:56
|
|
Интересующийся
|
|
Регистрация: 08.02.2014
Сообщений: 23
|
|
Создать свой объект document
Доброе утро.
Для конспирации хочу неявно обратиться к document.cookie.
Это можно сделать с помощью JSfuck. Но пока этот способ отложим.
Я посмотрел на document.__proto__, судя по всему, document создан из объекта HTMLDocument, и там есть свойство cookie.
http://i.imgur.com/05mLc5x.png
Можно как-то обратиться к кукам через конструктор HTMLDocument?
|
|
04.06.2017, 12:27
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
brizing, какой конструктор вася) все эти конструкторы HTMLXXXXX показаны тебе только для информации и чтобы можно было instanceof делать, для создания же экземпляра используются методы такие как document.createYYYYY(), а не new HTMLXXXXX(), и в их числе нет такого как .createDocument(). Обращение к свойству cookie на прототипе __proto__ ничего не даст, потому что нужен экземпляр, так как cookie не просто свойство, а сеттер/геттер, т.е. функции, которые внутри себя очевидно проверяют this на этот экземпляр, и всё это нативный код.
Итого: cookie работает только на экземпляре HTMLDocument, экземпляр HTMLDocument создается только браузером, и JSfuck тебе не поможет изменить этого.
Последний раз редактировалось Rise, 04.06.2017 в 12:43.
|
|
04.06.2017, 13:00
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
вы xss нашли? хотите куки воровать?
|
|
04.06.2017, 13:14
|
|
Интересующийся
|
|
Регистрация: 08.02.2014
Сообщений: 23
|
|
Rise, точно, конструктора нет.
Посмотрим-ка сюда: http://i.imgur.com/r9GDO4I.png
"TypeError: Illegal invocation" - ошибка возникает когда идёт вызов ф-ии без указания правильного this, например ф-ия из scope без самого scope, log без console, alert без window и т.п. (источник: https://toster.ru/q/268947)
Значит, мы можем позвонить кукам и передать правильный this?
Типа так:
HTMLDocument.prototype.cookie.call(правильный_this)
Не?
j0hnik, с сервера в куки прилетает ключ, а в JS этот ключ дешифруется и если все ок - код выполняется дальше. Благо, код большой, и если спрятать место, в котором используются document.cookie, защита будет почти как у дюрекс.
Последний раз редактировалось brizing, 04.06.2017 в 13:19.
|
|
04.06.2017, 13:17
|
|
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,127
|
|
Ну через document.createYYYYY() можно создать ифрейм у которого есть экземпляр HTMLXXXXX(), который можно получить но топикстартер явно гвозди микроскопом забивает. И совсем непонятно зачем ему это нужно.
|
|
04.06.2017, 15:02
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
brizing, у сеттер/геттер нет интерфейса вызова в виде скобок (), значит нет и .call() и .apply(), иначе было бы так document.cookie() и document.cookie('value'). Вызов геттера идет обращением к свойству document.cookie, а вызов сеттера присваиванием свойству значения document.cookie = 'value'.
MallSerg, так это разные окна между ними даже идентичные конструкторы не будут равны.
Последний раз редактировалось Rise, 04.06.2017 в 15:07.
|
|
04.06.2017, 15:34
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
brizing, всё что ты можешь сделать, и как обычно и делается, так это зашифровать имена свойств, ведь обращаться к ним можно в виде строк window['document']['cookie'].
|
|
04.06.2017, 17:01
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
console.log( Object.getOwnPropertyDescriptor(Document.prototype, 'cookie').get.call(document) );
|
|
04.06.2017, 17:34
|
|
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,127
|
|
Сообщение от Rise
|
MallSerg, так это разные окна между ними даже идентичные конструкторы не будут равны.
|
Именно. основная страница и страница в ифрейме будут исполнятся в разных контекстах и ни одна из страниц не сможет отловить манипуляций с куками на другой странице. а строка с куками будет одинаковой на окнах с одного домена. т.е. читать и изменять будет можно а перехватить чтение или запись будет нельзя.
|
|
04.06.2017, 18:12
|
|
Интересующийся
|
|
Регистрация: 08.02.2014
Сообщений: 23
|
|
Всем спасибо.
|
|
|
|