diff --git a/README.md b/README.md index f6d3bf3..0ce13ae 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# [Darknet Onion Webring](http://uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/) +# [Darknet Onion Webring (WIP)](http://uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/) ![logo](./www/img/onion.png) diff --git a/scripts/darknet_exploration.py b/scripts/darknet_exploration.py new file mode 100644 index 0000000..a2232c3 --- /dev/null +++ b/scripts/darknet_exploration.py @@ -0,0 +1,146 @@ +import os, pwd +def main(): + + rootpath='/srv/darknet-onion-webring/' + homepath=pwd.getpwuid(os.getuid()).pw_dir + urlpath=homepath+'/.darknet_participant_url' + print(urlpath) + isitvalid="n" + + #check if ~/.darknet_participant_url exists, + # if exists, instance= the content of ~/.darknet_participant_url (which is the url: such as uptime.nowherejez...onion) + + while isitvalid != "y": + if os.path.isfile(urlpath): + with open(urlpath) as f: + instance = f.read() + # TODO check if the instance URL domain is valid + + print("[+] file exists, your Webring URL is ", instance) + isitvalid = "y" + else: + print("[+] Instance Path doesn't exist yet") + # and ask for the instance URL domain + instance = input("What is your Instance domain ? (ex: uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion):") + instancepath=rootpath+'www/participants/'+instance + # TODO check if the instance URL domain is valid + + # ask the user if the instance URL is valid ? + print() + print(instance) + isitvalid=input("Is your this your instance domain ?") + # if yes, then write it into ~/.darknet_participant_url + if isitvalid != "y" : + print("OK writing the instance url to ~/.darknet_participants_url") + with open(urlpath, 'w') as file: + file.write(instance) + + print("[+] Welcome to the Darknet Onion Webring, where you are exploring the Darknet and helping others do the same.") + print(""" + 1) add a new entry (into unverified.csv) + 2) verify an entry (move an entry from unverified to verified.csv) + 3) add a new webring participant (and download their files into their directory (without trusting them yet!)) + 4) trust a webring participant (Potentially dangerous) + """) + option = input("Select Option? (1-4)") + print(option) + match option: + case "0": + print("[+] Initial Setup") + # what is your instance url ? ex: uptime.nowherejez...onion + instance = input("What is your Instance domain ? (ex: uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion):") + # check that it is only url.onion or subdomain.url.onion, and if the characters are only [a-zA-Z0-9.], use the function IsOnionDomainValid() + instancepath='/srv/darknet-onion-webring/www/participants/'+instance + print(instancepath) + # check if the directory already exists or not in www/participants/nowherejez...onion + if os.path.isdir(instancepath): + print("[+] Instance Path already exists, skipping.") + else: + print("[-] path doesnt exist") + # if doesnt exist, create it, copy the default anonymous instance banner in there. + # copy the blank verified.csv unverified.csv sensitive.csv blacklist.csv and webring-participants.csv files in the new directory + # print message to explain what's next: you have a new instance, it's now time to list your own links, and to browse other participant's links + + case "1": + print("[+] Add a new Entry (into unverified.csv)") + # ask for the following: + # the name of the website (required) + # the url of the website (required) + # a quick description (optional) + # sensitive ? (y/n) + # (rest is automatic: status, score, instance is = '' because it is your own instance) + # check if the entry doesn't already exist in verified.csv and in unverified.csv + # if it doesnt exist, add it into unverified.csv + + case "2": + print("[+] Verify an entry (move an entry from unverified.csv to verified.csv)") + # search for a word + # and display only the matching entries in an array format (display it in CLI). + # Each of the rows must have an index, + # prompt the user to ask for with row they want to move to verified.csv + # once selected, it must be able to print that row, and: + # append it into verified.csv + # remove it from unverified.csv + # print completed! You are now listing [name] (url) (sensitive). + + case "3": + print("[+] add a new webring participant (and download their files into their directory (without trusting them yet!))") + # ask for the url to the other webring participant + # check if the url is valid or not: at http://URL.onion/participants/URL.onion/{verified.csv,unverified.csv,sensitive.csv,blacklist.csv,webring-participants.csv} + + case "4": + print("[+] trust a webring participant (Potentially dangerous)") + # list the existing webring participants from webring-participants.csv and + # ask the user to pick the index (0-9?) of the instance to trust + # if index is valid, then mark the instance as trusted in webring-participants.csv + + case _: + print("[-] ERROR, incorrect input") + + +def IsOnionValid(domain): + # check if the characters are only [a-zA-Z0-9.] with maximum 128 chars max? + # check that it is only url.onion or subdomain.url.onion, + # if OK return True + #if not : return False + return True + +def IsUrlValid(url): + # check if the characters are only [a-zA-Z0-9.:/] with maximum 128 chars max? + # check that it is only http(s)://wordA.wordB or http(s)://WordC.WordB.WordC, (onion or not), clearnet is fine too (double check if those are fine!) + # if OK return True + #if not : return False + return True + +def IsStatusValid(status): + # check if the characters are only [vx] with maximum 1 chars max + # if OK return True + #if not : return False + return True + +def IsDescriptionValid(desc): + # check if the characters are only [a-zA-Z0-9.,' ] with maximum 256 chars max + #(careful with the ' and , make sure you test if it fucks the csv up or else) + # if OK return True + #if not : return False + return True + +def IsCategoryValid(category): + # check if the characters are only [a-zA-Z0-9 ] with maximum 64 chars max + #(careful with the ' and , make sure you test if it fucks the csv up or else) + # if OK return True + #if not : return False + return True + +def IsNameValid(name): + # check if the characters are only [a-zA-Z0-9 ] with maximum 64 chars max + #(careful with the ' and , make sure you test if it fucks the csv up or else) + # if OK return True + #if not : return False + return True + + + + +if __name__ == '__main__': + main() diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/banner.png b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/banner.png new file mode 100644 index 0000000..8e7af73 Binary files /dev/null and b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/banner.png differ diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/blacklist.csv b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/blacklist.csv new file mode 100644 index 0000000..432db87 --- /dev/null +++ b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/blacklist.csv @@ -0,0 +1,2 @@ +blacklisted-words +porn diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/sensitive.csv b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/sensitive.csv new file mode 100644 index 0000000..6a38cbc --- /dev/null +++ b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/sensitive.csv @@ -0,0 +1,5 @@ +sensitive-words +Market +market +drug + diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/unverified.csv b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/unverified.csv new file mode 100644 index 0000000..505f097 --- /dev/null +++ b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/unverified.csv @@ -0,0 +1,4 @@ +Instance,Category,Name,URL,Sensitive,Description,Status,Score +,Infos and Links,Tor Taxi,http://tortaxi2dev6xjwbaydqzla77rrnth7yn2oqzjfmiuwn5h6vsk2a4syd.onion/,✔️,"List of links to go to popular darknet places",✔️,100.0 + + diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/verified.csv b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/verified.csv new file mode 100644 index 0000000..c67543b --- /dev/null +++ b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/verified.csv @@ -0,0 +1,5 @@ +Instance,Category,Name,URL,Sensitive,Description,Status,Score +,Infos and Links,Psychonaut Wiki,http://vvedndyt433kopnhv6vejxnut54y5752vpxshjaqmj7ftwiu6quiv2ad.onion/,,"This is the wiki for psychonauts, it contains infos on substances and trip reports",✔️,100.0 +,Infos and Links,DNM Bible,http://biblemeowimkh3utujmhm6oh2oeb3ubjw2lpgeq3lahrfr2l6ev6zgyd.onion/,✔️,"General guide on how to navigate the Darknet to buy drugs",✔️,100.0 + + diff --git a/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/webring-participants.csv b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/webring-participants.csv new file mode 100644 index 0000000..2641837 --- /dev/null +++ b/www/participants/uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion/webring-participants.csv @@ -0,0 +1,2 @@ +Name,URL,Description,Trusted,Status,Score +Nowhere,http://uptime.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion,"Darknet Webring Onion Participant",✔️,✔️,100.0