pikachu通关笔记

pikachu通关笔记

pikachu,pikapika~

靶场搭建

请参考docker搭建pikachu,一分钟搭建好靶场:https://www.cnblogs.com/sillage/p/14607117.html

本节最后更新于2022.3.16

暴力破解

基于表单的暴力破解

上burp直接刚

绕过验证码(on server)

在intruder里验证码可重复使用

绕过验证码(on client)

在intruder里验证码也可重复使用,也可以审查元素把相关的代码删除

token防爆破

此处我们发现,正确的和错误的长度一样(上帝视角),找token规律也找不出来,但是可以通过抓包发现,返回了下一次使用的token:

满足以上条件我们就可以使用burp的音叉攻击进行爆破,线程必须为1,参数为password和token。

password载荷设置:

token载荷设置,类型为递归搜索:

选项添加Grep-Extract:

上图中,第五步复制的value值放入下图中:

线程设置为1,一定要记住,开始攻击:

Cross Site Scripting

反射型xss(get)

首先尝试一手朴实无华的<script>alert(1)</script>,发现它限制了字数,直接审查元素,改它的最大长度,弹窗成功:

反射型xss(post)

需要登陆,登陆后,直接朴实无华,弹窗成功,最简单的弹窗往往只需要一句<script>alert(1)</script>:

存储型xss

朴实无华。

DOM型xss

什么是DOM:(DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

好的看完不懂也没关系,下面两张图带你深入了解。

DOM型不与后台产生交互,仅与前端产生反应,那么我们来看看其实质是什么。

分别输入hahahh和#' onmouseover=alert(1)>

我们看下面两张对比图:

hahahh:

#' onmouseover=alert(1)>:

还是有点sql注入的味道,制造闭合,判断成为一个弹窗标签。

onmouseover鼠标超时时弹窗

DOM型xss-x

' onclick="alert('xss')">

审查一下源码:

xxs之盲打

朴实无华。

前台没有显示,点击提示:

然后去登陆发现有弹窗,其实这也是存储型的xss

xss之过滤

大小写绕过:

<ScrIpt>alert(1)<SCript>弹窗成功

xxs之htmlspecialchars

' onclick='alert(1)'

'onmouseover='alert(1)'

'onmouseover='javascript:alert(1)'

xss之href输出

直接用js协议:

javascript:alert(1)

xss之js输出

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

审查元素:

CSRF

CSRF(get)

根据提示,先登陆一个用户

这里我们登陆lili,用burp抓包,修改lili的个人信息后:

复制生成的连接诱导受害者点击,修改成功

CSRF(post)

和get类似,换汤不换药

SQL-Inject

数字型注入(post)

burp抓包,数字型,直接id=1 or 1=1爆出所有数据

字符型注入(get)

闭合方式为',直接' union select 1,2--+进行联合注入

搜索型注入

直接输入%进行查询,因为没有做过滤,%在数据库的查询中匹配任意字符

xx型注入

闭合方式为:')sql('

如:')union select 1,2 or ('1')=('1

') or ('1')=('1直接查询出所有数据

insert/update注入

在注册的时候,burp抓包,随便找一个参数,'闭合,repeater报错注入

如:' and extractvalue(1,concat('~',(select database()))) and '1'='1

也可以在更新信息的时候在抓包,在某一参数,进行如上注入

delete注入

删除时抓包,发现有一个id参数,为数字型,直接repeater,进行报错注入,注入时发现,查询时只查询id后面的连续的一段字符串,出现空格则后面的不处理,可以用/**/,+来连接,如:

id=-1+and+extractvalue(1,concat('~',(select+database())))

header注入

使用admin/123456登陆时抓包,在User-Agent,Accept,uname三处地方都可以进行报错注入,为字符型,payload如下:

' and extractvalue(1,concat(0x7e,(database()))) and '1'='1

盲注(base on boolian)

'闭合,'length(database())>n,能看到不同的效果,上burp直接刚

盲注(base on time)

'闭合,kobe'and sleep(5) %23能看到明显延迟

宽字节注入

'前面加%df实现逃逸转义,burp抓包直接干,如name=1%df' union select 1,2--+

RCE

RCE概述

远程系统命令执行,因为设计上需要给用户提供指定的远程命令操作的接口,没有对其做严格的输入控制,导致用户提交一些其他的系统命令也能够执行

远程代码执行,同样的,因为需求设计,也会把用户输入的作为代码的一部分来执行,如果要给前端用户提供操作类的API接口,一定要对输入的内容做严格过滤,比如添加严格的白名单策略

exec "ping"

如baidu.com|config

exec "evel"

phpinfo();(不要忘了分号

File Inclusion

概述

文件包含,是一个功能,开发语言内置提供的文件包含函数,可以使一个代码文件中直接包含(引入)另一个代码文件,比如PHP提供了:

include(),include_once()

require(),require_once()

当文件包含的代码文件被写成了一个变量,且这个变量可以由前端传进来,则可能引发文件包含漏洞。

分为:

  • 本地文件包含漏洞:只能对服务器的本地文件进行包含,攻击者可用其进行系统敏感信息收集。
  • 远程文件包含漏洞:能够通过url地址对远程的文件进行包含,可以传入任意的代码。因此在web应用的功能设计上尽量不要让前端用户直接传变量给包含函数,若非要这么做,也一定要做严格的白名单策略进行过滤。

File Inclusion(local)

通过观察可以发现,filename这个参数可以进行文件包含,直接filename=../../../../(不断添加)然后去访问C盘目录下的一些东西进行漏洞验证,或者以上帝视角自己放一个页面资源在网站根目录所在盘的根目录下去访问。

File Inclusion(remose)

通过filename访问url,尝试一下本地服务器filename=http://127.0.0.1:9096/

Unsafe Filedownload

对用户要下载的文件没有做过滤。

火狐下载后可以在下载栏,复制下载链接:

然后去浏览器输入:

http://127.0.0.1:9096/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

我们可以通过filename下载任意文件,如:

Unsafe Fileupload

client check

burp抓包改后缀即可

MIME type

burp抓包,Content-Type处改为image/png即可绕过

getimagesize

判断了文件有没有图片特征,cmd命令合成图片马,copy 1.php/a+1.jpg/b 2.jpg即可上传,使用文件包含即可绕过

Over Permission

权限管理应该遵守:

  • 使用最小权限原则对用户进行赋权
  • 使用合理的权限校验规则
  • 使用后台登陆状态作为条件进行权限判断,而不是前端传来的条件

水平越权

登陆,查看信息,抓包,修改uname为其他用户可以看到其他用户的信息

垂直越权

通过修改url为op2_admin_edit.php,发现pikachu从普通用户变成了管理者用户的权限:

../../

概述

在web功能设计中,很多时候,需要将访问的文件定义为一个变量,方便动态调用,但是有可能引发目录遍历漏洞,(更像是文件包含漏洞)

目录遍历

如:title=../../../README.md

3 敏感信息泄露

概述

后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问,如:

  • 通过url下的目录,可以直接列出目录下的文件列表
  • 输入错误的url参数后报错信息里面包含操作系统,中间件,开发语言的版本或其他信息
  • 前端的源码里面包含了敏感信息

IcanseeyourABC

审查元素可以看到注释里有一个账号:

PHP反序列化

概述

通俗来说就是把一个对象变成可以传输的字符串

反序列化就是把序列化的字符串还原为对象,如:

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:变量值

反序列化就是把被序列化的字符串还原为对象,如:

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

php反序列化漏洞

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

XXE

概述 :即xml外部实体注入漏洞

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

现在很多语言对应的解析xml的函数默认是禁止解析外部实体的。以php为例,在php里面解析xml用的libxml,在>=2.9.0的版本中,是禁止解析xml外部实体内容的。

xxe漏洞:

<?xml version="1.0" ?> 
<!DOCTYPE name [ 
	<!ENTITY dawn SYSTEM "file:///E:/phpstudy/WWW/pikachu/index.php">
]> 
<name>&dawn;</name>

URL重定向

通过url参数直接重定向

SSRF

概述:服务端请求伪造

SSRF(curl):通过url参数直接访问内部资源,或者跳转到其他服务器页面

SSRF(file_get_content):利用file_get_content("path")利用传递的参数,通过file参数访问内部资源,或者跳转到其他服务器页面,如:

最后

写文章不易,如果对您有帮助,就帮忙点个推荐吧,博文右下角。

posted @ 2020-09-22 10:10  nihinumbra  阅读(9067)  评论(4编辑  收藏  举报