js劫持,javascript的函数劫持浅析
javascript函数劫持,也就是⽼外提到的javascript hijacking技术。虽然这个概念在前端领域使⽤较少,但是在安全领域、⾃定义业务等场景下还是有⼀定的使⽤价值的。所以,这⼀篇⽂章将会和⼤家⼀起去了解⼀下JS中的函数劫持是什么,有什么作⽤,下⾯来⼀起看看吧。
javascript的函数劫持是什么?
函数劫持,顾名思义,即在⼀个函数运⾏之前把它劫持下来,添加我们想要的功能。当这个函数实际运⾏的时候,它已经不是原本的函数了,⽽是带上了被我们添加上去的功能。这也是我们常见的钩⼦函数的原理之⼀。
乍⼀看上去,这很像是函数的改写。函数的改写也可以理解为是函数劫持的⼀种,但是这种⽅式太恶⼼了。作为⼀个劫持者,在绑票获得好处以后也应该遵守职业道德,把⼈原封不动地还回去,所以我们得在合适的地⽅把函数原本的功能给重新调⽤回来。
IIS7⽹站监控可以及时防控⽹站风险,快速准确监控⽹站是否遭到各种劫持攻击,⽹站在全国是否能正常打开(查看域名是否被墙),精准的DNS污染检测,具备⽹站打
开速度检测功能,第⼀时间知道⽹站是否被⿊、被⼊侵、被改标题、被挂⿊链。精益求精的产品,缺陷
为零数据提供!
它可以做到以下功能:
1、检测⽹站是否被⿊
2、检测⽹站是否被劫持
3、检测域名是否被墙
4、检测DNS是否被污染
5、⽹站真实的完全打开时间(独家)
6、拥有独⽴监控后台,24⼩时定时监控域名
官⽅图:
推⽽⼴之,其实“劫持”这⼀概念我们经常会遇到,⽐⽅说某⽹站被运营商劫持了,在浏览该⽹站的时候会弹出运营商的⼴告。
现在我们来举个简单的例⼦,劫持⼀下alert()函数,为它增添⼀点⼩⼩的功能:
let warn = alert
window.alert = (t) => {
if (confirm('How are you?')) warn(t)
}
alert('')
可以打开开发者⼯具尝试⼀下这个例⼦,你会发现只有你在confirm⾥⾯点击了OK,才会弹出 。
接下来我们把这部分的内容封装⼀下,成为⼀个通⽤的函数:
const hijack = (obj, method, fun) => {
let orig = obj[method]
obj[method] = fun(orig)
}
⾸先我们定义了⼀个hijack函数,它会先把原函数给保存下来,然后执⾏⾃定义函数,⽽原函数将会在⾃定义函数内部进⾏调⽤。
然后我们来劫持confirm()函数:
hijack(window, 'confirm', (orig) => {
return (text) => {
alert('HELP ME PLZ')
if (orig.call(this, text)) {
alert('YOU SEEMS FINE AND I AM LEAVING, GOOD BYE!')
} else {
alert('HOLD ON! I AM COMING!!')
}
}
js脚本开发
})
这段函数的功能很简单就不详细说明了,直接调⽤confirm()你就知道了。
反劫持
新建⼀个页⾯,打开你的开发者⼯具控制台,输⼊alert,你会看到这样的输出:
function alert() { [native code] }
然后使⽤本⽂开头的那段代码,把alert()劫持⼀下,再重新在控制台输⼊alert,你会看到这样的输出:
function (t) => {
if (confirm('How are you?')) warn(t)
}
通过上述的例⼦可以知道,要看⼀个函数是否被劫持了,只需要直接把它打印出来即可。针对系统原⽣的函数, [native code]即代表它是纯净⽆污染的。
函数劫持的作⽤
除了为函数增加功能以外,还能够利⽤函数劫持去追踪恶意⽤户的信息。⼀般的XSS攻击会先利⽤alert()等能够输出信息的⽅法进⾏测试,这时候我们可以先对原⽣alert()进⾏劫持,向其输⼊追踪信息的代码,最后才把原函数释放出去。当恶意⽤户在测试alert()的时候就会⽴即被我们追踪,⽽他本⼈却⽆从察觉。
这⾥⾯是通过在存在漏洞的信任⽹站下正常登⼊,然后切换到已经恶意⽹站(这个时候信任⽹站不能登出),这时在恶意⽹站会吧返回的JavaScript脚本和信任⽹站返回的cookie⼀起重新发送给信任⽹站,从⽽获取信任⽹站的敏感信息
注意事项:
1、信任⽹站(步骤2)返回的内容必须是JSON数组,如果是JSON对象的话那么会发⽣JavaScript错误,但是我们可以在返回的时候检测返回的类型,如果是对象的话,那么我们也是可以在对象的前后
加上中括号
2、劫持与JavaScript Hijacking技术的关系是在步骤五上⾯体现的,在步骤五的实现上是⼀定要通过JavaScript劫持去重写对象中的⽅法,从⽽记录信任⽹站中敏感信息的功能,所以JavaScript Hijacking的实现与劫持密不可分
3、信任⽹站必须响应⼀个GET请求

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。