目录
一、暴力破解
Burte Force(暴力破解)概述
(一)基于表单的暴力破解
(二)验证码绕过(on server)
(三)验证码绕过(on client)
(四)token 防爆破
二、Cross-Site Scripting
(一)反射型xss(get)
(二)反射型XSS(post)
(三)存储型XSS
(四)DOM型XSS
(五)DOM型XSS-X
(六)XSS盲打
(七)XSS之过滤
(八)xss之htmlspecialchars
(九)xss之href输出
(十) xss之js输出
三、CSRF
csrf概述
(一)csrf get
(二)POST CSRF
(三)CSRF Token login
四、SQL-Injection
五、RCE
(一)exec "ping"(远程系统命令执行)后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。
(二)exec "eval"(远程代码执行)后台把用户的输入作为代码的一部分进行执行,造成了远程代码执行漏洞。
六、File Inclusion(文件包含漏洞)
(一)本地文件包含
(二)远程文件包含漏洞
七、unsafe filedownload
八、unsafe fileupload
九、over permission
(一)op1 login(水平越权)
(二)op2 login(垂直越权)
十、目录遍历
十一、敏感信息泄露
敏感信息泄露概述
十二、PHP反序列化
十三、XXE(xml外部实体注入漏洞)
十四、URL重定向
十五、SSRF
写在最前面:有个大佬总结的比我的全面多了,我在有些地方稍微详细一些些。
贴上大佬博客地址:pikachu靶场通关_wuydsec的博客-CSDN博客_pikachu靶场通关
(这个靶场的作者真的好良心,呜呜u,好适合我 ✧(≖ ◡ ≖✿)ʕ̯•͡ˑ͓•̯᷅ʔ
从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
你可以通过“BurteForce”对应的测试栏目,来进一步的了解该漏洞。
首先看需要用户名和密码登录,没有验证码。按照常规思路,先看了下源码。没有啥有价值的东西。直接随便用个用户名和密码试试。
显示用户名或者密码不存在。抓包看看
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
验证码知识:
验证码的作用:
防止登录暴力破解
防止机器恶意注册
验证码大概的的认证流程:
客户端request登录页面,后台生成验证码:
1.后台使用算法生成图片,并将图片response给客户端;
2.同时将算法生成的值全局赋值存到SESSION中;
校验验证码:
1.客户端将认证信息和验证码-同提交;
2.后台对提交的验证码与SESSION里面的进行比较;
客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数,所以每次刷新都会改变;
直接开始吧:(源码就不看了,跟第一题应该大同小异。)
第一步:随便输入一个用户名和密码-抓包-直接--右键转发至repeater。
发现一共是三个变量(username、pwd、vcode)。提交看回显。
第二步: 尝试直接修改username和pwd(不改vcode),并提交看回显。回显是username or password is not exists。和之前用admin 123提交后的提示是一样的。虽然我们没有改验证码,但是提示奥。(说明后台并没有验证码是否正确,根本不需要改)
到这里,就可以明白,其实不用管验证码,只需要像第一题(基于表单的暴力破解)一样的办法,只要找到正确的username和pwd就行。方法同第一题。
ps:一般提交的验证码会被与存储在服务器session中的验证码做验证,但是这道题由于在验证完成后,没有及时的销毁session,使用过的session值仍然可以重复使用,所以产生了可利用漏洞。
通过on server同样的办法抓包修改发送,发现验证码同样没有经过与后台的验证。所以用on server的办法去爆破登录即可。
(1)Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
(2)Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
(3)使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮
如果我们没有这个token值得话,无法去请求得到想要的数据。
以上来自pikachu靶场之暴力破解_花墩墩的博客-CSDN博客
第一步:先随便输入一个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防爆破这道题和没有验证码的那道爆破题目,从访问界面来看是没有差别的(不看源代码的话),这类题一定要先抓包,看看变量有哪些再修改变量提交看看,多试一下。
XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。(XSS漏洞可以用来进行钓鱼攻击、前端js挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。漏洞利用场景可参考XSS的高级利用:盗取用户Cookie - Zeker62 - 博客园)
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因:是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
借用一下大佬的图:
跨站脚本漏洞常见类型
●反射型
交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
●存储型
交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。
●DOM型
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。
(危害:存储型>反射型> DOM型)
跨站脚本漏洞测试流程
①在目标站点上找到输入点,比如查询接口,留言板等;
②输入一组”特殊字符+唯一识别字符”, 点击提交后,查看返回的源码,是否有做对应的处理;
③通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件 (构造闭合) ;
④提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
ps:利用漏洞时,由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行(浏览器) ;通过变化不同的script ,尝试绕过后台过滤机制。
第一步:发现上图界面,类似查询界面。
第二步:输入一组”特殊字符+唯一识别字符”(比如;"’<>9999), 点击提交后,查看返回的源码,是否有过滤。
从上图可以看出,没有过滤,原封不动的返回了。(看页内源码,CTRL+F在页面内查找我们输入的字符。)
第三步:既然没有过滤,那直接写脚本
,发现无法完整输入。说明搜索框有长度限制。
第四步:修改限制输入长度。
一般长度限制都是通过前端html代码校验,所以这里我们有两种方法:
第一种:网页框直接输入
因为是get方式,所以可以直接在url输入弹窗(网址框没限制)。
下图是假设随便提交123的url显示(注:使用之前需要查看浏览器是否自动转换URL编码,若无法自动转换则需要手动输入转换。)
可以看到值是在message后面。那么直接将payload写在后面访问看看
第二种:修改html代码
将鼠标光标点击到输入框-右键,可以看到maxlength为20,这里将他修改为100
第一步:先随便输入看看,提示用户名或密码错误
登陆看看
第三步:现在的界面和xss(get)是一样的了。按照上一关的方法输入脚本:
获得cookie(phpsessid值)
ps:这类题如果要综合出题,可能是先暴力破解获得用户名、密码是第一个考点。成功登陆以后输入特殊字符测试是否有sql注入/是否有xss漏洞,然后根据实际情况进行利用。
第一步:发现是一个留言板。看到留言版就会想到存储型xss利用。
第二步:直接在留言板中输入Payload:
成功获得cookie
点击确定 之后就变成下图这样了,虽然留言内容显示不出来,但是对比一开始进来的时候可以看到多了个“删除”,说明确实多了一条留言
小知识:JavaScript HTML DOM
HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:
换言之:HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。
开始做题
第一步:随便输入个东西看看
第二步:看下源码
啥也没看见。看下源码,问我们看见了啥,那我就搜搜what do you see(大佬说:寻找DOM XSS的本质是做js语言阅读理解题)
通过看源码可以发现,该dom是将输入的字符串进行了拼接,并将值给a标签,然后输出waht do you see。(
what do you see?)
第三步:利用输入构造闭合,完成我们的payload写入
注意:源码中的str的双引号不用管,就当他不存在就行。
第一种:按照作者的提示,在input输入 #' οnclick="alert(111)"> 完成闭合
' οnclick="alert('xss')">
输入以后实际上的语句是:'>what do you see?
以上构成a标签闭合,且嵌入一个弹窗。
第二种:按照作者的提示,在input输入 '> 完成闭合
输入以后实际上的语句是:
弹框成功
ps:小技巧——可以通过右键-检查-使用ctrl+shift+c来查看输入后的语句测试如何闭合标签和引号
第一步:随便输入一个123看看.可以发现输入的值在url中。并且有一个链接——“有些费尽心机想要忘记的事情,后来真的就忘掉了”
(一定要养成观察的习惯,抓包观察、提交后看url等等ʕु•̫͡•ʔु☂)
第二步:看源码,发现还是a标签。同上一题。
第三步:直接输入字符进行闭合。
可以是作者提示的 ' οnclick="alert('xss')">
或者 '>
或者是上一关的字符。
最后效果如下:
盲打的意思,就是前端看不到我们输入一些内容以后有什么样的反馈或效果。那怎么办?
只要输入了,后台会看到前端输入的内容。
所以,别管,直接往能input的地方插入XSS代码,然后等待,可能会有惊喜。
如果后端安全考虑不太严格,那么当管理员登录时,就会被X !
第一步:随便一个xss语句看看(反馈没啥有用的东西,url也看不到什么东西)
实战直接使用
这里我们用
第三步:根据提示登陆后台看看,需要用户登录(但是我们目前没有啊),所以看下源码。源码出现了靶场作者的提示,给出了后台的用户名和密码
第四步:登录看看
原理:其实我们的输入已经被存储在后台了,已经到达了后端所以在安全策略不太良好的情况下就会被X。
危害:在实战中,如果在前端输入一段盗取cookie的脚本,管理员一登陆,管理员的cookie就会被获取。攻击者就可以伪装管理员登陆后台。
第一步:存在inout位置,直接输入xss脚本看看
返回的东西没有什么价值(包含部分输入的内容的回显,这里说明存在过滤)。但是观察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,那么就不用这个标签
或者使用img标签。输入:
点击链接,可以弹窗
思路二:尝试大小写绕过
大小写绕过:
这样的话是不弹窗的,估计是除了script以外,还可能屏蔽了关键字(document.cookie)。直接把aler换数字是没得问题的。(实际上应该是有办法绕过的,我试了大小写和转义、还有尖括号但是都没行)
改成了:
第一步:随便输入看看()。发现反馈了输入的字符串。根据之前做题来看,这里我们输入以后,应该是将值传给了a标签。
第二步:看看源码
发现不管是标签、href属性内,左右尖括号被编码了,因此这关想闭合标签是不行了。
输入: #' οnclick='alert(document.cookie)'
我们验证一下闭合情况(选中生成的链接,右键,检查)
第一步:输入一个xss看看()
第二步:看看源码
发现发现左右尖括号和单引号都被html编码了(上一题尖括号被编码,但是单引号没有被编码,最后用的闭合方式)
不知道怎么办,点一下提示
百度知识:
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。
所以本题,还可以利用javascript片段来执行。
第三步:利用JavaScript协议
输入: javascript:alert(document.cookie)
第一步:先随便输入一段xss脚本(我直接用的上一题的)
没有什么能够提供帮助的信息
第二步:看看源码
可以发现,输入的东西,在script标签内,且没有被编码。所以现在的思路是利用这来闭合。
方法一:先用 X' 将前面的script闭合,再无中生有插入我们自己的新语句。
输入 x'
方法二:用 ’; 闭合掉当前的语句,然后插入新语句,再用//注释掉老语句遗留下来的 ’;
输入 ';alert(document.cookie);//
(注意这里我们闭合前面的语句,注释老语句遗留的符号以后,缺 ; 所以千万不要忘了加)
csrf部分的三道题都是要求修改用户信息。这里有两个要求:
一是要么有用户信息,登陆后自己来修改。(从源码来看,可以直接获取。其实那是靶场作者设置的提示,考点不在这里)
二是要么保证用户处于登录状态,然后利用url或者根据post(不同的情况)构造payload或者在目标网站部署恶意站点,诱导用户点击,利用用户在不知情的情况下完成修改。(考点在这里)
第二步: 选择lili 123456看看(可以随便选用户名)
第三步:修改住址提交抓包
提交方式是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
同上面一样的办法:看源码-登录修改信息(假设修改电话号码)-抓包观察。发现和上面一道题类似,仍然没有出现不可预测的验证。则可以利用csrf漏洞。
但由于本题是POST方式提交,所以无法在我们这端直接通过url提交payload,需要在目标网站部署站点(通过抓修改提交的包,观察页面元素,帮助构造url表单),诱骗正常登录用户点击提交。
第一步:写恶意站点表单代码(假设修改phonenum的值。你也可以选择修改其他的,都可以)
aciton的地址是修改提交抓包后显示的POST地址(上图圈出来的)
源码:
以上参考大佬:Pikachu靶场之CSRF漏洞详解_caker丶的博客-CSDN博客_皮卡丘csrf
第二步:部署到目标网站
这里我自己搭建的靶场,我就直接放到后台了
最后,当用户在登录状态下,访问黑客站点(我们写的表单action网址)http://目标网站-IP/pikachu/vul/csrf/csrfpost/csrf_post_login.php/csrf.html
并点击提交按钮,那么其个人信息将会被恶意修改(我们将电话号码修改为13111111111)
点击前,用户登陆后的界面
点击后(点击网址:http://靶场IP/pikachu/csrf.html,网址就是我们部署的站点放置的文件位置,也即看看第二步你把东西放哪儿了),前提是用户本身是在登录状态,然后我们将伪造的恶意站点链接发给用户,诱骗其点击。(我试过,退出登陆后,访问http://靶场IP/pikachu/csrf.html,会提示无法访问)
但是我有个疑问,用户点击后界面的确是显示已经修改。但是我退出登录以后,重新登录,发现该用户的信息仍然没有被修改......求大佬解答୧º̣͙•̥͙º̣͙୨
开始做了很久,没看懂啥意思,结果去看了别人的思路,发现这关是防范CSRF的常用方法的一个演示。
这道题就是展示防范的。所以我们直接看下源码。
会验证提交的token,并且和后台的token进行比对,如果比对成功会生成新的token(set_token()函数如下图所示,在生成新token之前会先销毁老token,避免token重复使用。)。将其返回到html表单中并隐藏起来,以便下次用户修改信息时代入url。
因为这块看起来真的脑壳痛,我干脆后面搭建sqlilabs靶场针对性练习,暂时先放一放(✿゚▽゚)ノ
(第四类sql注入太多了,打算后面搭建sqlilabs靶场针对练习,暂时先跳过了)
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
(试了一下127.0.0.1)
(又试了一下123.123.123.123)
通过以上可以看出,没有对输入进行编码。
第二步:试试拼接命令(一般先拼接whoami)
这里提供一个链接学习(linux和windows稍有差异)。 远程命令执行/命令注入 之 命令连接符_仙女象的博客-CSDN博客_远程命令注入
whoami命令呢?因为这个命令同时支持windows和linux系统,而且显示的内容不同,不但可以用来判断是否有远程命令执行漏洞,还可以用来判断操作系统(linux系统中显示当前执行操作的用户名,windows系统中显示当前登录的域名和用户名)。
还有一点需要注意,命令和连接符之间有没有空格都可以
输入: 127.0.0.1 && whoami 试试
成功执行,并且显示当前域名和用户名,所以是windows系统。到此就可以知道能利用该漏洞了。实际的题目中,应该可以用 && dir 或者 && cat flag 或者 && type 文件这样的语句得到flag
可以看到,通过post的方式将输入的字符串提交到了后台(没有写action,但应该是到后台去了)
看作者的提示:eval()函数
eval(输入)也就是执行任何我们输入的数据
第三步:既然直接执行输入的脚本,那直接输入payload试试(输入: phpinfo(); )
返回了php的信息。
那么在实战中可以考虑通过这个办法上传一句话木马(写入脚本执行生成一句话php)
输入payload:fputs(fopen('1.php','w'),'');
从网页来看没什么反馈,但不出以外应该是已经在后台生成了一个php了。
我们去靶场后台看看,确实已经在了。那么可以通过蚁剑连接。
蚁剑连接的时候,上传位置的问题:做题的时候图快可以猜上传目录。但是不行的话就dirsearch试一下。
目录扫描工具dirsearch用法_zxl2605的博客-CSDN博客_dirsearch目录扫描
目录扫描工具dirsearch使用_Hardworking666的博客-CSDN博客_dirsearch目录扫描
注意使用命令的时候:-e *:代表探测所有后缀目录文件。也可以指定特定文件后缀,比如:-e php
File Inclusion(文件包含漏洞)概述
文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
这些文件包含函数,这些函数在代码设计中被经常使用到。
大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。 攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。 根据不同的配置环境,文件包含漏洞分为如下两种情况:
1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。
因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。
第一步:先随便选择输入,我选科比
观察发现filename=file1.php
第二步:访问某些系统文件(可以是php可以是某个文件)
虽然通过前端来限制了用户的输入, 但是还是可以进行抓包修改数据, 使包含的文件名成为一个变量,可以达到恶意暴露服务器重要文件的目的
那么可以通过直接访问一个关键php获得要的信息
实际做题中,可以用dirsearch看下有没有flag.php或者其他的,然后使用 ../ 来包含本地文件进行访问
再或者,dirsearch不出来的话,就猜测一下有哪些本地文件,直接访问看看,然后想办法修改配置文件。(例如:当前IP/?filename=../../../../Windows/System32/drivers/etc/hosts).可以多敲几个,最后都会跳到根目录。然后可以将文件名替换。
按照提示要先进行设置
按道理来说要配合文件上传漏洞来使用。
第一步:随便选一个,抓包看看
提交方式是get,另外变量通过filename传递进去。
第二步:所以假设我们已上传了可利用文件至后台(这里我直接放到后台)
放到后台的文件为1.txt
$myfile = fopen("1.php", "w");
$txt = '';
fwrite($myfile, $txt);
fclose($myfile);
?>
根据上图,访问路径为(生成的php文件位置):http://靶场IP/pikachu/vul/fileincude/1.txt
访问该文件后会生成一个1.php的文件。生成以后,可以通过蚁剑连接。
第三步:访问该文件
先随便提交一个选项,抓包,修改filename的值,让1.txt被包含执行,进而生成1.php
将filename修改为 1.txt
我们可以看下后台是不是已经生成了1.php文件了,okk
第四步:通过蚁剑连接一下(我感觉没什么问题,但不知道为什么连不上)希望来个大佬指导下。
概述
不安全的文件下载概述
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
第一步:随便点击一个下载看看
文件直接被下载了。
get方式,直接传递的文件名然后下载了文件。
这样的话在实际的做题当中,可以尝试将filename的值换成flag试试。
可以参考我之前打的uploadlabs靶场:攻防系列——上传漏洞利用之upload labs通关练习_番茄条子的博客-CSDN博客
概述
概念:如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。
越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
也称为横向越权,指相同权限下不同的用户可以互相访问,比如A和B是同权限的用户,如果A能看到理论上只有B能看到的信息,或者A能执行理论上只有B能执行的操作,那就是水平越权啦。
题目给出了三个用户信息,lucy/123456,lili/123456,kobe/123456。假设已知lucy/123456,已知另外存在两个用户,分别是lili和kobe。
第一步:登陆看看,查看个人信息
第二步:直接试试把username换成lili/kebe
又称纵向越权,指使用权限低的用户可以访问到权限较高的用户。比如A用户权限比B低,如果A可以访问理论上只有B才能访问的资源,或者执行理论上B才能执行的操作,那就是垂直越权啦。
点击一下提示(毕竟是越权的题,至少要给我一个账户才行)
这里有两个用户admin/123456,pikachu/000000,admin是超级boss
先看看管理员有哪些权限,登陆看看
看看这些权限的操作的网站是什么(如果知道了操作的网页,如果存在越权漏洞,就可以直接访问后进行一些增删改的操作)
以下是添加用户的网址
ok,我们试试普通权限的pikachu的权限
(1)直接访问增加用户的网址
发现可以直接就获得admin的权限
(2)直接访问删除用户allen的网站
http://ip:port/pikachu/vul/overpermission/op2/op2_admin.php?id=1
发现无法直接访问,会需要我登录
所以说只有增加用户的连接处存在越权漏洞。可以看下两个网址的后台源码对比分析原因。(前者不验证用户等级。后者要验证用户等级)
以下是增加用户的
在实际运用的时候,因为要求管理员必须处于登陆状态,所以如果我们获取到了管理员的cookie,那我们通过普通权限登陆的时候,通过抓包修改当前的cookie值,就能伪装管理员登录,从而获取比较大的权限。
目录遍历漏洞概述
在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。
在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。
看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的意思,是的,目录遍历漏洞形成的最主要的原因跟这两者一样,都是在功能设计中将要操作的文件使用变量的 方式传递给了后台,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的现象不一样,因此,这里还是单独拿出来定义一下。
ps:(目录遍历和文件包含漏洞都可以使用相同的函数如require去引用文件。文件下载使用的函数和他们不一样如先用fopen()函数打开文件,再使用fread()读取文件)
需要区分一下的是,如果你通过不带参数的url(比如:http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们成为敏感信息泄露。 而并不归为目录遍历漏洞。
第一步:随便点击看看
可以发现,页面通过title将值传回然后显示对应的网页(实际上是向后台发送了一个文件名)。那么如果我们已知一些敏感文件可以直接访问。那么如果不知道的情况下就是猜有哪些文件(一般按照自己搭建靶场的思路,大概知道一些配置文件的位置,尤其是根目录的位置)
第二步:通过 ../../../跳转到敏感文件(../几个无所谓,因为一般即使输入了很多个../早就到达了根目录,再往上跳转,也依旧是当前根目录了)
这里假如读取Windows/win.ini
linux可以试着读取etc/passwd文件(在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。)
由于后台人员的疏忽或者不当的设计,导致不该被前端用户看到的数据被轻易的访问到。 比如:
---通过访问url下的目录,可以直接列出目录下的文件列表;
---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
---前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;
类似以上这些情况,我们成为敏感信息泄露。敏感信息泄露虽然一直被评为危害比较低的漏洞,但这些敏感信息往往给攻击着实施进一步的攻击提供很大的帮助,甚至“离谱”的敏感信息泄露也会直接造成严重的损失。 因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。
看题目:
老规矩,先看下源码,发现有一个测试账号。登陆试试。
ps:还有一种思路:
观察到登陆页面的url是http://www.pikachu.com:90/vul/infoleak/findabc.php
直接删掉url中的find,访问如下url,可以绕过登陆直接访问上图页面http://www.pikachu.com:90/vul/infoleak/abc.php
概述
直接来看题
看到交互式的这种界面,就想到XSS。但是这里说只接受序列化的数据。
第一步:那么我们将XSS语句先用脚本序列化
序列化脚本:
alert(1)" ; } $a = new S(); echo serialize($a); ?>
两个办法运行出结果
(1)办法一:notepad++,使用插件运行(不知道什么原因,我打开集成环境的时候,我就没办法再使用notepad的插件了...)点击了OK也无反应。所以用办法二吧
(
(2)办法二:在线php工具
网址:PHP 在线工具 | 菜鸟工具
序列化结果:O:1:"S":1:{s:4:"test";s:25:"";}
第二步:在交互框中输入徐序列化的语句
实际做题可以输入弹cookie的框。
概述
XXE -"xml external entity injection",即,"xml外部实体注入漏洞"。
攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
可以学习一下这篇文章
XXE漏洞详解_一只小白白灬的博客-CSDN博客_xxe漏洞
因为现在基本上很多网站都语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
所以我就略过了,解法参考
pikachu之XXE漏洞_要努力。。的博客-CSDN博客_pikachu xxe漏洞
看题
第一步:随机点击,发现点击12无反应,点击3会跳转到概述的界面,跳转4的话url会发生变化url=i
我们抓包看看,发现url后面直接跟的目标地址(其实不抓包也可,url可以直接看见的,我就是想确认下)
说明"url"后面跟的站点可以直接在url上进行修改。那么就可以修改成自己的恶意站点,诱导别人点击。(比如将url前的部分换成知名的域名,别人点击的概率就比较大,有段时间很流行的一些诈骗就是利用了这样的方法)
第二步:我们修改"url"的值为百度验证下,发现确实直接跳转到了百度
概述
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec() 注意这道题应该是和php版本有关系,我换了5.5以上版本你仍然出现这样那样的问题,算了,过几天直接找一些在线靶场试试同类型的题目。
输入:http://ip:port/pikachu/vul/urlredirect/urlredirect.php?url=http://www.baidu.com