后缀大小写+空格绕过
# 后缀大小写 + 空格绕过
本次讲解后缀校验相关的简单绕过方式,大小写 + 空格绕过
以 Less-05 为例:
# 后缀大小写绕过
常规看后台源码
$is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm" ...
phtml解析审计+绕过
# phtml 解析审计 + 绕过
总结一下对于以下四种文件类型,可能的绕过方式:
.asp : .asa / .cer / .cdx
.aspx : .ashx / .asmx / .ascx
.php : .php4 / .php5 / .pthml
.jsp : .jspx / .jspf
# pthml 解析审计
其中,关于 pthml 可以去看一下 C:\phpStudyB\Apache\conf\httpd.conf 文件中对于 php 文件类型的解析
这里 .pthml 后缀的文件可以被后台解析成 .php
我们以 Pass-03 为例:
上传 backdoor.php,点击上传后,显示 “不允许上传.asp, .aspx, .php, .jsp 后缀文件!”
OK,我们看一下源码信息:
$is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $de ...
Content-type验证审计+绕过
# content-type 验证审计 + 绕过
本篇讲解对于文件上传漏洞中 ——content type 验证审计 + 绕过
# content-type 验证审计
来到 Pass-02
我们点击上传,会提示 “文件类型不正确,请重新上传”
不多说,直接开始抓包,看看怎么个情况。
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。
通用结构:
type/subtype
MIME 的组成结构非常简单;由类型与子类型两个字符串中间用 '/' 分隔而组成。不允许空格存在。
type 表示可以被分多个子类的独立类别。
subtype 表示细分后的每个类型
独立类型如下
text/plaintext/htmlimage/jpegimage/pngaudio/mpegaudio/oggaudio/*video/mp4application/*application/jsonapplication/javascriptapplication/ecmascriptap ...
前台JS验证审计+绕过
# 文件上传漏洞
在讲前台 JS 绕过之前,由于是文件上传漏洞探究系列的第一讲,先来简单介绍一下文件上传漏洞。
# 文件上传漏洞的原因
对于上传文件的后缀名 (扩展名) 没有做较为严格的限制
对于上传文件的 MIMETYPE (content-type,用于描述文件类型的一种描述方法),没有做检查
权限上没有对于上传的文件目录设置不可执行权限
web server 对于上传文件或者指定目录的行为没有做限制。
在 Web 中进行文件上传的原理是通过将表单设置为 multipart/form-data ,同时加入文件域,而后通过 HTTP 协议将文件内容发送到服务器,服务器端读取这个分段(multipart)的数据信息,并将其中的文件内容提取出来并保存。
通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名(为了防止重复),并且加上原始文件的扩展名来保存到服务器上。
# 文件上传漏洞的危害
上传 web 木马文件、控制 web 服务器文件、远程命令执行等
上传系统病毒、木马文件进行挖矿、僵尸网络
上传系统 ...
SQL注入防御
881d2a9d793d5558f4c5d7fc62042411cf78789d816c07caf10e349ab53763fc4406ac6aa8d29d42cadd709c9846848edc3ac8104b0a2aee2c589cb45a26d3d8b178130e12ad9309ce4576c62702a0acc5c5e0b2c404d7e4b61c4c97f4993f633823e83e93d4ffc19aec520e686b2b6b50ac5c2af583e8e5cea2dca26beef6e9d43e30cd5dba5681515560b65f29d028540c9afca386cb49bf2836dabbf17da15fe87d476fd265f53d877e4d01fd752763b21295d9881af287630fb6106cb80aa6bf01669d6e858c8f7ea7c57cfd480cae54afcc3200a38624701c979b4328fe806ec968b963706cbe3a08e55034f135c65bda6ee4575dbcd ...
绕过注入防御技巧
# 绕过各种注入防御
下面介绍几个绕过注入防御的知识:
# 绕过注释符过滤
常见注释符有: # 、 %23 、 --+
Less-23 为例
http://127.0.0.1/sqli/Less-23/?id=1
做以下尝试:
1.http://127.0.0.1/sqli/Less-23/?id=1'报错,syntax to use near ''1'' LIMIT 0,1' at line 12.http://127.0.0.1/sqli/Less-23/?id=1' %23报错,syntax to use near '' LIMIT 0,1' at line 13.http://127.0.0.1/sqli/Less-23/?id=1' %23 a报错,syntax to use near 'a' LIMIT 0,1' at line 14.http://127.0.0.1/sqli/Less-23/?id=1'" %2 ...
OrderBy注入
# 有趣的 Order by 注入
下面介绍几个从 ThreeZh1 师傅那里学到的几个有趣的 SQL 注入
# 常规 Order by 注入
先来看一下 Order by 注入的原理
SELECT username, password FROM users order by 1 asc;
这是一个常见的 order by 使用语句,order by 后面的数字 1 是第 1 个列的意思 (也可以指定列名), asc / desc 指定是升序还是降序。
注意 :在 order by 后面的不会根据计算的结果来排序。
这里有以下几种方式来进行测试:
# order by + 报错注入
order by extractvalue(1,concat(0x7e, @@version,0x7e)) 进行报错注入
# order by + 布尔盲注
rand () 会返回一个 0 和 1 之间的随机数,如果括号内参数被赋值,同一个参数会返回同一个数。
这里就可以用 mid(也就是 substr 函数)来构造布尔盲注的方式来进行注入
order by rand(mid(version(),1 ...
SQL注入读写文件
# SQL 注入之 SQL 注入读写文件
本篇讲解 SQL 注入读写文件
使用到的函数如下:
Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。使用条件:A、必须有权限读取并且文件必须完全可读B、欲读取文件必须在服务器上C、必须指定文件完整的路径D、欲读取文件必须小于 max_allowed_packet
Less-1 为例
# 尝试报错
添加一个单引号:
http://127.0.0.1/sqli/Less-1/?id=1'
# 尝试不报错
http://127.0.0.1/sqli/Less-1/?id=1' %23
# 尝试 order by 注入
http://127.0.0.1/sqli/Less-1/?id=1' order by 3 %23不报错http://127.0.0.1/sqli/Less-1/?id=1' order by 4 %23Unknown column '4' in 'order clause'
# 读取文件
一般获取服务器的绝对路径有 ...
HTTP-Referer注入
# SQL 注入之 HTTP-Referer 注入
本篇讲解 HTTP-Referer 注入
HTTP-Referer 注入
在前几章的博客中,满篇都是对于基于 select 的注入手段。
其实,对于数据库而言,像 update、insert 等命令都有可爆出数据库信息的点的。
OK,开始做 Less-19,送入 Repeater。
# 尝试报错
在 Referer 后添加一个单引号:
Referer: http://127.0.0.1/sqli/Less-19/'
结果报错
# 尝试不报错
我们尝试通过加 双引号 "、 #号及其变形(#、%23、–+)来看看能否不报错
Referer: http://127.0.0.1/sqli/Less-19/'"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"& ...
Cookie注入
# SQL 注入之 Cookie 注入
本篇讲解 Cookie 注入。
老样子,Less-20,直接送入 repeater
# 尝试报错
Cookie: uname=admin'
# 尝试不报错
Cookie: uname=admin' %23
# 尝试 order by 注入
order by n asc/desc 是指定列号 n 进行排序
Cookie: uname=admin' order by 4 %23报错:YOUR COOKIE : uname = admin' order by 4 # and expiresCookie: uname=admin' order by 3 %23成功不报错
因此确定 列数为3
注意 :在 order by 后面的不会根据计算的结果来排序,所以可以直接用来报错注入。
尝试下直接报错注入是否可行:
Cookie: uname=admin' order by extractvalue(1,concat(0x7e,version(),0x7e))%23报错:YOUR COOKIE : ...