本来不打算做的,因为时间紧任务重,但心血来潮,想整这么玩意,献丑了。
参考文献:https://blog.csdn.net/weixin_52385170/article/details/128093840

暴力破解

基于表单的暴力破解

不多说,随便输入一个用户名与密码,直接抓包发送到inturder,设置好爆破即可。
只有一个注意点,你要爆几个字段,那么你就要导入多少个字典。
图一
图一
之后就开始爆破。
观察到有一个数据包的长度明显不同于其他,那么这一对可能匹配。
图一
成功
图一

验证码绕过(验证在客户端)

直接浏览器禁用js或者验证码复用(把第一次的验证码固定)即可,其他均与上述一致。
图一

验证码绕过(验证在服务器端)

这里是发现验证码没有时间限制,也就是可以复用。
tips:如何判断验证码是在前端验证还是在后端验证:直接输入一个错误的验证码,看他是否弹窗(弹窗一般是js)但也不全面
最有效的是查看源码,后端验证的话验证代码源码看不到;但是前端的话可以看到。

带token

参考:https://blog.csdn.net/m0_74977101/article/details/131833702
具体操作看上篇文章,这里只讲一下思路。
输入完成后抓包,发现带有token,先尝试token可不可以复用,发现token是每请求一次就自动刷新的。
继续观察,发现当前token来源于上一个返回的数据包。

Cross-Site Scripting–XSS

CSRF

get型

登录后点击可以看到个人信息
修改个人信息后抓包
图一
若某种机缘巧合下,截取到修改信息的数据包,那把数据改成自己想要的,然后伪装成人畜无害的样子发给用户,诱使用户点击,点击后就会触发csrf跨站伪造请求漏洞,数据成功被修改。
图二

post型

与get方式不同,可以通过抓包。参考上面那篇文章。
就是通过抓包得到的数据,构造一个html表单存储数据(存储在www目录下),然后点击submit即可完成修改。

token验证型

CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造?
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。
当我们点击修改个人信息的时候,从url可以看出我们访问了token_get_edit.php,执行后端代码,生成token,并且发送到前端页面,通过hidden属性隐藏起来,放在表单中,用来指定这个数据包(后端也存在这个token)。
当完成填入要修改的内容信息后,此时点击submit,此时表单内容以及token一起发送到后端进行验证,若token相同,则允许修改,反之拒绝。(因为如果要伪造一个数据包,由于token是随机生成的,如果刷新界面,那么就会生成一个新的token,token必定会不同,这样可以有效防止CSRF跨站伪造请求)。

little对比

1、CSRF在一些情况下可以使用的,若对面没有开启token验证,则我们可以通过截取的数据包构造出我们想要的另一个数据包,访问即可达到效果。
2、XSS需要一定的社工,即诱使对方点击某一个带木马的链接才可以达到效果。

RCE

命令执行漏洞

首先ping 127.0.0.1
图三
成功
但是直接执行ipconfig的话
图四
失败
这是由于他是ping命令,若直接填入ipconfig,相当于ping ipconfig,肯定报错
这里要用到windows可以利用&符号来执行多条语句的方法,填入

1
127.0.0.1&ipconfig

图五
成功

代码执行漏洞

顾名思义,就是直接接受你输入的php代码直接执行,究其本质是因为php代码中存在一个eval()函数,他会把你输入到括号内的语句当作php代码去执行。
直接输入phpinfo();
图六

little 总结

1、RCE总体上还是可以建议测试的,因为总会有一些函数是不得不开放的,若一个网站存在这些可以执行命令或解析代码的函数,则可以利用这些函数测试。

File Inclusion(文件包含漏洞)

本地包含

任意选一个提交,查看网址,发现包含的是一个.php文件,由于时=是个人电脑,我在某一个目录下创建了一个1.php文件,内容是

1
2
3
<?php
phpinfo();
?>

我把filename值改成

1
../../../../1.php

成功包含了此文件,并被网页成功解析

图七

远程包含

前提:见参考文献
在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程代码。在这个远程文件写入一句话木马,危害极大。
这里我们利用pikachu提供的一句话木马文件,存在于pikachu的test目录下的yijuhua.txt。
这个木马的大概作用是向当前位置创建并打开一个.php文件,并向其写入一句话木马。这个一句话木马相当于远程命令执行。
图八
访问这个网址,不出意外的话,会在当前目录fileinclude创建一个含有一句话木马的yijuhua.php文件
但是我这里出了点小插曲,安全软件拦截了,问题不大,恢复出去即可。
图九
然后我们就可以以此作为跳板,进行远程命令执行。
图十

little 总结

1、文件包含漏洞不需要知道目标网站的具体目录结构,因为他是在当前的文件夹包含入一个文件的。
2、远程包含漏洞带来的危害更大,从上述案例可以看出,利用远程包含漏洞可以把我们希望在对面执行的结果写入一个文件(比如创建一句话木马的文件),如果成功包含,即可getshell。

文件下载

在这里,看网址只是显示一个总体的index主页文件,看不出什么所以然。
但是当我把鼠标移到图片处时,观察到网址包含filename属性。
图十一
把网址复制出来观察,点到不同的图片变化的只是filename值,说明他是在当前目录下下载文件。
实际中,可以通过对网站的扫描可以知道该网站目录下有哪些文件,然后再跳转到那个目录下,可以完成未授权的下载。
我的www目录下有一个1.php文件,那么我可以通过以下方法下载到它。
图十二
这便是简单的文件下载。(../是向上级目录跳转的意思)

文件上传

client check(前端验证)

记住,所有在前端进行验证的都不是靠谱的,如果网站是设计在前端进行验证的,首先考虑先把js给禁用掉。
这里首先直接上传一个.php文件,发现我还没点提交,他就直接提示报错信息,说明是一个前端验证。
图十三
这里直接成功了,可以上传.php文件。

MIME信息验证

直接在burpsuite抓包,把Content-Type信息改成图片形式的即可,我这里是png
图十四

1
2
image/png
image/jpg

等都可以,这里可以看到成功上传了,尝试访问一下这个文件。(文件路径一般通过路径扫描可以知道把?)
图十五

getimagesize 验证

这道题着重记录一下。
首先直接上传一个.php文件,发现
图十六
这里上网查了一下getimagesize()函数的作用。
getimagesize():https://www.php.cn/faq/562666.html
总的来说就是判断是否为图像类型,那么大小写,截断,重写等花里胡哨的方法失效。
只能上传图片马,先制作图片马。

1
copy shana.png + 2.php c.png//c.png是合成后的图片名字

直接上传这张图片。
此时虽然成功上传,但是网站没有发现有解析漏洞,所以不能被当成.php文件执行,那么活用思路,结合文件包含漏洞。
图十七
由于这种思路是看了别人的writeup的,有启发,特别记录一下。

逻辑越权

水平越权

登录lucy账户,随后在地址栏上修改即可,较简单。
图十八

垂直越权

先用超级用户登录,创建一个新的用户并抓包,放出去(目的是为了在http history留下记录)。
然后用普通用户登录,注意:登录时要抓包,复制个人的cookie信息。
图十八
然后把之前超级用户的数据包发送到重发器中去,把cookie换成刚才复制的,刷新界面,即可看到之前的数据又添加了一份,这里的数据可以在抓包工具里面改成自己想要的,这样就说明存在垂直越权漏洞。
图十九

小总结

1、水平越权较好利用,只要你在登陆的时候看见网址栏存在和你用户名一样的值,就可以尝试修改(有时候是编号),这样可以达到在你的界面无需密码从而登录到别的用户的主页。
2、水平越权更多的是造成用户数据的隐私泄漏:而垂直越权是造成系统权限的泄漏,可能会使网站遭到破坏。
3、但是感觉垂直越权的实现和csrf一样难以实现,必须要借助管理员登陆过且操作过截获到的数据包才可操作。

PHP反序列化

上面两道题都是无类情况,该情况构造序列化payload的代码相对简单,接下来是学习有类情况下如何构造payload。
由于是本地靶场,那么我可以先查看源码。
图九
发现存在一个class类,而且存在一个创建对象会触发的魔术方法,那么可以考虑利用,但是发现就算利用的上也没啥大用,总不能改别人代码吧。此路不通,那么往下看,发现一个判断,意思是如果是接收的是序列化的值,那么会转为对象并赋值给unser;如果不是序列化的值,没用。
而且,它的打印输出语句不是echo,那么就要考虑写js语句(觉得应该是如果简单输出字符串,那么就对获取信息没啥用,所以考虑可获取cookie的js语句)。
构造payload(编程,目的是把payload序列化):

1
2
3
4
5
6
7
8
9
<?php 
class S{ //创建一个类
var $test="pikachu";//赋初值
}
$whoami=new S();//创建一个对象
$payload="<script>alert(document.cookie)</script>";//构造payload,获取cookie
$whoami->test=$payload;//传输payload
echo serialize($whoami);//输出序列化的内容
?>

关于上述代码的注意点:
如果对方有类,那么你构造的代码必须也含有类(类名也要相同),然后创建一个对象传输你要传输的数据(我称之为一一对应)。
运行后,获取到序列化的payload:

1
O:1:"S":1:{s:4:"test";s:39:"<script>alert(document.cookie)</script>";}

图十
把这句payload放入文本框,并submit,成功弹出cookie信息。
图十一