วันจันทร์ที่ 29 เมษายน พ.ศ. 2556

How to hack the "try2hack.siamdev.net"

How to hack the http://try2hack.siamdev.net
เรื่องราวเกี่ยวกับการเจาะระบบรักษาความปลอดภัยบนโลก Internet


         Web site http://try2hack.siamdev.net เป็น Web สำหรับเรียนรู้และทดลองการ Hack ระบบรักษาความปลอดภัยของ Web Site  ซึ่งสามารถช่วยให้นักพัฒนามองเห็นจุดอ่อนของระบบรักษาความปลอดภัยใน Web ตัวเอง และนำไปปรับปรุงโปรแกรมของตัวเองเพื่ออุดช่องโหว่ (Vulnerability) เหล่านั้นได้
         โจทย์สำหรับให้ Hack แต่ละข้อนั้น เริ่มจากง่ายๆ จนไปถึงระดับที่มีความซับซ้อน มีการใช้ Javascript Injection และ SQL Injection อย่างไรก็ตาม ได้มีผู้รู้ทำการ Hack และสรุปแนวทางเอาไว้ดังนี้


BASIC WEB HACK 

[level1] h4x0r 
ไม่มีไรมากคับ click ขวา view code ก้จะเห็น password แล้ว 
[level2] 
hahaha password จะอยู่ใน ใน http://try2hack.siamdev.net/basic/javascript 
[level3] 
คลิกไปได้เลย 
[level4] 
bravo password จะอยู่ในนี้ http://try2hack.siamdev.net/basic/password.inc 
[level5] 
ลองทำเอง save หน้าเว็บเพจแล้วแก้ ส่วนของ adminstrator email เป็น email ของเราเอง แล้วแก้ ส่วน action ใหม่มันไปใช้ script ที่ internet หรือ ใช้ java injection ครับเปลี่ยน email ของ adminstrator เป็น email ของเราเองแล้วกดส่ง [send the passwpord!] 
code javascript:void(document.forgotpass.admin_email.value="your@email.com") โดยใส่ไว้ที่ช่อง address bar และให้มันเป็นบันทัดเดียวนะ แล้วกด enter จากนั้นก้รอ email ตอบกลับซึ่งในนั้นจะมี password อยู่ 
[level6] 
content ให้ save หน้าเว็บเพจแล้วแก้โค้ด ได้เลย โดยจะแก้ยังไงก้แล้วแต่ล่ะคนก้แลัวนะ สำหรับเราทำแบบนี้ 
code หา  alert("รหัสผ่านไม่ถูกต้อง!"); แก้เป็น  alert(pwd); แล้วก้กด login! ไปเลยมันจะแสดง password ที่ถูกต้องออกมาให้เราเองจาก 
[level7] 
reloaded ให้ save หน้าเว็บเพจแล้วแก้โค้ด ได้เลย โดยจะแก้ยังไงก้แล้วแต่ล่ะคนก้แลัวนะ สำหรับเราทำแบบนี้ 
code หา  document.write ( แก้เป็น alert( แล้วก้กด login! ไปเลยมันจะแสดง script ที่เกี่ยวกับการตรวจสอบ password ออกมา อ่านสะแล้วก้จะได้ password 
[level8] 
ลองทำเอง ใช้ SQL injection ให้ใส่ว่า 
code 'OR '1'='1 ในช่อง password ก้จะผ่าน 
[level9] 
ลองทำเอง วิธีการเดียวกับ เลเวล 5 นั้นล่ะ 
[level10] 
ลองทำเอง ให้กด login ไปก่อน 1 ครั้ง แล้วใส่ 
code javascript:void(document.cookie="level10_login=yes") ที่ช่อง address bar แล้วก้กด enter จากนั้น กดปุ่ม Refresh หน้าเว็บ ก้จะผ่าน 
[level11] 
ลองเล่นเอง ลองใส่ 0000000 หรือ aaaaaaa ในช่อง Encryptor แล้วกดเข้ารหัสดู สังเกตุว่ามันเปลี่ยนแปลงยังไงบ้าง แล้วพยายามทำให้ ผลเป็น olmm=>6 เราก้จะได้ password ที่ถูกต้องออกมาก้เส็รจแล้ว 



MISC 

[misc 1] 
test ใช้พวกโปรแกรม กู้ password จากไฟล์ zip หา 
[misc 2] 
ลองดูเอง ใช้ Tap แทนเมาส์ เอานะ 
[misc 3] 
nattynarok ใช้ program HEX edit ดูตัวโปรแกรมก้จะเจอคำตอบ 
[misc 4] 
ลองดูเอง ใช้ pragram sniffer ดูการทำงาน หรือจะใช้ HEX edit ดูจะเจอที่เก็บserial number อยูที่ http://try2hack.siamdev.net/misc/04/serial-oekdnd.php เอามาใช้สักอันก้จะผ่าน 
E2254305-CF0F 
E2252D01-EB31 
E2257405-B387 
E2252C04-A416 
E2254007-F57C 
E2254B01-726C 
E2254005-41F8 
E2252707-9C4A 
ใส่ serial number เข้าไปแล้วจะได้ password เล่นต่อ 
[misc 5] 
b5d6k0 โปรแกรมโจทย์ จะตรวจสอบ key ที่เราใส่ลงไปกับ internet โดยใช้ script นี้ตรวจ http://try2hack.siamdev.net/misc/05/validator.php?key เราหาจุดที่จะแก้โปรแกรม ไม่เจอ เลย แก้ให้มันตรวจสอบ key ที่อื่นแทนโดยใช้ script ที่จะส่งค่า true ออกมาเสมอ โปรแกรมมันก้จะนึกว่า key ที่ใส่ถูกต้องเอง 



REALISTIC MISSION 

[mission 1] 
ตอนแรกก้ใส่จำนวน 300 ลงไปแล้วกดสั่งซื้อ ใส่ หมายเลข 1000-3541 ลงไป จากนั้นทำ java injection โดยใช้ javascript:void(document.form1.price.value=1) ใส่ที่ช่อง address bar กด enter ที่ 1 แล้วกด ส่งซื้อ ก้จะผ่าน 
[mission 2] 
ดูดีๆจะมีหน้า adminstrator ให้ login ได้ซึ้งก้คือ http://try2hack.siamdev.net/realistic/02/admin.php จากนั้นหา password ด้วย ดูที่ source code จะได้ password=nimda แล้วจะเป็นหน้า upload เพื่อ update grad โดยเดาเอาว่า คงเก็บ ไฟล์ชื่อว่า data.txt(งมหาเอา) เราจะเจอรูปแบบของข้อมูลไม่ก้เดา จากนั้น เราก้ทำ file ชื่อว่า data.txt โดยในนั้น ใส่ข้อมูลว่า 18921-A จากนั้นก้อับโหลดไฟล์ตัวนั้น ก้จะผ่าน mission 
[mission 3] 
เมื่อดู source แล้วจะรู้ว่า หน้า index.html ถูกเปลี่ยนไปแต่ แฮกเกอร์ ยังเก็บข้อมูล index.html อันเก่าเอาไว้อยู่ อยู่ที่ oldindex.html และเมื่อดูจาก หน้าเพิ่มสุภาษิตเราจะเสมอสร้าง หน้า index.html ใหม่ให้เหมื่อนเดิมได้ โดยเรา copy source code ของ oldindex.html มาไว้ก่อน แล้วก้เข้าไปที่หน้า เพิ่มสุภาษิต แล้วใส่คำสุภาษิตว่า index แล้วเนื้อหาของสุภาษิตเราก้ใส่ source code ของ oldindex.html ลงไป ก้ผ่าน mission 
[mission 4] 
เมื่อดูๆแล้วจะรู้ว่ามีหน้านี้ อยู่ http://try2hack.siamdev.net/realistic/04/admin/index.php โดยเราก้ใช้ SQL inject เข้าไปก้จะผ่าน ทำเหมื่อนกัน basic 8 อะ 
[level5] 
ก้สำรวจแล้วก้จะเจอกับ script ที่สามารถ viewsource เราก้ทำการ viewsource ไฟล์ที่มีส่วนของการ connect database สะ ซึ่งก้คือ http://try2hack.siamdev.net/realistic/05/bannork/viewsource.php?file=inc.con.php แล้วเราก้จะเจอกับ Username Password ที่ใช้ติดต่อกับ ฐานข้อมูล SQL แล้ว 
[level6] 
ลืมไปเลยจิงๆว่าจะทำให้สวยๆหน่อยเพราะมันเหมื่อนกะของ hackthissite.org (กะจะมะเฉลย hackthissite ก่อน)แต่มีคนขอเลยทำสะเลย จะว่าไปในเว็บบอร์ดของที่นั้นเค้าจะแทบจะเฉลยกันโต่งๆอยู่แล้วแต่ถ้า ยังไม่สาแกใจก้ตามนี้ 
.000.100.095 < ที่เห็นนี้ก้คือ charcode (หรือจะเรียกว่า asciicode ก้แล้วแต่จะเรียก)ของตัวอักษรของข้อความ 1 ตัวกับ charcode ของรหัสทุกตัวรวมกันแล้วเอามาบวกกัน จากนั้นแยกเป็น เลข 3 ชุด เช่น ถ้า คำว่า "A" จะมี charcode เป็น 65 และถ้า password ของรหัสเป็น "AA" ซึ่งมี charcode รวมเป็น A + letmesee = 65 + (65 + 65) = 195 จากนั้นเอา 195 มาแยกเป็น เลข 3ชุด จะได้ .000.100.095 ส่วนจะแยกกันด้วยวิธีไหนผมไม่รู้นะ แต่ที่สังเกตได้จากการเข้ารหัสแบบนี้ก้คือ ถึงแม้ว่าเราจะไม่รู้ว่า รหัสผ่านเป็นอะไรและมี charcode รวมเป็นเท่าไหร่ แต่มันจะถูก บวกเข้าไปในแต่ล่ะตัวอักษร ของข้อความที่ต้องการเข้ารหัส (plaintext) ถ้าเรารู้ว่าใน plaintext มีตัวอักษรอะไรที่ให้ค่า charcode ที่น้อยที่สุดหรือมากที่สุด เราจะสามารถเอาค่า charcode นั้นมาลบกับ เลขชุด ที่เป็น Cryptext แล้วจะได้ charcode รวมของรหัสในที่นี้ผมขอเรียกว่า key นะครับ ดังนั้น เพียงแค่ตัวเดียวเราก้สามารถถอดรหัสข้อความนั้นออกมาได้โดยไม่ต้องรู้ รหัสเลย อธิบายมาสะยาว คงพอจะเข้าใจ และเมื่อเราเข้ากันตรงกันแล้ว คำถามต่อไปคือ ตัวอักษรอะไรล่ะที่จะให้ค่า charcode ที่น้อยที่สุดหรือมากที่สุดให้ข้อความที่เป็นจดหมายคิดไปคิดมา ก้คือการย่อหน้าข้อบรรทัดใหม่ไง ที่ต้องมีอยู่ไหนจดหมาย และยังให้ charcode ที่น้อยที่สุดที่ควรจะมี(ถ้าด่านมันไม่ยากจนเกินไป)อีกด้วย เพราะการขึ้นบรรทัดใหม่ ประกอบ char สองตัวเรียงกัน คือ 13 10 ดังนั้น charcode ที่น้อยที่สุดที่เป้นไปได้ก้คือ 10 นั้นเอง [แต่ถ้ามันมี char อื่นที่น้อยกว่านี้อีก วิธีนี้ก้ false ไปคับ BruteForce หาคำตอบก้แล้ว] l=108 e=101 t=116 m=109 s=115 


สิ่งที่ต้องทำคือ 
1) ก่อนอื่นก้ต้อง จับเลข 3 ตัวที่อยู่เรียงติดกัน บวกกันให้หมดก่อน 
2) จากนั้นหาตัวเลขที่มีค่าน้อยที่สุดให้เลขทั่งหมดนั้น แล้ว ลบด้วย 10 ถ้าสังเกตุดีๆจะเห้นว่า ตัวเลขข้างๆ จะเป้นเลขที่ มากว่าเลขนั้นอย่ 13 เสมอ 
3) ผลลบจากข้อ 2) จะเป็น Key ให้เราเอา Key ไปลบจาก เลขทุกตัวที่ได้จากข้อ 1) 
4) จะได้เป็น charcode ของ plaintext ที่เราต้องการ ซึ่งก้คือคำตอบของด่านนี้นั้นเอง แแนะว่าให้เขียนโปรแกรมเพื่อหาคำตอบ จะดีกว่า 

Credit : http://student.nu.ac.th/ekkasit/webboard/answer.asp?questID=319

1 ความคิดเห็น: