ctfshow-web入门——爆破(web21-web28)

这篇具有很好参考价值的文章主要介绍了ctfshow-web入门——爆破(web21-web28)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

爆破

爆破下下之策,平时题目直接是常见路径和文件名,多试试,而不是直接爆破

1.bp工具的使用

  • bp爆破的大概步骤:

抓包,Send to Intruder,Positions页面,add$(加入想要爆破的值),Payloads页面,Payload Options,Load,导入想跑的字典,点击Start attack

  • custom iterator(自定义迭代器)模式:

ctfshow web28,Web,安全,web安全,计算机网络,phpctfshow web28,Web,安全,web安全,计算机网络,php

payload type选Custom iterrator,position1填admin,position2填: ,position3导入字典,按照上面步骤直接爆破

  • 提高爆破效率的小技巧
1.加前缀和编码(Payloads中的Payload Options)

对payload进行加工:

  • add prefix—添加前缀;
  • add suffix—添加后缀;
  • Match/replace—一旦匹配到了xxx就替换成XXX;
  • reverse substring—对字符进行反转;
  • Encode—编码;
  • Hash—Hash计算

ctfshow web28,Web,安全,web安全,计算机网络,php

【注意:取消Palyload Encoding编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响base64 加密的结果】

2.添加匹配关键字,减少等待时间(Options模块)
  • Number of retries on network failure ——网络连接失败重试的次数
  • Pause before retry (milliseconds) ——重试之前时间的间隔是多少毫秒
  • Grep-Match——匹配响应信息中的关键字

ctfshow web28,Web,安全,web安全,计算机网络,php

关于base64编码的一些特点

  1. 标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号
  2. base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号)
  3. 等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2
  4. 严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴

2.爆破网站子域名

子域名检测工具: phpinfo.me

3.md5爆破

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);
}
?>
  • 阅读代码,了解到需要使用get传参,得到flag
  • token需要满足两个条件:

    1.经过MD5加密后的token的第二位 ,第十五位,第十八位相等

    2.(第二位+第十五位+第十八位)/ 第二位 = 第三十二位

  • 注意的小点:

【写python代码,需要注意看清楚php代码第二个if的括号层数,以防python脚本的条件搞错了】

【如果可以,建议用和题目相同的环境去写脚本,可以直接省掉好多问题】

【python脚本需要注意分母为零的情况的异常处理,如果不处理,则会未跑出ZE,直接终止】

【php在分母为零的情况下,INF这个值在PHP中代表的是无穷大的意思,计算不当,或者计算值超过服务器的上限都会显示】

【此题也可以php直接for循环数字】

  • web23-python脚本
import hashlib
dic = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for a in dic:
    for b in dic:
        t = a + b
        md5 = hashlib.md5(t.encode("utf-8")).hexdigest()
        if md5[1] == md5[14] and md5[14] == md5[17]:
            try:
                if ( int("0x"+md5[1],16) + int("0x"+md5[14],16) + int("0x"+md5[17],16) ) / int("0x"+md5[1],16) == int("0x"+md5[31],16):
                    print(t)
            except:
                continue
  • web23-php脚本
<?php
error_reporting(0);
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; #62位
for ($a = 0; $a < 62; $a++) {
	for($b = 0;$b < 62;$b++){
		$flag = $string[$a].$string[$b];
		$token = md5($flag);
		if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) {
			if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + substr($token, 17, 1)) / substr($token, 1, 1) === intval(substr($token, 31, 1))) {
				echo $flag . "\n";
			}
		}
	}
}
?>
  • web23-php脚本,纯数字token
<?php
  for($i=0;$i<10000;$i++)
  {
      $token=md5($i);
      if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
          if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){

              echo 'token'.$i.'md5'.$token;
          }
      }

  }
  ?>
  • 相关知识点
  1. md5加密特点

    通常用一个32位的16进制字符串表示。

  2. PHP intval() 函数

    整型转换函数,用户来获取变量的整数值。

  3. PHP substr() 函数
substr(string,start,length)

ctfshow web28,Web,安全,web安全,计算机网络,php

4.php伪随机数漏洞

 <?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:26:39
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
}

?> 
  • mt_scrand()函数&mt_rand()函数

    mt_scrand(seed)这个函数,是通过分发seed种子,然后有了种子后,利用mt_rand()生成随机数。

  • 当种子不变时,产生的随机数是一样的,这就是伪随机数漏洞。
  • 随机数并不随机
<?PHP
mt_srand(0);
echo mt_rand();
echo mt_rand();
echo mt_rand();
?>

将随机数播种为0,每次运行都会获得相同的序列

<?PHP
echo mt_rand();
echo mt_rand();
echo mt_rand();
?>

去掉mt_srand()函数时,再次重复运行实例,系统会自动为rand函数播种,但也是播种一次,多次重复运行的结果也相同

  • 直接在线环境php跑一下,生成随机数
<?php 
mt_srand(372619038);
echo mt_rand();
echo "\n";
?>

5.php随机数爆破

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:56:57
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));
    $rand = intval($r)-intval(mt_rand());
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
} 
?>
  • isset()函数

    isset在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,因为传递任何其它参数都将造成解析错误。

  • hexdec()函数

    把十六进制数转换为十进制数,dechex()函数是把十进制转换为十六进制。

  • wp
    1. 分析代码,先传参一个r,这里可以直接传0,得出随机数的负值

    2. 利用r值可以推出第一个随机数

    3. 然后根据第一个随机数利用工具进行种子爆破,得到种子的值

    4. 利用种子,得出第二次,第三次的随机数

ctfshow web28,Web,安全,web安全,计算机网络,php

  • 工具

下载地址https://www.openwall.com/php_mt_seed/

工具利用参考README

第一次使用先执行make命令,利用gcc进行编译

gcc -Wall -march=native -mtune=generic -O2 -fomit-frame-pointer -funroll-loops -fopenmp php_mt_seed.c -o php_mt_seed

ctfshow web28,Web,安全,web安全,计算机网络,php

种子的选择,可以抓包看一下题目使用的PHP版本,选择PHP 5.2.1-7.0.x

ctfshow web28,Web,安全,web安全,计算机网络,php

6.数据库密码爆破

类似第一题,直接bp暴力破解数据库密码,这里GitHub找个常用密码字典就好,慢慢爆破,根据长度不同,查看响应,拿到flag
ctfshow web28,Web,安全,web安全,计算机网络,php

7.身份证出生日期爆破(也可能爆破后六位)
  • 利用bp暴力破解,或者利用脚本爆破
  • bp暴力破解出生日期
    1.get和post请求的区别:

    get请求一般用来请求获取数据

    get请求通常是通过url地址请求

    post请求一般作为发送数据到后台,传递数据,创建数据

    post常见的则是form表单请求

    2.表单提交get和post的区别:

    get(获取)重点在从服务器上获取资源,post(发送)是向服务器发送数据。

    数据修改用post,登录用post。查询一般使用get。

    【注意:这里有可能连接不上数据库,需要多刷新几次,等抓包抓到数据】

ctfshow web28,Web,安全,web安全,计算机网络,phpctfshow web28,Web,安全,web安全,计算机网络,php
ctfshow web28,Web,安全,web安全,计算机网络,php

3.Unicode在线解码工具http://www.esjson.com/unicodeEncode.html

最后利用学号和身份证号登录

  • 脚本爆破
    <?php
    //621022********5237
    $myfile = fopen("zid.txt", "w") or die("Unable to open file!");
    for ($year = 1990; $year < 1993; $year++)
    {
        for ($mon = 1; $mon < 10; $mon++)
        {
            for ($day = 01; $day < 10; $day++)
            {
                $txt = ('621022'.$year.'0'.$mon.'0'.$day.'5237')."\n";
                fwrite($myfile, $txt);
            }
        }
    }
    
    for ($year = 1990; $year < 1993; $year++)
    {
        for ($mon = 1; $mon < 10; $mon++)
        {
            for ($day = 10; $day <= 31; $day++)
            {
                $txt = ('621022'.$year."0".$mon.$day.'5237')."\n";
                fwrite($myfile, $txt);
            }
        }
    } 
    
    for ($year = 1990; $year < 1993; $year++)
    {
        for ($mon = 10; $mon <= 12; $mon++)
        {
            for ($day = 10; $day <= 31; $day++)
            {
                $txt = ('621022'.$year.$mon.$day.'5237')."\n";
                fwrite($myfile, $txt);
            }
        }
    }
    
    for ($year = 1990; $year < 1993; $year++)
    {
        for ($mon = 10; $mon <= 12; $mon++)
        {
            for ($day = 01; $day < 10; $day++)
               {
                    $txt = ('621022'.$year.$mon."0".$day.'5237')."\n";
                    fwrite($myfile, $txt);
                }
        }
    }
    fclose($myfile);
    ?>
    

8.目录爆破

  • bp暴力破解网站目录

    需要结合题目所给提示和url,先将文件2.txt去掉,直接爆破一级目录和二级目录

  1. 先更改攻击类型,改为Cluster bomb

  2. 设置两个需要爆破的目录
    ctfshow web28,Web,安全,web安全,计算机网络,php

  3. 设置payload
    ctfshow web28,Web,安全,web安全,计算机网络,php
    ctfshow web28,Web,安全,web安全,计算机网络,php

  4. 爆破完成文章来源地址https://www.toymoban.com/news/detail-764876.html

补充:bp-Intruder的四种模式

1.单字典(只有一个字典)
  • Sniper(狙击手):一个参数,一个字典。
  • Battering ram(攻城锤):多个参数同时遍历同一个字典。
  • 一个相当于单挑,一个相当于群殴。
2.多字典(有多少参数就有多少字典)
  • Pitchfork(草叉模式):多个参数同时进行遍历多个不同字典
    示和url,先将文件2.txt去掉,直接爆破一级目录和二级目录
  1. 先更改攻击类型,改为Cluster bomb

  2. 设置两个需要爆破的目录

    [外链图片转存中…(img-VF3T33cY-1678966980128)]

  3. 设置payload

    [外链图片转存中…(img-HLouSUoh-1678966980128)]

    [外链图片转存中…(img-aitdjKjh-1678966980129)]

  4. 爆破完成

补充:bp-Intruder的四种模式

1.单字典(只有一个字典)
  • Sniper(狙击手):一个参数,一个字典。
  • Battering ram(攻城锤):多个参数同时遍历同一个字典。
  • 一个相当于单挑,一个相当于群殴。
2.多字典(有多少参数就有多少字典)
  • Pitchfork(草叉模式):多个参数同时进行遍历多个不同字典
  • Cluster bomb(集束炸弹):像两个嵌套的for循环,参数i和参数j,i=0,然后j要从0-10全部跑完,然后i=1,然后j再从0-10跑完,一对多,多次遍历

到了这里,关于ctfshow-web入门——爆破(web21-web28)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《CTFshow-Web入门》09. Web 81~90

    ctf - web入门 web81:include() 利用,一句话木马之 Nginx 日志利用。 web82~86:include() 利用,条件竞争,利用 session 文件写入一句话木马。 web87:file_put_contents() 利用,伪协议 php://filter/ 。 web88:include() 利用,正则绕过,伪协议 data:// 。 web89:PHP 特性之 intval()。 web90:PHP 特性之

    2024年02月10日
    浏览(26)
  • 《CTFshow-Web入门》07. Web 61~70

    ctf - web入门 web61~70:post 请求之 eval() 利用。 这几个题都和 web58 一样。可能内部禁用的函数不一样吧。但 payload 都差不多。不多解释了。 以下解法随便挑一个即可。可能不同题会有部分函数被禁。 payload1 : payload2 : payload3 : payload4 : 题目没变化。 随便试一个函数。 根据

    2024年02月01日
    浏览(34)
  • ctfshow-web入门37-52

    include($c); 表达式包含并运行指定文件。 使用data伪协议 ?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg== PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg== 是?php system(\\\'cat flag.php\\\');? base64加密 源代码查看得到flag 多禁用了php和file。不会改变伪协议,继续使用上一题命令 ?c=data://text/plain

    2024年02月06日
    浏览(31)
  • ctfshow-web入门-信息收集

    ​Ctrl+U或者F12 查看页面源代码. ​JS禁用F12,Ctrl+U查看源代码 ​前端未泄露,抓包查看返回包发现Flag ​robots.txt文件泄露 ​phps源码泄露,phps存放着php源码,可通过尝试访问/index.phps读取,或者尝试扫描工具扫描读取 phps即为 PHP Source。 ​访问index.phps下载phps文件查看flag ​网站源

    2024年02月05日
    浏览(28)
  • ctfshow-Web入门-命令执行wp

    ​简单的命令执行,使用/i模式过滤大小写flag,可以使用通配符绕过过滤。 ​比上一题多过滤system与php,可以使用其他函数来执行命令,具体可以参考PHP中常见的命令执行函数与代码执行函数_-passthru-CSDN博客 ​多过滤cat,sort,shell,\\\'.\\\',空格,\\\'\\\'\\\' ​cat,sort可用其他查询命令,如

    2024年02月05日
    浏览(66)
  • CTFShow-WEB入门篇命令执行详细Wp(29-40)

    CTFShow 平台:https://ctf.show/ preg_match():函数执行一个正则表达式匹配。 这里过滤了 flag/i 过滤的不是很多就两个所以方法有很多种 ctfshow{f6702830-5d6b-4cfb-9678-4ae7fa2ba198} 过滤了 flag、system、php 其实还可以使用上面的方法换一个命令执行函数即可。 命令执行函数: passthru、she

    2024年02月10日
    浏览(31)
  • ctfshow-web3

    CTF 加解密合集 CTF Web合集 这个题目一看就知道是一个文件包含漏洞 php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。 所以就可以直接执行命令 发现一个ctf_go_go_go的文件,然后读取就是了 以上

    2024年02月15日
    浏览(27)
  • ctfshow-web14

    CTF 加解密合集 CTF Web合集 首先看到这个,swith,那么直接输入4,则会打印$url的值 然后访问一下 查看一下,发现完整的请求是http://c7ff9ed6-dccd-4d01-907a-f1c61c016c15.challenge.ctf.show/here_1s_your_f1ag.php?query=1 查看注释,发现还有一些内容被处理了: 首先先测试注入,发现是数字型的,

    2024年02月11日
    浏览(25)
  • ctfshow-web13 文件上传

    CTF 加解密合集 CTF Web合集 网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送 工具 获取 首先看到是一个上传页面,测试其他无果,遂进行目录遍历,发现upload.php.bak文件 可以看到这里的限制条件,大小,以及内容,这里可以使用.user.ini进行上传,具体参考:

    2024年02月11日
    浏览(27)
  • CTFshow web入门---web56

    题目: 题目分析: 查看本题,发现本题为命令执行类题目,但是有一个很致命的点,那么就是他过滤了所有的字母和数字,以及一系列的符号。因此本题最值得推敲的点就是如何实现 无字母数字的命令执行 通过拜读P神的一篇文章,其中《无字母数字webshell之提高篇》讲到了

    2023年04月22日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包