web刷题记录(3)

NISACTF 2022\]checkin ![](https://img-blog.csdnimg.cn/direct/e8eb5b719098415e8e7f4917177bb00c.png) 简单的get传参,好久没做过这么简单的题了 ![](https://img-blog.csdnimg.cn/direct/0f2381d8149d4920943c78f879070709.png) 王德发?????!,看了源代码以后,本来以为是js脚本的问题,但是禁用js脚本没用,看了大佬的wp以后才发现,是有字符被隐藏了,具体推测是因为对高亮的使用,这里第二段注释部分颜色不对。(url通过show_source函数在高亮源代码时按照php.ini中的设置来渲染) ![](https://img-blog.csdnimg.cn/direct/52230723a7024985a63816defe41ca1c.png) 而且,鼠标扫前面,会有后面的代码被同步 ![](https://img-blog.csdnimg.cn/direct/785c7c4756864719b935f6fc930ee1e4.png) 这里尝试复制源代码到winhex里面看看。 ![](https://img-blog.csdnimg.cn/direct/27ad9cd3040c4449aee7072778c5c949.png) 确实存在,将这些特殊符号用URL编码以后再次进行传参,这里用到的知识点就是特殊字符识别。 payload ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6%55%67%65%69%77%6F%E2%81%A9%E2%81%A6%63%75%69%73%68%69%79%75%61%6E=%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%4E%31%53%41%43%54%46 得到了flag ![](https://img-blog.csdnimg.cn/direct/1676a73be2d3490081abd658925e038e.png) \[UUCTF 2022 新生赛\]ez_rce 进来就是一个正则啊,看来这题就是各种过滤了· ![](https://img-blog.csdnimg.cn/direct/ef7b06f35e7841a0b01816aa3ed026b9.png) 这种题我觉得一般就是过滤了平时比较常用的OS命令,然后要用点稍微冷门的命令或者格式来进行绕过。然后这里有就是php的函数以及讲解([PHP中的输出:echo、print、printf、sprintf、print_r和var_dump-腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/1481475 "PHP中的输出:echo、print、printf、sprintf、print_r和var_dump-腾讯云开发者社区-腾讯云")) 然后就是反引号的作用,之前也遇到过,但是没有仔细的考虑过,这里做出介绍: 1.反引号常见在SQL语句中来包含关键字,比如 $sql = "select \`user\`,username from \`Content\`";   此SQL中有反引号,也没有反引号       加上反引号就不会有因为字段是关键字而出错的问题。       为了保险起见,我们建议在所有字段中都加上反引号,即上面的SQL建议写成 $sql = "select \`user\`,\`username\` from \`Content\`";      2.反引号还有种功能是执行系统命令,比如:echo \`dir d:\\php\`;注意,此句中的引号是反引号,而不是单引号。此句在足够权限的系统环境中,将列举D盘PHP目录的一些文件信息。      3.注:反引号位于键盘左边Esc下面,数字1按钮前,Tab上。      4.例如:SELECT \`setting\` FROM \`$tablename\` WHERE $where LIMIT 1 然后呢,这里的命令执行没有过滤 \<\> ? \\/ 所以可以 ?\>闭合(这个闭合针对括号也被过滤,但是这里的括号并没有被过滤,所以还是可以用括号进行过滤) 构造第一步payload: ?code=printf(`l\s `); ![](https://img-blog.csdnimg.cn/direct/63015ca809864acf9720a2187055f61f.png) 这里用var_dump也可以 ![](https://img-blog.csdnimg.cn/direct/eee910c5e5ee42e7a2f5fac9c252fda5.png) 看一下根目录,找到了和flag有关的文件 ![](https://img-blog.csdnimg.cn/direct/81a87578826e49598de65b7012625179.png) 查看的话 ,一种是使用被过滤的字符,但是要用到/,还有一种,也可以用没有被过滤的命令,比如rev和nl(这里的rev是逆序输出,所以输出的flag是反的,需要人为改正一下,或者跑个脚本,有兴趣的可以试试,我看了一下,就没有复制上)。这里因为第一种很简单,所以采用第二种来示例: ![](https://img-blog.csdnimg.cn/direct/86c950adaeb44a33a38252de6c3a03a7.png) 得到了flag \[SWPUCTF 2022 新生赛\]ez_ez_php(revenge) 进来以后,发现应该是和伪协议有关 ![](https://img-blog.csdnimg.cn/direct/931c588896174f3595c9f0540d3b6e24.png) 尝试读取flag.php ![](https://img-blog.csdnimg.cn/direct/594b5a6750884c0bbb641c2de9ca5835.png) 应该是读取到了,尝试解码看看 ![](https://img-blog.csdnimg.cn/direct/a0b1bdcf57a944829180147e576721fd.png) 得到了一段php代码,给了关键信息,大概意思应该是说,真正的flag在'/flag'下,不是flag.php下, 尝试修改以后再次读取 ![](https://img-blog.csdnimg.cn/direct/839ba6c1da7441a0883645d4de6b4ab0.png) 成功得到了flag ![](https://img-blog.csdnimg.cn/direct/dbc5783417fe42ceac75136eacefafac.png) \[CISCN 2019华东南\]Web11 看起来都是比其他题吊一点 ![](https://img-blog.csdnimg.cn/direct/52cf6fd5f9634625a29992aef8cca683.png) 看到了提示 ![](https://img-blog.csdnimg.cn/direct/cb2d27643c45431ba53232ea4441b1d1.png) 根据下面的三张图提示,可以看出是`smart ssti`,在`XFF`处构造payload 介绍一下smart smart是php的[模板引擎](https://so.csdn.net/so/search?q=%E6%A8%A1%E6%9D%BF%E5%BC%95%E6%93%8E&spm=1001.2101.3001.7020 "模板引擎"),模板引擎的作用就是分离前端页面和数据的,题目中显示API的URL由于环境的原因无法使用,但我们的IP依旧显示在了页面的右上角,且根据它的提示XFF我们很容易想到,在X-Forwarded-For里构造ssti.然后呢ssti,我也写过相关的博客,详细内容,可以在这里找[关于ssti(简介)-CSDN博客](https://blog.csdn.net/2301_81841047/article/details/138380318?spm=1001.2014.3001.5501 "关于ssti(简介)-CSDN博客") 在利用SSTI注入时,在Smarty中一般用{php}{/php}标签来进行包裹执行php语句,在查询wp和一些资料后,得知{php}标签被强烈建议不使用,只有在SmartyBC中可用; 然后{if}标签和php中的if判断类似,而且可以正常使用php中的函数和符号,不过在使用时,要配上{/if} 然后是php的没必要去,模板引擎的作用就是分离前端页面和数据的,题目中显示API的URL由于环境的原因无法使用,但我们的IP依旧显示在了页面的右上角,且根据它的提示XFF我们很容易想到,在X-Forwarded-For里构造ssti:payload 抓包,改xff ![](https://img-blog.csdnimg.cn/direct/39832b001e36495ebd51c05174dec279.png) 经典${7\*7}回显是$49 ![](https://img-blog.csdnimg.cn/direct/933d0246caaa485d8c72c4fe63ddbd8a.png) 进行下一步判断7{\*comment\*}7 ![](https://img-blog.csdnimg.cn/direct/8ec0b384553443088bc8d20b789cf23c.png) 基本可以判断是是Smarty类型,可以开始包裹php语句进行查询了(除了加个{if}标签,还是用的php语句) ![](https://img-blog.csdnimg.cn/direct/0a4f4e9a456246c9ac8241dfd2e0ae5b.png) 找到了flag相关文件,查看 ![](https://img-blog.csdnimg.cn/direct/af67ae5378b44d949fd3e9e9fba9712d.png) 找到了flag \[LitCTF 2023\]这是什么?SQL !注一下 ! ![](https://img-blog.csdnimg.cn/direct/0de246f9b9d34e6899c81f1bed820475.png) 这个图我都不敢放加载完的 抓包一下,搞sqlmap,时间盲注,布尔盲注 ![](https://img-blog.csdnimg.cn/direct/8f1261b1f0864ea49faa0802264c8145.png) 爆库 ![](https://img-blog.csdnimg.cn/direct/a257f49bf2854084ace9c96a094a56e0.png) 感觉应该和ctf有关,看看信息 ![](https://img-blog.csdnimg.cn/direct/99dc1a91dd6b46b38e057e8c6f642f08.png) 光是用户名的话,可能没什么用,看看另外一个ctf的库里面有什么 ![](https://img-blog.csdnimg.cn/direct/b7053c0f85444db2b6de79072c975542.png) 运气很好,找到了flag相关信息,接着往下爆破 ![](https://img-blog.csdnimg.cn/direct/a1790c5000f947c3862368d0b3b6c884.png) 爆字段 ![](https://img-blog.csdnimg.cn/direct/356f3a2609204fd7a0c2af71c59a59f9.png) 得到了flag \[HNCTF 2022 Week1\]easy_html 提示了cookie里面有东西 ![](https://img-blog.csdnimg.cn/direct/47c84576e2a14cb3a428d0b702a8fe17.png) f12查看 ![](https://img-blog.csdnimg.cn/direct/3b3086c4ebe146bd964193d8124be932.png) %2f是url编码,说明这里给了有关文件地址的提示 ,即f14g.php,访问一下看看 ![](https://img-blog.csdnimg.cn/direct/248ecf28782e4736a9aa5b5fb13f2f85.png) 让输入手机号,但是位数被限制了,限制到了十位 ![](https://img-blog.csdnimg.cn/direct/3f6a790c1f454466a1bf19cb789848b4.png) 然后就弹了这个提示 ![](https://img-blog.csdnimg.cn/direct/677d69011968404d9c42437461ceda92.png) f12改一下位数限制 ,再登陆 ![](https://img-blog.csdnimg.cn/direct/403642f110334e28a6e9b1eaac7ef40c.png) 得到了flag ![](https://img-blog.csdnimg.cn/direct/cc0f88d589134d118a8ba0a52116c577.png) \[NISACTF 2022\]babyupload ![](https://img-blog.csdnimg.cn/direct/8a0108dee08645378e7d1c46304d11b4.png) 传🐎啊,我最熟了,先上个图片🐎看看· ![](https://img-blog.csdnimg.cn/direct/88ae9a60c110444bb4f610d1f18739a4.png) 传不上,看看源码 ![](https://img-blog.csdnimg.cn/direct/516b245268704f0a93be33c6c7a1506a.png) 给了提示,意思是要叫我下个什么东西,看看 ![](https://img-blog.csdnimg.cn/direct/bd3784494a034632bd634186bbcc9102.png) zip文件 解压以后里面是个python文件 ![](https://img-blog.csdnimg.cn/direct/42935ffeffd1461ba21d89b81515e59e.png) 这里是全部代码 from flask import Flask, request, redirect, g, send_from_directory import sqlite3 import os import uuid app = Flask(__name__) SCHEMA = """CREATE TABLE files ( id text primary key, path text ); """ def db(): g_db = getattr(g, '_database', None) if g_db is None: g_db = g._database = sqlite3.connect("database.db") return g_db @app.before_first_request def setup(): os.remove("database.db") cur = db().cursor() cur.executescript(SCHEMA) @app.route('/') def hello_world(): return """

Select image to upload:
""" @app.route('/source') def source(): return send_from_directory(directory="/var/www/html/", path="www.zip", as_attachment=True) @app.route('/upload', methods=['POST']) def upload(): if 'file' not in request.files: return redirect('/') file = request.files['file'] if "." in file.filename: return "Bad filename!", 403 conn = db() cur = conn.cursor() uid = uuid.uuid4().hex try: cur.execute("insert into files (id, path) values (?, ?)", (uid, file.filename,)) except sqlite3.IntegrityError: return "Duplicate file" conn.commit() file.save('uploads/' + file.filename) return redirect('/file/' + uid) @app.route('/file/') def file(id): conn = db() cur = conn.cursor() cur.execute("select path from files where id=?", (id,)) res = cur.fetchone() if res is None: return "File not found", 404 # print(res[0]) with open(os.path.join("uploads/", res[0]), "r") as f: return f.read() if __name__ == '__main__': app.run(host='0.0.0.0', port=80) 我们直接看最关键的`def upload`和`def file`里的内容,意思是,上传的文件不能有后缀名,且文件名前会拼接一个前缀`upload/`,使得输出的文件只能是在目录`upload/`下的,这里就涉及到`os.path.join()`的绝对路径拼接漏洞: > **绝对路径拼接漏洞** > > os.path.join(path,\*paths)函数用于将多个文件路径连接成一个组合的路径。第一个函数通常包含了基础路径,而之后的每个参数被当作组件拼接到基础路径之后。 > > 然而,这个函数有一个少有人知的特性,如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径,若我们使得`res[0]='/flag'`,则可以读取到根目录下的flag文件,因此利用bp抓包,修改文件名为`/flag`即可: 所以若使得`res[0]='/flag'`,则可以读取到根目录下的flag文件,因此利用bp抓包,修改文件名为`/flag`即可: ![](https://img-blog.csdnimg.cn/direct/a8fe278fbcd8497d845b103bb84fcf4a.png) 得到路径以后,访问即可 ![](https://img-blog.csdnimg.cn/direct/72ba476986a0426db4a2fddcd99f82cc.png) 得到了flag

相关推荐
恋猫de小郭1 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅8 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅9 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅10 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊10 小时前
jwt介绍
前端