原理:用户输入数据被当做前端代码执行。
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据
用途:盗取Cookie,获取内网IP,获取浏览器保留的明文密码,截取网页屏幕,网页上的键盘记录。
检测方法:让浏览器弹窗,其中最经典的是
1.
3.事件型:
其他绕过检测方法详见:
https://zhuanlan.zhihu.com/p/26177815
https://blog.csdn.net/qq_29277155/article/details/51320064
https://www.cnblogs.com/H4ck3R-XiX/p/12732356.html
提交数据成功实现了xss,但是只是对本次访问产生影响,不是持久型攻击
提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发。
一般出现在任何可能插入数据库的地方:用户注册时,留言板、上传文件的文件名、(管理员可见报错信息)
同域名、同端口、同协议。限制了Cookie的作用域。
原理:A网站只能访问A的Cookie,B网站只能访问B的Cookie,浏览器根据不同的网站自动填充不同的Cookie。
因为XSS payload 结构复杂,所以一般情况下我们都是使用XSS平台去获取cookie,建议隐私模式访问,避免非法XSS平台获取信息。
利用dom对象触发xss
DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
document.body :对
元素直接访问document.cookie : 获取cookie值。
ducument.domain :返回域名
document.lastModified:返回文档被最后修改的容器和时间 。 可以用来判断伪静态。时间变了就动态,时间不变就静态。
ducument.referrer:返回载入文档的文档URL
ducument.title:返回文档标题
ducument.URL : 返回文档URL
document.write() : 输入的内容会输出到文档上。 Eg: document.write(‘‘) 可接受native编码
document.writeIn():等同于write方法,不同是在每个表达式后写一个换行符。
document.close():关闭用document.open()方法打开的输出流,显示选定的数据
document.getElementById():返回对拥有指定id的第一个对象的引用
document.getElementsByName():返回带有指定名称的对象集合
document.getElementsByTagName():返回带有指定标签名的对象集合
document.open():打开一个流,收集来自任何document.write()或ducument.writeIn()方法的输出
document.write()
innerHTML
eval()
跨站请求伪造
成因:网站cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,name只要是之后访问该网站,都会默认是登录状态。攻击者发送伪造好的csrf脚本或包含csrf脚本的链接,可能会执行用户不想执行的功能。
可以让Burp快速生成CSRFpoc
可以强行用验证码(强制用户必须和应用进行交互,但是体验性太差了)
请求中加随机Token值:Token就是一段字母数字的随机值,访问时服务端会生成一个随机的token值并传回到前端的表单里,当我们提交表单时,token会作为一个参数提交到服务端进行验证(终极方案)
使用refer:Refer记录了该http请求的来源地址,访问一个安全受限页面请求必须来自同一个网站,如果不是则请求不合法无法生效(可绕过)
用户A登陆B站,在登陆网站B时,收到了攻击者C发送的盗取cookie进行操作的链接到C,得到cookie后csrf进行操作
(1)文件上传:修改图片、发布图片、发布附件、各种各样
一句话木马(webshell):eval函数把字符串当做php代码执行
如果文件上传功能制作时不考虑安全性,则默认存在文件上传漏洞
前端验证是扯淡,约等于没有
特征:上传一个php文件一句话木马,页面出现弹框,但这个弹框无法抓包
后端检测可以抓到数据包
这里做法是上传数据包,用Burp抓包修改文件后缀为允许的格式。
特征:Content-Type的意思是后端检测,可以抓包,但不看后缀,只要看数据包中的Content-Type。
做法是修改Burp抓包中的content-type值为上传允许的值,applicaiton/stream修改成image/jpeg,或者直接修改文件后缀名,在抓包时再修改为php后缀。
特征:在黑名单上的都不能通过
由于过滤不严谨,默认状态下,.php3,.php4,.php5,.phtml都会被解析成php
jsp:jspx,jspf
asp:asa,cer,aspx
php:php3,php4,php5
exe:exee
关键:上传html,提交存储型XSS
1.html中输入
超文本入口,也被称为分布式配置文件,提供了针对目录改变配置的方法(web容器),在一个特定的文档目录中放置一个包含一个或者多个指令的文件,以作用于此目录以及所有子目录。
如果无法重命名为.htaccess,可以在cmd中用ren 11.htaccess .htaccess来重命名。
Apache里不默认开启的。(一般有伪静态的网站是开启的)
在.htaccess文件里添加
AddType application/x-httpd-php .jpg 意思是把jpg文件当做php解析
.php.Php.pHp.phP被限制,但是.PhP或者.PHp没有被限制,可以更改后缀大小写进行绕过
原理:于操作系统来说.php和.php (空格)是一样的,但对于检测来说,他们是不同的
可以用Burp抓包,在文件后缀名加上空格再放包。
原理:操作系统对php和php.是一样的,但对于检测来说不一样
::$DATA(windows文件流绕过),这里利用到了一个NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。
原理:其他文件可以“寄存”在某个文件上,而在资源管理器中只能看到宿主文件,找不到计算文件。
可以在Burp抓包后,在文件名后加上::$DATA,再放包。
不过在进入phpinfo()时,要删除后缀的::$DATA
当遇见了恶意的东西,我们有两种处理方法,
1、不允许整个数据包上传。
核心:2、把恶意语句替换成空。php=>自动替换成空。1.php=>1.
1.pphphp=>1.php 如果有多次循环检测就不行
检测到一个php,替换成空,然后又组成一个php
这是最为常见的白名单绕过
用于get传参:加%是url编码需要。修改直接在Burp抓包界面修改
用于post传参:与%00本质没有区别,有适用范围(php5.4以下)
在Burp抓包界面在post传参文件后缀添加a(61),进入hex模式吧61改成00
用于不仅检测文件后缀,还检测文件内容
生成一个图片与一句话木马的集合
找一个允许的后缀名的图片,生成图片马上传
直接图片马解决
特征:上传图片马成功,再次从上下载图片,我们用hex查看发现图片中的一句话木马不见了
这里使用gif文件头进行绕过。
找一个gif文件,用hex模式打开,在第三行或者第四行直接输入一句话木马。
相当于是个00截断,这里上传一个图片马,发现是post传参,最终目的是要解析php文件,按照post00截断做就可以了。
检测机制:
1、先检测,检测通过了再上传。
2、先上传,检测是否合规,不合规就删除。(存在条件竞争)
原理:如果我们能卡一个空档期,在文件上传成功,还没有删除的时候访问他,就可以利用文件了。用burp抓两个包,上传包、访问包,分别在useragent下设置payload,不断上传和访问。
解析:把x后缀的文件当做后端脚本执行
大部分中间件都可以配置后缀识别。
原理:windows server 2003 默认使用的IIS6.0,当拓展名为asa,cdx,cer时也会交给asp.DLL执行
抓包修改文件后缀名即可
原理:iis6.0中a.asp;.jpg这一句话,;起到了类似00截断的作用
ps:00截断是php代码问题,与容器无关,;截断是容器问题。
上传图片马,修改文件后缀为1.php/.jpg
原理:当在一个以xx.asp为后缀的文件夹中只放一个1.txt文件,iis6.0会把1.txt当asp执行
直接上传图片马即可
CGI是一个php通信接口,在9000端口上。Nginx默认以CGI方式支持php解析。在IIS7.0,IIS7.5,Lighttps等web容器中也常常出现这样的解析漏洞。Apache不支持。
原理:复制图片地址,在后面加上/.php,如果出现乱码,就存在CGI解析漏洞