2017年CNAS网络安全等级保护测评能力验证与攻防大赛部分题目writeup
1.【身份鉴别】查看robots.txt得到一个额外的路径,访问该路径得到一个登录页面,在登录页用弱口令admin/admin尝试得到flag
2.【安全审计】爆破目录得到/log/access.log
访问该/log/access.log,发现有个apk文件
通过jeb逆向该apk文件得到
算法是数组先异或204,再base64解密即可。
3.【访问控制与授权】
Base42解密role
改为admin再base64加密
czo1OiJhZG1pbiI7
上传文件
4.【数据保密存储】爆破4位数字密码未果,然后4位小写数字未果,猜测应该密码还是4位数字,于是在Burp里设置grep
爆破得到4位数字密码
用该密码进行菜刀连接
翻了下目录没有找到flag,看了下config.php,里面有数据库连接,菜刀直连数据库
然后Caesar一下就行了
6.【数据完整性】题目是rsa加密,n比较大,有512位,分解不了,传输的密文有一位错误,主办方后来提示有index.jsp.bak的备份文件。查看源码如下
里面有加密的过程且给了n的分解,这样就能解出私钥d,然后对密文m的二进制表达中0和1进行诸位爆破即可。所用到的rsa脚本如下
import sys
e=8257364656747840311076200319044329897103978063768498507514784356354658541009368075323326178808551291458109603207386975954471836199505677670000079054244607
n=24653117200760292939773434010618513410031938287886819061013345831017593463397572709612272664325060594029520243926035067734938113172164041663572254826339203055932796262730652327215257954852380178166215039029222621686154147795103578170736707286664456749001194333781010154263900757774999156860458706911901631002768056055354313036875669464278228827028182723754277734246261351278711938317166177175716077241828239321175802341287825882430471185985370997066743278545127995524175389974197201451318882068803566427388140252977517618180502525892931448459949050571606048563552829150043842147735808896619368445503807875917835626121
m=13018299289019769995959649544128046253755027569475109512339520395954949987153536412257456623051316632290507482413014857637668878283696773263010209985235630101044780855002728574539425339415670131921851752006750281777168170813042757869158390907503755190778082036843019392043488633348694178540819600121791506639745906074463575775262990955900263177579128535274133483584193247888463771883142970207992829936489173733462655981853578675954593094719185973364267596966142593171083370087711999745617736398901527946716353247317864168859563341324018661212497722969611603546897594600307131749208053963039188107876400650249361916075
p=0xDBAA7FC35A0079942BED85F1F05E1D92BECB09D2B8B653B18D36C0B5EFB0FC5D2699A97B8D0827EA1BB505FE006608588A9697E019B4578AEA3E384025AE0081DA4F33745A870D81E7CF1CB617969414D494A6C181672A74B2B3AF5ED8783EA45B2AB9315B556885E65E31443BBC5ECA3293A37BD7E2F87251C2F97606419383
q=0xE397A88E9182F29B150FA96EFBF2C360E8559F1CFA859B13763E526EC9EE0A6FA67A4BAB0F21A84435600AC04AB810F679694F8C30A189C46F7C189E8D8F74EA408087DA1E60A90AB8CE4DDD096D90CE2AE4CA100D11B4817BE5C22C3BAECACD9BD7699FBBB4AA82B6F94554C5D6897ACDDB28C7FF07F0DB2ACC2FACADE2E403
def egcd(a, b):
if a == 0:
return b, 0, 1
else:
g, y, x = egcd(b % a, a)
return g, x - (b // a) * y, y
fn = (p-1)*(q-1)
p1, d, p2= egcd(e, fn)
bin_m = str(bin(m))[2:]
ll = len(bin_m)
for i in xrange(ll):
for j in "01":
m0 = int(bin_m[:i]+j+bin_m[i+1:], 2)
result = hex(pow(m0, d, n))[2:-1]
if "flag".encode('hex') in result:
print result
print result.decode('hex')
sys.exit()
运行结果:
7.【终端登录地址限制】查看源码得到提示需要post一个key,post key=1后,服务器返回
需要解md5,这个用hashcat可以秒解
然后post key=ichunqiusixok到服务器,进入下一步
访问NextStep.php,得到下一步
其中txt里面为discuz和phpcms的加密算法,同时自带解密方式,调用该解密算法即可
<?php
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
$ckey_length = 4;
$key = md5($key ? $key : UC_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for ($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}
}
$string="18e26dM5h1+x3eGQKhXyjDtSRNKMKCl5xCQou/fdBh5rJ6AJCsZZ92c+J6jk48Dm8f4v3jpFjEtiklto60GXxQgkkTLM6GQ";
echo authcode($string, 'DECODE', $key = 'ichunqiusixok', $expiry = 0);
8.【应用层综合防护】查看源码得到提示id=1
在url后加id=1,同时测试id=2-1和id=3-2,页面内容一样,应该是存在数字型SQL注入漏洞,但是sqlmap无法跑出来,后来发现有waf,并对空格和一些关键字进行检测,用/*123*/%09替换空格,同时对一些关键字进行大小写转换即可绕过waf。
获取database()
获取table
获取flag
9.【综合题】虽然没做出来,但我们应该是第一个进到服务器的,题目给到一个zip压缩包,打开是个图片,binwalk提取下得到一个zip包,里面可以看到文件名是id_rsa_2048,但是解压要密码,试了下zip伪加密没有成功。然后用Ziperello爆破了下zip压缩包,得到
解压得到id_rsa_2048,里面是个rsa私钥
扫了下题目服务器,其中22端口开发,猜测该私钥可以直接登录服务器,结果用root用户名一直登录失败。
后来想了下,主办方不可能给服务器root权限,用户名应该是别的,80端口的网站内容都是说jack,包括title也是jack,于是脑洞了一波用户名是jack
查看进程和tmp目录并未发现异常文件,然后看了下/home/jack,发现里面有个flag.exe,通过scp复制该文件到本机,可惜逆向没有成功。
洞悉众测
洞悉众测平台由湖南金盾独立开发、管理、运营,2017年3月15日正式上线。平台实行实名邀请制,集合了国内一批顶尖白帽力量提供可信众测、代码审计、安全培训、应急响应等安全服务,采取线上线下相结合的模式,确保安全服务高质、高效、可信。