接着上篇日志来。
3-6 JSON Injection
首先在输入框里输入BOS和SEA,这时候触发AJAX,向服务器发送一个请求,服务器返回机票的价格信息,截取返回信息,修改成想要的内容(将第一个没有中转的机票改便宜点),即可提交过关。
或者不修改截取的信息,直接提交,发现机票价格是post过去的,改post过去的信息也行(最后一个值,%24是$符号,改后面的数字即可)。
两种方法均能过关。
经验教训:别用js了吧。。。。
3-7 Client Transations Attack
这关挺有意思,首先界面上有个confirm,然后通过点击抓包怎么也过不了关。然后仔细研究过关目标:Your goal is to try to bypass the user's authorization and silently execute the transaction.关键在于silently,所以猜测过关条件是在后台默默的不点击confirm进行转账操作。
也有两种方法过关:
第一种,分析js代码,发现提交的实质是submitData函数,该函数里通过js向服务器某个地址发送了一个GET请求,把这个url记下来,打到浏览器里,回车,过关。这个url大概是这样子的:
http://localhost/WebGoat/attack?Screen=40&menu=400&from=ajax&newAccount=1111&amount=222222&confirm=Confirm
第二种,直接调用submitData函数,本以为firefox在地址栏里直接输入javascript:submitData(1111,22222)就可以,结果貌似不能运行,看来出于某些原因或者某些选项没有打开不能直接在地址栏里运行js。这时候使用firefox的代码速记器(shift+f4),然后把那段代码复制上,运行即可。
经验教训:还是js惹的祸。
3-8 Dangerous use of Eval
这关有点意思,题目是让你用js通过alert的方法显示cookie。首先点击purchase会产生一个ajax请求,然后返回一个alert(...)代码,很明显浏览器会执行这段代码。首先我直接截取ajax的返回请求,把这段代码改了,然后没有通过。
其次通过分析发现,服务器端会直接不加任何修改的回传你输入的信息,比如这样:
alert('Purchase completed successfully with credit card "111" and access code "222“‘);
因此我们可以直接在浏览器里注入并提交js,这大概也就是本关的目的。
我使用我输入222的地方(第二个文本框)作为注入点,可以先想象一下注入后的代码的样子,例如:
alert('Purchase completed successfully with credit card "111" and access code "222"');alert(document.cookie+'""');
然后根据比较得出需要注入的部分:
"');alert(document.cookie+'"
提交后居然也没成功,而且没有显示cookie,截取ajax响应发现,居然给我把document.cookie+'""'的加号去掉了,导致语法错误,无奈在截取到的请求中自己手动加上一个加号,然后过关。