Authentication Flaws-Password Strength
介绍了不同复杂度的密码需要破解的时间,给的网站
https://howsecureismypassword.net
尼玛根本打不开,已经不存在了貌似,翻墙也没有
Authentication Flaws-Forgot Password
题目的所有目的都是告诉你有些忘记密码的问题太简单,可以直接猜出来….尼玛…猜出来..猜出来..
- 输入admin
- 密码问你最喜欢的颜色
- 颜色不就没几种么
- 猜红黄绿三原色,然后green就猜中了
Authentication Flaws-Multi Level Login 1
这个题目坏掉了,题目的本意是第二步提交TAN#值的时候,有个叫hidden_tan的隐藏参数,来告知客户端哪个TAN值被用掉了,只需要修改这个值,就可以再次利用被使用过的TAN
可是我使用Jane和tarzan登录之后,第二次再登录不能用了…不知道是不是我理解错了.还是!!真的坏掉了!!
Authentication Flaws-Multi Level Login 2
两步验证的错误,意思是让你使用Joe和banana这个账户来登录Jane,因为第二步有个input的值叫hidden_user,在使用了Joe登录后,用户信息会被存在这个字段在第二步发送,所以只需要修改这个字段为Jane,就可以登录Jane
Buffer Overflows-Off-by-One Overflows
这一章节是为了介绍内存溢出带来的危害…但是题目感觉是为了出题而出题,并没有真实还原一个内存溢出造成的BUG
- 第一步让你提交入住等级,姓名.房间号
- 第二步让你选择入住时间
- 选择成功会返回你的姓名和房间号
这里对第三个参数填充超级大的数据,比如大于4096位的字符串,就可能造成内存溢出漏洞,从而返回VIP客户的房间号和姓名
大坑来了
这个题目的想法是好的,目的在于输入框输入位数有限制,那么可以通过拦截报文,然后使用Intruder进行爆破,填充超级大的数据来造成内存溢出,但是,这里并没有真正还原了一个内存溢出错误,而是通过以下代码
// And finally the check...
if(param3.length() > 4096)
{
ec.addElement(new Input(Input.hidden, "d", "Johnathan"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "e", "Ravern"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "f", "4321"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "g", "John"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "h", "Smith"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "i", "56"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "j", "Ana"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "k", "Arneta"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "l", "78"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "m", "Lewis"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "n", "Hamilton"));
ec.addElement("\r\n");
ec.addElement(new Input(Input.hidden, "o", "9901"));
ec.addElement("\r\n");
s.setMessage("To complete the lesson, restart lesson and enter VIP first/last name");
}
仅仅是检查了第三个参数的长度,来增加返回报文,伪造了一个看似内存溢出的漏洞,十分坑爹….所以我还是不知道到底内存溢出漏洞咋产生的…
如何使用intruder爆破
我们要爆破的是第二个界面点击”Accept Terms”的链接,拦截下之后点击”Action-Send to intruder”
- 选择Sniper模式
- 点击Clear清除所有爆破点,然后选中114这个房间号码,点击Add设置为爆破点
- 进入Payloads标签页
- 选择用Character Blocks(字符串块)填充
- 基础字符串是A,选择最短位数4096最长位数10240,步长50
这个Character Blocks是什么意思呢?就是代表用4096位的A开始然后50位50位的依次加长长度,直到达到10240位,然后点击Start Attack,查看大于4096位之后的结果,就可以看到模拟出的内存泄漏信息
Code Quality-Discover Clues in the HTML
这一篇主要在讲,没事不要他娘的乱写备注…比如这个作者把管理员用户名密码写备注里了
<!-- FIXME admin:adminpw -->
<!-- Use Admin to regenerate database -->
Concurrency-Thread Safety Problems
线程安全问题,有些程序员写代码的时候喜欢各种用Static/Const之类的,觉得自己对内存了如指掌,吊的不知道哪里去了.但是往往忽略了多线程的问题,比如这个问题的源码
private static String currentUser;
private String originalUser;
这里currentUser使用了static静态变量,又没有做线程保护,就会造成浏览器Tab1访问这个页面时,Tab2同时访问,数据就会被替换掉
Concurrency-Shopping Cart Concurrency Flaw
如上题一样,也是由于使用了静态变量却没有做线程保护,导致的购物车多线程支付问题.