【Web】控制台操作

浏览器控制台

      • 重定向空白页面
      • 使用``调用函数
      • eval()执行函数命令
      • 使用时间类函数执行代码
      • 通过匿名function()执行脚本
      • 创建Function对象并执行代码
      • 通过apply执行代码
      • 通过call执行函数
      • 通过成员对象执行函数
      • 通过top执行函数
      • 通过WINDOW.WINDOW或任何等价值执行函数
      • 通过页面事件执行代码
      • 通过ANCHOR属性执行代码
      • 通过页面重定向执行代码
      • 通过window.open执行代码
      • 通过Array.prototype.filter回调执行代码
      • 通过Array.prototype中其他函数执行代码(1)
      • 通过Array.prototype中其他函数执行代码(2)
      • 通过Array.prototype中其他函数执行代码(3)
      • 通过混淆引擎,混淆JS以规避WAF
      • 将代码放置在注释符号中执行
      • 1.构建花式执行代码的一般思路
      • 2. 构建字符串的不同方法

重定向空白页面

F12打开控制台,输入javascript执行语句,跳转到空白页面

location.href="about:blank"

跳转到空白页面
但如果是www.baidu.com,则跳转结果如下。可以发现他是跳转到当前页面附加控制台的字符串最后的页面。

location.href="www.baidu.com"

【Web】控制台操作_第1张图片

使用``调用函数

在不能使用()的地方,可以用``执行函数命令。
在控制台输入

alert`hello world!`

【Web】控制台操作_第2张图片
另一种执行方法:

alert("hello world")

【Web】控制台操作_第3张图片

eval()执行函数命令

传给eval的字符串会被当作函数执行,试试执行下列代码

eval(alert("1+2"))

【Web】控制台操作_第4张图片

使用时间类函数执行代码

setInterval、 setTimeout的执行方式与eval类似,如果eval被禁止了,可以使用这两个代码。
试着执行

setTimeout("alert(666)",0);
//或者
i=0; setInterval("(i++==0)&&alert(666)",1000)

【Web】控制台操作_第5张图片

通过匿名function()执行脚本

通过(function(){})()可以执行脚本
尝试执行

(function(a){alert(a)})(123)

【Web】控制台操作_第6张图片

创建Function对象并执行代码

创建Function对象并执行代码和function()等价,类似eval

q=new Function("alert(5)");q();

【Web】控制台操作_第7张图片

通过apply执行代码

apply可以将参数传递给被调用函数。通过apply可以指定this和参数
因为alert是window对象的函数,尝试

alert.apply(window,[2])

【Web】控制台操作_第8张图片

通过call执行函数

call与apply类似,也可以用于函数执行。浏览器窗口的this也可以使用globalThis来代替。

 alert.call(globalThis,[1024])

【Web】控制台操作_第9张图片

通过成员对象执行函数

如果成员是函数类型,也可以直接调用它们。通过对象成员执行函数,alert是window(也是globalThis)成员,因此下面方式均可执行

window.alert(7);
//
globalThis["alert"](7)

【Web】控制台操作_第10张图片

通过top执行函数

top指顶层窗口,非框架下,和this,window,globalThis是等价的。

top.alert(666)

【Web】控制台操作_第11张图片

通过WINDOW.WINDOW或任何等价值执行函数

window也是window的子对象,该对象指向自身。
只要对象等价,可以用window,this,top,contentWindow,globalThis等构造任意长度的链条

this.window.window.globalThis.globalThis.window.window.alert("very long")

【Web】控制台操作_第12张图片

通过页面事件执行代码

通过页面的onXX事件执行代码

function p(){alert(777)};
document.write("")

在这里插入图片描述

【Web】控制台操作_第13张图片

通过ANCHOR属性执行代码

anchor(锚)元素的href可以用来执行脚本

执行。其含义是插入了一个a标签,是一个超链接,其id叫做foo,文字是bar

document.write("bar");

尝试点击超链接,或者执行

foo.click()

【Web】控制台操作_第14张图片

通过页面重定向执行代码

当页面被重定向到js伪协议(javascript:开头的URI)时,代码会被执行。

执行

location.href="javascript:alert(9)"
//
location="javascript:alert(9)"

【Web】控制台操作_第15张图片

通过window.open执行代码

winodw.open,以及任何可以在新窗口打开URL的操作,都可以用来执行代码

尝试执行

window.open("javascript:alert(111);","_self");
//或者
document.write("
"
) //并点击提交

【Web】控制台操作_第16张图片
第二个代码执行结果如下:
【Web】控制台操作_第17张图片
【Web】控制台操作_第18张图片

通过Array.prototype.filter回调执行代码

尝试执行
数组中的每个对象都会传递给filter中的回调函数,此例将alert传入给了它。

[alert].filter(function(y){y(3)})

【Web】控制台操作_第19张图片

通过Array.prototype中其他函数执行代码(1)

通过every,find执行代码
尝试执行:

[alert].every(function(e){e(1)})
//
[alert].find(function(e){e(1)})

【Web】控制台操作_第20张图片

通过Array.prototype中其他函数执行代码(2)

通过findIndex,flatMap执行代码

[alert].findIndex(function(e){e(4)})
//
[alert].flatMap(function(e){e(4)})

【Web】控制台操作_第21张图片

通过Array.prototype中其他函数执行代码(3)

了解其他函数并自行实验
forEach,mao,reduce,reduceRight,some,sort,splice等都可以达到同样效果

[alert].reduce(function(e){e(12345)})
[alert].reduceRight(function(e){e(12345)})
[alert].some(function(e){e(12345)})//执行成功
[alert].forEach(function(e){e(12345)})

【Web】控制台操作_第22张图片
【Web】控制台操作_第23张图片

通过混淆引擎,混淆JS以规避WAF

通过JSFuck来混淆代码
JSFuck is an esoteric and educational programming style based on the atomic parts of JavaScript. It uses only six different characters to write and execute code.
It does not depend on a browser, so you can even run it on Node.js.
Use the form below to convert your own script. Uncheck “eval source” to get back a plain string.
http://www.jsfuck.com/

[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])

【Web】控制台操作_第24张图片

将代码放置在注释符号中执行

HTML知识符号中的代码也可以被执行

需要注意:之前需要换行
执行

document.write("+"ipt>+"pt>")

【Web】控制台操作_第25张图片

1.构建花式执行代码的一般思路

一般思路

以上是一些通用的思路,不知道你是否已经发现了,我们在做的实际上就只有两件事情:

  1. 创建Function对象(函数也是Function对象、元素的回调也是将字符串转为Function对象)

  2. 让字符串尽可能的复杂

要在浏览器中创建函数对象,通常可以:

  1. 直接指定一个函数,例如function f(){ },当你执行p = f; typeof p;时就可以发现,它是一个function对象的类型。

  2. 通过Eval或其他类似的方式将字符串转为JavaScript代码,此时等同于动态创建了一个函数体。

  3. 通过new Function()方式创建一个函数,通过这个创建的函数的本体可以通过字符串混淆的方式隐藏起来。

  4. 通过各种元素的事件回调等操作。

  5. 通过跳转到Javascript URI。

  6. 通过调用浏览器一些预留接口(与浏览器有关)。

等等。

2. 构建字符串的不同方法

一般思路

我们已经知道了哪些方法创建一个函数,剩余的无非就是字符串的一些不同表示方案。

字符串通常可以由如下方式得到:

  1. 通过""、’'直接使用。

  2. 通过String.fromCharCode()等方式得到。

  3. 通过``方式(ES6)。

  4. 通过获取字符串类型的返回值。比如执行 typeof 1就会返回字符串number。

  5. 通过字符串强转,比如(typeof 1) + 3就会返回number3,因为前者是字符串,后面的数字会被强转为字符串3。

等等。

这里做的最极端的便属JSFuck,如果对构建任何字符串感兴趣,可以参考它。 或者还有一个思路,比如想获得字符n,也可以执行(typeof 1)[0]。想获得字母a,可以使用alert.name[0],总之花样很多,无非就是基于一个字符串类型去做操作罢了。

你可能感兴趣的:(笔记,javascript)