Pages

Friday, 27 May 2022

SocksBin

 A command line pastebin, written in python

Command line pastebin for sharing files and command outputs.

How to use

Requirements

To use this, you'll need a tool called netcat. Try typing 'nc' or 'netcat' into the terminal, you probably have it already !

Client Side

  • Self-Explanatory examples using the public server
echo "Hello World !" | nc magnum.wtf 6969
cat "script.sh" | nc magnum.wtf 6969
  • In case you started the server on localhost
df | nc localhost 9999
You will receive a url to the text-only paste as a response to the above commands. e.g.
https://socksbin.magnum.wtf/33fdd867

This has a built-in Pygment-based beautifier. add "_color" to the end of the received url, to get a beautified paste.

https://socksbin.magnum.wtf/33fdd867_color

In case your text isn't beautified, include the shebang #! which is the first two bytes of an executable

e.g. the first line should be #! /usr/bin/env python for proper python formatting

Cool stuff

Make this much easier to use by adding an alias to your rc file. For example:

skb alias

Linux (Bash):

echo 'alias skb="nc magnum.wtf 6969"' >> .bashrc

macOS:

echo 'alias skb="nc magnum.wtf 9999"' >> .bash_profile

Copy output to clipboard

Linux (Bash):

echo 'alias skb="netcat magnum.wtf 6969 | xclip -selection c"' >> .bashrc
echo less typing now! | skb

macOS:

echo 'alias skb="nc magnum.wtf 6969 | pbcopy"' >> .bash_profile
echo less typing now! | skb

Remember to reload the shell with source ~/.bashrc or source ~/.bash_profile after adding any of provided above!

Server Side

Configration

  • Clone
git clone https://github.com/MagnumDingusEdu/SocksBin.git
  • Set up virtual environment
python3 -m venv venv

# or 

virtualenv venv
  • Install required packages
source venv/bin/activate
pip install -r requirements.txt
  • Make the script executable
chmod +x paster.py

Usage

usage: ./paster.py [-o output directory]
                   [-n listen_address] [-p port] [-s slug size]
                   [-l logfile] [-b buffer size][-h help]

These are command line arguments. None of these are required to run the server. Defaults are specified in the section below.

Settings

Output directory -o --output_directory

Absolute, or relative path to the directory where the pastes will be stored, as plaintext files.

./paster.py -o ./pastes
./paster.py -o /home/www/pastes/

Default value: $HOME/socksbin

URL -u --url

This will be used as a prefix for an url received by the client. Value will be prepended with $url.

./paster.py -u https://domain.com/
./paster.py -u https://subdomain.domain.com/
./paster.py -u https://subdomain.domain.com/pastes/

Default value: http://localhost/

Slug size -s --slug_size

This will force slugs to be of required length:

./paster.py -s 6

Output url with default value: http://localhost/********, where * is a randomized character

Output url with example value 6: http://localhost/******, where * is a randomized character

Default value: 8

Buffer size -b --buffer_size

This parameter defines size of the buffer in bytes, when making a connection. TCP has a max buffer size of 60K.

./paster.py -b 4096

Default value: 32768


Log file -l --log_file

./paster.py -l /home/user/socksbin.log.txt

The log file will only be made if you specify this argument. Make sure that this file is user writable.

Default value: not set


Queue Depth -q --queue_depth

./paster.py -q 10

The helps to properly manage simultaneous connections. The maximum value is system dependent. For example, on Linux, see /proc/sys/net/core/somaxconn

Default value: 10


Running as a service

If you're using systemd, follow these steps:

  • Create the service file
sudo touch /lib/systemd/system/socksbin.service
  • Add the following code to the file
[Unit]
Description=Socksbin Server
After=multi-user.target

[Service]
Type=idle
ExecStart=/home/user/socksbin/venv/bin/python /home/user/socksbin/paster.py -o /var/www/socksbin -s 8 -p 6969 -l /home/user/socklog.txt -u https://subdomain.yourdomain.com/

[Install]
WantedBy=multi-user.target

Replace /home/user/socksbin with the path to your socksbin installation. Save and exit.

  • Set appropriate permissions
sudo chmod 644 /lib/systemd/system/socksbin.service
  • Restart the systemd daemon, and enable your service
sudo systemctl daemon-reload
sudo systemctl start socksbin
sudo systemctl enable socksbin

This will make sure it remains up even accross reboots.

To check the current status of your service:

sudo systemctl status socksbin

Example Server Configs

This does not have a web server built in, so you can use this with your existing web server, to make files available to the internet.

  • Example apache config
<VirtualHost *:80>
        ServerName subdomain.mysite.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/socksbin
        DirectoryIndex index.html

        ErrorLog ${APACHE_LOG_DIR}/socksbin_error.log
        CustomLog ${APACHE_LOG_DIR}/socksbin_access.log combined

</VirtualHost>
  • Example nginx config
server {
    listen 80;
    server_name subdomain.mysite.com;
    charset utf-8;

    location / {
            root /var/www/socksbin/;
            index index.txt index.html;
    }
}

Please make sure that you put default file, e.g. index.html, so that people can't access all your files freely.

from https://github.com/MagnumDingusEdu/SocksBin

 

No comments:

Post a Comment