| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 攻防系列——pikachu靶场通关练习 -> 正文阅读 |
|
[网络协议]攻防系列——pikachu靶场通关练习 |
目录 (一)exec "ping"(远程系统命令执行)后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。 (二)exec "eval"(远程代码执行)后台把用户的输入作为代码的一部分进行执行,造成了远程代码执行漏洞。 写在最前面:有个大佬总结的比我的全面多了,我在有些地方稍微详细一些些。 贴上大佬博客地址:pikachu靶场通关_wuydsec的博客-CSDN博客_pikachu靶场通关 (这个靶场的作者真的好良心,呜呜u,好适合我??(? ? ??)?????????? 一、暴力破解从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基 Burte Force(暴力破解)概述“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。 理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括: 1.是否要求用户设置复杂的密码; (一)基于表单的暴力破解首先看需要用户名和密码登录,没有验证码。按照常规思路,先看了下源码。没有啥有价值的东西。直接随便用个用户名和密码试试。 ? 显示用户名或者密码不存在。抓包看看 ??burp-intruder小知识请移步(第一个比较白话,第二个比较全。我喜欢第一个哈哈): [Burp Suite完整教程] Intruder Attack type和Payloads – 拥有上千种姿态的攻击模式 - 腾讯云开发者社区-腾讯云 Burpsuite—Intruder模块详解_大成小慧的博客-CSDN博客_burpsuite设置线程 通过post提交,在响应界面正常返回一个登陆失败的的界面。 ? ?既然没有验证码,考虑下直接爆破。 第一步:选中此条post请求发送到Intruder中 第二步:清除变量 ?第三步:选中用户名和密码点击Add$将其设置为变量。attack type选cluster bomb ?第四步:分别加载两个变量的字典 第一个变量的字典: ?第二个变量的字典(将上面的payload选择下拉的2,就可以开始加载第二个变量的字典) 第五步:由于爆破会有大量无效的用户名和密码,产生很多无效界面。所以设置一下 在grep-match中删除原有字符串,添加username or password is not exists,burp就会将所有含有此字符串的数据包flag出来。没有被flag出的数据包则是我们破解成功的数据包。点击username or password is not exists(这串是每次错误以后界面的提示信息)进行排序,没有勾选的则表明破解成功,有勾选的则表明破解失败。 (这样的提效思路参考的带佬:wuydsec) ?第六步:回到payloads或者positions,点击右边的start attack,查看长度不一样的那一个就是爆破的登录用户与密码(admin,123456) 字典请移步:https://github.com/rootphantomer/Blasting_dictionary (二)验证码绕过(on server)验证码知识: 验证码的作用: 客户端request登录页面,后台生成验证码: 直接开始吧:(源码就不看了,跟第一题应该大同小异。) 第一步:随便输入一个用户名和密码-抓包-直接--右键转发至repeater。 发现一共是三个变量(username、pwd、vcode)。提交看回显。 ?第二步:?尝试直接修改username和pwd(不改vcode),并提交看回显。回显是username or password is not exists。和之前用admin 123提交后的提示是一样的。虽然我们没有改验证码,但是提示奥。(说明后台并没有验证码是否正确,根本不需要改) ?到这里,就可以明白,其实不用管验证码,只需要像第一题(基于表单的暴力破解)一样的办法,只要找到正确的username和pwd就行。方法同第一题。 ps:一般提交的验证码会被与存储在服务器session中的验证码做验证,但是这道题由于在验证完成后,没有及时的销毁session,使用过的session值仍然可以重复使用,所以产生了可利用漏洞。 (三)验证码绕过(on client)通过on server同样的办法抓包修改发送,发现验证码同样没有经过与后台的验证。所以用on server的办法去爆破登录即可。 (四)token 防爆破(1)Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。 ? 第一步:先随便输入一个username和pwd,抓包看看。发现和之前不同的是,虽然和第一类一样没有验证码,但是这种题目多了一个变量,就是token值。 第二步:利用返回的token值进行爆破,右键send to intruder并选择attack为pitchfork,同时清空并重新选择增加变量(pwd和token) 根据开头的token知识,后端是先验证每次用户提交的随机的token再进行后续的验证,所以每次都得考虑绕过token检验。token是一直变化的,爆破难度增加,但是既然token值既然已经返回到前端,就可以利用返回的token值进行爆破(这里涉及到burp的一个小用法)。 随便输个账号密码然后抓包。(token爆破适合运用于已知账号,然后爆用户密码。这里先假设username是admin。) ?第三步:options处为payload2做准备,也就是变量token的载荷。(token没有字典,是随机生成,所以需要在这里做特殊的设置,利用收集被返回到前端的token值进行后续的撞库)。第一次的token值记得复制下来待会要用。(如果失效了就再reftech一次)。 ?第四步:payloads处为两个变量加载字典 以下是payloads1(也就是pwd的字典) ?以下是payloads2(也就是token的“字典”) ?第五步:设置一下线程。2022.8版本的burp根本没有resquest engine处拿来设置线程(把线程设置为1,因为一个token对应一次爆破)。所以百度了一下。参考Burp爆破时出现Error:recursive grep payloads cannot be used with multiple request threads_Minorko的博客-CSDN博客 第六步:attack。找到长度不一样的那一条。密码是123456.token值对应305176352b77513030496197936 ?ps:本题假设的是username为admin,后来试了一下,如果不假设,直接开始爆破,那么三个变量都爆破试一试也是可以的。 小总结:针对登陆爆破类的题目,从做题角度来说,像token防爆破这道题和没有验证码的那道爆破题目,从访问界面来看是没有差别的(不看源代码的话),这类题一定要先抓包,看看变量有哪些再修改变量提交看看,多试一下。 二、Cross-Site ScriptingXSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 借用一下大佬的图: 跨站脚本漏洞常见类型 ●反射型 (危害:存储型>反射型> DOM型) 跨站脚本漏洞测试流程 ps:利用漏洞时,由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行(浏览器) ;通过变化不同的script ,尝试绕过后台过滤机制。 (一)反射型xss(get)?第一步:发现上图界面,类似查询界面。 第二步:输入一组”特殊字符+唯一识别字符”(比如;"’<>9999), 点击提交后,查看返回的源码,是否有过滤。 ?从上图可以看出,没有过滤,原封不动的返回了。(看页内源码,CTRL+F在页面内查找我们输入的字符。) 第三步:既然没有过滤,那直接写脚本 <script>alert("123")</script>,发现无法完整输入。说明搜索框有长度限制。 ?第四步:修改限制输入长度。 一般长度限制都是通过前端html代码校验,所以这里我们有两种方法: 第一种:网页框直接输入 因为是get方式,所以可以直接在url输入弹窗(网址框没限制)。 下图是假设随便提交123的url显示(注:使用之前需要查看浏览器是否自动转换URL编码,若无法自动转换则需要手动输入转换。) 可以看到值是在message后面。那么直接将payload写在后面访问看看 ?第二种:修改html代码 将鼠标光标点击到输入框-右键,可以看到maxlength为20,这里将他修改为100 ? (二)反射型XSS(post)第一步:先随便输入看看,提示用户名或密码错误 第二步:点击一下提示 登陆看看 第三步:现在的界面和xss(get)是一样的了。按照上一关的方法输入脚本: 获得cookie(phpsessid值) ?ps:这类题如果要综合出题,可能是先暴力破解获得用户名、密码是第一个考点。成功登陆以后输入特殊字符测试是否有sql注入/是否有xss漏洞,然后根据实际情况进行利用。 (三)存储型XSS第一步:发现是一个留言板。看到留言版就会想到存储型xss利用。 第二步:直接在留言板中输入Payload:
点击确定 之后就变成下图这样了,虽然留言内容显示不出来,但是对比一开始进来的时候可以看到多了个“删除”,说明确实多了一条留言 (四)DOM型XSS?小知识:JavaScript HTML DOM 什么是 HTML DOM?HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:
换言之:HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。 开始做题 第一步:随便输入个东西看看 第二步:看下源码 ?啥也没看见。看下源码,问我们看见了啥,那我就搜搜what do you see(大佬说:寻找DOM XSS的本质是做js语言阅读理解题) ?通过看源码可以发现,该dom是将输入的字符串进行了拼接,并将值给a标签,然后输出waht do you see。( <a href='"+str+"'>what do you see?</a>) 第三步:利用输入构造闭合,完成我们的payload写入 注意:源码中的str的双引号不用管,就当他不存在就行。 第一种:按照作者的提示,在input输入? ?#' οnclick="alert(111)">? 完成闭合 ' οnclick="alert('xss')"> 输入以后实际上的语句是: 以上构成a标签闭合,且嵌入一个弹窗。 第二种:按照作者的提示,在input输入? ?'><img src="#" οnmοuseοver="alert('xss')">? ?完成闭合 输入以后实际上的语句是:
ps:小技巧——可以通过右键-检查-使用ctrl+shift+c来查看输入后的语句测试如何闭合标签和引号 (五)DOM型XSS-X??第一步:随便输入一个123看看.可以发现输入的值在url中。并且有一个链接——“有些费尽心机想要忘记的事情,后来真的就忘掉了” (一定要养成观察的习惯,抓包观察、提交后看url等等?????????) ?第二步:看源码,发现还是a标签。同上一题。 第三步:直接输入字符进行闭合。 可以是作者提示的? ? ?' οnclick="alert('xss')"> 或者? ? ?'><img src="#" οnmοuseοver="alert('xss')"> 或者是上一关的字符。 最后效果如下: ?(六)XSS盲打盲打的意思,就是前端看不到我们输入一些内容以后有什么样的反馈或效果。那怎么办? 只要输入了,后台会看到前端输入的内容。 ?第一步:随便一个xss语句看看(反馈没啥有用的东西,url也看不到什么东西) 实战直接使用<script>alert(document.cookie)</script> 这里我们用<script>alert('123')</script> ?第二步:看下源码 第三步:根据提示登陆后台看看,需要用户登录(但是我们目前没有啊),所以看下源码。源码出现了靶场作者的提示,给出了后台的用户名和密码 ?第四步:登录看看 原理:其实我们的输入已经被存储在后台了,已经到达了后端所以在安全策略不太良好的情况下就会被X。 危害:在实战中,如果在前端输入一段盗取cookie的脚本,管理员一登陆,管理员的cookie就会被获取。攻击者就可以伪装管理员登陆后台。 (七)XSS之过滤第一步:存在inout位置,直接输入xss脚本看看 ?<script>alert('123')</script> 返回的东西没有什么价值(包含部分输入的内容的回显,这里说明存在过滤)。但是观察url,可以看到插入的语句会直接在url中显示。 ?第二步:看看过滤了哪些,才能确定如何绕过 先看过滤了哪些符号 常见的在XSS脚本中t会使用到的script脚本的一些符号:"<>'on/`() ?再看过滤了哪些字符 常见的在XSS脚本中t会使用到的script脚本的一些字符:script img href src 再试试一起输入看看?"<>‘on/’() script img href src 发现单独输入"<>‘on/’()与script img href src什么都没有被过滤。但是组合输入时候过滤了。说明过滤的可能是??</>script 第三步:开始绕过规则插入XSS脚本 思路一:既然过滤了script,那么就不用这个标签 我们用a标签。输入:<a herf="#" οnclick="alert(document.cookie)"> 或者使用img标签。输入:<img src=x οnerrοr="alert(document.cookie)"> 点击链接,可以弹窗 ?思路二:尝试大小写绕过 大小写绕过:<scRIPt>alert(document.cookie)</ScrIpt> 这样的话是不弹窗的,估计是除了script以外,还可能屏蔽了关键字(document.cookie)。直接把aler换数字是没得问题的。(实际上应该是有办法绕过的,我试了大小写和转义、还有尖括号但是都没行) 改成了:<scRIPt>alert(111)</ScrIpt> ?(八)xss之htmlspecialchars?第一步:随便输入看看(<script>alert('123')</script>)。发现反馈了输入的字符串。根据之前做题来看,这里我们输入以后,应该是将值传给了a标签。 第二步:看看源码? 发现不管是 但是单引号没有被html编码,尝试利用一下 输入:? ? ? ?#' οnclick='alert(document.cookie)' ?我们验证一下闭合情况(选中生成的链接,右键,检查) ?(九)xss之href输出第一步:输入一个xss看看(<script>alert('123')</script>) ?第二步:看看源码 ?发现发现左右尖括号和单引号都被html编码了(上一题尖括号被编码,但是单引号没有被编码,最后用的闭合方式) 不知道怎么办,点一下提示 百度知识: <a>标签的 href 属性用于指定超链接目标的 URL。 href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了<a>标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。 所以本题,还可以利用javascript片段来执行。 第三步:利用JavaScript协议 输入:? ? ? javascript:alert(document.cookie) (十)?xss之js输出第一步:先随便输入一段xss脚本(我直接用的上一题的) 没有什么能够提供帮助的信息? 第二步:看看源码 可以发现,输入的东西,在script标签内,且没有被编码。所以现在的思路是利用这来闭合。 方法一:先用 X' 将前面的script闭合,再无中生有插入我们自己的新语句。 输入? ? x'</script><script>alert(document.cookiefa)</script> ?方法二:用? ?’;? ?闭合掉当前的语句,然后插入新语句,再用//注释掉老语句遗留下来的? ?’; 输入? ?
?三、CSRF?csrf概述csrf部分的三道题都是要求修改用户信息。这里有两个要求: 一是要么有用户信息,登陆后自己来修改。(从源码来看,可以直接获取。其实那是靶场作者设置的提示,考点不在这里) 二是要么保证用户处于登录状态,然后利用url或者根据post(不同的情况)构造payload或者在目标网站部署恶意站点,诱导用户点击,利用用户在不知情的情况下完成修改。(考点在这里) (一)csrf get?第一步:看下源码 第二步:?选择lili 123456看看(可以随便选用户名) 第三步:修改住址提交抓包 可以看到几个变量值四个,并且没有token值。 提交方式是get. 不带任何不可预测的认证信息。 ?第四步:get方式提交的话,说明可以直接在burp上改变量值,也可以自直接在url中直接写payload。 http://www.pikachu.com:90/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=123456789&add=nbaluckhouse&email=allen%40qq.com&submit=submit (二)POST CSRF?同上面一样的办法:看源码-登录修改信息(假设修改电话号码)-抓包观察。发现和上面一道题类似,仍然没有出现不可预测的验证。则可以利用csrf漏洞。 但由于本题是POST方式提交,所以无法在我们这端直接通过url提交payload,需要在目标网站部署站点(通过抓修改提交的包,观察页面元素,帮助构造url表单),诱骗正常登录用户点击提交。 第一步:写恶意站点表单代码(假设修改phonenum的值。你也可以选择修改其他的,都可以) aciton的地址是修改提交抓包后显示的POST地址(上图圈出来的) ?源码: <html> 以上参考大佬:Pikachu靶场之CSRF漏洞详解_caker丶的博客-CSDN博客_皮卡丘csrf? 第二步:部署到目标网站 这里我自己搭建的靶场,我就直接放到后台了 ?最后,当用户在登录状态下,访问黑客站点(我们写的表单action网址) 点击前,用户登陆后的界面 ?点击后(点击网址:http://靶场IP/pikachu/csrf.html,网址就是我们部署的站点放置的文件位置,也即看看第二步你把东西放哪儿了),前提是用户本身是在登录状态,然后我们将伪造的恶意站点链接发给用户,诱骗其点击。(我试过,退出登陆后,访问http://靶场IP/pikachu/csrf.html,会提示无法访问) ?但是我有个疑问,用户点击后界面的确是显示已经修改。但是我退出登录以后,重新登录,发现该用户的信息仍然没有被修改......求大佬解答?o?????o??? ?(三)CSRF Token login开始做了很久,没看懂啥意思,结果去看了别人的思路,发现这关是防范CSRF的常用方法的一个演示。 这道题就是展示防范的。所以我们直接看下源码。 会验证提交的token,并且和后台的token进行比对,如果比对成功会生成新的token(set_token()函数如下图所示,在生成新token之前会先销毁老token,避免token重复使用。)。将其返回到html表单中并隐藏起来,以便下次用户修改信息时代入url。 四、SQL-Injection因为这块看起来真的脑壳痛,我干脆后面搭建sqlilabs靶场针对性练习,暂时先放一放(?゚▽゚)ノ 五、RCE(第四类sql注入太多了,打算后面搭建sqlilabs靶场针对练习,暂时先跳过了) RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 (一)exec "ping"(远程系统命令执行)
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:43:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |