Sqli-labs第一关到第四关

news/2024/12/22 15:14:06/

目录

一,了解PHP源代码    

二,破解第一关

 2.1在了解完源码之后,我们重点看一下

2.2破解这道题表中有几列 

2.3查看表中哪一列有回显

2.4查询库,表,列信息

三,总结 


前提:

        之所以把1234关一起破解,是因为它们属于同一类型,下面我们来看一看他们的不同点与相同点    

一,了解PHP源代码    

       1.1  以第一关为例,我们先找到www文件(及网站根目录),找到sqli靶场的第一关,在index.php文中,添加两行代码(建议每一关都加)

        添加 echo $sql; echo "<br>";, 这两行的意思是将我们输入的sql语句显示到页面上,然后换行,这有助于我们更好理解注入的原理;

        1.2进入第一关

注意:HackBar浏览器插件,自行百度查询

        1.3我们发现需要我们输入id信息,输入?id=1,如图:

        1.4 发现页面上输出了我们的登录名和密码,这时候我们不要着急往下做,我们先看一下后端源码,了解一下SQL注入的逻辑,我们挑主要的看一下

        1.5 分析PHP源代码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

        这句SQL语句的意思是从数据库中查找数据,也是sql注入的关键位置。简单来说,这行代码的意思就是,我们要从 user这个表里面,查询所有id等于我们输入id的内容,然后只取一条反馈到页面上。limit0,1指的是users表从第零行开始输出1个信息(及表中的第一个信息);

echo $sql;

        这句的意思是将刚写入的SQL语句输出到屏幕上来,方便我们注入时理解

$result=mysql_query($sql);

        mysql_query函数,它的作用是将我们刚写的sql语句执行,但它的结果只会返回ture和false,无法返回我们通过sql语句所获得的数据信息。

$row = mysql_fetch_array($result);

        mysql_fetch_array的函数就解决了我们刚刚的问题,它的作用是将我们执行的sql语句所获得的数据保存在一个数组里

if($row){echo "<font size='5' color= '#99FF00'>";``echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";}else {echo '<font color= "#FFFF00">';print_r(mysql_error());echo "</font>";  }

        这些代码就是输出我们的username和password,还要注意的就prin_f(mysql_error())这个函数,他的作用是返回一个带有错误描述的字符串。如果没有错误发生则返回 “”,这是我们之后进行报错注入的关键

二,破解第一关

 2.1在了解完源码之后,我们重点看一下

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

        其中的$id就是我们可操作的内容,也就是说我们需要利用这行代码来提取出数据库的所有信息,这时我们回到第一关,输入?id=1’,看看结果;

发现报错,我们分析一下,在后端执行的sql语句为

SELECT * FROM users WHERE id='1'' LIMIT 0,1

        可以看到它只能执行到id='1’后面的 ’ LIME 0,1有语法错误,所以我们在第二个 ’ 后用--+或--%27(意思是空格) 或者%23(意思是#)将后面注释掉,再执行看一下。如图:

 

        

2.2破解这道题表中有几列 

        可以看到没有报错,并且我们看到这道题是有回显的(即会把信息返回到页面上),这里我们用到order by函数:

        order by函数用来判断该数据库当前使用的表有几列,从大往小,直到不会报错即为最大,我测试完为3列

2.3查看表中哪一列有回显

接下来来判断哪一列有回显位置,用到了

1' and 1=2 union select 1,2,3 --+

        这里涉及到了一个知识点,id 后面跟着的为-1。这里,就跟union 这个语句有关了。这是sql注入里面很常用的东西,用法是将前后两个sql语句结合起来,但是,如果第一条成立,那么在显示位置有限的情况下,后面的查询虽然也正常执行了,但是却不会在网页上反馈,如果我们希望在屏幕上直接看到返回结果,就需要让前方的语句错误。

2.4查询库,表,列信息

        接下来我们就知道了2,3的地方是有回显的,可以进行sql注入,这里给大家介绍一些简单的查询语句:

查库:select schema_name from information_schema.schemata;查表:select table_name from information_schema.tables where table_schema='security';查列:select column_name from information_schema.columns where table_name='users';查字段:select username,password from security.users;

注意:sqli靶场的库默认security表默认users

这些语句可以配合limit使用,但是更推荐用group_concat函数

对比group_concat:         

group_concat函数就是将所有值返回。

concat_ws('~',username,password)

 这个是将字段名连起来输出,我们再配合group_concat函数

group_concat(concat_ws('~',username,password)) from security.users --+

 对比group_concat()

三,总结 

        1~4关的过程只有对id的闭合方式不同,比如第一关的闭合方式是 ‘id’,我们用‘进行闭合,此外闭合方式还有 id “id” (id) (’id‘)((id)) ((‘id’)) ((“id”))等 ,我们可以输入每一种方式的右半边根据它的报错信息来判断它的闭合方式


http://www.ppmy.cn/news/1452754.html

相关文章

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位&#xff0c;它有助于医生快速、准确地识别和分析肺部病变。…

【JAVA项目】基于SSM的【电动车智能充电服务平台】

技术简介&#xff1a;采用SSM技术、MYSQL等技术实现。 系统简介&#xff1a;电动车智能充电服务平台实现了首页、个人中心、用户管理、充电桩管理、电池商品管理、托送服务管理、我的钱包管理、充值信息管理、消费信息管理、购买订单管理、配送信息管理、服务订单管理、系统管理…

wordpress子比主题美化-为图文列表封面添加动态缩略图特效 多种效果演示

wordpress子比主题-为图文列表文章封面添加动态缩略图特效 给自己子比主题加一个列表文章封面添加动态缩略图 直接复制以下代码&#xff0c;添加到主题自定义CSS代码中即可&#xff0c;下图为效果演示 wordpress子比主题-为图文列表文章封面添加动态缩略图特效 给自己子比主题…

【后端】RabbitMQ的常见使用问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、RabbitMQ 常见问题二、RabbitMQ 常见报错三、总结 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很…

【MySQL | 第九篇】重新认识MySQL锁

文章目录 9.重新认识MySQL锁9.1MySQL锁概述9.2锁分类9.2.1锁的粒度9.2.2锁的区间9.2.3锁的性能9.2.4锁的级别 9.3拓展&#xff1a;意向锁9.3.1意向锁概述9.3.2意向锁分类9.3.3意向锁作用&#xff08;1&#xff09;意向锁的兼容互斥性&#xff08;2&#xff09;例子1&#xff08…

Epinio:Kubernetes 的应用程序开发引擎-加CLI Demo演示

一、解决了什么问题&#xff1f; 开发人员如何专注于代码编写&#xff0c;怎么让他们可以完全忽略k8s基础设施并且和以前在本地Run一个应用一样的体验。 从源码构建一个容器程序 二、解决方案 Introduction | Epinio docs 三、Epinio 的 Kubernetes 的应用程序开发引擎 by Ra…

85、动态规划-零钱兑换

思路&#xff1a; 还是老样子&#xff0c;还是先使用递归方式来解&#xff0c;然后通过递归推动态规划。那递归如何设计? 定义一个递归方法&#xff1a;表示从index开始到N达到剩下的值&#xff08;目标值减去上一步的值&#xff09;做少可以得到数量是多少。int process(in…