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)
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(因为我的之前已经安装成功了,所以没有出现初始化安装)
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 绕过
4.1 定义
SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
4.2 原因
SQL 注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。web 开发人员无法保证所有的输入都已经过滤,攻击者利用发送给服务器的输入参数构造可执行的 SQL 代码(可加入到 get 请求、 post 谓求、 http 头信思、 cookie 中)。
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