【WebGoat笔记】之三 --- AJAX Security

本文详细分析了网页Ajax程序与服务器交互过程中存在的威胁,包括DOM-based XSS、客户端过滤、同源策略、DOM注入、XML注入、JSON注入、静默交易攻击、危险的eval使用和不安全的客户端存储等。并通过具体实例展示了如何利用这些漏洞进行攻击,以及防范措施,旨在提高开发者对Ajax安全性的认识。

======================================================
注:本文源代码点此下载
======================================================

主要内容:

网页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^)/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值