skipped 6 lines 7 7 #include <QNetworkReply> 8 8 #include <QNetworkRequest> 9 9 10 - #include "ParserMethods.h" 11 10 #include "src/utils/s3s.h" 12 11 #include "src/utils/utils.h" 13 12 #include "OsintDefinitions.h" skipped 7 lines 21 20 #include "src/items/MXItem.h" 22 21 #include "src/items/NSItem.h" 23 22 #include "src/items/RawItem.h" 24 - 25 23 26 24 /* input option */ 27 25 #define IN_DOMAIN 0 skipped 74 lines 102 100 QString raw_query_name; 103 101 }; 104 102 103 + /// 104 + /// getting html body node... 105 + /// 106 + 107 + GumboNode* getBody(GumboNode *node) { 108 + for(unsigned int i = 0; i < node->v.element.children.length; i++) 109 + { 110 + GumboNode *child = static_cast<GumboNode*>(node->v.element.children.data[i]); 111 + if(child->type == GUMBO_NODE_ELEMENT && child->v.element.tag == GUMBO_TAG_BODY) 112 + return child; 113 + } 114 + return nullptr; 115 + } 116 + 117 + /// 118 + /// \brief The AbstractOsintModule class 119 + /// 105 120 106 121 class AbstractOsintModule : public QObject { 107 - Q_OBJECT 122 + Q_OBJECT 108 123 109 - public:110 - explicit AbstractOsintModule(ScanArgs args)111 - : QObject(nullptr), 112 - args(args) 113 - {114 - }115 - ~AbstractOsintModule()116 - {117 - } 124 + public: 125 + explicit AbstractOsintModule(ScanArgs args) 126 + : QObject(nullptr), 127 + args(args) 128 + { 129 + } 130 + ~AbstractOsintModule() 131 + { 132 + } 118 133 119 - void startScan(QThread* cThread)120 - {121 - connect(cThread, &QThread::started, this, &AbstractOsintModule::start); 122 - connect(this, &AbstractOsintModule::nextTarget, this, &AbstractOsintModule::start); 123 - connect(this, &AbstractOsintModule::quitThread, cThread, &QThread::quit); 134 + void startScan(QThread* cThread) 135 + { 136 + connect(cThread, &QThread::started, this, &AbstractOsintModule::start); 137 + connect(this, &AbstractOsintModule::nextTarget, this, &AbstractOsintModule::start); 138 + connect(this, &AbstractOsintModule::quitThread, cThread, &QThread::quit); 124 139 125 - /* first target */ 126 - target = args.targets.dequeue(); 127 - log.target = target; 128 - } 140 + /* first target */ 141 + target = args.targets.dequeue(); 142 + log.target = target; 143 + } 129 144 130 - signals:131 - void quitThread();132 - void nextTarget(); 145 + signals: 146 + void quitThread(); 147 + void nextTarget(); 133 148 134 - void scanProgress(int progress);135 - void scanLog(ScanLog); 149 + void scanProgress(int progress); 150 + void scanLog(ScanLog); 136 151 137 - void resultSubdomain(QString subdomain);138 - void resultSubdomainIp(QString subdomain, QString ip);139 - void resultIP(QString ip);140 - void resultA(QString ip);141 - void resultAAAA(QString ip);142 - void resultNS(QString NS);143 - void resultMX(QString MX);144 - void resultCNAME(QString CNAME);145 - void resultTXT(QString TXT);146 - void resultSSL(QString certId);147 - void resultEmail(QString email);148 - void resultCIDR(QString cidr);149 - void resultURL(QString url);150 - void resultASN(QString asn, QString name); 152 + void resultSubdomain(QString subdomain); 153 + void resultSubdomainIp(QString subdomain, QString ip); 154 + void resultIP(QString ip); 155 + void resultA(QString ip); 156 + void resultAAAA(QString ip); 157 + void resultNS(QString NS); 158 + void resultMX(QString MX); 159 + void resultCNAME(QString CNAME); 160 + void resultTXT(QString TXT); 161 + void resultSSL(QString certId); 162 + void resultEmail(QString email); 163 + void resultCIDR(QString cidr); 164 + void resultURL(QString url); 165 + void resultASN(QString asn, QString name); 151 166 152 - void resultRawSSL(QByteArray);153 - void resultRawTXT(s3s_struct::RAW);154 - void resultRawJSON(s3s_struct::RAW); 167 + void resultRawSSL(QByteArray); 168 + void resultRawTXT(s3s_struct::RAW); 169 + void resultRawJSON(s3s_struct::RAW); 155 170 156 - void resultEnumASN(s3s_struct::ASN);157 - void resultEnumCIDR(s3s_struct::CIDR);158 - void resultEnumMX(s3s_struct::MX);159 - void resultEnumNS(s3s_struct::NS);160 - void resultEnumIP(s3s_struct::IP);161 - void resultEnumEmail(s3s_struct::Email); 171 + void resultEnumASN(s3s_struct::ASN); 172 + void resultEnumCIDR(s3s_struct::CIDR); 173 + void resultEnumMX(s3s_struct::MX); 174 + void resultEnumNS(s3s_struct::NS); 175 + void resultEnumIP(s3s_struct::IP); 176 + void resultEnumEmail(s3s_struct::Email); 162 177 163 - public slots:164 - void onStop(){165 - log.statusCode = 0; 166 - log.message = "Stopped..."; 167 - emit scanLog(log); 168 - emit quitThread(); 169 - } 178 + public slots: 179 + void onStop(){ 180 + log.statusCode = 0; 181 + log.message = "Stopped..."; 182 + emit scanLog(log); 183 + emit quitThread(); 184 + } 170 185 171 - protected slots:172 - virtual void start() = 0;173 - virtual void replyFinishedSubdomainIp(QNetworkReply*){} // returns subdomain and ip174 - virtual void replyFinishedSubdomain(QNetworkReply*){} // returns subdomains175 - virtual void replyFinishedCidr(QNetworkReply *){} // returns ip/cidr176 - virtual void replyFinishedSSL(QNetworkReply*){} // returns SSL Cert Sha1 fingerprint177 - virtual void replyFinishedIp(QNetworkReply*){} // returns ip-addresses178 - virtual void replyFinishedAsn(QNetworkReply*){} // returns ASN179 - virtual void replyFinishedEmail(QNetworkReply*){} // returns Emails180 - virtual void replyFinishedUrl(QNetworkReply*){} // returns URLs 186 + protected slots: 187 + virtual void start() = 0; 188 + virtual void replyFinishedSubdomainIp(QNetworkReply*){} // returns subdomain and ip 189 + virtual void replyFinishedSubdomain(QNetworkReply*){} // returns subdomains 190 + virtual void replyFinishedCidr(QNetworkReply *){} // returns ip/cidr 191 + virtual void replyFinishedSSL(QNetworkReply*){} // returns SSL Cert Sha1 fingerprint 192 + virtual void replyFinishedIp(QNetworkReply*){} // returns ip-addresses 193 + virtual void replyFinishedAsn(QNetworkReply*){} // returns ASN 194 + virtual void replyFinishedEmail(QNetworkReply*){} // returns Emails 195 + virtual void replyFinishedUrl(QNetworkReply*){} // returns URLs 181 196 182 - virtual void replyFinishedEnumASN(QNetworkReply*){} // returns multiple info on asn183 - virtual void replyFinishedEnumASNPeers(QNetworkReply*){} // returns multiple info on asn peers184 - virtual void replyFinishedEnumASNPrefixes(QNetworkReply*){} // returns multiple info on asn prefixes 197 + virtual void replyFinishedEnumASN(QNetworkReply*){} // returns multiple info on asn 198 + virtual void replyFinishedEnumASNPeers(QNetworkReply*){} // returns multiple info on asn peers 199 + virtual void replyFinishedEnumASNPrefixes(QNetworkReply*){} // returns multiple info on asn prefixes 185 200 186 - virtual void replyFinishedEnumIP(QNetworkReply*){} // returns multiple info on ip187 - virtual void replyFinishedEnumCIDR(QNetworkReply*){} // returns multiple info on cidr188 - virtual void replyFinishedEnumSSL(QNetworkReply*){} // returns multiple info on ssl cert 201 + virtual void replyFinishedEnumIP(QNetworkReply*){} // returns multiple info on ip 202 + virtual void replyFinishedEnumCIDR(QNetworkReply*){} // returns multiple info on cidr 203 + virtual void replyFinishedEnumSSL(QNetworkReply*){} // returns multiple info on ssl cert 189 204 190 - virtual void replyFinishedEnumMX(QNetworkReply*){} // returns MX records info191 - virtual void replyFinishedEnumNS(QNetworkReply*){} // returns NS records info 205 + virtual void replyFinishedEnumMX(QNetworkReply*){} // returns MX records info 206 + virtual void replyFinishedEnumNS(QNetworkReply*){} // returns NS records info 192 207 193 - virtual void replyFinishedEnumEmail(QNetworkReply*){} // returns Email info 208 + virtual void replyFinishedEnumEmail(QNetworkReply*){} // returns Email info 194 209 195 - virtual void replyFinishedRawNdjson(QNetworkReply *reply) // returns raw json results from ndjson 210 + virtual void replyFinishedRawNdjson(QNetworkReply *reply) // returns raw json results from ndjson 211 + { 212 + if(reply->error()) 213 + this->onError(reply); 214 + else 196 215 { 197 - if(reply->error()) 198 - this->onError(reply); 199 - else 200 - { 201 - /* converting ndjson to json array document */ 202 - QByteArray byteDocument = reply->readAll(); 203 - byteDocument = byteDocument.simplified(); 204 - byteDocument.replace("\n", ","); 205 - byteDocument.push_back("]"); 206 - byteDocument.push_front("["); 216 + /* converting ndjson to json array document */ 217 + QByteArray byteDocument = reply->readAll(); 218 + byteDocument = byteDocument.simplified(); 219 + byteDocument.replace("\n", ","); 220 + byteDocument.push_back("]"); 221 + byteDocument.push_front("["); 207 222 208 - s3s_struct::RAW raw; 209 - raw.module = log.moduleName; 210 - raw.query_option = args.raw_query_name; 211 - raw.target = target; 212 - raw.results = byteDocument; 213 - emit resultRawJSON(raw); 214 - } 215 - 216 - this->end(reply); 223 + s3s_struct::RAW raw; 224 + raw.module = log.moduleName; 225 + raw.query_option = args.raw_query_name; 226 + raw.target = target; 227 + raw.results = byteDocument; 228 + emit resultRawJSON(raw); 217 229 } 218 230 219 - virtual void replyFinishedRawJson(QNetworkReply *reply) // returns raw json results 220 - { 221 - if(reply->error()) 222 - this->onError(reply); 223 - else{ 224 - s3s_struct::RAW raw; 225 - raw.module = log.moduleName; 226 - raw.query_option = args.raw_query_name; 227 - raw.target = target; 228 - raw.results = reply->readAll(); 229 - emit resultRawJSON(raw); 230 - } 231 + this->end(reply); 232 + } 231 233 232 - this->end(reply); 234 + virtual void replyFinishedRawJson(QNetworkReply *reply) // returns raw json results 235 + { 236 + if(reply->error()) 237 + this->onError(reply); 238 + else{ 239 + s3s_struct::RAW raw; 240 + raw.module = log.moduleName; 241 + raw.query_option = args.raw_query_name; 242 + raw.target = target; 243 + raw.results = reply->readAll(); 244 + emit resultRawJSON(raw); 233 245 } 234 246 235 - virtual void replyFinishedRawTxt(QNetworkReply *reply) // returns raw txt results 236 - { 237 - if(reply->error()) 238 - this->onError(reply); 239 - else{ 240 - s3s_struct::RAW raw; 241 - raw.module = log.moduleName; 242 - raw.query_option = args.raw_query_name; 243 - raw.target = target; 244 - raw.results = reply->readAll(); 245 - emit resultRawTXT(raw); 246 - } 247 + this->end(reply); 248 + } 247 249 248 - this->end(reply); 250 + virtual void replyFinishedRawTxt(QNetworkReply *reply) // returns raw txt results 251 + { 252 + if(reply->error()) 253 + this->onError(reply); 254 + else{ 255 + s3s_struct::RAW raw; 256 + raw.module = log.moduleName; 257 + raw.query_option = args.raw_query_name; 258 + raw.target = target; 259 + raw.results = reply->readAll(); 260 + emit resultRawTXT(raw); 249 261 } 250 262 251 - protected: 252 - ScanLog log; 253 - ScanArgs args; 254 - QString target; 255 - s3sNetworkAccessManager *manager = nullptr; 263 + this->end(reply); 264 + } 256 265 257 - void onError(QNetworkReply *reply) { 258 - switch(reply->error()){ 259 - case QNetworkReply::OperationCanceledError: 260 - log.target = target; 261 - log.message = "Operation Cancelled due to Timeout"; 262 - log.statusCode = 0; 263 - log.error = true; 264 - emit scanLog(log); 265 - break; 266 - default: 267 - log.target = target; 268 - log.message = reply->errorString(); 269 - log.statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 270 - log.error = true; 271 - emit scanLog(log); 272 - break; 273 - } 266 + protected: 267 + ScanLog log; 268 + ScanArgs args; 269 + QString target; 270 + s3sNetworkAccessManager *manager = nullptr; 274 271 275 - reply->close(); 276 - reply->deleteLater(); 277 - this->next(); 272 + void checkAPIKey(QString key){ 273 + if(key.isNull() || key.isEmpty()){ 274 + log.message = "API key Required!"; 275 + log.statusCode = 0; 276 + log.error = true; 277 + emit scanLog(log); 278 + emit quitThread(); 278 279 } 280 + } 279 281 280 - void end (QNetworkReply *reply) { 282 + void onError (QNetworkReply *reply) { 283 + switch(reply->error()){ 284 + case QNetworkReply::OperationCanceledError: 281 285 log.target = target; 286 + log.message = "Operation Cancelled due to Timeout"; 287 + log.statusCode = 0; 288 + log.error = true; 289 + emit scanLog(log); 290 + break; 291 + default: 292 + log.target = target; 293 + log.message = reply->errorString(); 282 294 log.statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 295 + log.error = true; 283 296 emit scanLog(log); 284 - 285 - reply->close(); 286 - reply->deleteLater(); 287 - this->next(); 297 + break; 288 298 } 289 299 290 - void next() { 291 - args.config->progress++; 292 - emit scanProgress(args.config->progress); 300 + reply->close(); 301 + reply->deleteLater(); 302 + this->next(); 303 + } 293 304 294 - /* 295 - * enumerate next target if there are still targets available 296 - * if no targets available quit the scanThread. 297 - */ 298 - if(args.targets.length()){ 299 - target = args.targets.dequeue(); 300 - emit nextTarget(); 301 - } 302 - else 303 - emit quitThread(); 305 + void end(QNetworkReply *reply) { 306 + log.target = target; 307 + log.statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 308 + emit scanLog(log); 309 + 310 + reply->close(); 311 + reply->deleteLater(); 312 + this->next(); 313 + } 314 + 315 + void next() { 316 + args.config->progress++; 317 + emit scanProgress(args.config->progress); 318 + 319 + /* 320 + * enumerate next target if there are still targets available 321 + * if no targets available quit the scanThread. 322 + */ 323 + if(args.targets.length()){ 324 + target = args.targets.dequeue(); 325 + emit nextTarget(); 304 326 } 327 + else 328 + emit quitThread(); 329 + } 305 330 }; 306 331 307 332 #endif // ABSTRACTOSINTMODULE_H skipped 1 lines