安全从业人员如何写笔记?
心理问题
- 我们为什么要写笔记?找需求,找原因,找功能点。
需求,需求,还是TMD的需求
我不是提问,而是以问代答。因为我们想一把梭。具体而言,我们想在实施的时候直接复制粘贴。
示例笔记:
nmap指定端口一把梭:masscan ip端口探测-->Excel分列 IP与端口 -->ip直接粘贴到字典 -->端口?复制,粘贴为值(行列转换)。TXT 替换空格为 逗号。
nmap -n -vvvv -sV -A -Pn -iL 20240312ip -oA nmap_scan -p 81,179,443,554,1935,1937,3002,4080,5007,6011,6061,6062,7021,7660,7663,7664,7960,8080,8085,8088,8090,8291,8808,8809,9381,9500,9633,9643,9653,9663,9899,9980,9995,9997,9999,10011,10017,10021,10033,10044,10050,10052,10055,10058,11000,11022,11023,11025,11041,11052,11061,11065,11066,11067,11072,11074,11082,11092,11093,11096,11101,11131,11936,12366,18080,19080,19502,19633,19643,19887,19980,20000,20480,20637,21226,21935,27675,28080,29633,29643,30547,32043,39156,39381,39502,39643,39653,48288,49099,58090
你为什么要做笔记?因为你的需求就是想在未来干nmap指定端口一把梭的事情。
-
我们还有什么需求?学习知识的需求。在学习过程中,我们需要记录什么?
它的思路(PPT,销售,画大饼,写报告,韭菜班,战略),它的工具(战术),它的复现(如何落地?实施)以及为了学习术语而解释的术语(面向对象编程就是使用面向对象的方式进行编程)。 -
我们发现了问题所在,你有见过哪个销售的PPT长得像是PHP用户手册那样的?
已学习为例子的笔记
学习思路示例《如何掌握所有的程序语言》:http://www.yinwang.org/blog-cn/2017/07/06/master-pl
- 通过以上伟大的博文的详细解读,得出一个结论:学关键,学关键,还是TMD的学关键。特性,特性,还是TMD的特性。
如何把以上思路用于实际?
已赏猎教程为例子,寻找你需要记录笔记的地方,比如他们教了你什么?
前期筹备类:hackerone的账号注册?贝宝或者交易所收付款?burp,某学上网问题,python?报告模板长什么样子?报告怎么写?
赏猎方法论类:如何实际的进行一个hackerone项目?侦查?信息收集?ASN与IP块?IP证书关联?域名?子域名?股权资产分析?面向GPT的侦查?抓响应包找特征?应用分析?工具类实施?各种漏洞类型你怎么挖?
- 我需要记录战略性的大纲吗?
比如学习《全栈web攻击》时,它的靶机如何启动,账号密码是什么我也要记录?bp设置我也要重复的看个几次?学关键,学关键,还是TMD的学关键。
某个知识点举例
- 到了功能性,特性的技术点了:比如 ZZZPHP 模板注入远程代码执行我要不要写笔记?
注意思考你学习它的需求:需求,需求,还是TMD的需求!ZZZPHP 还是 AAAPHP重要吗?
静态和动态跟踪 PHP 代码:重点在于如何调试,而不是 visual studio。我不装 visual studio世界会崩塌吗?
寻找所有的PHP代码的登录模块,而不是,寻找ZZZPHP某个CMS的登录模块;寻找所有IDE的下断点的功能在哪里,而不是学某个visual studio如何下断点。
我们下断点的目的是为了触发它,并且不是本地触发,而是远程的用户也能够触发。登录后的漏洞前提是账号密码,懂?
调试后,使用 GET 请求访问 http://target:8080/admin871/login.php 页面,您应该会遇到断点。
身份验证绕过漏洞:ISSESSION adminid 存在绕过?
~/module-1/php/admin871/function.php
<?php
require '../inc/zzz_class.php';
if (is_null(get_session('adminid'))) return false; //1
代码 使用get_session调用字符串“adminid” ,如果它返回 NULL,则 admin871/functions.php 脚本将返回 false 并且不会继续执行。你学的不是 get_session,以及它返回 NULL。你学的是所有语言中所编写的登录逻辑中,是否都存在某个与get_session相同功能的其他语言函数,在调用某个硬编码字符串。
admin871/index.php 脚本使用的 inc/zzz_admin.php 脚本中也有类似的代码模式,但是如果 get_session 函数返回 NULL,该代码将使用 phpgo 函数简单地重定向攻击者,如下所示:
<?php
require 'zzz_class.php';
if ($conf['isinstall']==0) error('很抱歉!程序未安装, <span id=time></span>即将进入安
装界⾯',SITE_PATH.'install/');
if (isnul(get_session('adminid'))) phpgo("login.php");
在inc/zzz_main.php中我们可以找到get_session函数的定义:
function get_session( $name ) {
if ( !is_null( $name ) ) {
if ( ISSESSION == 1 ) {
$data = isset( $_SESSION[ $_SERVER[ 'prefix' ] . $name ] ) ? $_SESSION[
$_SERVER[ 'prefix' ] . $name ] : NULL;
} elseif ( ISSESSION == 0 ) { //2
$data = isset( $_COOKIE[ $_SERVER[ 'prefix' ] . $name ] ) ? $_COOKIE[
$_SERVER[ 'prefix' ] . $name ] : NULL; //3
}
return $data; //4
}
}
在 [2] 处,代码检查全局常量“ISSESSION”,如果它设置为 0,则在 [3] 处,$data 变量将设置为攻击者控制的 cookie 值。 最后在[4]处,代码返回攻击者控制的数据值。
但是这个“ISSESSION”常量是在哪里定义的呢? 事实证明,它在 inc/zzz_class.php 脚本中定义:
define( 'ADMIN_PATH', SITE_PATH . $conf[ 'adminpath' ] );
define( 'ISSESSION', 0 ); //1是session存储,0是cookie存储 // 5
如果“ISSESSION”常量在[5]处定义为0,则代码将在[1]内继续执行
admin871/function.php 脚本。 inc/zzz_main.php 脚本内部 [3] 使用的 $_SERVER['prefix'] 变量,在 inc/zzz_class.php 脚本中将前缀设置为“zzz”:
$_SERVER[ 'prefix' ] = $conf[ 'prefix' ];
$conf['prefix'] 变量在 config/zzz_config.php 脚本中定义:
<?php
$conf=array(
//...
'prefix'=>'zzz_',//cookie,session,前缀,建议每个⽹站设不⼀样的
如果攻击者提供名为 zzz_adminid 的 cookie,则这允许远程攻击者绕过身份验证并获取有效的会话 ID。
- 我们如何写笔记?特性,特性,还是TMD的特性。
代码中的 if (is_null(get_session('adminid'))) return false; 以及所谓的 define( 'ISSESSION', 0 ); 等恐龙代码块真的那么重要吗?重要在于理解,不重要在于换一套CMS代码一切归0.
随便选个IDE,会话管理入口点下断点--> get_session 会话管理 -->payload构造 zzz_adminid。因为你发现代码中的前置,并且if中的0与1判断,难道你就不尝试构造zzz_adminid并动态看看它是不是可以绕过会话管理吗?你会。这在断点后的跟踪都会将你代入到里面的代码块里。所以代码的详细笔记,重要但又没那么重要。
所以,笔记就可以记录成:随便选个IDE,会话管理入口点下断点--> get_session 会话管理 -->payload构造 zzz_adminid
之后要不要详细不详细记录,看其他需求:你要教学?你要复盘?还是你只是为了自己学习它已进行理解?等
所以说,需求不同,记录的风格也就不同:)