《Web安全攻防 渗透测试实战指南》学习笔记(7) - 其余漏洞总结

如有侵权,请联系删除

爆破

没有做次数验证,所以可以不停的试。想是Sqli-labs那些前边的那些关都是可以做爆破的实验环境的
主要方法就是使用Burp中的In开头那个模块,然后导入事先准备好的字典,点击开始爆破就得了。然后看那个Length来判断,哪个是正确的。

另外,还有一款工具不得不提:hydra
在这里插入图片描述
只是这款工具我并没有怎么用过就是了。后期会专门针对爆破进行学习,那时候会仔细研究一下的。既然现在我并不了解这款工具我就不多少啥了。
这个工具kali中集成,其他linux系统软件源中也会内置。Ubuntu安装命令

sudo apt install hydra

不过现在一般会有验证,比如验证码验证,还有那个图片的那个码,还有登录错几次就不能登了之类的。所以这个洞不是特别重要,除非你遇到了一个没有次数限制的站。

命令执行

简介

个人认为有那么一点点像文件包含漏洞。
不同的是,文件包含是将你的恶意代码import到源码中,这个命令执行是执行你上传的命令。
但相同的是,都是需要一些函数开启。比如php中的system函数,exec, shell_exec, passthru, popen, peoc_popen等等这些。

书上的例子是一个页面提供了ping功能,也就是说允许我们执行系统命令。
正常来说,如果payload是这样:http://127.0.0.1/text.php?ip=127.0.0.1,返回结果就是ping 127.0.0.1的结果。
但如过payload为:http://127.0.0.1/text.php?ip=127.0.0.1|dir,返回结果就是dir命令的结果。
(这里是使用了管道命令,因为目标主机为linux系统,所以‘|’的意思就是返回‘|‘后边的命令的结果,也就是返回dir的结果)

命令

不同系统的命令如下:

Windows
  1. ”|“:直接执行后边的语句。比如ping 127.0.0.1 | whoami那么就是直接执行whoami
  2. ”||“:如果前边语句出错执行后边语句,而且前边的语句只能为假。比如ping 127 | whoami那么就是直接执行whoami
  3. ”&“:如果前边语句出错执行后边语句,但是前边语句不一定为假。比如ping 127 | whoami那么就是直接执行whoami;比如ping 127.0.0.1 | whoami那么就是只执行ping命令了。
  4. ”&&“:前面的语句必须为真,为真执行后边语句,如果为假直接退出。因为这个就是传统意义上的,必须两个都为真。比如ping 127.0.0.1 && whoami
LInux
  1. ”||“、”&“、”&&“都和Windows的一样。
  2. ”;“的作用就是传用意义上的分号,同时传多个命令的时候用分号分开的那个分号。所以这个会执行完前边的再执行后边的。
  3. Linux下的”|“命令上边也有提到,就是只返回后边的命令,直接看这两个例子
d@g:~$ whoami | ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.050 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.059 ms
^C
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3051ms
rtt min/avg/max/mdev = 0.042/0.049/0.059/0.010 ms
d@g:~$ ping 127.0.0.1 | whoami 
d
d@g:~$
代码分析

通过GET获取ip值,不经过检测直接拼到system中,system执行的是ping功能。

<?php
echo system("ping -n 2".$_GET['ip']);
?>

通常会被过滤掉的符号有:

$substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    ); 

而且这些会被当作字符传进行处理,使用str_replace()函数

$target = str_replace( array_keys( $substitutions ), $substitutions, $target ); 

作用就是把substitutions里的那些违法的符号全部替换成空,我试了一下,”&“u会被替换成空,”&&“也会换成空。

实战靶场

DVWA:exec
这个可以自己点开源码看看,low是啥都没过滤,级别越高过滤的越多。
我在做high级别的时候,啥了,发现它把能过滤的全过滤了,我直接傻了。试过各种绕过(就是前几节里的绕过方法,也不知道适不适用就乱用的,估计应该是可以的想想原理的话,就比如双写之类的,编码那些应该可以放弃了,因为源码里并没有编码解码的那个函数,一切编码解码的过程应该是正常的,所以没法利用这一点。这也是我猜的其实,我也不知道有没有什么高级的编码绕过可以用在这里的,但是我觉得对我这种前期小白来说,基本上过滤掉了常用的字符,就对来说是没有漏洞的了)。high那一关仔细看源码,发现”| “后边是有一个空格的,所以”|“命令是可以用的,payload为:127.0.0.1|whoami

逻辑漏洞挖掘

简介

逻辑漏洞主要有两个重点(虽然我根本不清楚到底应该怎么关注这两个点,不过这本来就是入门的书,而且说多了我也不懂,这样就蛮好的):业务流程和HTTP/HTTPS请求篡改。

常见的漏洞主要包括一下几类:

  1. 支付订单:在支付订单时,可以篡改价格为任意金额;或者可以篡改运费或其他费用为负数,导致总金额降低。
  2. 越权访问:通过越权漏洞访问他人信息或者操纵他人账号。
  3. 重置密码:在重置密码时,存在多种逻辑漏洞,比如利用 session覆盖重置密码、短信验证码直接在返回的数据包中等。
  4. 竞争条件:竞争条件常见于多种攻击场景中,比如前面介绍的文件上传漏洞。还有一个常见场景就是购物时,例如用户A的余额为10元,商品B的价格为6元,商品C的价格为5元,如果用户A分别购买商品B和商品C,那余额肯定是不够的。但是如果用户A利用竞争条件,使用多线程同时发送购买商品B和商品C的请求,可能会出现以下这几种结果。
    1. 有一件商品购买失败。
    2. 商品都购买成功,但是只扣了6元。
    3. 商品都购买成功,但是余额变成了-1元。
越权访问攻击实例

越权查看用户信息。这种主要是因为在传递信息的时候,用的是GET或者POST的方式,或者cookie(这种应该就和越权漏洞没关系了,因为如果使用cookie登录,那么没有这个漏洞只要我们拿到cookie就可以了),这种情况下,php后台才POST请求中获取用户id,然后返回用户信息。
这是非常愚蠢的,因为你只需要改变请求报文中的id就可以随意访问其他人的信息了。

如果不明白token、cookie、session的,看看这篇文章:彻底理解token, cookie, session

XXE漏洞

这个需要了解一下XML,附上W3C School的教程:XML
简单点说就是,他在语法方面类似HTML,但是他和HTML完全是两个东西。HTML是前端的东西,使用来显示数据的;而XML使用来传输数据的。

XML中有两个概念需要了解,DTD和实体。
DTD:

  1. 内部声明DTD格式:<!DOCTYPE 根元素 [元素声明]>
  2. 外部声明DTD格式:<!DOCTYPE 根元素 SYSTEM "文件名">
    实体:
  3. 内部声明实体格式:<!ENTITY 实体名称 "实体的值">
  4. 外部声明实体格式:<!ENTITY 实体名称 SYSTEM "URL">

DTD呢就相当于一种固定格式,而实体就类似于python里的import,作用是引用普通文本或特殊字符

XXE漏洞就是XML外部实体注入(XML External Entity),这个甚至有点类似文件包含。
如果目标站点使用了外部实体,并且没有对用户提交的XML数据进行过滤,那么就是存在XXE漏洞。具体利用方式为:
当网站使用外部实体时,我们可以通过POST请求提交XML数据,所以我们提交类似这种数据

<?xml version="1.0"?>
<!DOCTYPE a [
    <!ENTITY b SYSTEM "file///c:/windows/win.ini">
]>
<xml>
<xxe>&b;</xxe>
</xml>

作用是通过file协议读取本地文件win.ini,后他的逻辑(最无脑的,没有任何过滤的那种):

  1. 获取用户输入的内容
  2. 初始化XML解析器
  3. 加载客户端输入的XML内容
  4. 获取XML文档中的节点XXE,然后输出XXE的内容

也就是经股一系列的操作,我们打印出 了win.ini的内容。是不是很像本地文件包含?但是细品有那么一点小区别的,文件包含是执行webshell或者恶意代码,这个是访问一些实体文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值