首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL注入的几种类型和原理

UNION注入的应用场景 UNION连续的几个查询的字段数一样且列的数据类型转换相同,就可以查询数据; 注入点有回显; 只有最后一个SELECT子句允许有ORDER BY;只有最后一个SELECT子句允许有...无论是那种类型的注入,本质上是SQL语句被执行之后寻找对应的回显。 对于报错,回显在错误中,后面的的时间注入,回显在时间的判断中,DNSlog盲注中,回显在DNSlog中。 报错注入如何发生的?...网页中的效果 ? 笔者在看到这个语句的时候其实是有疑惑的。 为什么构造的语句为第二个参数?我理解函数执行过程中,第二个参数像正则匹配一样从第一个参数中匹配出结果。...时间盲注 原理 时间盲注:代码存在SQL注入漏洞,然而页面即不会回显数据,也不会回显错误信息,语句执行之后不提示真假,不能通过页面来进行判断。通过构造语句,通过页面响应的时长来判断信息。...添加的“%df”在URL中不会被再次编码,SQL语句指定编码我GBK,addslashes对单引号进行添加转义符号,添加的%df和转义发被解释为一个字符,同事页面返回的结果未正确显示,笔者的默认编码是Unicode

5.4K52

BUUCTF 刷题笔记——Basic 2

图片 接下来判断回显位,即测试有几列数据可以回显至浏览器中,构造 payload 如下: id=-1 union select 1,2--+ 其中 id 赋值为 -1是为了使当前查询语句前半句查找失败...,这样浏览器收到的回显就会是我们自己构造的后半段查询结果。...此前已知语句查询两列数据,而使用上述 payload 浏览器可以正常回显,可知查询的两列数据均可用于回显。 图片 害本来就是显示两组数据,不用测试都可以知道,不过这里还是练习一下。...勿喷,下面我就会知道根本不用查询这些数据库,因为完全没用…… 理论上接下来查询这三个数据库中的数据即可,首先查询 ctftraining 数据库中又哪些表,构造 payload 如下: id=-1 union...构造 payload 如下: id=-1 union select username,password from admin--+ 非常普通的查询语句,可回显的两个位置分别显示用户名与密码,接下来这俩将明晃晃地显示在浏览器中

2.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    米斯特白帽培训讲义(v2)漏洞篇 SQL 注入

    环境搭建(补充) 视频中的程序我找不到,所以还是自己搭个靶场演示吧,但是步骤是一样的。...关于数据库环境我想说一下,不同数据库使用不同的配置和 SQL 方言,一个数据库上有用的方法不一定能用在另一个数据库上。但是,目前 70% 的网站都使用 MySQL,所以这篇讲义只会涉及 MySQL。...手工注入:基于回显 基于回显的意思就是页面中存在显示数据库中信息的地方,通过注入我们就能把我们要查询的东西显示在页面上。一般页面中显示相关信息(比如帖子标题、内容)就能认为是基于回显的。...查询用户及数据库名称 在 MySQL 中,current_user函数显示用户名称,database函数显示当前数据库名称。...手工注入:基于布尔值 在一些情况下,页面上是没有回显的。也就是说,不显示任何数据库中的信息。我们只能根据输出判断是否成功、失败、或者错误。这种情况就叫做盲注。

    2.3K70

    常见的sql注入环境搭建

    ();//返回报错信息 常规回显注入 回显注入类型是指我们的查询内容会被应用回显到页面中;一般情况下回显注入回利用UNION联合函数来测试是否存在注入“ union select …… ” php echo ''; echo 'SQL常规回显注入环境'; echo ''; $conn=mysqli_connect('127.0.0.1', 'root', 'root')...; } echo ''; // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str mysqli_select_db($conn,...报错注入 报错注入类型是泛指应用页面不返回内容数据,无法从回显结果获得信息;但是一般应用都会保留SQL的查询报错mysqli_error() 通过“extractvalue UpdateXml foot...; } echo ''; // mysqli_select_db() -- 查询库,or die(str) -- 上一个函数执行错误则输出str mysqli_select_db($conn,

    1.3K30

    bwapp之sql注入_sql注入语句入门

    1.判断是否存在注入,注入是字符型还是整数型 2.猜解SQL查询语句中的字段数 (order by ) 3.确定显示的字段顺序 4.获取当前数据库 (爆库) 5.获取数据库中的表 (爆表)...0x06、SQL Injection (Login Form/Hero) 用户登录的sql注入, 可以引申至 二次注入 Low 往用户名处注入单引号, 得到报错回显: 猜测登录的sql语句可能为..., (因为需要通过用户名验证, 再通过密码) 注入单引号: 接着判断注入点 发现无法判断, 因为前端回显的结果只有当密码(第二个if语句)也正确时才会显示。...因此无法使用order by 判断字段数 (判断注入点是为了用order by来得到字段数) 但是可以直接通过联合查询得到字段数: 判断字段的显示顺序 无法判断, 因为前端回显的结果只有当密码(第二个...0x0F、SQL Injection – Blind – Time-Based 不管查询什么都是将结果通过email通知, 将查询结果”隐藏”了起来 对应渗透来说, 也就是无法得知注入的sql语句是否执行成功

    8.4K30

    渗透测试系统学习-Day6

    id=1%2B1 # "+"在URL中是被当做URL去执行的 # 这里想输入"+"用"%2B"替换 # 输入一个不成立的条件,看看页面的回显是否存在异常 测试传入的参数是否被当做代码去执行 测试传入的参数是否被当做代码去执行...这样查询出来的结果顺序是先显示第一个表中的内容,再显示第二个表中的内容 select * from admin union select id,password from test # 此时为了显示后面出来的内容...4.判断库名 select database() # 查询库名 # 基于前面的回显点,我们输入database(),有几率可以查询到库名 URL/?...id=1.1 union selct id,database() # 回显不是database()而是其他字符串,可以判断得到了库名 5.判断表名 mysql5.0版本以上 URL/?...4.判断库名 id=1 union order by 1,verison(),database() 4269365531.jpg 测试发现只显示第一个回显点,库名显示error。

    35220

    SQL注入详谈

    outfile( )写文件操作 MySQL 中 UNION 规则 简介 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令...(布尔型注入) Time-based blind SQL injection(基于时间延迟注入) SQL 注入挖掘 and 1=1 和 and 1=2 回显页面不同(整形判断) 单引号判断 ‘ 显示数据库错误信息或者页面回显不同...(整形,字符串类型判断) (转义符) -1/+1 回显下一个或上一个页面(整型判断)(需要用%2b 转码+号) and sleep(5) (判断页面返回时间) MySQL 中常用函数 system_user...>' INTO OUTFILE ' D://phpStudy//WWW//hack.php ' MySQL 中 UNION 规则 UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字...UNION 分隔 UNION 中的每个查询必须包含相同的列。

    65220

    BUUCTF-Web-WriteUp

    ,第一条显示查询信息,第二条则将整个表进行删除 方法一:重命名+堆叠注入 打开题目,显示如下界面,观察后猜测是sql注入 0x01:判断是否存在注入,注入是字符型还是数字型 输入1'发现不回显...输入1' #显示正常 应该是存在sql注入了 输入1' or '1'='1,正常回显,应该是字符型 0x02:猜解SQL查询语句中的字段数 输入1' order by 1 # 成功回显 输入...1' order by 2 # 成功回显 输入1' order by 3 # 回显错误 所以只有两个字段 0x03:显示字段 输入1′ union select 1,2 # 回显一个正则过滤规则...尝试堆叠注入 0x04:查询数据库 输入1';show databases;# 成功回显 说明存在堆叠注入 0x05:查询表 输入1';show tables;# 成功回显 得到两个表words...flag字段 现在常规方法基本就结束了,要想获得flag就必须来点骚姿势了 因为这里有两张表,回显内容肯定是从word这张表中回显的,那我们怎么才能让它回显flag所在的表呢 内部查询语句类似 :select

    1.5K20

    记一次Smanga RCE漏洞挖掘(CVE-2023-36078)

    1、compress.php 第一个是在 /php/compress/compress.php 文件中,其功能是在进行7z压缩时,使用命令拼接path和extractTo参数。...,但是发包后dnslog没有回显,且返回包为空。...尝试构造一个正常的chapterId参数,发现返回包有回显,此处报错是路径错误的问题,代码逻辑实际已经走过命令执行的步骤。...继续查看代码,找到了原因,因为在执行命令之前,程序还会把chapterPath写入数据库, 追踪dosql函数,发现其Sql语句使用单引号拼接,因此我们Paylaod中的单引号会干扰数据库操作的命令,...2、delete.php 另一个注入点是在 /php/manga/delete.php 中,其功能是在删除文件时,使用 rm -rf 拼接路径造成了命令注入,且这个接口也是无需鉴权的。

    51350

    代码审计:BlueCMS v1.6

    $ad_id); getone()是自定义的函数,getone()方法位于/include/mysql.class.php第61行,作用是执行SQL语句并输出 function getone($sql,...,因而存在SQL注入漏洞 还有一个有意思的点,查询结果是经过一系列判断后输出到了html的代码注释中,也就是说显示位在浏览器源码中查看 38行 echo "<!...ad_id=1 order by 8 #报错 ''' 所以字段数为7 ''' #确定显示位 http://127.0.0.1/bluecms_src/uploads/ad_js.php?...ad_id=1 union select 1,2,3,4,5,6,7 ''' 页面回显空白,查看源码看到只有7显示到界面,所以显示位在源码中,因此后面只能在源码中查看显示信息 ''' #查看数据库 view-source...act=edit&navid=1 union select 1,2,3,4,5,6 ''' 2,3,5在前端界面回显成功,因此可以在2,3,5显示位查询我们想要查询的信息 ''' #查看数据库等信息

    2.8K20

    MySQL手工注入学习-1

    从报错信息显示,我们的id—value写在SQL语句的括号中,换言之就是,这条SQL语句缺少一个右括号~ ?...按照这回显,可以认为这是一处盲注…… SQL盲注点 ~~ UNION联合(回显)查询的方法就不可以了…… 基于布尔的盲注 ?...服务端接收到黑客提交的第二个请求信息后, 为了处理该请求, 服务端会查询数据中已经存储的数据信息并处理, 从而导致黑客在第一次请求中构造的 SQL 语句或者命令在服务端环境中执行。...在login_create.php注册页面中,使用了mysql_real_escape_string()但是数据还是会被存放在数据库中…… ? 数据会被完整的记录在数据库中 ?...()函数: 对一些例如单引号、双引号、反斜杠等特殊字符添加一个反斜杠以确保在查询这些数据之前,用户提供的输入是干净的。

    1.3K30

    BUUCTF 刷题笔记——Web 1

    图片 由于 select 惨遭过滤,因此数据的查询就需要借助其他力量了:MySQL 中的 handler 命令同样可以用于查询数据内容。...通过堆叠注入的方式将 MySQL 中的 sql_mode 变量设为 PIPES_AS_CONCAT,这样就可以将 || 解析为连接字符 ,,然后执行注入查询若结果不变说明使用的是 or 运算符,若再次爆出...事实证明,确实是 ||: 图片 [GXYCTF2019]Ping Ping Ping 打开靶机,提示通过 GET 方法传送 ip 地址用于执行 Ping,与之前关卡类似,直接尝试注入命令 ls,浏览器回显两个文件...执行之后会在浏览器中回显一段 base64 加密的字符串,即后端 flag.php 文件内容的密文。...实测直接修改该值即可让网页显示指定内容,但是含有特殊字符的字符串就会被过滤,仅回显 ORZ。

    3.6K20

    SQL注入(入门)

    id=1 收到请求的后端PHP代码会将GET方式传入的id=1与前面的SQL查询语句进行拼接,最后传给执行MySQL的查询语句如下: SELECT name , grade FROM stu_info...但是前台并没有给我们想要的数据,因为后端的PHP代码决定了一次只能显示一行记录,所以我们需要将第二条查询结果放在第一行,此时有多种办法: 在原有语句后面加上limit 1,1参数(取查询结果第一条记录的后一条记录...admin 可以回显的到admin表中的全部数据,从而获得了网页的后台管理权限。...information_schema.columns where table_name = 'admin' 就会在前端回显相应的字段名,这段查询语句在数据库执行后得到如下所有表单中的列名字段: 同上述步骤再次输入我们需要的...然后在前端回显相应的字段,这段代码在数据库中执行后表示如下数据: 这样就能获取网页的管理员账号和密码,进入网页后门了。

    2K30

    RedTiger 通关学习总结

    首先测试 id=1 和 id=0,发现回显不一样,所以这就是基于布尔的盲注了,然后是用 order by 查询字段数: ? ?...我刚开始就是卡在了这里,死活注不出来~最后借鉴了哈士奇师傅的脚本,才弄了出来,哈士奇大佬的学习记录: http://lucifaer.com/index.php/archives/19/ 代码写得比我的漂亮多了...题目过滤了 mid/substring/substr,由过滤了逗号,这样的话就没办法盲注了~(至少我没办法了) 所以现在两个输入框中进行一般的 SQL 测试,发现 username 处填写正常语句时总是回显用户不存在...即显示位是 2、4,根据提示从执行表中查询 status 为 1 的 username 和 password,然后将 ' union select1,username,3,password,5 from...Cybercyber_vuln 第九题 此处考察的是 insert 注入知识,测试后发现只有最后的留言框存在注入,而页面在插入语句执行成功后会回显插入的数据, 正常的 insert 语句为: insert

    96901

    SQL注入的常规思路及奇葩技巧

    最近还听说Javascript也能写后端了,着实把我高兴坏了,看来PHP这“世界上最好的语言”的称号,要换主了~ 同是弱类型语言,这俩哥们怕是要一绝“高低”。...一、 常规思路 这里是我自己用的一些常规的测试并利用流程,如有疑问,欢迎讨论: 数据回显注入 针对可疑的注入点进行测试,测试方式根据数据库类型的不同也有所不同: SQLi备忘录:http://pentestmonkey.net...ascii码进行比较,所以可以通过0x5b-0x60中的一个非字母字符,来判断字母的大小写。...语句,将查询结果插入表中,然后再想办法通过正常途径查看。...所以在不让SQL语句正常执行的情况下获取数据是最好的方法。 报错盲注就不多说了,看常规部分(本文上篇)的介绍就可以。 但大部分的网站是不会傻到让你看错误回显的。

    1.5K01

    BUU-WEB-第二章

    [SUCTF 2019]EasySQL image.png 我们先输入1,返回有回显。 image.png 继续测试其它字符,发现输入数字都有回显,但是如果输入的是字母,则没有回显。...1.输入非零数字得到的回显1和输入其余字符得不到回显=>来判断出内部的查询语句可能存在|| 2.即select输入的数据||内置一个列名 from 表名=>即为 select post进去的数据||flag...username=1' union select 1,2,3%23&password=1 image.png 得到回显点位为2和3,查询当前数据库名及版本: /check.php?...image.png 有回显,我们在在后边继续执行语句,先查看一下ls; image.png 这里发现终端有一个flag.php和一个Index.php,cat flag.php一下试一试 image.png...,但是第二个又是刚才的回显那可能是flag被过滤了,试一下index.php。

    1.3K40

    【less-1】基于SQLI的SQL字符型报错注入

    (实验镜像中已经调整) 实验原理 1.MySQL语言的注释语法: – (这里有一个空格,–空格)在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用...2.Less-1源代码: (1)进入SQLI网站的源码路径   使用命令 vim index.php浏览Less-1所对应的网页源码 可以看到页面中显示: 在URL后面输入?...id=1的动态参数,页面显示登录用户名Dumb、密码Dumb: 第三步 尝试判断是否存在SQL注入以及哪种注入类型 (1)经过语句and 1=2测试 ,页面回显正常,所以该地方不是数值查询。...后续的实验步骤中,可以选择在Hackbar中来执行,或者直接在浏览器的地址栏中执行。 (1)使用order by语句判断该表中一共有几列数据。...order by 3页面回显正常,order by 4页面回显不正常,说明此表一共有3列。 所用的payload格式为: http://【靶机IP】/Less-1/?

    9210

    SQL注入基础教程

    id=1 收到请求的后端PHP代码会将GET方式传入的id=1与前面的SQL查询语句进行拼接,最后传给执行MySQL的查询语句如下: SELECT name , grade FROM stu_info...但是前台并没有给我们想要的数据,因为后端的PHP代码决定了一次只能显示一行记录,所以我们需要将第二条查询结果放在第一行,此时有多种办法: 在原有语句后面加上limit 1,1参数(取查询结果第一条记录的后一条记录...指定id=-1或者一个很大的值,使第一条语句无法查询到数据。 所以我们输入下面的SQL语句干扰正常的查询: 可以回显的到admin表中的全部数据,从而获得了网页的后台管理权限。...information_schema.columns where table_name = 'admin' 就会在前端回显相应的字段名,这段查询语句在数据库执行后得到如下所有表单中的列名字段: 同上述步骤再次输入我们需要的...(column_name) from information_schema.columns where table_name='flag'#' 在前端得到回显,发现只有一个名为flag的列: 最后查询

    41650
    领券