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

相关推荐
花开花落的博客5 分钟前
uniapp 不同路由之间的区别
前端·uni-app
whatever who cares9 分钟前
React 中 useMemo 和 useEffect 的区别(计算与监听方面)
前端·javascript·react.js
老兵发新帖9 分钟前
前端知识-hook
前端·react.js·前端框架
t_hj14 分钟前
Ajax的原理和解析
前端·javascript·ajax
蓝婷儿1 小时前
前端面试每日三题 - Day 29
前端·面试·职场和发展
小白上线*^_^*1 小时前
Vue——Axios
前端·javascript·vue.js
一直在学习的小白~2 小时前
HTML字符串转换为React元素实现
前端·react.js·html
gxn_mmf2 小时前
典籍知识问答模块AI问答功能feedbackBug修改+添加对话名称修改功能
前端·后端·bug
samroom2 小时前
Webpack基本用法学习总结
前端·学习·webpack
万能程序员-传康Kk3 小时前
食物数据分析系统vue+flask
前端·vue.js·flask