爆破
爆破下下之策,平时题目直接是常见路径和文件名,多试试,而不是直接爆破
1.bp工具的使用
抓包,Send to Intruder,Positions页面,add$(加入想要爆破的值),Payloads页面,Payload
Options,Load,导入想跑的字典,点击Start attack
![在这里插入图片描述](https://img-
blog.csdnimg.cn/e31b2576bb2c4577abd91eb8477c83c7.png)![在这里插入图片描述](https://img-
blog.csdnimg.cn/209b93d6039946048ecc3a4e1eae65f1.png)
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计算
【注意:取消Palyload Encoding编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响base64 加密的结果】
2.添加匹配关键字,减少等待时间(Options模块)
- Number of retries on network failure ——网络连接失败重试的次数
- Pause before retry (milliseconds) ——重试之前时间的间隔是多少毫秒
- Grep-Match——匹配响应信息中的关键字
关于base64编码的一些特点
- 标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号
- base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号)
- 等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2
- 严格来说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__);
}
?>
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; } } } ?> -
相关知识点
通常用一个32位的16进制字符串表示。
整型转换函数,用户来获取变量的整数值。
substr(string,start,length)
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(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在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,因为传递任何其它参数都将造成解析错误。
把十六进制数转换为十进制数,dechex()函数是把十进制转换为十六进制。
下载地址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
种子的选择,可以抓包看一下题目使用的PHP版本,选择PHP 5.2.1-7.0.x
6.数据库密码爆破
类似第一题,直接bp暴力破解数据库密码,这里GitHub找个常用密码字典就好,慢慢爆破,根据长度不同,查看响应,拿到flag
7.身份证出生日期爆破(也可能爆破后六位)
1.get和post请求的区别:
get请求一般用来请求获取数据
get请求通常是通过url地址请求
post请求一般作为发送数据到后台,传递数据,创建数据
post常见的则是form表单请求
2.表单提交get和post的区别:
get(获取)重点在从服务器上获取资源,post(发送)是向服务器发送数据。
数据修改用post,登录用post。查询一般使用get。
【注意:这里有可能连接不上数据库,需要多刷新几次,等抓包抓到数据】
![在这里插入图片描述](https://img-
blog.csdnimg.cn/41ec56d6c41743179b97f135d994c8b2.png)![在这里插入图片描述](https://img-
blog.csdnimg.cn/8b6194447d76444a8b24075ecc99de74.png)
3.Unicode在线解码工具http://www.esjson.com/unicodeEncode.html
最后利用学号和身份证号登录
-
脚本爆破
<?php
//621022********5237
m y f i l e = f o p e n ( " z i d . t x t " , " w " ) o r d i e ( " U n a b l e t o o p e n f i l e ! " ) ; f o r ( myfile = fopen("zid.txt", "w") or die("Unable to open file!"); for ( myfile=fopen("zid.txt","w")ordie("Unabletoopenfile!");for(year = 1990; $year < 1993; KaTeX parse error: Expected '}', got 'EOF' at end of input: …++) { for (mon = 1; $mon < 10; KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ for (day = 01; $day < 10; $day++)
{
t x t = ( ′ 62102 2 ′ . txt = ('621022'. txt=(′621022′.year.‘0’. m o n . ′ 0 ′ . mon.'0'. mon.′0′.day.‘5237’).“\n”;
fwrite($myfile, $txt);
}
}
}for ($year = 1990; $year < 1993; KaTeX parse error: Expected '}', got 'EOF' at end of input: …++) { for (mon = 1; $mon < 10; KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ for (day = 10; $day <= 31; $day++)
{
t x t = ( ′ 62102 2 ′ . txt = ('621022'. txt=(′621022′.year.“0”. m o n . mon. mon.day.‘5237’).“\n”;
fwrite($myfile, $txt);
}
}
}for ($year = 1990; $year < 1993; KaTeX parse error: Expected '}', got 'EOF' at end of input: …++) { for (mon = 10; $mon <= 12; KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ for (day = 10; $day <= 31; $day++)
{
t x t = ( ′ 62102 2 ′ . txt = ('621022'. txt=(′621022′.year. m o n . mon. mon.day.‘5237’).“\n”;
fwrite($myfile, $txt);
}
}
}for ($year = 1990; $year < 1993; KaTeX parse error: Expected '}', got 'EOF' at end of input: …++) { for (mon = 10; $mon <= 12; KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ for (day = 01; $day < 10; $day++)
{
t x t = ( ′ 62102 2 ′ . txt = ('621022'. txt=(′621022′.year. m o n . " 0 " . mon."0". mon."0".day.‘5237’).“\n”;
fwrite($myfile, KaTeX parse error: Expected 'EOF', got '}' at position 19: …); }̲ } } fclose…myfile);
?>
8.目录爆破
需要结合题目所给提示和url,先将文件2.txt去掉,直接爆破一级目录和二级目录
-
先更改攻击类型,改为Cluster bomb
-
设置两个需要爆破的目录
-
设置payload
-
爆破完成
补充:bp-Intruder的四种模式
1.单字典(只有一个字典)
- Sniper(狙击手):一个参数,一个字典。
- Battering ram(攻城锤):多个参数同时遍历同一个字典。
- 一个相当于单挑,一个相当于群殴。
2.多字典(有多少参数就有多少字典)
- Pitchfork(草叉模式):多个参数同时进行遍历多个不同字典
示和url,先将文件2.txt去掉,直接爆破一级目录和二级目录
-
先更改攻击类型,改为Cluster bomb
-
设置两个需要爆破的目录
[外链图片转存中…(img-VF3T33cY-1678966980128)]
- 设置payload
[外链图片转存中…(img-HLouSUoh-1678966980128)]
[外链图片转存中…(img-aitdjKjh-1678966980129)]
- 爆破完成
补充:bp-Intruder的四种模式
1.单字典(只有一个字典)
- Sniper(狙击手):一个参数,一个字典。
- Battering ram(攻城锤):多个参数同时遍历同一个字典。
- 一个相当于单挑,一个相当于群殴。
2.多字典(有多少参数就有多少字典)
- Pitchfork(草叉模式):多个参数同时进行遍历多个不同字典
- Cluster bomb(集束炸弹):像两个嵌套的for循环,参数i和参数j,i=0,然后j要从0-10全部跑完,然后i=1,然后j再从0-10跑完,一对多,多次遍历
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
![](https://img-blog.csdnimg.cn/img_convert/9c81d6c297c12477e2aba292514eba65.jpeg)
## 网络安全工程师(白帽子)企业级学习路线
第一阶段:安全基础(入门)
第二阶段:Web渗透(初级网安工程师)
第三阶段:进阶部分(中级网络安全工程师)
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资源分享
![](https://img-blog.csdnimg.cn/img_convert/9c81d6c297c12477e2aba292514eba65.jpeg)