程序员让前端飞

【软件安全】一次投票活动带来的反思

2017-09-03  本文已影响0人  姚冰coding

【软件安全】一次投票活动带来的反思

作为一个开发人员,软件可用是最低要求,软件的健壮则是更高的要求,软件安全很多时候基本等于0。绝大多数企业的应用,都会忽略软件安全的因素,看不见的地方有时候才是真实的。

抽丝剥茧

投票页面:


遍历会员数量

通过跟踪Ajax请求,发下提交之后,触发ajax

submit?mid=314925&set=2&DATA=85%7C0&voteId=85&voteCateIds=0

修改其中的mid返回以下内容

{"data":null,"message":"会员信息不存在!","status":"FAILURE"}

通过遍历mid,可以遍历出他的会员数量!

刷票

原理和上面是一样的,我们修改mid之后,就可以伪造投票

网站架构

修改网址之后,返回404



JFINAL 1.6 这应该是个框架,经过查阅资料,发现这是个java框架,这时候事情就好办多了,我们稍微了解框架,就能获得这个后台页面的登陆地址。

获取网站数据

获得系统权限之后,事情就很简单了,系统总会要展示数据给前端,这时候基本就是ajax请求,我们看看他们的请求格式:

admin/member/list?sEcho=3&iColumns=12&sColumns=&iDisplayStart=0&iDisplayLength=14122&mDataProp_0=0&mDataProp_1=1&mDataProp_2=id&mDataProp_3=name&mDataProp_4=id_card&mDataProp_5=gender&mDataProp_6=card_no&mDataProp_7=birth&mDataProp_8=phone&mDataProp_9=&mDataProp_10=status&mDataProp_11=&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=false&bSortable_1=false&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=true&bSortable_7=true&bSortable_8=true&bSortable_9=false&bSortable_10=true&bSortable_11=true&name=&card_no=&phone=&_=1502437850901

重要的是这个字段

iDisplayStart=0&iDisplayLength=14122

他请求的是长度,我们可以通过修改iDisplayLength,获取所有资料。返回的数据包含了用户id,用户姓名,手机号,生日,地址,基本就是数据库所有字段了,开发根本没有做过滤!
可能他的SQL语句是这样:

SELECT * FROM table WHERE ID=id

数据分析

获取手机号之后,可以进行数据的分析,很容易看出这个活动的效果。

根据手机号获取归属地

https://github.com/SuperID/query-mobile-phone-area

根据归属城市获取地理坐标

https://github.com/lifebeatiful/lat_long_of_major_china_city

数据可视化

根据以上内容,结合百度的echarts,就可以实现数据的可视化!

fake

在查看数据的过程中,发现了大量的这样的数据



嘿嘿,原来虚假投票已经大量的开始了。

总结

产品的开发总是困难的,从想法到实现,总是一段漫长的旅程,我们在实现产品的同时,也要充分考虑安全的因数,特别是这种面向外部的系统~

上一篇下一篇

猜你喜欢

热点阅读