广州网络建站,中国空间站,25转行做网站运营,永久不收费免费的软件appsqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建
下载phpstudy
phpstudy是一个可以快速帮助我们搭建web服务器环境的软件
官网#xff1a;https://www.xp.cn/
这里我选择的是windows 64bit 客户端版本#xff0c;安装路径为C:\php… sqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建
下载phpstudy
phpstudy是一个可以快速帮助我们搭建web服务器环境的软件
官网https://www.xp.cn/
这里我选择的是windows 64bit 客户端版本安装路径为C:\phpstudy
安装完后打开软件 选择上面的WNMP进行启动。然后点击网站进行一些修改 目录的内容看下面
下载sqli-labs
sqli-labshttps://github.com/Audi-1/sqli-labs
进入github下载源码进入c:/phpstudy/www目录也就是我们localhost配置的网站目录
删除里面的文件并将下载好的压缩包解压到www目录下如下 对sqli-labs初始化文件进行配置
浏览器加载
然后打开浏览器 这里需要点击第二行的Setup/reset Database for labs 配置数据库成功如下 这里大家可能会出现这样的错误 出现这个问题很简单去到phpstudy的网站里面去修改你的php版本版本过高是无法实现的。 然后 就OK了。
第一关复现
首先我们需要了解注入是怎么产生的 注入的产生是因为程序过滤不严谨没有将用户的输入进行过滤没有过滤那么如果输入恶意代码注入数据库就将产生问题出现数据库的异常查询。
一般注入的重点也就是分析源码。
那么我们来看一下第一关 看一下源码。 源码就是在我们下载的文件中就存在 分析源码我们得知 首先是数据库的连接然后通过GET传参给id然后再打开一个文件再通过写入文件的句柄id写入然后关闭。之后再进行查询查询出一个数组之后比对存在就从数组取值并且输出到前端还使用样式包装没有则报错输出到前端。没有传参就提醒用户输入。
源码分析可能不容易理解那我们到前端看一些是什么情况。 传个参数。 好像没啥作用就输出了id为1的数据。 通过对源码的分析name和passwd应该出数据的地方也就是用户名和密码但是我们目前没有显示出来分明显我们没有实现注入。
那我们再去查看源码
$sqlSELECT * FROM users WHERE id$id LIMIT 0,1;这里是查找数据的我们传入了1那么这里就查1。 但如果我们改变一下。 但是这里又出现了报错语法问题。我们也可以理解毕竟我们多出来了一个单引号无法闭合出错正常。那么我们是不是可以通过单引号逃逸出来。
既然可以逃逸那么之后我们要干什么呢为了数据啊那么我们就需要为了管理员的数据去研究。
首先我们了解查询方式。 第一种联合查询 union select 第二种and
那么联合查询可以做什么呢
select * from users union select * from emails;这句代码的意思就是将表users和emails放在一起查询数据。 但联合查询存在一个前提两张表的列需要保持一致。不一致将查询不出来。 我们目前不知道表的列数怎么办呢
select * from users union select 123;模糊测试我们假设存在3列然后查询如果出现错误那就增加或减少这样一个一个测试我能就可以实现列的查找。
and的方法
select * from users and 11这种也是查询的一种。
既然我们想要入侵管理员那我们需要获得管理员的用户名和密码。 想得到呢就需要知道数据的数据库名库名表名列名。
一般是查询mysql版本号查询权限登录用户当前所在数据库。
针对列数我们也可以使用 order by 函数来确定列order by主要是排序。因为排序可以使用1来代表第一列2来代替第二列多出的列数将会报错那么我们也就知道列数了。
除此之外我们还需要知道注释符。 单行注释 – # 多行注释/**/
目前我们闭合多出的去注释去逃逸尝试一下。 这里后面还有一个引号出现报错我们通过注释符注释掉 再url里面注释从–空格变为了–。 出来了内容了那我们就开判断一下列数。 我们这只存在3列。 我们来联合查询 这里的联合查询好像和我们输入为1没啥区别。 注意联合查询需要前面的条件为假。为假那么我们就输入符数一般无符号整型-1不满足 输出23这里表示的是前端可以展示出来的列数也就是2和3字段出数据也就是可以在前端显示。
那么我们就可以看看其他的内容 用户和版本就输出了。 库名也可以出来了。
http://localhost:9005/Less-1/?id-1%27%20union%20select%201,concat(table_name),3%20from%20mysql.innodb_table_stats%20where%20database_name%27security%27%20--利用这个可以得表名。 通过添加limit 1,1依次获得其他表明最后找到users
列名如何查到 获得了id 获得username 最后password 最后也就查出来了。