======================================================
注:本文源代码点此下载
======================================================
主要内容:
网页ajax程序与服务器交互返回内容包括无格式文本,json串,xml串,回调的js代码,而这些返回的信息存在有哪些威胁呢?
dom-based cross-site scripting
lab: client side filtering
same origin policy protection
dom injection
xml injection
json injection
silent transactions attacks
dangerous use of eval
insecure client storage.
dom-based cross-site scripting
基于dom的css(即xss)漏洞
分析
基于dom的css(即xss)漏洞一般都是由于js没有对输入的参数作过滤,导致用户可以输入一些xss载体标签。
在输入框中,我们输入常规的字符发现上面都会出现hello, xxx的显示
找到输入框的html代码,在键盘输入之后会激活displaygreeting事件,并将输入框中的内容作为参数传入
查看displaygreeting函数displaygreeting没有对参数做任何过滤,直接就替换了greeting的内容,这样我们就可以分析页面代码直接输入想要的标签来进行攻击了
greeting标签的内容如下
方法
输入
或者
这样就可以发起csrf攻击了
但是这种漏洞的攻击模式在哪呢?需要用户打开这样的页面,还要骗取用户向这样的输入框里面输入攻击者发过去的信息,有难度,模式待研究….
lab: client side filtering
修改larry的id值,neville的id为112,选择larry,这样就可以看到ceo neville的信息了
由此可见,重要逻辑的判断千万不能放在客户端
same origin policy protection
同源保护
dom injection
这个漏洞的意思应该是我在输入框内输入字符的时候会有一个ajax请求到后台验证我输入的key是否合法,然后决定是否激活activate按钮,理论上应该是要返回我输入的内容,这样我在输入的内容里面插入js在返回的时候就会被执行,这样就可以修改activate按钮的属性达到dom injection的目的呀~
但是题目意思好像是要拦截返回包,修改返回包内容达到目的,我们简单点,直接改页面:
修改activate!按钮的属性,把disabled删去~
xml injection
查看accountid输入框:
当我们输入完6位accountid后,js会发起一个ajax请求:
http://hacker.qq.com:8080/webgoat/attack?screen=3825&menu=400&from=ajax&accountid=836239
返回包内容为:
webgoat mug 20 pts
webgoat t-shirt 50 pts
webgoat secure kettle 30 pts
然后回调calback()函数
题目的意思是我们可以修改返回包的内容,但是我修改了n次总是没有成功。。。
所以只能通过修改页面代码来达到目的了,方法如下:
安全中心xml注入漏洞(from jima’s ppt)
json injection
这个和上面的xml injection一样,不过这次服务器返回的是json串
{
\"from\": \"boston\",
\"to\": \"seattle\",
\"flights\": [
{\"stops\": \"0\", \"transit\" : \"n/a\", \"price\": \"$600\"},
{\"stops\": \"2\", \"transit\" : \"newark,chicago\", \"price\": \"$300\"}
]
}
我们把600改成一个较小的值就可以了
同样是修改callback函数内的返回值,req.responsetext的值还是没修改成功,直接修改了card的值,方法如下
这个xml injection和json injection漏洞的做的有点牵强,应该要有用户提交数据,然后提交的数据被包装到一个xml或者json里面结果,而数据没有过滤就被包装,破坏了预期的xml或这json格式,导致页面显示不正常
silent transactions attacks
这个案例里面我们点击”confirm”之后,js会校验余额是否足够然后给后台发送转账申请,,如图:
我们的余额是11987.09,而我们需要200000,怎么办呢?
我们跟踪js到判断余额的地方,将我们的balancevalue修改得比我们的amount大一点就可以了~
另外一种方式就直接抓个包:
http://hacker.qq.com:8080/webgoat/attack?screen=4075&menu=400&from=ajax&newaccount=1&amount=2000000&confirm=transferring
修改amount的值,发送,返回
the transaction has completed successfully.
dangerous use of eval
这个漏洞的威胁在于,回调函数使用了eval(“返回包内容”),而返回包的内容用户是可以自定义的
点击” purchase”我们发现会有弹出框,内容为我们填入的number和code,如果我们在number和code里面填入js会怎样呢?
我们跟踪purchase按钮的提交事件:
在purchase函数中我们没有发现alert(“”)的地方,继续寻找
终于在makexhr函数中发现了eval的踪影~
而我们一直寻找的alert就在这里~
http_request.responsetext的内容:
"\r\nalert('purchase completed successfully with credit card \"4128 3214 0002 1999\" and access code \"123\"');\r\n"
了解原理后,我们尝试修改number值,插入js代码运行
如下,返回包中标记红色的就是number的内容
"\r\nalert('purchase completed successfully with credit card \"4128 3214 0002 1999\" and access code \"123\"');\r\n"
我们尝试闭合语句,');alert('xss');('
这样子就可以插入任意的js,来执行我们想要的操作了~
insecure client storage
这个漏洞在于把信息(coupon code)存储到了客户端
查看coupon code的事件,找到验证code的js
在isvalidcoupon中发现:
搜索coupons发现在coupon code 存储在js文件顶部:
这样任何访问页面的用户就可以免费获得这些code了
---jonniexie
---2010年5月
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
本文详细分析了网页Ajax程序与服务器交互过程中存在的威胁,包括DOM-based XSS、客户端过滤、同源策略、DOM注入、XML注入、JSON注入、静默交易攻击、危险的eval使用和不安全的客户端存储等。并通过具体实例展示了如何利用这些漏洞进行攻击,以及防范措施,旨在提高开发者对Ajax安全性的认识。



















805

被折叠的 条评论
为什么被折叠?



