Webgoat ajax
2017-07-12 本文已影响0人
断弦Kaka
静默交易攻击(Silent Transactions Attacks)
要点:前台JS进行了用户身份校验,可直接调用接口或submitData(accountNo, balance)实现攻击
TIM截图20170712110400.pngfunction processData(){
var accountNo = document.getElementById('newAccount').value;
var amount = document.getElementById('amount').value;
if ( accountNo == ''){
alert('Please enter a valid account number to transfer to.')
return;
}
else if ( amount == ''){
alert('Please enter a valid amount to transfer.')
return;
}
var balanceValue = document.getElementById('balanceID').innerHTML;
balanceValue = balanceValue.replace( new RegExp('$') , '');
if ( parseFloat(amount) > parseFloat(balanceValue) ) {
alert('You can not transfer more funds than what is available in your balance.')
return;
}
document.getElementById('confirm').value = 'Transferring'
submitData(accountNo, amount);
document.getElementById('confirm').value = 'Confirm'
balanceValue = parseFloat(balanceValue) - parseFloat(amount);
balanceValue = balanceValue.toFixed(2);
document.getElementById('balanceID').innerHTML = balanceValue + '$';
}
function submitData(accountNo, balance) {
var url = 'attack?Screen=68&menu=400&from=ajax&newAccount='+ accountNo+ '&amount=' + balance +'&confirm=' + document.getElementById('confirm').value;
if (typeof XMLHttpRequest != 'undefined') {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject('Microsoft.XMLHTTP');
}
req.open('GET', url, true);
req.onreadystatechange = callback;
req.send(null);
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
var result = req.responseText ;
var resultsDiv = document.getElementById('resultsDiv');
resultsDiv.innerHTML = '';
resultsDiv.innerHTML = result;
}}}
危险指令使用(Dangerous Use of Eval)
在服务端验证所有用户输入的信息,这是一个不错的做法。如果未验证的用户输入直接通过HTTP 响应返回给客户端的话,往往会触发XSS 攻击。未验证的用户提供的数据结合了JavaScript 的eval()调用一起使用。在反射型XSS 攻击中,攻击者可以构造带有攻击脚本的URL,将其存储于其他站点,通过电子邮件,或者其他方式诱骗用户点击,达到XSS 的目的。
TIM截图20170712113033.png
输入123');alert(document.cookie);('
不安全的客户端存储(Insecure Client Storage)
STAGE 1:
- STEP1:点击优惠码输入框,查看调用的js脚本
- STEP2:JS脚本中存储了优惠码,且进行了加密
- STEP3:设置断点,得到加密后的优惠码
- STEP4:输入优惠码即可
STAGE 2:
查看页面元素,将readonly属性删除后,修改input的值为0,提交即可
认证缺陷(Authentication Flaws)
JSESSIONID=novalidsession