freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Pikachu靶场通关记录
2023-05-18 19:54:27
所属地 北京

1 介绍

最近准备复习一下常见web漏洞,打算从pikachu开始吧,比较简单不涉及绕过

2 靶场WP

1 暴力破解

第一关
没有任何验证码相关的内容,可以直接跑字典
burp抓包给intruder模块
设定好爆破的位置,之后选择cluster bomb,该爆破方式为逐个行匹配测试,相当于两个for循环,遍历所有组合
image.png
payloads中选择使用的字典
image.png
image.png
点击start attack开始爆破
根据包长度判定是否为正确账号密码,可以看到长度为34984的包为正确账号密码(723包为请求过速,因此没有出test-abc123的账号)
image.png
第二关
第二关加了服务端出验证码
首先看是否能直接删掉该字段
image.png
发包后提示不能为空,因此后端对验证码进行了校验
image.png
判断是否存在验证码未失效的情况,burp按照之前的设置,验证码为当前抓包时的验证码,成功爆破
image.png

第三关
前端生成并验证,后端不验,首先前端输入一个正确的验证码,抓包发送给intruder后删除,之后爆破,成功
image.png
第四关
加了token,但没有用,因为可以直接拿到token,burp中提供正则匹配功能
注意此时不能再用cluster bomb了,需要修改一下user和password字典,用pitchfork,线程不要开大,中间最好sleep一下,否则token可能会乱
image.png
在options中设置好匹配的字段,比较方便,直接选中,不用自己写正则
image.png
可以看到爆破出了一个(字典关系)
image.png

至此,爆破部分结束

2 XSS

第一关和第二关
反射型xss,没有过滤,直接script标签弹窗,注意有长度限制,直接改js即可
image.png
image.png
post首先登录,这边找一个在线xss打一下cookie(都需要注册,再见),直接dom拿cookie写回页面吧,script标签console.log输出
image.png
第三关
存储型xss,会将payload写到页面上,只要访问就会触发
所以这里不用弹窗,否则需要到库子里删,不然每次访问都会触发弹窗
console.log输出一些东西吧
留言未显示已经被作为标签解析了,成功执行
image.png
image.png
image.png
第四关
dom型,输入会被写入到href中
image.png
用href的弹窗,javascript:alert(1)
image.png
点击弹窗
image.png

第五关
xss盲打,存在一个登录页面,猜测是打管理员后台
这里还是console.log输出cookie
不确定xss出在哪,因此用户名和留言都写
有一条没有显示,看控制台
image.png
成功输出cookie
image.png

第六关
有过滤,<script标签被替换空,尝试双写仍旧替换
image.png
使用其他标签,此处用img和onerror
image.png
image.png

第七关和第八关
输入写入到a.href中,和dom那个一样,实体化编码未编冒号和括号
直接用之前的payload
image.png

第九关
有一段js代码,可以看到输入直接放到$ms
image.png
尝试闭合,然后自己写script,标签现在是这样
image.png
略微修改弹个窗
image.png

XSS篇完结

3 CSRF

第一关
get型,传参等get方式实现,查看表单也可发现
image.png
原始信息如下
image.png
伪造一个请求,以lucy身份点击
http://x.com/vul/csrf/csrfget/csrf_get_edit.php?sex=1&phonenum=2123123&add=hello&email=123@123.com&submit=submit
image.png

第二关
post方式同理,但是需要自己写post发包,这种需要点击,最好hidden一下前面的表单内容

<form method=post action='http://x.com/vul/csrf/csrfpost/csrf_post_edit.php'>
<input name='sex' value='1'>
<input name='phonenum' value='2'>
<input name='add' value='3'>
<input name='email' value='4'>
<input type='submit' name='submit' value='submit'>
</form>

image.png
提交完之后
image.png
第三关
带csrf token,看是不是验证
请求带token且验证,可防

至此,CSRF完结

4 SQL注入

啊,来到了sql注入这个大洞

第一关
第一关字符型post,post数据为1 and 1=1时正常,1 and 1=2时报错无user id
image.png
这里直接出数据库名,不做后续测试
发包到repeater中,修改数据测试,order by测有2列
union select测两列均回显
image.png
出数据库,union select 1,database()
image.png

第二关
get+字符型,单引号报错信息推断语句靠单引号闭合
image.png
增加注释hello'--+,不报错
image.png
其他流程同post型,出db
image.png

第三关
搜索型注入,没有听说过,按照get+字符型测,报错信息如下
image.png
查了一下资料,语句大概为like '%输入%',本质上还是和字符型没有什么区别,只是注入时候用的语句多了%闭合
payload用%' order by 4--+,报错信息如下,正确闭合
image.png
有些可能可以用and '%'='来闭合后半部分,但是这里没有用,不会报错,所以直接注释了
其他流程和上面一致

第四关
xx型注入?直接单引号看报错信息,拆分一下,'1''),应该是('输入')
image.png
使用1')--+测试闭合,正确
image.png
其他流程同之前

第五关
insert、update,看标题好像是打堆叠?测试发现登录框好像没有注入点
猜测是不是注册时用了insert和update语句存在注入
repeater测试
image.png
每个位置都有注入点,但是似乎不太一样,有的是xx型里的
此处用')--+根据报错信息判断闭合为insert语句的闭合,即('','','',...)
image.png
最后一个位置注入,尝试') order by 1 and ('1'='1,失败
image.png
尝试不闭合括号,最终报错注入成功,payload为1' and extractvalue(1, concat('#', (select database()))) and '1'='1
image.png

第六关
和insert/update关卡一样,只是此处的sql注入点在delete语句上,删除评论时触发
在url中的id上加',报错如下
image.png
最终确认为数字型,order by尝试,1时就报错,改用报错注入,+and+extractvalue(1,concat('~',(select+database())))
image.png
image.png

第七关
可以看到记录了ip地址等信息,尝试http头注入
image.png
这里使用ua头,修改ua为1',报错,确认注入点
image.png
仍旧采用报错注入的方式,使用#似乎没办法注释掉内容,参考insert注入,尝试闭合,成功
image.png

第八关
盲注,这里用之前搜索型的用户名,lili,正确回显
image.png
使用lili',报用户不存在,基于此,确定为布尔型注入
image.png
尝试确认数据库长度(从上面可以知道数据库为pikachu,这里为方便直接按照pikachu写),lili' and length(database())>num#,确认长度为7
接着爆库名,这里只尝试第一位,payload为lili' and substr(database(),1,1)='p'#,正常回显
image.png
剩下的可以写脚本跑了,或者burp也可

第九关
基于时间的盲注,这里试了一下不能带外,默认应该没开secure_file_priv,想测的可以手动开一下
和布尔盲一样,语句换成lili' and sleep(2)#,抓包看,发现延时,存在注入点
image.png
配合if语句打盲注即可,因为耗时较长,就不演示了

第十关
宽字节,原理大概为加%df或%bf之后和\闭合成为一个gbk的编码,绕过对单引号的转义
这里在burp中测,输入框提交时%df解析有问题
lili%df'+or+1=1+--+可以爆出所有内容,存在注入
image.png
联合查询出数据库
image.png
注意我这里order by没有结果,根据之前的判断列为2或3,最终2成功,找了一下别人的,order by 3会在中间这个位置报错
image.png

好滴,sql注入篇完结

RCE

rce篇比较简单,可以看我之前写的命令执行的文章,这个直接秒了
第一关
猜测命令为ping 输入
分号分开,1.1.1.1;ls;,成功执行
image.png
第二关
system('ls'); 同样直接秒
image.png
RCE篇完结(貌似没有什么知识点)

文件包含

第一关
一个本地文件包含,随便选一个,看一下url
image.png
filename传递了一个参数,对其进行测试
用file协议尝试读/etc/passwd,用../往上翻
所以包含一下同级目录下的rce吧,payload为../../rce/rce.php,注意看url
image.png
image.png
第二关
远程包含,需要开allow_url_include
因为用的buuctf环境,所以暂时没法测
可以尝试提权改(bushi)

不安全文件下载

看前端代码,发现链接到一个位置
image.png
尝试改filename,这里还是../../rce/rce.php哈,点击下载
image.png
image.png
就造成了文件泄露

文件上传

第一关
客户端校验,即js脚本检测后缀,大概就是检测后缀是否为png或jpg或gif,不是则弹窗
image.png
写一个phpinfo的页面
先改后缀为jpg,burp抓包再改回来
image.png
image.png
访问一下
image.png

第二关
MIME检测,即检测文件类型
抓个包,改content-type
image.png
image.png

第三关
getimagesize检测,记得好像是检测文件头,做一张图片马
image.png
上传发现对文件名还有限制
image.png
之前phpinfo看apache版本
image.png
%0a截断试一下,不行
image.png
image.png
只能文件包含了(悲),在一大片奇形怪状的符号里找出phpinfo
image.png

文件上传篇,完结!

越权

第一关
水平越权,就是说我们可以看到同级下的其他用户信息
观察url发现参数username为我们的用户名,对应我们lucy的信息
image.png
image.png
改成lili的试试,成功查看
image.png
image.png

第二关
垂直越权,就是说我们能够从普通用户拿到管理员的权限
登录pikachu账号,页面没有什么特别的
image.png
登一下admin,发现一个新增用户页面
image.png
尝试以普通用户身份访问该页面,成功
image.png
添加一个用户试试
image.png
image.png

越权篇,完结~

目录遍历

这里有两个链接,先看一下,发现url的title参数传指定的文件,尝试和文件包含一样../,访问到了rce页面
image.png
image.png

敏感信息泄露

开前端页面,看到用户名密码
image.png
登录成功
image.png

php反序列化

详细内容可以看我之前写的php反序列化篇
这里需要看一下源码中的类
image.png
确定类之后,因为直接echo出来了,那我们可以xss
O:1:"S":1:{s:4:"test";s:n:script弹窗payload;}
image.png

XXE

XXE可以先了解一下xml文档结构
文档=头+DTD+正文
其中DTD如果可以加载外部实体,可能导致问题
比较常见的是file_get_content(php://input)直接读post信息,然后simple_load_xml解析
为了方便,这里还是打文件读取,也可以尝试打内网或者rce,payload如下(freebuf这个md编辑器预览和最终发布不太一样,可能显示有些问题)

<?xml version="1.0" ?>
<!DOCTYPE note [
    <!ENTITY hack SYSTEM "file:///etc/passwd">
]>

提交后成功访问
image.png

这里顺便试一下之前学的盲xxe,打一个复杂点的,因为环境限制,靠文件上传走一个dtd,配合dnslog读文件吧
文件上传内容
image.png
加载外部dtd的payload为
image.png
但是没有收到dns请求
看了一下源码,没开DTDLOAD
image.png

不安全url跳转

审计代码,发现文字对应的链接如下
image.png
可以看到最后两个和之前的不一样,一点击就跳转到别的页面或者发送了一个请求
image.png
这个故事告诉我们,不要随便点陌生链接

SSRF

第一关
curl出的ssrf,可以利用的点比较多,比如打内网或者读文件
这里由于环境限制打读文件,自己搭建的话可以尝试打redis
点击链接发现url参数指向内网(这里会not found,因为buuctf的靶机在81)
image.png
尝试修改该参数,file协议读/etc/passwd,成功
image.png
image.png
试了一下gopher打rce页面的命令执行,没有成功(感觉是路径的问题或者包的问题)

第二关
file_get_content出的ssrf,这里参数变成了file,一样的打法
image.png
修改file为file:///etc/passwd,成功
image.png

总结

结su啦,算是复习了一遍,之前xxe只是停留在理论上,还没有打过实战,这里练了一下,感觉加深了一下理解
道行比较浅,如果有错误请大佬指出来,蟹蟹~
后面打算刷一刷java靶场,练习一下java的审计,可以期待一下哦
后续也会出内网的打靶,但是电脑内存不太确定支不支持
体会就是,还是需要多练,多动手

# Pikachu # 靶场平台
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录