今天是5月5日,劳动节即将结束,考虑到自己对web安全虽然懂一些,但是思路依然不够清晰,并且面试的时候,有些不知道怎么表达。故决定有时间就写一写,希望可以和大家一起学习,共同进步。
也希望大家可以积极留言,有什么好的想法,一起探讨。因为这方面涉及的内容较多,需要不断添加,欢迎大家发表意见。
CTF 工具下载资源库
漏洞原理: redis,俗称中间件,用于数据库、缓存和消息中间件,默认情况下,会绑定在6379端口 。如果没有对其进行相关的策略,就会将redis服务暴漏在公网上。如果在没有设置密码认证的情况下 ,会导致任意用户在可以访问目标服务器的i情况下未授权访问redis以及读取redis的数据。同理,可以通过redis提供的config命令,对文件进行写操作,将自己的公钥写入到目标服务器的、root/.ssh文件夹的authotrised_keys文件中,从而使用对应的私钥直接使用ssh服务登录目标服务器。(黑体部分,是redis漏洞成立的必须条件)
相关漏洞解析网站
附一张图片,证明可行:(左图是redis连接,并写入shell;右图是菜刀连接)
预防措施:
(1)默认只对本地开放,绑定IP
(2)添加登录密码
(3)修改对 外开发的端口
(4)用低权限来运行redis服务
(5)采用防火墙iptable来配合,限制IP。
漏洞原理: 宽字节注入源于程序员设置Mysql连接时错误配置为:set character_set_client=gbk。正常的情况下,当GPC开启或使用addslashes函数过滤Get和Post提交的参数时,会将'转义成’;但是如果存在宽字节注入,我们输入%df%27时,首先经过上面提到的单引号转义为%df%5c%27,然后在数据库查询前由于使用了GBK多字节编码,即在汉字编码范围内两个字节会被编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成了汉字“運”,而单引号逃逸了出来,从而造成了注入漏洞。
防御措施:
(1)使用mysql_set_charset(utf8)指定字符集。
(2)使用mysql_real_escape_string进行转义。
附一张图片,证明可行:
此外关于数据库注入,有一些其他疑问可以分享给大家:(其实是我之前遇到的一些面试题,当时突然遇到,自己没有讲明白)
如何判断自己入侵的数据库类型呢?
一般的sql注入的流程是什么,以mysql为例。
当我们的后台遭遇大规模的sql报警,该怎么办?
(1)sql注入是程序开发人员在开发过程中,编程不规范,没有过滤掉一些敏感字眼,从而导致用户通过一些不合法输入,欺骗服务器执行恶意的sql命令。具体的sql注入,可以分为这几种:布尔型注入、报错注入、延时注入、联合查询注入等。确定数据库类型,可以大大提升我们的办事效率。常遇到的数据库有:Oracle、 mysql、sql server、access、mongodb等。
判断方法:使用辅助的符号来判断,如注释符号/*和--+等;使用特定的函数来判断,比如len和length、version()和@@version;利用错误信息;数据库服务器的系统变量不同。
服务器类型分析
(2)一般的sql注入流程是:
信息收集(nmap -T4 -A -v ip ),收集当前开放的端口;
找到注入页面,and 1=1和and 1=2验证存在sql注入;
order by 4,判断字段;id=-1 union select 1,2,3,4判断显错位;
union select 1,database(),3,4 判断数据库类型;
union select 1,table_name,3,4 from information_schema.tables where table_schema='数据库' --+获取数据库的表名;
union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='表名',获取字段;
union select 1,group_concat(user),3,4 from '表名',获取字段信息;
也可以利用sqlmap来实现上面的自动化注入。
sql注入的总结
(3)利用后渗透的思维,当服务器发起大量的sql注入的报警时,应该怎么做呢?
首先需要保证正常的业务,可以关闭一些不必要的应用,腾出资源,保证业务的正常进行。 一般情况下,CPU都有一个阈值,需要查看后台的数据包接受情况,确定是否存在丢包现象。 查看日志和流量数据包,检查短时间内,数据包发送方及其发送次数,还有数据包的大概内容。对于可疑的IP,立即封禁,并在适当情况下,对其溯源。 检查防火墙以及查看攻击方常攻击的端口和服务,对于不必要的,建议关掉;然后将一些默认端口,改成其他的,并严格控制不能存在弱密码。对于一些关键核心业务,建议绑定IP,并降低权限运行,避免攻击方获取最高权限。
基础知识: 序列化就是把对象转换成字节流,便于保存在内存、文件和数据库中;反序列化,就是逆过程,由字节流还原成对象。 Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,ObjectInputStream类的readObject()方法用于反序列化。
漏洞原理: 形成漏洞的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制。
CVE-2017-12149 : 漏洞影响5.x和6.x版本的JBOSSAS。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-6-9 23:31
被奋进的小杨编辑
,原因:
上传的附件: