欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

WebGoat笔记之三-- AJAX Security

程序员文章站 2022-09-21 16:23:45
主要内容: 网页Ajax程序与服务器交互返回内容包括无格式文本,Json串,Xml串,回调的Js代码,而这些返回的信息存在有哪些威胁呢? DOM-Based cross-site scri...
主要内容:

网页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的显示

WebGoat笔记之三-- AJAX Security

找到输入框的HTML代码,在键盘输入之后会激活displayGreeting事件,并将输入框中的内容作为参数传入

WebGoat笔记之三-- AJAX Security

查看displayGreeting函数displayGreeting没有对参数做任何过滤,直接就替换了greeting的内容,这样我们就可以分析页面代码直接输入想要的标签来进行攻击了

WebGoat笔记之三-- AJAX Security

greeting标签的内容如下

WebGoat笔记之三-- AJAX Security

方法

输入 <img src=x onerror=alert(document.cookie)>

或者 <img src=”http://www.paipai.com/delitem?itemid=232131312”>

这样就可以发起CSRF攻击了

但是这种漏洞的攻击模式在哪呢?需要用户打开这样的页面,还要骗取用户向这样的输入框里面输入攻击者发过去的信息,有难度,模式待研究….

LAB: Client Side Filtering

修改larry的id值,Neville的ID为112,选择larry,这样就可以看到CEO Neville的信息了

WebGoat笔记之三-- AJAX Security

由此可见,重要逻辑的判断千万不能放在客户端

Same Origin Policy Protection

同源保护

DOM Injection

这个漏洞的意思应该是我在输入框内输入字符的时候会有一个ajax请求到后台验证我输入的key是否合法,然后决定是否激活Activate按钮,理论上应该是要返回我输入的内容,这样我在输入的内容里面插入Js在返回的时候就会被执行,这样就可以修改Activate按钮的属性达到Dom Injection的目的呀~

但是题目意思好像是要拦截返回包,修改返回包内容达到目的,我们简单点,直接改页面:

修改Activate!按钮的属性,把disabled删去~

WebGoat笔记之三-- AJAX Security

XML Injection

查看accountID输入框:

WebGoat笔记之三-- AJAX Security

当我们输入完6位accountID后,js会发起一个ajax请求:

http://hacker.qq.com:8080/webgoat/attack?Screen=3825&menu=400&from=ajax&accountID=836239

返回包内容为:

<root>

<reward>WebGoat Mug 20 Pts</reward>

<reward>WebGoat t-shirt 50 Pts</reward>

<reward>WebGoat Secure Kettle 30 Pts</reward>

</root>

然后回调calback()函数

WebGoat笔记之三-- AJAX Security

题目的意思是我们可以修改返回包的内容,但是我修改了n次总是没有成功。。。

所以只能通过修改页面代码来达到目的了,方法如下:

WebGoat笔记之三-- AJAX Security

安全中心XML注入漏洞(from jima’s ppt)

WebGoat笔记之三-- AJAX Security

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的值,方法如下

WebGoat笔记之三-- AJAX Security

这个XML Injection和JSON Injection漏洞的做的有点牵强,应该要有用户提交数据,然后提交的数据被包装到一个Xml或者Json里面结果,而数据没有过滤就被包装,破坏了预期的Xml或这Json格式,导致页面显示不正常

Silent Transactions Attacks

这个案例里面我们点击”Confirm”之后,JS会校验余额是否足够然后给后台发送转账申请,,如图:

我们的余额是11987.09,而我们需要200000,怎么办呢?

我们跟踪Js到判断余额的地方,将我们的balanceValue修改得比我们的amount大一点就可以了~

WebGoat笔记之三-- AJAX Security

另外一种方式就直接抓个包:

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(“返回包内容”),而返回包的内容用户是可以自定义的

WebGoat笔记之三-- AJAX Security

点击” Purchase”我们发现会有弹出框,内容为我们填入的number和code,如果我们在number和code里面填入Js会怎样呢?

我们跟踪Purchase按钮的提交事件:

WebGoat笔记之三-- AJAX Security

在purchase函数中我们没有发现alert(“”)的地方,继续寻找

WebGoat笔记之三-- AJAX Security

终于在makeXHR函数中发现了Eval的踪影~

WebGoat笔记之三-- AJAX Security

而我们一直寻找的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

WebGoat笔记之三-- AJAX Security

在isValidCoupon中发现:

WebGoat笔记之三-- AJAX Security

搜索coupons发现在coupon code 存储在Js文件顶部:

WebGoat笔记之三-- AJAX Security

这样任何访问页面的用户就可以免费获得这些code了