()
| 36 | private static List<HashMap> resultList = new LinkedList<>(); |
| 37 | |
| 38 | public static void test() { |
| 39 | |
| 40 | int i = 1; |
| 41 | Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "password")); |
| 42 | Session session = driver.session(); |
| 43 | |
| 44 | String jsonPath = "./src/main/resources"; |
| 45 | |
| 46 | try { |
| 47 | |
| 48 | |
| 49 | //Map<Long, Node> nodesMap = new HashMap<>(); |
| 50 | //Map<Long, Node> nodesMap = new LinkedHashMap<>(); //HashMap存入数据与取出数据顺序不一致 |
| 51 | |
| 52 | |
| 53 | String cmdSql1 = "match (source:Method {SIGNATURE:'<java.util.PriorityQueue: void readObject(java.io.ObjectInputStream)>'})\n" + |
| 54 | "match (sink:Method {SIGNATURE:'<java.lang.reflect.Method: java.lang.Object invoke(java.lang.Object,java.lang.Object[])>'})\n" + |
| 55 | "call apoc.algo.allSimplePaths(sink, source, '<CALL|ALIAS', 10) yield path \n" + |
| 56 | "return path limit 50"; |
| 57 | |
| 58 | //CC:4.0 CC2,4,8 |
| 59 | //CC:3.1 CC5,6,7,9 |
| 60 | //CC:3.2.1 CC10 |
| 61 | |
| 62 | String cmdSqlcc2 = "//cc2\n" + |
| 63 | "match path = (m1:Method {SIGNATURE:'<java.util.PriorityQueue: void readObject(java.io.ObjectInputStream)>'})-[:CALL ]->(m2:Method {NAME:'heapify'})-[:CALL ]->(m3)-[:CALL]->(m4:Method {NAME:'siftDownUsingComparator'})-[:CALL]->(m5)-[:ALIAS*]-(m6 )-[:CALL]->(m7)-[:ALIAS*]-(m8:Method)-[:CALL]->(m9:Method {IS_SINK:true}) return path"; |
| 64 | |
| 65 | String cmdSqlcc5 = "// cc5\n" + |
| 66 | "match path=(m1:Method {SIGNATURE:'<javax.management.BadAttributeValueExpException: void readObject(java.io.ObjectInputStream)>'})-[:CALL]->(m2:Method {NAME:'toString'})-[:ALIAS*]-(m3:Method {SIGNATURE:'<org.apache.commons.collections.keyvalue.TiedMapEntry: java.lang.String toString()>'})-[:CALL]->(m4:Method {NAME:'getValue'})-[:CALL]->(m5:Method {NAME:'get'})-[:ALIAS*1..2]-(m6:Method {NAME:'get'})-[:CALL]->(m7:Method {NAME:'transform'})-[:ALIAS*]-(m8:Method)-[:CALL]->(m9:Method {IS_SINK:true}) return path"; |
| 67 | |
| 68 | String cmdSqlcc6 = "//cc6cc10\n" + |
| 69 | "match (source:Method {SIGNATURE:'<java.util.HashSet: void readObject(java.io.ObjectInputStream)>'})-[:CALL]->(m2:Method) where (m2.NAME in ['defaultReadObject','readFloat','readObject'])=false\n" + |
| 70 | "match (sink:Method {IS_SINK:true,NAME:'invoke'})<-[:CALL]-(m1:Method {NAME:'transform'})\n" + |
| 71 | "call apoc.algo.allSimplePaths(sink, source, '<CALL|ALIAS', 10) yield path\n" + |
| 72 | "return *"; |
| 73 | |
| 74 | String cmdSqlcc7 ="//cc7\n" + |
| 75 | "match path=(m1:Method {SIGNATURE:'<java.util.Hashtable: void readObject(java.io.ObjectInputStream)>'})-[:CALL ]->(m2:Method {NAME:'reconstitutionPut'})-[:CALL ]->(m3:Method {NAME:'equals'})-[:ALIAS*..2]-(m4:Method)-[:CALL ]->(m5:Method {NAME:'get'})-[:ALIAS*1..2]-(m6:Method {NAME:'get'})-[:CALL]->(m7:Method {NAME:'transform'})-[:ALIAS*]-(m8:Method)-[:CALL]->(m9:Method {IS_SINK:true}) return path"; |
| 76 | |
| 77 | String cmdSqlcc8 = "//cc8\n" + |
| 78 | "match path=(m1:Method {SIGNATURE:'<org.apache.commons.collections4.bag.TreeBag: void readObject(java.io.ObjectInputStream)>'})-[:CALL ]->(m2:Method {NAME:'doReadObject'})-[:CALL ]->(m3:Method {NAME:'put'})-[:ALIAS*1..4]-(m4:Method)-[:CALL ]->(m5:Method {NAME:'compare'})-[:CALL ]->(m6:Method)-[:ALIAS*]-(m7:Method {SIGNATURE:'<org.apache.commons.collections4.comparators.TransformingComparator: int compare(java.lang.Object,java.lang.Object)>'})-[:CALL ]->(m8)-[:ALIAS*]-(m9:Method)-[:CALL*..5 ]->(m10:Method {IS_SINK:true}) return path"; |
| 79 | |
| 80 | String cmdSqlcc9="//cc9\n" + |
| 81 | "match path=(m1:Method {SIGNATURE:'<java.util.Hashtable: void readObject(java.io.ObjectInputStream)>'})-[:CALL]->(m2:Method {NAME:'reconstitutionPut'})-[:CALL]->(m3:Method {NAME:'hashCode'})-[:ALIAS*]-(m4:Method {SIGNATURE:'<org.apache.commons.collections.keyvalue.TiedMapEntry: int hashCode()>'})-[:CALL]->(m5:Method {NAME:'getValue'})-[:CALL]->(m6:Method {NAME:'get'})-[:ALIAS*1..2]-(m7:Method {NAME:'get'})-[:CALL]->(m8:Method {NAME:'transform'})-[:ALIAS*]-(m9:Method)-[:CALL]->(m10:Method {IS_SINK:true}) return path"; |
| 82 | String cmdSql = |
| 83 | "match (source:Method {NAME:'readObject'})\n" + |
| 84 | "match (sink:Method {SIGNATURE:'<java.lang.reflect.Method: java.lang.Object invoke(java.lang.Object,java.lang.Object[])>'})\n" + |
| 85 | "call apoc.algo.allSimplePaths(sink, source, '<CALL|ALIAS', 10) yield path \n" + |
| 86 | "return path limit 2"; |
| 87 | |
| 88 | // XStream |
| 89 | |
| 90 | //CVE-2021-21346 |
| 91 | String xstream ="//xstream 2021-1\n" + |
| 92 | "match p1 = (m3:Method {CLASSNAME:'com.sun.org.apache.xpath.internal.objects.XString'})-[:ALIAS*..3]-(m2:Method {NAME:'equals'})<-[:CALL]-(source:Method {NAME:'compareTo',CLASSNAME:'javax.naming.ldap.Rdn$RdnEntry'})\n" + |
| 93 | "match p2 = (sink:Method {IS_SINK:true,NAME:'invoke'})<-[:CALL]-(m1:Method {CLASSNAME:'sun.swing.SwingLazyValue',NAME:'createValue'}) \n" + |
| 94 | "call apoc.algo.allSimplePaths(m1, m3, '<CALL|ALIAS', 12) yield path\n" + |
| 95 | "return apoc.path.combine(apoc.path.combine(p2,path),p1) limit 20"; |
no test coverage detected