Repozitorij korisnih admin-skripti
Naziv i verzija:
MiniARPing 1.0a (by Vlad0)
Kratki opis:
Vraća IP i MAC adrese za traženi FQDN (Fully Qualified Domain Name).
Vrsta:
Windows batch
Programi i/li biblioteke potrebne za rad:
- Ping
- ARP
Dodatne napomene:
Radi samo u LAN-u (ograničenje zbog ARP-a).
Kod:
miniarping.bat
REM MiniARPing 1.0a (by Vlad0)@ECHO OFFSET IP=SET IPduzina=SET MAC=FOR /F "tokens=2,3 delims= " %%A IN ('PING -n 1 %1') DO IF "%%A"=="%1" SET IP=%%BSET IP=%IP:[=%SET IP=%IP:]=%SET IP=%IP: =%SET #=%IP%SET IPduzina=0:loopIF DEFINED # (SET #=%#:~1%&SET /A Ipduzina += 1&GOTO :loop)if %IPduzina% LSS 7 GOTO :neidepingFOR /F "delims=" %%A IN ('ARP -a %IP%') DO SET MAC=%%ASET MAC=%MAC: =%CALL SET MAC=%%MAC:~%IPduzina%,17%%GOTO :ispis:neidepingSET IP=N/ASET MAC=N/A:ispisECHO ===============================ECHO FQDN: %1ECHO -------------------------------ECHO IP adresa: %IP%ECHO MAC adresa: %MAC%ECHO ===============================
Primjer korištenja:
miniarping.bat pingable.nekadomena.local
===============================
FQDN: pingable.nekadomena.local
--------------------------------------------------------
IP adresa: 192.168.0.123
MAC adresa: 00-0e-0c-33-22-1a
===============================
miniarping.bat unpingable.nekadomena.local
===============================
FQDN: unpingable.nekadomena.local
--------------------------------------------------------
IP adresa: N/A
MAC adresa: N/A
===============================
Naziv i verzija:
QUEUE Izvještaj na e-mail by cekpi (picek1@gmail.com)
Kratki opis:
Powershell skripta koja provjera queue stanje na exchange 2007/2010 serveru
Vrsta:
Exchange powershell/Windows batch
Programi i/li biblioteke potrebne za rad:
- Exchange powershell
Dodatne napomene:
Ne kuha kavu
### naziv e-mail servera
$smtpServer = "FQDN exchange servera (hub ili edge rola)"
### skupljanje statistike
$b = Get-Queue | fl | out-string
### Kreiranje nove poruke
$msg = New-Object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
### Definiranje kome se i od koga se šalje
$msg.From = ("administrator@mojadomena.com")
$msg.To.Add("moje.ime@mojdomen.com")
### Naziv poruke
$msg.Subject = "Queue na XY serveru"
### Dodavanje statistike u tijelo e-mail-a
$msg.Body = "Dragi moji Admini, u privitku Vam se nalazi izvještaj. Ugodan dan želi Vam skripta"
$msg.Body = $b
### Slanje poruke
$smtp.Send($msg)
Korištenje:
- spremanje kao *.ps1 i ručno pokretanje kroz shell
- Pokretanje ručno ili putem schedulera preko batch skrpte koja glasi:
@echo off
PowerShell.exe -PSConsoleFile "E:\Exchange 2007\bin\exshell.psc1" -Command "C:\skripte\QUEUE_SKRIPTA\slanje_queue.ps1"
Naziv i verzija:
Mailbox statistika na e-mail by cekpi (picek1@gmail.com)
Kratki opis:
Powershell skripta koja provjera zapunjenost pojedinog mailbox-a naExchange 2007/2010 serveru
Vrsta:
Exchange powershell/Windows batch
Programi i/li biblioteke potrebne za rad:
- Exchange powershell
Dodatne napomene:
Ni ova ne kuha kavu
###Naziv e-mail servera
$smtpServer = "FQDN exchange servera"
###Skupljanje i sortiranje mailbox statistike
Get-Mailbox -OrganizationalUnit "OU u kojem se nalaze useri" | get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,@{label="TotalItemSize(MB)";expression={$_.TotalItemSize.Value.ToMB()}} , storagelimitstatus > mailboxes.txt
###Skupljanje informacija o limitima za pojedinog usera
get-Mailbox -OrganizationalUnit "OU u kojem se nalaze useri" | ft name, issuewarningquota >> mailboxes.txt
###Kreiranje e-mail poruke i dodavanje attachmenta
$msg = New-Object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment("mailboxes.txt")
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
###Slanje poruke
$msg.From = ("administrator@mojadomena.com")
$msg.To.Add("moje.ime@mojadomena.com")
$msg.Subject = "Informativni podatak o tome koliko megabajta tuđih mejlova moraš pročitati"
$msg.Body = "Dragi moji Admini, u privitku Vam se nalazi ono uz subject polja. Ugodan dan želi Vam skripta."
$msg.Attachments.Add($att)
$smtp.Send($msg)
###Puštanje attachmenta
$att.Dispose()
Korištenje:
- spremanje kao *.ps1 i ručno pokretanje kroz shell
- Pokretanje ručno ili putem schedulera preko batch skrpte koja glasi:
PowerShell.exe -PSConsoleFile "E:\Exchange 2007\bin\exshell.psc1" -Command "C:\skripte\mailbox_statistika\slanje2.ps1"
Bravo decki, odlicna tema!
Naziv i verzija:
ISADeleteCacheContent 1.0
Kratki opis:
Briše sadržaj cache datoteka ISA servera.
Vrsta:
VBS
Dodatne napomene:
Resetira Firewall servis (što može potrajati koju minutu).
Kod:
Sub DeleteCacheContents()Dim rootSet root = CreateObject("FPC.Root")Dim serverDim cacheDrivesDim cacheDriveDim fsoSet server = root.GetContainingServer()server.StopFirewallService()Set cacheDrives = server.CacheDrivesSet fso = CreateObject("Scripting.FileSystemObject")For Each cacheDrive In cacheDrivescacheFilePath = CacheDrive.Name & "\urlcache\Dir1.cdat"fso.DeleteFile cacheFilePathNextserver.StartFirewallService()WScript.Echo "ISA chache datoteke su prazne."End SubDeleteCacheContents
Primjer korištenja:
Spremiti kod kao ISADeleteCacheContent.vbs i onda dvoklik na nju.
Mapiranje mrežnog diska :
on error RESUME NEXT
strDrive = "Z:"
strPath = "\\share\share"
strUser = "DOMENA\korinsik"
strPassword = "sifra_sustava"
boolPersistent = True ' True = Persistent ; False = Not Persistent
set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.MapNetworkDrive strDrive, strPath, boolPersistent, _
strUser, strPassword
msgbox( "Disk je mapiran ")
Spremite kao VBS , mjenjate podcrtane vrijednosti , meni ovo pomoglo dosta puta.
Korištenje mrežnog printera i vezanje na LPT
@echo off
net use lpt1 /d
net use lpt1 \\192.168.100.113\SamsungPrinter /p:Yes
Spremite kao BAT i pokrenete mjenjate podcrtano.
Naziv i verzija:
PortStat 1.0a (by vlad0)
Kratki opis:
Daje detaljne informacije o procesu koji "sjedi" na nekom lokalnom TCP portu.
Vrsta:
Windows batch
Programi i/li biblioteke potrebne za rad:
netstat (dolazi s Windowsima)
tasklist (dolazi s Windowsima)
Dodatne napomene:
EDIT: Na Windows Vista i 7 OS-evima cmd mora biti pokrenut s elevated ovlastima da bi netstat i tasklist radili kako treba.
Skripta gleda samo portove u LISTENING stanju. Ako vam trebaju dodatna stanja, editirajte kod skripte (pogledajte netstat info).
Ako vam trebaju dodatne informacije o procesu, editirajte kod skripte (pogledajte tasklist info).
Kod:
PortStat.bat
@ECHO OFF
ECHO.
SET pid=
FOR /F "delims=" %%a in ('netstat -anob -p TCP ^|findstr ":%1" ^|findstr "LISTENING"') DO SET pid=%%a
IF DEFINED pid (
GOTO pidpostoji
) ELSE (
GOTO pidnepostoji
)
:pidpostoji
ECHO Proto Local Address Foreign Address State PID
ECHO===============================================================================
ECHO %pid%
SET pid=%pid:~-11%
FOR /f "tokens=* delims= " %%a in ("%pid%") DO SET pid=%%a
tasklist /fi "PID eq %pid%"
tasklist /fi "PID eq %pid%" /svc
tasklist /fi "PID eq %pid%" /m
GOTO kraj
:pidnepostoji
ECHO Port %1 is not taken.
ECHO.
:kraj
Primjer korištenja:
PortStat PORT
portstat 80
Proto Local Address Foreign Address State PID
==============================================================================
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 6080
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
httpd.exe 6080 Services 0 15.280 K
Image Name PID Services
========================= ======== ============================================
httpd.exe 6080 wampapache
Image Name PID Modules
========================= ======== ============================================
httpd.exe 6080 ntdll.dll, wow64.dll, wow64win.dll,
wow64cpu.dll
portstat 25
Port 25 is not taken.
Hvala za ideju!
Zakon tema-glasam za sticky!!
moze linux ilti unix verzija sa perlom i pythonom? :)
ajde neka "smisljator" teme napravi novu sa linux skriptama, tako da nam bude svima lakse...:)
moze linux ilti unix verzija sa perlom i pythonom? :)
ajde neka "smisljator" teme napravi novu sa linux skriptama, tako da nam bude svima lakse...:)
Stvar je u tome da za lnux servere ne trebaš izmišljati toplu vodu sa tamo nekim skriptama. Bash shell je sasvim dovoljan i 4 000 godina ispred batcha i onog smijeha od windows "power" shell-a.
BASH je jednostavniji masu od batcha. Nebo i zemlja. No ne kvarimo momcima temu, go for it boys!
Mislim da nema potrebe za otvaranjem zasebne teme - postoji predviđeno polje "Vrsta" u kojem kažeš za koju platformu je skripta namjenjena. To što su dosad svi postali skripte za Windoze ne znači ništa (osim možda da su Win admini aktivniji od svojih *nix kolega, hehe;).
Nemoj se ljutiti, ali PowerShell prvo treba znati koristiti (jednako kao i bash), a tek onda suditi o njemu. A netko tko je proveo X vremena razvaljujući PS sigurno neće davati takve izjave jer zna da je riječ o vrlo, vrlo moćnom alatu. Mogu se doduše složiti da je usporedba batch-bash na razini mogućnosti bespredmetna, ali takve usporedbe ionako nemaju baš previše smisla. Batch je u krajnoj liniji također alat - možda nešto jednostavniji - ali ako se nešto može obaviti / automatizirati koristeći upravo batch, ne vidim zašto to ne iskoristiti tu mogućnost. Krajnji cilj je ionako ušteda vremena i smanjivanje mogućnosti pogrešaka, pa ako je to doista i ostvareno, ne vidim zašto bi se itko bunio oko načina stizanja do cilja?
@svi
Samo da raščistimo unaprijed: ovo nije tema za Windows / *nix flame warove, držite se teme. Ako želite raspravljati o razlikama između Windowsa i *nixeva, iskoristite neku već postojeću temu na Bug forumu. Ovdje su tema korisne admin skripte, bez obzira na platformu. Hvala na razumijevanju.
MS Community je objavio besplatan priručnik za upravljanje Windows Server 2008 R2 Core inačicama poslužitelja.
Priručnik je na hrvatskom jeziku i mislim da svatko ko ima ili razmišlja o core edicijama bi trebao bacit pogled.
Obrađene teme su:
- Značajke Core edicija
- Instalacija i aktivacija
- Inicijalno podešavanje
- Uobičajene administrativne radnje
- Pregled CLI naredbi
http://www.mscommunity.hr/News/Details/fa1c57da-f8c3-4adf-ab8a-990923800b45
Naziv i verzija:
BriseTmp 1.2
Kratki opis:
Briše sadržaj temporary mapa od "current user" i Windows(%SystemRoot%).
Vrsta:
Windows batch
Dodatne napomene:
Nema upozorenja i obavijesti (pogodan kao dio veče skripte).
Kod:
BriseTmp.bat
@echo offFOR /F "DELIMS=" %%? IN ('DIR/B/AD %TEMP%\*') DO RD/S/Q "%TEMP%\%%~?" >nul 2>&1DEL/F/A/Q %TEMP%\*.* >nul 2>&1DEL/F/A/Q %SystemRoot%\temp\*.* >nul 2>&1
Korištenje:
- Samo pokreni i pomoli se.
Naziv i verzija:
Hyper-V Export 0.5
Kratki opis:
Exportira definirane VM-ove koji se vrthe na Hyper-V platformi. Korisno ako se npr. želi napraviti brzi full backup VM-ova.
Vrsta:
Windows PowerShell 1.0
Dodatne napomene:
1. Ako već niste, morat ćete podesiti PS execution policy da bi se ovo moglo odvrtiti:
set-executionpolicy remotesigned
2. Prije pokretanja promijenite nazive $guest varijabli tako da odgovaraju nazivima vaših VM-ova u Hyper-V-u (u expbackup.ps1). Možete slobodno dodavati / brisati VM-ove iz ovog popisa i backupirati samo one koje želite.
3. Prije pokretanja promijenite $script_dir i $dest varijable (u expbackup.ps1) kako vam odgovaraju.
Kod:
expfunction.ps1
$VM_Service = get-wmiobject -namespace root\virtualization Msvm_VirtualSystemManagementService
$VM = gwmi -namespace root\virtualization -query "select * from msvm_computersystem where elementname='$guest'"
$VMReturnState = $VM.EnabledState
$VMName = $VM.ElementName
if (($VM.EnabledState -eq 2) -or ($VM.EnabledState -eq 32768) -or ($VM.EnabledState -eq 32770))
{
$VM.RequestStateChange(32769)
$curtime = get-date -f HH:mm:ss
echo "$curtime >> Spremanje stanja: $VMName"
}
while (!($VM.EnabledState -eq 32769) -and !($VM.EnabledState -eq 3))
{
Start-Sleep(1)
$VM = get-wmiobject -namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='$VMName'"
}
$curtime = get-date -f HH:mm:ss
echo "$curtime >> Exportiranje..."
$status = $VM_Service.ExportVirtualSystem($VM.__PATH, $True, "$dest\$timestamp")
if ($status.ReturnValue -eq 4096)
{
$job = [Wmi]$status.Job
while (!($job.PercentComplete -eq 100) -and ($job.ErrorCode -eq 0))
{
Start-Sleep(10)
$job = [Wmi]$status.Job
$curtime = get-date -f HH:mm:ss
$curperc = $job.PercentComplete
echo "$curtime >> $curperc%"
}
}
$curtime = get-date -f HH:mm:ss
echo "$curtime >> Backup dovrsen i spremljen u $dest\$timestamp\$VMName"
echo ""
$VM.RequestStateChange($VMReturnState)
expbackup.ps1
$script_dir = "X:\putanja_do_skripte"
$dest = "X:\putanja_do_backup_mape"
$timestamp = Get-Date -f yyyy-MM-dd_HH-mm
$guest = "Naziv_VM_01"
. "$script_dir\expfunction.ps1"
Start-Sleep(60)
$guest = "Naziv_VM_02"
. "$script_dir\expfunction.ps1"
Start-Sleep(60)
$guest = "Naziv_VM_02"
. "$script_dir\expfunction.ps1"
Primjer korištenja:
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe X:\putanja_do_skripte\expbackup.ps1
Naziv i verzija:
ThumbnailPhoto 1.0 (by: Marko Franjić)
Kratki opis:
Postavlja sliku u ad atribut, zatim se slika replicira u Outlook
Vrsta:
PowerShell
Programi i/li biblioteke potrebne za rad:
EMS
Kod:
function Import-Picture ($Path, $Identity)
{
$Lenght = ([System.IO.FileInfo]$Path)
$Extension = ([System.IO.DirectoryInfo]$Path)
if (!([System.IO.File]::Exists($Path)))
{
Write-Host "Vaša putanje je nevaljana: $path"
}
elseif([System.IO.File]::Exists($Path))
{
if ($lenght.Length -gt 10000)
{
Write-Host 'File sadrži veličinu veču od dopuštene'
}
elseif($lenght.Length -lt 10000)
{
if ( $Extension.Extension -eq '.jpg')
{
Import-RecipientDataProperty -Identity $Identity -Picture -FileData ([Byte[]]$(Get-Content -Path $Path -Encoding Byte -ReadCount 0))
Write-Host 'Slika postavljena'
}
else
{
Write-Host 'File mora sadržavati ".jpg" ekstenziju'
}
}
}
}
Primjer korištenja:
Import-Picture -Path 'C:\User\Pcitures\test.jpg' -Identity 'pero.peric'
Popis korisnih Exchange skripti (hvala cekpiju na pomoći oko Exchangea):
Dobij mailbox GUID:
Get-MailboxStatistics -Database "mailbox baza" | Where-Object {$_.DisconnectDate -Notlike $NULL} | FL DisplayName, DisconnectDate, MailboxGuid
Briši usera iz diskonektanih usera:
Remove-Mailbox -Database "mailbox baza" -StoreMailboxIdentity MailboxGuid
Postavke imena foldera (Inbox- Primljeno, itd):
Set-MailboxRegionalConfiguration -Language “en-EN” -Identity "ime.prezime" -LocalizeDefaultFolderName:$true
Dostupno en -EN, hr -HR, de -DE...
Veličina mailboxeva:
Get-MailboxDatabase "mailbox baza" | Get-MailboxStatistics | Sort totalitemsize -desc | ft displayname, totalitemsize, itemcount
Briši whitespace u bazi:
Clean-mailboxdatabase –identity "Mailbox baza"
Vraćanje mailbox iz restorane baze:
1. Odabrati način vraćanja mailboxa (Windows server backup, Vmware flr)
2. Napraviti novi disk na mail serveru (R: u ovome slučaju)
3. Restorati bazu i logove
4. Otvoriti powershell i kucati:
- Provjeri ispravnost log fileova: eseutil /ml R:\logfiledb\E00
- Stavi bazu u clean shutdown: eseutil /r E00 /i /l R:\logfiledb\ /d 'R:\mailboxdb\recovering.edb'
- Provjeri bazu jeli u clean shutdownu: eseutil /mh 'R:\mailboxdb\recovering.edb'
- Ako nije, napravi repair i stavi je u clean shutdown: eseutil /p 'R:\mailboxdb\recovering.edb'
- Provjeri bazu jeli u clean shutdownu: eseutil /mh 'R:\mailboxdb\recovering.edb'
- Dodaj bazu u Exchange s drugim imenom: New-MailboxDatabase RecoveryDB -Server mail.firma.local -Recovery:$true –EdbFilePath 'R:\Mailboxdb\restoring.edb'
- Smontiraj bazu: Mount-Database RecoveryDB
- Provjeri dostupnost mailboxa s sličnim imenom: Get-MailboxStatistics -Database RecoveryDB | ?{$_.DisplayName -like 'ante*'}
- Vrati određeno ime u određeni mailbox iz određenog postojećeg foldera u novi folder: New-MailboxRestoreRequest -SourceDatabase RecoveryDB -SourceStoreMailbox 'Ime Prezime' –TargetMailbox 'Ime Prezime' -TargetRootFolder Restore -AllowLegacyDNMismatch -IncludeFolders '#Inbox#'
Evo jedna sa mog bloga. Neznam koliko ce biti korisna "siroj" populaciji, posto je usko povezana sa hostingom :)
Skripta za rucno parsanje statistike ( Awstats ), tj. kada treba parsati stare log fileove.
Skriptu treba spremiti u isti folder gdje se nalazi i awstats.pl i pretpostavlja da je perl instaliran u c:\perl
Detaljnije upute za koristenje - http://www.winblogs.net/index.php/2012/06/14/parse-old-log-files-with-awstats/
Skripta se pokrece kroz Powershell ( .\file.ps1 )
Function Awstats
{
param ($Dir = $(Read-host "Enter path to log files")),
($Website = $(Read-Host "Website name ( without www )?"))
$TargetFolder = $Dir
if (Test-Path $TargetFolder)
{
Write-host "Folder name is :" $TargetFolder -foregroundcolor "Red"
$Files = get-childitem $Dir\*.* -include *.log
$List = $Files | where {$_.extension -eq ".log"}
foreach ($File in $Files)
{
write-host "Updating statistics! Please wait." -foregroundcolor "Red";&'C:\perl\bin\perl.exe' awstats.pl config=$Website logfile=$File}
}
Else
{Write-Host "Folder $TargetFolder doesnt exist! Input correct path!" -foregroundcolor "Red"}
}
Awstats
Skripta koja premjesta log folder od svih webova na serveru u c:\logs\imeweba.tld
Ako folder ne postoji, kreira ga i u IIS-u podesi novi path
Korištenje : pokrenuti skriptu iz Powershella.
Import-Module "WebAdministration" -ErrorAction Stop
foreach($site in (dir iis:\sites\*))
{
write-host $site.Name
if (!(Test-Path -path C:\Logs\$($site.Name)))
{
New-Item c:\Logs\$($site.Name) -type directory
}
Set-ItemProperty IIS:\Sites\$($site.Name) -name logFile.directory -value “C:\Logs\$($site.name)”
}
Pošto SQL Express nema SQL Agent u kojemu se mogu scheduleati dumpovi baza, koristim sljedeci query za daily dump svih baza na tom SQL serveru ( osim tempdb )
Skripta u ovom slucaju sprema .bak fileove u E:\sqlbackups.
Taj path si izmjenite ako ne pase :)
Posto su sys admini po prirodi lijene bube, query se moze scheduleati kroz Task Scheduler.
Komanda koju treba pokretati je:
“C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE” -i “c:\folder\sqlbackup.sql”
Path do sqlcmd.exe se moze razlikovati na vasem stroju.
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
SET @path = 'E:\sqlbackups\' --path to the backup folder
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Brisanje svih fileova iz nekog foldera i podfoldera koji su stariji od X dana.
Koristenje : pokrenuti skriptu u powershellu.
Function GetOldFile
{
param ($Dir = $(Read-host "Unesi putanju do direktorija")),
($Days = $(Read-Host "Brišem fileove starije od koliko dana?"))
$TargetFolder = $Dir
if (Test-Path $TargetFolder)
{
Write-host "DIREKTORIJ JE :" $TargetFolder -foregroundcolor "Red"
#Write-Host `a `a `a `a `a - odkomentirati ako zelimo da pc speaker vristi :)
Write-Host "UPS, krivi folder! Stisni 'Ctrl + C' za prekid - imas 5 sekundi za prekid" -foregroundcolor "Yellow"
Start-sleep -s 5
$Now = Get-Date
$LastWrite = $Now.AddDays(-$days)
$Files = get-childitem $TargetFolder -include *.log -recurse |Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
{write-host "Brišem file $File" -foregroundcolor "Red"; Remove-Item $File | out-null}
}
Else
{Write-Host "Direktorij $TargetFolder ne postoji! Provjeri path!"}
}
GetOldFile
Skripta koja skida zadnju verziju timthumb.php filea, trazi stare timthumb.php fileove na serveru ( c:\users\ folder i upgradea ako je tako specificirano kod pokretanja skripte.
Ako se odabere D ( detect ) u folder iz kojeg se je skripta pokrenula ce spremiti file sa nazivom "toupgrade.txt" . U fileu ce biti kompletni path do timthumb.php filea.
Ako se odabere U ( upgrade) , svaki nadjeni file ce zamijeniti sa zadnjom skinutom verzijom timthumb.php filea.
Ovu skriptu sam napisao kada je otkriven timthumb.php exploit, tako da obavijestimo/zastitimo klijente.
Skripta se pokrene u powershellu. Ostalo je pretty much straight forward :D
Function FindOldTimthumb
{
param ($string = $(Read-host "Enter timthumb.php version")),
($type = $(Read-host "Just (D)etect or (U)pgrade)?"))
$storageDir = $pwd
$path = "C:\users"
$webclient = New-Object System.Net.WebClient
$url = "http://timthumb.googlecode.com/svn/trunk/timthumb.php"
$tt = "$storageDir\timthumb.php"
$webclient.DownloadFile($url,$tt)
if ($type-eq 'D'){
Write-host "Detecting files. Results will be saved in $storagedir \toupgrade.txt" -foregroundcolor "Red"
$Files = Get-ChildItem -path $path -recurse -filter "timthumb.php" |where-object {!(Select-string -Path $_.fullname -Pattern '$string' -SimpleMatch)} > $storagedir\toupgrade.txt
}
elseif($type -eq 'U') {
$Files = Get-ChildItem -path $path -recurse -filter "timthumb.php" |where-object {!(Select-string $_.Fullname -Pattern '$string' -SimpleMatch )} | ForEach-Object -Process {$_.DirectoryName} | Out-File $pwd\timthumb.txt
$infected ="$pwd\timthumb.txt"
foreach ($File in $Files)
{
Get-content $infected |ForEach-Object {
write-host "Upgrading file $_\timthumb.php" -foregroundcolor "Red"
(Get-Content $infected)| Foreach-Object {Copy-Item $tt $_ -force}
#Write-host "Upgrading file $File " -foregroundcolor "Red" {Copy-Item $tt -destination $File -force)
}
}
}
}
FindOldTimthumb
Skripta koja trazi stare Joomle ili Wordpresse na serveru i sprema rezultate u oldwordpress.txt ili oldjoomla.txt, zavisno sto se skenira.
Koristenje : pokrenuti iz Powershella i citati :)
Zamijenti $path = "c:\users\" sa vasim pathom.
Function FindOldWPandJoomla
{
param ($type = $(Read-host "Check (W)ordpress or (J)oomla?")),
($string = $(Read-host "Enter latest version"))
$storageDir = $pwd
$path = "C:\users\"
if ($type-eq 'W'){
Write-host "Detecting old versions. When done, results will be saved in $storagedir\oldwordpress.txt" -foregroundcolor "Red"
$Files = Get-ChildItem -path $path -recurse -filter "version.php" |where-object {!(Select-string $_.Fullname -Pattern '$string' -SimpleMatch )} | ForEach-Object -Process {$_.DirectoryName} | Out-File $storagedir\folderlist.txt
$folders ="$storagedir\folderlist.txt"
Get-Content $folders | Select-String "wp-includes" > $storagedir\oldwordpress.txt
}
elseif($type -eq 'J') {
Write-host "Detecting old versions. When done, results will be saved in $storagedir\oldjoomla.txt" -foregroundcolor "Red"
$Files = Get-ChildItem -path $path -recurse -filter "version.php" |where-object {!(Select-string $_.Fullname -Pattern '$string' -SimpleMatch )} | ForEach-Object -Process {$_.DirectoryName} | Out-File $storagedir\folderlist.txt
$folders ="$storagedir\folderlist.txt"
Get-Content $folders | Select-String "components" > $storagedir\oldjoomla.txt
}
}
FindOldWPandJoomla
Ovaj digitalni repozitorij kreiran je u sklopu sustava Digitalnih akademskih arhiva i repozitorija Dabar koji ustanovama iz sustava znanosti i visokog obrazovanja omogućava da plodove svog rada u digitalnom obliku okupljaju na jednom mjestu, dugoročno ih čuvaju i koriste, a da pritom ne moraju razmišljati o tehnološkim pitanjima vezanim uz uspostavu i održavanje repozitorija. Veliku količinu materijala koja nastaje njenim radom, bilo da je riječ o izvorno digitalnoj ili digitaliziranoj građi, ustanova može pohraniti u svoj digitalni, institucijski repozitorij te tako osigurati jednostavnu organizaciju i pretraživost građe.
Bilo mi dosadno pa napravio skriptu za mount share-a na linuxu (lako se prebaci u servis za automatizaciju sto sam u biti i napravio). Anyway:
putanja1= ip adresa\ime npr: \/\/192.168.1.11\/Ime
odrediste1= u koji se folder mounta share npr \/mnt\/share
* \\ se mora raditi sa escape characterom (\/\/= \\)
username: korisnik koji ima pravo na share
Passw: Lozinka za share
Admin pass: pass za sudo (ako korisnik nema prava treba ga dodati u sudoers)
Može se napraviti da se ne prompta za ista tipa:
mount_user=ime
mount_pass=lozinka
ali se onda trebaju promijeniti prava na datoteku (chown samo na root) tako da drugi ne mogu citati lozink (plaintext jelte :D)
& fora je ako imate vise odredista (kao ja) onda napravite bulk mount :D samo sa c/p te odrediste(n)/putanja(n)
ako trebate mount od apple time capsule dodate: sec=ntlm,vers=1.0 u opcije :D
#!/bin/bash
putanja1=
odrediste1=
echo "Enter username for mounts:"
read mount_user
[[ -z "mount_user" ]] && echo "Username empty, exiting" && exit
echo "Enter password for mounts:"
read -s mount_pass
[[ -z "mount_pass" ]] && echo "Password empty, exiting" && exit
echo "Enter admin pass:"
read -s lozinka
[[ -z "lozinka" ]] && echo "Password empty, exiting" && exit
echo "neko ime share-a tek da se zna sto se mounta"
echo "$lozinka" | sudo -S mount.cifs $putanja1 $odrediste1 -o username="$mount_user",password="$mount_pass",gid=$(id -g),uid=$(id -u),forceuid,forcegid 2>/dev/null
exit
Osnovna ideja kod pokretanja ove teme je da napravimo svojevrtan repozitorij korisnih skripti koje nam svima mogu pomoći kod svakodnevnih admin taskova. Idealno bi bilo da stavljate svoje skripte, ali ako naletite na neku zgodnu na Netu i mislite da bi bila korisna nitko vam ne brani da ju postate. U tom slučaju bi svakako bilo poželjno da takve skripte istestirate prije objavljivanja kako ne bi završili sa hrpom postova "Uh, sorry što ne radi - nisam ni ja probao, samo sam c/p odnekud". Naravno, diskusije i kritike skripti, kao i rasprave o mogućim poboljšanjima su poželjnje sve dok su konstruktivne.
!!VAŽNO!! Uz sam kod skripte, popunite i dodatna polja da bi drugima omogućili brže snalaženje i pretraživanje:
Naziv i verzija: ...
Kratki opis: ...
Vrsta: ...
Programi i/li biblioteke potrebne za rad: ...
Dodatne napomene: ...
Kod: ...
Primjer korištenja: ...
Evo, otvorit ću temu sa jednom vlastitom koju sam baš složio prije pola sata da dobijete ideju kako bi to moglo izgledati: