pikachu靶场实战:
水平越权:抓包改名字
垂直越权:
首先登录普通用户pikachu,可以看到对于普通用户pikachu来说只能看用户不能添加和删改。
把包发给repeater保存一下。
再登录普通用户:
在查看界面抓包,
打开repeater,用之前在admin账户时添加用户的数据包放包给界面。
但是这时账户并没有显示出来。原因是:
网站session还是普通用户的session,session是用来查看是否是权限对应人员操作的,也就是为了防止普通用户行使管理员权限。
在页面中查看数据包:
点击bp发送的新数据包(通常在第一个),点击编辑与重发,将当前用户凭据复制给bp的repeater中的用户凭据,这样网站就会以为是页面当前用户发送的数据包了。
再重新再repeater发包,新用户添加上去了。
漏洞的成因:
前端页面造成的漏洞。前端只进行了用户是否为管理员的验证,如果是管理员就给出对用户的操作界面。对于普通用户来说,界面只是没有给出对用户进行增删改的功能按钮的操作界面,并代表普通用户没有操作权限。
利用条件:
一. 获得有相应功能的数据包(比如管理员添加用户的数据包)
通过刚刚在pikachu靶场的实战,我们发现管理员的数据包是在我们已知管理员账号且已经有操作权限的情况下抓包的。如果我们不知道管理员账号密码怎么办呢?
1.普通用户前端有操作界面可以抓取数据包:如果用户界面有功能按键显示,但是没有权限操作,那么就利用当前用户权限实现越权。
2.测试获取管理员数据包:如果说这个网站可以找到源代码,那么我们可以将源代码下载到本地测试,在本地使用管理员用户进行抓包,再把包带到真实环境中去实现越权。
3.盲猜
二.对用户等级没有限制
网站只确定了用户的登录状态,在使用普通用户给网站发送含有管理员功能的数据包时并没有进行识别。没有验证用户的级别。所以存在越权问题。
burpsuit插件——Authz的使用
这个例子是发现了用户的card_id可以利用,再爆破card_id尝试水平越权。现在已经将爆破数据导出,在爆破的显示界面右键点击发送给Authz.
(黄框表示选中)
原理:是靠跳转型返回情况判断,如果不存在越权,那么会跳转到显示没有权限的页面,状态码会显示301、301之类的;如果没有拦截或存在越权,就会放回状态码200.
登录页面渗透思路
暴力破解/弱密码
如果网站是http,就尝试爆破。
如果是https就先在页面输入用户密码抓包看一下加密是什么形式的,如果无法得知爆破是无用的。如果是明文或者加密方式已知就可以爆破,识别出加密方式后可以宁密文使用同样的加密方式再爆破。
通过分析cookie检测代码发现,只要user变量不为空,那么就会跳转到login界面
如果是黑盒测试:
那么就要看数据包情况,看数据包有没有含有本网站的cookie值,而且此cookie值可操作,比如下图这个user会显示不同的用户名称,如果修改user后的参数会登录至不同账户。
验证码问题
验证码可修改接受者可将A账号的修改密码验证码接受者修改为B,这样A账号的验证码就会发到B的手机上,从而B可以重置A的账号密码例如A账号moblephone=13333888888 ,这点是可控的,我们修改为moblephone=18888888888,即可收到A账号的重置验证码
登录验证码可绕过可能存在万能验证码0000或者9999,不过此类情况较为罕见。更多的情况为修改返回包,可能会出现可绕过逻辑判断。
验证码可爆破验证码失效的时间过长,并且为纯数字或者过短字符,导致可被爆破。
验证码回显前端有的网站验证码会回显到前端,只需要抓包即可获得验证码
验证码不刷新验证码不会自动刷新,导致我们可一码多次使用,我们只需要输入一次验证码就可以让我们能够开始进行暴力破解。
验证码识别这里使用PKAV的验证码自动识别链接:https:///s/1-l16Nxse7SqQdgSiPZS2-A 提取码:szo2
目录/端口 扫描
多级别扫描,在枚举子目录的目录,很多时候可以找到突破口。
Nmap的强大功能能让我们第一时间获取网站的端口信息,而这些端口信息中常常可以给予我们非常大的帮助,例如开放了3389端口,或者一些敏感端口的探测
7.框架漏洞
寻找CMS,或者网页框架,以及某些厂商的服务存在漏洞例如Apache中间件组件Shiro反序列化漏洞
业务
数据篡改安全问题:
商品购买流程:
选择商品和数量-选择支付方式-生成订单编号-订单支付选择-完成支付
常见的篡改参数:(通过抓包观察)
商品编号ID:购买价格,购买数量,支付方式,订单号,支付状态等
修改订单号可以用便宜的覆盖贵的,先得到便宜的订单编号,再在贵的支付页面抓包,将订单编号修改为便宜的。就能用便宜价格买贵的了。
修改支付接口:比如将微信改为其它的某个支付接口,就可以把购买的钱打到自己账户了。
有支付接口才有支付状态。0/1修改支付状态,观察支付失败的状态进行修改。
常见修改方法:
替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等。
参考: https://www.secpulse.com/archives/67080.html
防御方法:
1.将价格等参数储存在数据库里,使用时以数据库中的值为准,防止在数据包中被篡改。
2.设置token,保证数据包唯一性,防止回退重放。
3.自动识别
2.构造正确的Response状态绕过验证码
客户端恢复的状态值,用来判断输入值正确与否
修改状态值要建立在服务器以本地返回状态值为准的情况下:
如果网站服务器以服务器校准为准,那么改数据包是没用的,如果以本地返回结果为准,那么修改就有意义。
修改本地返回结果状态码,步骤:
先注册一个自己的账号,修改密码,输入正确的验证码然后点下一步时抓包,发送给重发器,在回复中确认真实的返回状态并记录下来,比如说状态码为1或者其它语句。
然后换成要重置密码的账号,随便输验证码, 再通过bp中的功能抓取回复的数据包(上图)。
放包至显示含有状态码的数据包(如果直接有显示就不用放包,如下图):
再放包,页面就直接到重置密码的状态了。
3.session覆盖
验证安全:验证码/token
4.验证码爆破
在这种情况下要考虑验证码的存活时间等问题,还有输入手机时还要输入一个验证码的问题,对于第二种情况就要用到自动识别的插件了(pkav https fuzz)。
纯数字可以尝试爆破。如果是字母和数字字母还是大小写,或者验证码有时效,或者验证码有次数限制,那可以放弃了(大佬请忽略)。
6.找回流程绕过(跳过)
找回流程一般是发送验证码到用户手机上,用户在手机上接收验证码正确后跳转到第三个界面(重置密码界面)。
通过以上流程我们可以通过:先使用正常用户登录并记录下重置密码界面的地址和数据包,然后再换成未知密码的用户,输入验证码的步骤用浏览器截获数据包然后丢弃掉,直接跳过验证码的输入过程,进入第三步重置密码界面。
0x01 任意用户密码重置
方法一:密码找回的凭证太弱,为4位或6位纯数字,并且时效过长,导致可爆破从而重置用户密码。
比如说密码找回凭证为仅向用户手机发送4位纯数字验证码,那么就可以通过爆破出凭证。
方法二:验证码传输在数据包中。
方法三:输入好凭证后,重置密码时替换手机号
如果重置密码分为两步:第一步是输入手机号获取验证码并填入,正确后即跳转到下一步,然后就是输入新密码。
那么我们可以在输入新密码后抓包,替换手机号放包即可重置。
方法四:修改返回包内容,把错误状态改为正确的。
在输入手机号获取验证码后,随便输入一个数字。
然后抓包
方法五:获取验证码时手机号为明文,修改为自己的从而达到欺骗验证。
x02 支付漏洞
方法一:修改金额
确认支付时候抓包,截取返回包。也可以修改金额为负数。
0x03 任意用户未授权登录
方法一:登录时抓包,修改uid