上午笔试
四种题型:单选、多选、判断、简答、问答。
单选
涉及:计算机网络、操作系统、unix操作系统命令、计算机组成原理、安全类知识等。
具体涉及:ipsec、pingofdeath、802.1x、0110 1010 的逻辑右移一位和算术右移一位 、父进程和子进程是否共享同一虚拟地址等。
多选
涉及:漏洞以及其修复、单选所涉及等。
具体涉及:如csrf如何修复。
简答
问漏洞之间的不同和修复方案。
问答
问渗透测试的问题。
总结
本次考试稍微简单,对大部分人都很友好。
下午机试
一共八道题,前三道送分,后五道不送分,因为不能联网遭遇极大削弱,只能依靠经验和往常做的笔记,属于摸着石头过河,最后三道web题是一道没做出来,除去这三道web题还有一道pwn题目,两道逆向题目。
题目一(web1)
上机实操考试
题目一(web1)
一眼get传参改成admin
题目二(misc1)
点击文件进去搜索就得到
题目三(crypt1)
两个等于号,看着像base64
解码之后得
Wm14aFozc3lNemczWmpjME55MDFZemhrTFRRd016UXRPV00wWWkxak5HRXpZemMyTURFd1pEVjk=
一个等于号?我再一次base64decode:
ZmxhZ3syMzg3Zjc0Ny01YzhkLTQwMzQtOWM0Yi1jNGEzYzc2MDEwZDV9
我再一次base64decode:
flag{2387f747-5c8d-4034-9c4b-c4a3c76010d5}
题目四(web2)
嘛,这才是正常题目啊
源码看到的
一顿目录扫描,很关键啊,找到后台了,嘻嘻。
感觉这个manage没进去过,于是进去看看
这个login.php:
尝试爆破,没尝试sql注入。
寄,弱密码没爆出来。
寄后谈,我当时思路不清晰,其实在index.php是有get的sql注入的,但是我当时没有尝试,而是去做下面的web题,我想如果我当时用SQLmap爆破一下,后台我就进去了,而我在manage目录里已经看到有上传口和文件目录,思路又有了,文件上传加RCE,哎。
题目五(web3)
扫了下目录
只有www.zip
只有一个文件,打开是源码,nice
<?php
if(isset($_GET['aaa'])){
$a = $_GET['aaa'];
if ($a != 'QNKCDZO' && md5($a) == md5('QNKCDZO')){
$url = $_GET['url'];
if(isset($url) && filter_var($url, FILTER_VALIDATE_URL)){
$site_info = parse_url($url);
if(preg_match('/php|echo|\||find|cat|\<|#/',$site_info['host'])){die('easy waf.');}
if(preg_match('/sec.gd.com$/',$site_info['host'])){
exec('curl "'.$site_info['host'].'"', $result);
echo "<center><h1>You have curl {$site_info['host']} successfully!</h1></center>
<center><textarea rows='20' cols='90'>";
echo implode(' ', $result);
}
else{
die("<center><h1>Error: Host not allowed</h1></center>");
}
}
else{
echo "<center><h1>Just curl sec.gd.com!</h1></center><br>
<center><h3>For example:?url=http://sec.gd.com</h3></center>";
}
}
else{
echo "小明同学最近刚入门信息安全,上传了个有漏洞的PHP页面,但好像忘记要做点什么...";}
}
else{
header("Location: /index.php?aaa=123456");
}
?>
经典php代审: ($a != 'QNKCDZO' && md5($a) == md5('QNKCDZO')
这个问题已经遇到过一遍了
在[BUU]CTF刷题记录中有一道: [BJDCTF2020]Easy MD5<★★★>
题目 其中提到:
一开始以为是要寻找MD5碰撞的例子,后来想了想不应该这么复杂,就发现了PHP有个隐式转换的缺陷,PHP在处理哈希字符串时,会利用”!=”或””来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
构造例子
QNKCDZO
240610708
当然,安全的比较方法是三个=,也就是“=”。
所以绕过这个($a != 'QNKCDZO' && md5($a) == md5('QNKCDZO')
可以用240610708来实现。
这个怎么绕过呢?if(preg_match('/php|echo|\||find|cat|\<|#/',$site_info['host']))
寄后谈,这个绕过问了下其他师傅,他说闭合掉 ' '
,我一听卧槽,牛逼!
这个思路直接让我想起sql注入,这真是…牛逼。
题目六(web4)
卧槽
是强等于的绕过?
感觉很眼熟。
寄后谈,哥们这题没思路,听隔壁师傅说也许是延时注入。