护网面试总结


首先看简历

简历不要乱吹,会什么就写什么;
只要你写在简历上的面试官都会着重问。

第一个问题

基本上第一句是先让你做个自我介绍
你说的东西后面一定会问下去,所以建议说点项目或者设备的东西,先不要这么快上强度。

判断恶意外连/分析威胁情报
  1. 首先外连是从内到外
  2. 查看外连使用的协议
  3. 查看ip,看流量,看告警分析,看返回包、状态码
反序列化漏洞

Log4j
Log4j是由Apache提供的日志操作包,用于帮助用户处理日志信息。
该漏洞主要是由于日志在打印时当遇到${后,以:号作为分割,将表达式内容分割成两部分,前面一部分prefix,后面部分作为key,然后通过prefix去找对应的lookup,通过对应的lookup实例调用lookup方法,最后将key作为参数带入执行,引发远程代码执行漏洞。

核心原理为,通过Lookup接口+LADP,从服务器请求下载了存在恶意payload的class文件,由于日志检测时,存在${则触发替换机制,导致了表达式被替换成了lookup查找到的恶意payload,在请求过程中被实例化解析执行了。

日志在打印时当遇到${后,Interpolator类以:号作为分割,将表达式内容分割成两部分,前面部分作为 prefix,后面部分作为 key。然后通过prefix去找对应的 lookup,通过对应的lookup实例调用lookup方法,最后将key作为参数带入执行。

JNDI注入主要是用过下载远程class,来运行恶意代码。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务。

Shiro
shiro提供记住密码功能
Payload产生的过程:命令=》序列化=》AES加密=》base64编码=》RememberMe Cookie值
利用:用生成的Payload,构造数据包,伪造cookie发送payload
【SHIRO-550】
shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:
得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化
AES的密钥是硬编码在代码里,就导致了反序列化的RCE漏洞
【SHIRO-721】
不需要key,利用Padding Oracle Attack构造出RememberMe字段后段的值结合合法的
RememberMe cookie即可完成攻击
【两者区别】
shiro550使用可以使用已知密钥碰撞,但是shiro721由系统随机生成
550先验证”rememberMe” Cookie的值,再进行身份验证,因此可以绕过身份认证达成未授权访问
721登录时先进行身份验证,再验证”rememberMe” Cookie的值,所以需要一个可用的会话来利用
最后:shiro登录流程可以自定义

weblogic
weblogic就是把java应用程序运行起来,并提供服务的一种程序。

  1. weblogic控制台的7001端口,默认会开启T3协议服务,T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。
  2. weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

fastjson
正常请求是get请求并且没有请求体,可以通过构造错误的POST请求,即可查看在返回包中是否有fastjson这个字符串来判断
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes生成java实例,这就达到fastjson通过字段传入一个类,再通过这个类被生成时执行构造函数
【无回显怎么办】

  1. 一种是直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过http访问就可以直接看到结果
  2. 通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了
  3. 直接将命令执行结果回显到请求Poc的HTTP响应中

Jboss
Jboss是一个管理EJB的容器和服务器。
下面是三个JBoss反序列化漏洞:
漏洞存在/jbossmq-httpil/HTTPServerILServlet中
漏洞存在/invoker/readonly中
漏洞存在/invoker/JMXInvokerServlet中
程序获取http请求数据保存到httpRequest中,进一步处理后保存到变量ois中,然后程序没有对该数据进行过滤,直接使用readObject()方法进行反序列化。

Python
Python内置了很多序列化/反序列化的方式,最常用的有json、pickle、marshal这三种。
json较为安全,因为它序列化后的字符串长度最小。
漏洞产生的原因在于其可以将自定义的类进行序列化和反序列化。反序列化后产生的对象会在结束时触发__reduce__()函数从而触发恶意代码。reduce()类似与PHP中的wakeup,在反序列化的时候会自动调用。
防御:
1、用更高级的接口__getnewargs()、getstate()、setstate()等代替reduce()魔术方法;
2、进行反序列化操作之前,进行严格的过滤,若采用的是pickle库可采用装饰器实现。

PHP
以前的文章已经做出说明,不再重复叙述。

有哪些常见的框架/中间件漏洞

Python_Django
目录遍历漏洞、重置密码漏洞、SQL注入漏洞、任意代码执行

Python_Flask
SSTI模板注入漏洞(后面再学习)

Python_Web2py
本地文件包含漏洞、输入验证漏洞

Python_Tornado
Tornado是非阻塞式服务器,而且速度相当快
文件读取漏洞:os.path.abspath函数获得的路径,是没有结尾处的”/“的,因此可以自己构造路径
模板注入漏洞:同样后面再学习

Python_Scrapy
scrapyd未授权访问漏洞:6800端口可以部署恶意的scrapy包到云服务,进而获取服务器权限
Scrapy反序例化漏洞

struts2
struts是java的web框架
在注册或登录页面,提交失败后一般会默认返回之前提交的数据
由于后端使用%{value}对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行。
……

weblogic
weblogic是java的web框架
弱口令漏洞:


用户名:weblogic、system、admin、WebLogic
密码:weblogic、weblogic123、password、security、system、admin、WebLogic
然后在上传处上传一个jsp类型的小马的war包来拿到shell

任意文件读取漏洞:


http://ip:7001/hello/file.jsp?path=  #接文件路径
Weblogic 后台的密文与密钥这两个文件分别为 config.xml 和 SerializedSystemIni.dat

未授权远程命令执行漏洞:


http://ip:7001/console/css/%252e%252e%252fconsole.portal
或
http://ip:7001/console/images/%252e%252e%252fconsole.portal
或者构造一个反弹shell XML 文件,通过访问这个文件来执行命令
远程代码执行漏洞分类
  1. 直接调用系统函数例如exec
  2. 把序列化的包反序列化的时候调用不当出现了rce
常见反序列化的流量特征

shiro就看cookie中rememberMe字段,什么都要从这里传
fastjson:可以在提交的包中找找json格式的数据,重点看一下有无rmi或者出网的一些行为,(在十六进制中会呈现ACED开头,这段不确定)
st2-045:请求头中的Content-Type字段

问漏洞题不会回答怎么办
  1. 先讲漏洞原理
  2. 漏洞特征,流量,返回码
  3. 结合设备特性讲
sql注入

报错注入


updatexml()         是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue()      是mysql对xml文档数据进行查询的xpath函数
floor()             mysql中用来取整的函数
exp()               此函数返回e(自然对数的底)指数X的幂值

时间盲注


sleep()             直接延迟时间
benchmark()         通过计算md5消耗时间

堆叠植入


mysqli_multi_query()    可以使用;堆叠多条语句

宽字节注入


使用PHP连接Mysql的时候,当设置"character_set_client=gbk"时会导致一个编码转换的问题
mysql在使用GBK编码的时候,会认为两个字符是一个汉字
GBK就是常说的宽字节之一,实际上只有两个字节
前一个ASCII码要大于128,才到汉字的范围

防护方案

  1. 预编译
  2. 限制长度
  3. 加WAF
  4. 通信加密
    其中预编译:
    因为sql注入是因为动态字符串的拼接导致sql命令发生改变,然后编译并且执行错误的结果。
    而sql预处理则是提前“告诉”sql语法处理器,提前声明并且编译特定格式的sql语句,然后将所有用户的输入视为纯字符串参数,最后组成查询语句。

sql注入的进一步利用

  1. 拖库
  2. 在有绝对路径和into outfile函数时写shell到web目录下
  3. 服务器超管,获取服务器管理员权限
  4. mssql2005之前在SQLsever利用xp_cmdshell提权
  5. UDF提权是用户自定义函数,写一个恶意的dll到系统system32目录下(定义一个可以执行系统命令的函数)
常见的解析漏洞有哪些
  • IIS 6.0 /xx.asp/xx.jpg “xx.asp”是文件夹名
  • IIS 7.0 /7.5默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析
  • Nginx 版本小于等于 0.8.37,利用方法和IIS7.0/7.5一样,Fast-CGI关闭情况下也可利用。空字节代码 xxx.jpg.php
  • Apache上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀
  • lighttpd xx.jpg/xx.php,
ISS服务器要做哪些方面保护措施
  1. 保持 Windows 升级:
  2. 使用 IIS 防范工具
  3. 移除缺省的 Web 站点
  4. 如果你并不需要 FTP 和 SMTP 服务,请卸载它们
  5. 有规则地检查你的管理员组和服务:
  6. 严格控制服务器的写访问权限
  7. 设置复杂的密码
  8. 减少/排除 Web 服务器上的共享
  9. 禁用 TCP/IP 协议中的 NetBIOS:
  10. 使用 TCP 端口阻塞
  11. 仔细检查*.bat 和*.exe 文件: 每周搜索一次*.bat
  12. 管理 IIS 目录安全:
  13. 使用 NTFS 安全:
  14. 管理用户账户
  15. 审计你的 Web 服务器

评论
  目录