安装和部署pikaqiu环境
暴力破解大类
1.暴力破解
启动bp,浏览器设置代理
设置payload和词典
得到账户admin密码123456
2.验证码绕过on service
分析,服务端验证码长时间有效,可用下一次验证码作为凭证,爆破
3.验证码绕过on client
代码审计,是js的前端验证,return返回值。删除return。任何验证码都为真。
同样爆破方法,账户密码依然为admin&123456
4.token防爆破
经过对比分析,token会在发送前重新生成。
使用脚本在发包前,使token=new token.
python requests,go http,c++ socket都可以实现。
c++写太复杂,其他两个还不会。
XSS(跨站脚本攻击)大类
反射性xss(get)
代码无法打完,打开f12有字符限制,去除
payload:
2.post注入
3.存储型xss
会存储到后台,用户每一次访问时,加载数据,都会被触发
DOM型xss
漏洞描述:前端数据被DOM获取,并通过DOM又输出到前端(危害低,不会经过后端)
利用代码需要闭合
DOM型xss-x
4.xss之盲打
漏洞描述:存储型XSS,填写的内容不显示在前端,当发送给了后台管理员,假如存在xss漏洞,那么但管理员进入后台打开消息时会被执行XSS攻击。
危害:管理员的cookie被盗取,危害大
前端乱打,登录后端
5.xss过滤
XSS绕过-过滤-转换
0,前端限制绕过,直接抓包重放,或者修改html前端代码
1,大小写,比如: pt>
3,使用注释进行干扰: <scri
pt> alert(111)</sc <–test–> ript>
XSS绕过-过滤-编码
6.XSS输出在href和js中的案例分析
打开xss之herf,输入Javascript:alert(666),不含有特殊字符。
7.xss之js输出
根据提示输入字母
源码分析后,框架内容“ ”成型字符串回路,尝试写闭合
get-xss盗取cookie
postxss
我们需要自己搭一个恶意站点,然后在网站上放一个post表单,将存放POST表单的链接发送给受害者,诱导受害者点击。 这个POST表单会自动向漏洞服务器提交一个POST请求,实现受害者帮我们提交POST请求的目的。我们只需要诱导受害者点击上面的链接就能窃取用户的Cookie。
xss钓鱼
打开xss钓鱼后台,打开存储型xss,输入,页面会出现弹窗,输入账号密码。当页面刷新时依然存在弹窗,所有访问者都会遇到弹窗,输入账号密码后,数据被存入后台,打开xss后台即可查看钓鱼数据。
XSS获取键盘记录
需要跨域
当协议、主机(主域名,子域名)、端口中的任意一一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。
跨域同源策略
了安全考虑,所有的浏览器都约定了"同源策略”, 同源策略规定,两个不同域名之间不能使用JS进行相互操作。比如: x.com域名下的javascrip并不能操作y.com域下的对象。
如果想要跨域操作,则需要管理员进行特殊的配置。
比如通过: header( “Access -Control Allow- Origin:x.com” )指定。
Tips:下面这些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的。
CSRF(跨站请求伪造)大类
经常配合xss使用,需要已登录的权限
1.CSRF(get)
登录
修改个人信息,使用bp抓包
数据如下,我们只需要利用xss,把这个发送给当事人,利用
当事人的权限,就可以修改信息
http://127.0.0.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.phpsex=5&phonenum=54151&add=shanxi&email=www&submit=submit
2.post类型,和xss一致,需要表单请求
3.Anti CSRF token
CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造?
-每次请求,都增加一个随机码(需要够随机,不容易伪造), 后台每次对这个随机码进行验证!
Ant上CSRF ( token )项目的token生成代码:
sql注入大类
1.数字型注入post
抓包,id提交参数,更改id为对应数字,即可完成想要的查询
2.字符型注入
尝试万能密码 admin’ or 1=1#’
3.搜索型注入
模糊搜索,类似like语句
判断字段数:
%’ order by 1 and ‘%’=‘
判断字段显示位置:
%’ union select 1,2,3,4,5 and ‘%’=‘
爆库名:
%’ union select 1,2,(select database()),4,5 and ‘%’=‘
爆表名:
%’ union select 1,2,(select group_concat(table_name) from information_schema.tables table_schema=‘database’),4,5 and ‘%’=‘
爆数据:
%’ union select 1,2,(select group_concat(column_name) from information_schema.columns table_schema=‘database’ and table_name=‘table’),4,5 and ‘%’=‘
爆字段:
%’ union select 1,2,(select group_concat(id,0x3a,user,0x3a,passwd) from database.table),4,5 and ‘%’=‘
4.xx型注入
拼接做了一点点改动
‘) or 1=1#’ 用)构造闭合成功
5.插入/更新查询注入
我们知道insert就是在数据库中添加数据
那么我们注册一个账号,是不是就是在数据库中添加了你的账号数据,那么我们可以在注册页面插入我们的注入语句,我们猜测后台的mysql语句应该是,insert into user(name,password,sex,phone,address1,address2) value(‘xxx’,123,1,2,3,4)。那我们可以在xxx的位置构造我们的注入语句xxx’ or updatexml(1,concat(0x7e,database()),0) or ’
6.delete注入
既然是del注入,肯定要先有删除,输入内容
打开bp代理拦截,准备抓删除时的包
6.http head注入
听名字就是请求头的注入点
有些时候,后台开发人员为了验证客户端头信息,比如常用的cookie验证,或者通过http请求头信息获取客户端的一些信息,比如useragent、accept字段等等,会对客户端的http请求头信息获取并使用sql进行处理,如果此时没有足够的安全考虑,则可能会导致基于http头的sql注入漏洞
根据提示登录进去
对UA进行探测,发现UA被改,会爆出mysql错误,判定为注入点
7.盲注(base on booliann)
kobe’ and ascii(substr(database(),1,1))=112#
丢sqlmap
8.盲注 on time
时间型盲注
kobe’ and sleep(10)#'有延迟10秒
跑sqlmap
时间型注入跑的时间太久
9.宽字节注入
宽字节SQL注入主要是源于程序员设置数据库编码为非英文编码那么就有可能产生宽字节注入 。 例如说MySql的编码设置为了SET NAMES 'gbk’或是 SET character_set_client =gbk,这样配置会引发编码转换从而导致的注入漏洞。
RCE远程代码执行大类
对数据过滤微弱,以前的路由器后台经常如此,目前少见
2.eval php常见函数,类似于system函数
File Inclusion(文件包含漏洞)
通过include()或require()语句,可以将PHP文件的内容插入另一一个PHP文件(在服
务器执行它之前)。
include和require语句是相同的,除了错误处理方面:
require会生成致命错误( E_ COMPILE ERROR )并停止脚本
include只生成警告( E WARNING ) ,并且脚本会继续
1.本地文件包含
这个文件包含是前端传给后端的。
简单写个phpinfo();
但是需要文件上传,传到服务端
2.任意文件包含
在打开一个靶场,写一个phpinfo的php文件
执行,任意文件包含
不安全的文件下载大类
又叫任意文件下载,主要是个逻辑漏洞
http://192.168.98.66:8080/vul/unsafedownload/download/kb.png
图片下载地址,后台没有对需要下载的数据做过滤防护
导致篡改路径,可以下载到未经授权的文件
http://192.168.98.66:8080/vul/unsafedownload/download/down_nba.php
就可以下载到源码
文件上传大类
1.客户端验证的文件上传
客户端的验证,基本上来说都是js做的过略
查看源码,删除js对应验证代码,上传
2.MIME验证
抓包修改请求头,为image/jpeg
3.Getimagesize验证
Getimagesize返回文件大小和文件类型的,我们可以直接上传jpg文件
在jpg文件最后植入php代码,使用文件包含,触发代码
3.越权漏洞
这也是个逻辑漏洞,与CSRF相识,大概是cookie的盗取和cookie篡权
1.水平越权B
同一级别的用户A,B。A能操作B,叫水平越权
输入lucy的username即可跳转到别人的信息
腾讯的qq空间以前经常出现此类逻辑问题,目前已难以发现
2.垂直越权
不对等的越权,叫垂直越权,也可以叫提权
比如普通用户提权到管理员用户。多为逻辑漏洞
登录普通用户
盗取管理员的cookie
目录遍历大类
目录遍历,和任意文件下载有点类似,都是逻辑上的不严谨
敏感信息泄露大类
开发人员的疏忽,导致的出乎意外的信息收集。
比如F12,发现,程序员没有删除账户密码的备注。
PHP反序列化大类
经常会遇到的一个比较头疼的问题,反序列化
接触到serialize(),unserialize()这两个函数
序列化serialize()
序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:
class S{
public $test=“pikachu”;
}
s
=
n
e
w
S
(
)
;
/
/
创
建
一
个
对
象
s
e
r
i
a
l
i
z
e
(
s=new S(); //创建一个对象 serialize(
s=newS();//创建一个对象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中的魔法函数,就会导致安全问题
常见的几个魔法函数:
__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
漏洞举例:
class S{
var $test = "pikachu";
function __destruct(){
echo $this->test;
}
}
$s = $_GET['test'];
@$unser = unserialize($a);
payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
查看当前的题目,看url这一个反序列化api
那我们需要构造一下序列化,才能让它去反序列化。打开php
XXE大类
Xxe既"xml外部实体注入漏洞"。
它是接收xml数据的接口,那我们先了解下xml是什么:
XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储
第一部分:XML声明部分
第二部分:文档类型定义 DTD
第三部分:文档元素
我们提交代码为
<?xml version = "1.0"?> ]> &hacker;URL重定向大类(任意网页跳转)
看到有一些超链接,我们都点一遍可以发现,最后一个好像有个url的值,我们修改成https://www.baidu.com/,可以发现它跳转成https://www.baidu.com/页面了
SSRF大类(服务端请求伪造)
漏洞运用方法类似log4
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
看题目
它以curl的形式去加载了本地的数据。修改地址
题目2,看标题是以file_get_content函数去加载的
介绍:
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
使用方法和curl一样,要区别与文件包含,别搞混
加密使用方法
php://filter/read=convert.base64-encode/resource=http://www.tests.com/vul/ssrf/ssrf_info/info2.php