蜗蜗侠's Blog-关注网络安全移动版

主页 > 黑客/白帽 > WEB安全 >

如何挖掘XSS漏洞

0x01  前言   
     一天五篇文章之第一篇(答应坏蛋的)


0x02  什么是XSS漏洞   
     跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。


0x03  XSS漏洞的危害
     1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
     2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
     3、盗窃企业重要的具有商业价值的资料
     4、非法转账
     5、强制发送电子邮件
     6、网站挂马
     7、控制受害者机器向其它网站发起攻击


0x04  实战案例   
     iwebshop3.7.15071500版本。又兴趣的可以下载看一下
    /htdocs/iwebshop/controllers/seller.php
    goods_update是添加一个商品到数据库中,update()中过滤很少
   
[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
public function goods_update()
        {
                $id       = IFilter::act(IReq::get('id'),'int');
                $callback = IFilter::act(IReq::get('callback'),'url');
                $callback = strpos($callback,'seller/goods_list') === false ? '' : $callback;
 
                //检查表单提交状态
                if(!$_POST)
                {
                        die('请确认表单提交正确');
                }
 
                //初始化商品数据
                unset($_POST['id']);
                unset($_POST['callback']);
 
                $goodsObject = new goods_class($this->seller['seller_id']);
                $goodsObject->update($id,$_POST);
 
                $callback ? $this->redirect($callback) : $this->redirect("goods_list");
        }

后台读取数据的时候,是直接从数据库中读取。

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
function goods_list()
        {
                //搜索条件
                $search = IFilter::act(IReq::get('search'),'strict');
                $page   = IReq::get('page') ? IFilter::act(IReq::get('page'),'int') : 1;
 
                //条件筛选处理
                list($join,$where) = goods_class::getSearchCondition($search);
 
                //拼接sql
                $goodsHandle = new IQuery('goods as go');
                $goodsHandle->order    = "go.sort asc,go.id desc";
                $goodsHandle->distinct = "go.id";
                $goodsHandle->fields   = "go.*,seller.true_name";
                $goodsHandle->page     = $page;
                $goodsHandle->where    = $where;
                $goodsHandle->join     = $join;
 
                $this->search      = $search;
                $this->goodsHandle = $goodsHandle;
                $this->redirect("goods_list");
        }


     首先,商家添加一个商品,标题写
     
     后台访问时,弹框
     
     代码已成功在源码中。
     


0x05  修复建议   
     对参数进行过滤。
     PHP:htmlentities()或是htmlspecialchars()
     Python:cgi.escape()
     ASP:Server.HTMLEncode()
     ASP.NET:Server.HtmlEncode() 或功能更强的 Microsoft Anti-Cross Site Scripting Library
     Java:xssprotect(Open Source Library)
     Node.js:node-validator (责任编辑:蜗蜗侠)