WEB安全系列之如何挖掘XSS漏洞
来源:http://bbs.ichunqiu.com/thread-9177-1-1.html?from=ch
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
21public 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=newgoods_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
22function 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=newIQuery('goodsasgo');
$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