#知识点:
1、JS前端验证-文件上传
2、JS-Ajax传递-登录-状态
3、JS-Ajax传递-购物-参数
1、文件上传 - 类型 - 过滤
设计:通过JavaScript进行文件后缀筛选验证
首先我们进行文件上传操作的时候肯定会有对文件类型进行验证的东西,在前面我们也讲过这个源代码。而这个文件上传验证可以是php代码来实现,也可以是js代码来实现。
Js代码:
php代码:
php是后端语言,就好比你输入一个1,经过后端的php得到一个a,整个过程你只能看到一个a,你是看不到他的源代码的。而js代码不一样,他是前端语言,是可以直接在浏览器右键检查看到的。所以这两个的差异就体现出来了。由js代码编写的验证,是可以过滤的。这个验证就会直接失效。火狐浏览器怎么禁止javascript-百度经验 (baidu.com)。这个是链接,其他浏览器的禁用方法自己搜一下。禁用之后验证就会失效,所以上传文件的限制就没了。而php代码在服务器端,是没有办法过滤的。而判断是什么代码编写的,可以通过右键检查直接看代码,也可以通过看数据回显时间(看时间不太准确,毕竟这个东西跟网速有关)。
没禁用之前不可以上传php结尾的文件,禁用之后验证失效就可以上传了。
2、状态回显 - 登录 - 状态码
设计:通过Ajax传递数据进行用户登录验证
然后就是ajax进行验证的相关知识,这个ajax是由js开发的,可以认为是js里面进行数据交互的一个功能。既然js验证比较容易绕过,那这个ajax也一样,只不过方式不一样。
Ajax代码:
Ajax.php:
其中 js/jquery-1.12.4.min.js,这个是ajax需要引入的一个js文件,里面是封装好的一些函数。来让ajax实现数据的传递。还有就是res.infoCode会对infoCode(状态码)的值进行对接。
因为js和ajax是前端语言,在浏览器中,所以浏览器发送数据后,服务器进行返回数据包,然后通过浏览器的js,ajax代码进行解析。最终得到结果。而php则是直接得到结果,就算你把包改了,也没啥用,就直接自我安慰了。
登陆成功,infocode的值为1:
我们输入错误的账号密码,利用burp抓包,通过修改服务器的返回包,把0改成1,就可以实现登录。怎么抓返回的数据包呢,就是鼠标右键,点击下图中的按钮即可。这样一来,即使我们输入错误的账号密码也是可以成功登录。
重点:不是说验证代码是由js或则ajax写得就一定可以绕过,这要看登录网站的最终决定权在谁手里。看左侧图中,如果说登录网站后台的代码直接就在“alert('登录成功')”这一行后面,那么确实是成功绕过了,但如果不在,比如所在ajax.php这个里面那么就gg。也就是说如果这个“alert('登录成功')”就是简简单单告诉你成功登录了,那么屁用没有。(好像是说前端验证不太行,后端验证才行)
3、参数修改 - 购物 - 参数修改
设计:通过Ajax传递数据进行购物验证
设计1:商品价格以前端设置价格为准,数据接收价格后运算
设计2:商品价格以数据库对应价格为准,数据接收价格后运算
设计3:商品价格以数据库对应价格为准,数据只接受数量后运算
设计4:商品价格以数据库对应价格为准,数据只接受数量后做过滤运算
这里就是通过ajax传递数据进行验证,与上面的2状态会显的差不多,简单说一下。
案件背景:购买iphone,价格为8888。买东西就是看自己的钱和商品金额乘以商品数量。二者的比较。就能得知到底能不能购买成功。
设计1:这里的价格已经在前端设置好了,就是固定的8888,,本金就10000,那也就是说只能买一个,但是我么通过抓包,修改金额便可以想买多少买多少,比如把数据包中金额单价改成1元,那么就算我们买十台手机也是可以购买成功的。也可以通过修改返回的数据包,把状态码改成1,也是可以购买成功。这样显然是不行的,明显存在漏洞。我们接着看第二个。
设计2:这里的金额就不再是在前端规定好了,而是储存在数据库中,我么获取他的价格也是在数据库中获取。而最后能否购买成功,也是看金额乘以数量与自己的余额。和设计1没有什么本质区别,也是可以通过修改数据包来达到相应的目的,这里就不放代码截图,可以自己去资源库找一下。
设计3:这里的金额直接在后端固定死了,直接就是8888,也就是说你只能改数量了。但是你可以把数量改成小数或则负数。也是可以达到目的。也是存在漏洞。
设计4:这里对数量进行过滤,也就是说数量不可以是小数或则负数。这样来说是相对严谨的。
总结:php和js,ajax最大的区别就是说,一个在浏览器,一个在服务器,一个代码可以看到并进行修改。一个代码看不到。但并不是说可以修改就可以绕过,因为要看最后是以php代码产生的值为基准还是说以js代码产生的值为基准,如果说是js的值为基准,那么是可以的,相反便不可以。我觉得验证分为前端验证和后端验证,前端验证绕过的可能性比较大,后端的很难,然后就是说进入后台管理页面的那一行代码是由前端验证决定的还是后端验证决定的,就可以基本清楚能不能绕过了。
补充:可以通过看返回的数据包进行判断是什么代码进行验证,比如这个就是js的,像返回值中有json,code,msgbox这种的一般就是js的。