其实这次web题目质量一般,可能web只有一道题目做起来让人觉得知识点和考察方式都很好,既简单又困难的那种感觉吧,web题目应该是AK了,但是有一部分没啥营养,这里就记录下两道题目:
1、简单的php
2、高手高手高高手
简单的php
这道题目其实以前也遇到过,不过这里过滤了更多的东西,中心思想还是一致的,我们首先看代码:
1 |
|
其实这次web题目质量一般,可能web只有一道题目做起来让人觉得知识点和考察方式都很好,既简单又困难的那种感觉吧,web题目应该是AK了,但是有一部分没啥营养,这里就记录下两道题目:
1、简单的php
2、高手高手高高手
这道题目其实以前也遇到过,不过这里过滤了更多的东西,中心思想还是一致的,我们首先看代码:
1 | <?php |
最近写代码遇见了几次python的循环调用问题,主要原因肯定是编码不规范,应该是共同调用的代码抽离出来重新封装,而不是B里面有A需要的代码,同时A里面也有B需要的代码,这样交叉引用python就会报错
当我们import一个python文件时,python会首先去查找这个文件之前是否被import过,如果这个文件之前有被import过,就不会重新再import一次。否则会倒入,并执行一边代码。
python核心编程这本书也说过这个问题:
加载模块会导致这个模块被执行。也就是被执行模块的顶层代码将直接被执行。这通常包含设定全局变量以及类和函数的声明。一个模块只被加载一次,无论它被导入多少次。这可以阻止多重导入时代码被多次执行
J2SE,是java2的标准版,主要用于开发桌面的应用程序。
J2SE包含了构成java语言核心的类:数据库连接、接口定义、输入输出、网络编辑等。
J2EE, 是java2的企业版,主要用于分布式的网络程序的开发。
j2ee包含j2se中的类,还包含用于开发企业级应用的类,也包含企业应用中很多的API。例如:JDBC、JNDI、EJB等。
不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识
JNDI全称Java Naming and Directory Interface 翻译过来就是Java命名和目录接口。这个概念搞出来就是为了方便人们来记录一些不容易记录都内容。有点类似于域名和ip的映射。所以如果要深入的学可能会被绕进去,现在你可以简单的理解为他是一个字典,给不同的对象和属性(value)取名(key)。到时候好找出来用。
网上比较经典的例子就是JDBC连接数据库:
1 | public class Scr { |
端口尽量修改非默认端口,除了是规避特征,也防止被扫。这个修改端口非常简单,这里不再赘述。
这里cobalstrike有两个地方需要用到证书,一个是和CS的通信,另一个则是我们创建https监听器时也需要证书,这两个都有默认自带,但是肯定是有特征的,所以都需要自己生成。一般网上教程会忽略对https证书的修改,可能也会被杀软标记。
我们这里直接使用linux自带的keytool命令生成证书
1 | keytool -keystore ulike.store -storepass xxxx123 -keypass xxxx123 -genkey -keyalg RSA -alias ulike.com -dname "CN=US, OU=ulike.com, O=Sofaware, L=Somewhere, ST=Cyberspace, C=CN" |
这里面的密码我们要记住,后面定制profile还需要使用。
你可以生成两个不同的证书,也可以都适用这一个证书。当然网上还有教程推荐生成带绿标的https证书,我觉得没有那个必要,能用就行,如果你需要一个真正合规的https证书,那你需要申请一个域名,然后去cloudfare或者freessl网站上去申请一个证书,也是免费的。
流量特征如果你有深厚的编程功底,可以直接去二开CS,很多安全大厂也是这样做的。当然我没有😂,所以我选择定制一下profile, cs的profile文件可以修改流量特征以及修改beacon的默认行为,目的是为了让通信变得更加隐蔽。
如果你对profile的语法还不够了解,甚至不知道是什么,推荐去读一下官方文档或者这个:https://blog.zsec.uk/cobalt-strike-profiles/
我们这里不直接提供profile 样例,而是说一下应该注意什么:
首先是要修改https http 的各种流量特征,加一些自己的定制字段和header伪造为正常的流量。
修改pipename管道名称
绑定https证书
我们绑定上面的证书在profile中可以这样写
1 | https-certificate { |
至于其他的一些细节,比如进程注入、反射的beacon.dll文件的具体特征等,可以去github上查找红队大佬的profile案例,理解后学习。每个人的写法不一致,而且被研究后也容易被针对。
有时候我们的流量免杀可能都做到位了,但是还是被杀,可以考虑下是不是vps被标记了。更换vps。或者在一开始使用的时候,就可以使用cdn,域前置技术,来规避vps的ip被直接标记。
同源策略是浏览器安全策略的核心,非同源不得交互,但是有时候一家公司有自己的不同业务,不同的子域名,或者说有合作方,不同的域名端口需要交互数据呢。这就是跨域的需求。
跨域目前一般常见两种方式:Jsonp、CORS、代理。
js在script标签中是不受同源策略限制的,我们也经常能看到<script src="http://xxx.xxx.xx.x/xxx.js">
,当然img也不受限制,但是img不太好做后续数据的处理。
jsonp的核心是在前端动态创建一个script标签。并设置src属性指向跨域的服务器。服务器返回包含json数据的javascript函数。前端接受到对应函数和对应的数据,直接执行处理就拿到了我们想调用接口拿到的数据。
demo
我们实现一个demo,后端用我比较熟悉的Flask
1 | from flask import Flask, request, render_template_string |
如果有浏览器访问/jsonp接口就会获取回调函数的名称,然后把这个接口需要传递的数据封装进去。然后前端代码如下:
1 | <!DOCTYPE html> |
前端请求http://localhost:5000/jsonp接口,并获取了数据打印。如果不使用jsonp,那么直接在当前域下请求别的域的接口是不合法的。所以jsonp解决了跨域问题。
优点:简单高效兼容性好
缺点:只支持GET请求,还有xss漏洞的奉献。(src的低危的主要贡献漏洞😂)
有些人看完上面的jsonp跨域可能想,为啥不能script标签里面执行AJAX的动态请求呢?
1 | <!DOCTYPE html> |
可以看到仍然被同源策略限制。
怎么解决呢?这里就是CORS了。
1、当浏览器发起跨域请求,它会先发送一个“预检(Preflight)”请求,该请求采用OPTIONS
方法,并携带诸如Origin
、Access-Control-Request-Method
和Access-Control-Request-Headers
之类的特定头信息,询问服务器是否愿意接受跨源请求。
2、服务器的回应是关键所在。如果服务器准许,它会回复一个包含Access-Control-Allow-Origin
、Access-Control-Allow-Methods
等头信息的“预检响应”,明确告诉浏览器哪些跨域行为是被许可的。
3、一旦服务器的“预检响应”亮绿灯,浏览器随即会发送正式的请求。服务器此时通过检查请求头的Origin
字段,决定是否允许访问资源,并在响应头中包含Access-Control-Allow-Origin
字段,列明哪些域名可以接收响应数据。
CORS不仅仅是关于XMLHttpRequest请求的,它还涵盖了其他安全机制,包括对cookies和认证的处理。大多数现代浏览器都已支持CORS,但一些旧版的浏览器,像是IE10及其以下版本,则不支持这项功能。
我们可以实现一个代理服务器来实现跨域,也就是A和B域之间有一个代理服务器。平常我们写python代码用requets请求百度,从来没有人拦截我们对吧,因为我们不是在浏览器操作,那我们可以请求一个我们自身的接口,这个接口从代码层再去另一个服务器拿数据再返回给前端,那这个接口就是一个代理。
通过实现代理来实现跨域也是一种方法,但是好像不太多见。
服务端代理代码:
1 | const express = require('express'); |
前端代码
1 | <!DOCTYPE html> |
不太明白一些面试总是会问的特别细,比如一些CORS字段什么的,CSP的一些字段等等,感觉太多啦 有时候确实记不住啊,看见知道是什么意思还不行吗?有点废脑子,有时候知道已经理解啦,但是还是记不住那些参数。
SSRF是非常容易忽略的一个漏洞,我甚至在渗透测试的项目中甚至不会去深究这方面的漏洞,因为它通常危害较小,并且极难利用。但是上次我在一个项目中发现了一个SSRF,并且同服务器还有另一个对内开放的网站,这样这个SSRF就为攻击者建立了一个从对外开放到网站渗透到对内开放的网站。最后利用SSRF探测到了对内开放的那个网站有sql注入,虽然没有getshell,但是还是引起了重视,SSRF在很多时候还是有用武之地的。
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。很晦涩!!!举个例子:服务端有一个在线加载图片的功能,你传入一个图片URL,网站就会加载出来对应图片,所以图片的URL是网站服务器去访问的,如果我们利用这点传入一些只有服务端才能进行访问的URL,比如不对外开放的后台地址,那么这个过程就是服务端的请求伪造。