ใช้ selenium+tesseract ทดสอบ Captchar

January 23rd, 2015 Comments off

ส่วนใหญ่พวก web app เราจะใส่พวก captchar ด้วยในหน้า login หรือฟอร์มต่าง ๆ เพื่อกันบอทโพสข้อมูลหรือ login ซ้ำ ๆ จนได้ password ใช่ไหมครับ แต่เราเคยสงสัยไหมครับว่า captchar ของเรานี่ดีในระดับไหน

 

ผมขอเล่าวิธีการทดสอบง่าย ๆ โดยใช้ selemiun กับ tesseract ละกันครับ โดยขอบเขตของการทดสอบคือใช้กับ captchar ที่เป็นตัวอังกฤษภาษาอังกฤษผสมตัวเลขเท่านั้นครับ ภาษาที่ใช้เป็น python ครับ นี่เป็นหน้าตาของส่วน login ที่เราจะทดสอบนะครับ captchar เป็นตัวเลขล้วนครับ

login

 

ผมจะอธิบายโค้ดทีละบรรทัดนะครับ

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import sys, string, os, time

#ด้านบนเป็นการ import lib ทั้งหมดครับ


driver = webdriver.Firefox()
driver.get(“http://www.xxx.com/login”)

#เลือก driver ที่เราจะใช้ในการทดสอบตามโค้ดเป็น firefox เมื่อ run จะเปิด firefox ขึ้นมาครับ

assert “Login” in driver.title

#ดูว่า title ของ page มีคำว่า Login หรือไม่ครับ

driver.save_screenshot(‘screenshot.png’)

#ทำ ss ของหน้าเว็ป ตรงนี้สังเกตว่าต้องใช้ ss เพราะ captchar จะเปลี่ยนมี refresh ใหม่ทุกครั้งครับ

os.chdir(‘C:\Program Files\ImageMagick-6.9.0-Q16’)
os.system(‘”convert -crop 145×45+750+270 c:\screenshot.png c:\ss.png”‘)
os.chdir(‘C:\\’)
os.system(‘tesseract ss.png test -psm 7’)

#หลังจากที่ได้ ss แล้วเราก็ crop ภาพให้เหลือแต่ส่วนที่เป็น captchar ครับ แล้วใช้ tesseract ที่เป็น opensource orc แกะตัวอักษรออกมา -psm 7 คือให้อ่านออกมาเหมือนว่ามีบรรทัดเดียวครับ

f = open(‘C:\\test.txt’,’r’)
captchar = f.read()
output = ”
for char in captchar:
if ‘0’<= char <= ‘9’:
output=output+char

#หลังจากได้ captchar มาแล้วจะมีบางส่วนที่อ่านไม่ได้ครับแล้วออกมาเป็นตัวอักษรแปลก ๆ ครับ เราจะต้องกรองให้เหลือแค่ตัวเลขครับ

s = ‘ren ss.png ‘+output+”.png”
os.system(s)

#พอได้ตัวเลขแล้วก็เปลี่ยนชื่อไฟล์เพื่อเช็คว่า captchar ที่อ่านได้ถูกกี่เปอร์เซ็นต์ โค้ดตัวอย่างไม่ได้ทำ for loop นะครับ แต่ผมทดสอบไป 100 ครั้งได้ผลตามสรุปครับ

สรุปแล้วผลที่ผมได้คือ 63% อ่านได้ถูกต้องตัวเลขครบทั้งหกตัว 24% ตัวเลขครบหกตัวแต่จะอ่านตัวเลขผิดส่วนที่ผิดมาก ๆ จะเป็นอ่านเลขแปดเป็นเลขสามครับ อีก 13% อ่านตัวเลขได้ไม่ครบทั้งหกตัวครับ

ซึ่งถ้าเราปรัปเปลี่ยนให้อีก 13% ที่อ่านตัวเลขได้ไม่ครบกลับไป recursive อีกครั้งความเป็นไปได้ที่เราจะอ่าน captchar ได้อย่างถูกต้องจะอยู่ที่ 71% ครับ

จริง ๆ ผมไม่แน่ใจว่า captchar นี่ควรจะกันบอทได้อย่างน้อยกี่ % แต่เข้าใจว่าเกิน 60% ถือว่ามากเกินไปและควรจะเปลี่ยน อ้างอิงจาก recaptchar ของ google ที่มีคนแกะจนอ่านได้เกิน 60% แล้วเริ่ม implement มาใช้ภาพแทนครับ

–วิธีลง PhantomJS บน ubuntu https://gist.github.com/julionc/7476620

Categories: Security Tags:

XSS บน ssballthai.in.th

January 21st, 2015 Comments off

อีกปัญหาที่ผมพบบน ssballthai.in.th คือ เวลาตอบคอมเมนต์หรือตั้งกระทู้สามารถแทรก javascript ที่เป็น xss ได้ครับ ตอนนี้ยังมีปัญหาเหลืออยู่แต่จะอยู่ในการ preview ก่อนตอบหรือตั้งกระทู้ครับ

xss

ตรงนี้ปัญหาเกิดจากการแทรกรูปที่ยอมให้แทรก tag img ได้ครับ โค้ดที่ผมใช้ก็คือ onload=”alert(‘xss’)” เวลาที่ภาพโหลดขึ้นมาตัว javascript ก็จะทำงานครับ

 

จริง ๆ ผมไม่ค่อยเก่งเรื่อง javascript เท่าไหร่แต่เข้าใจว่าอย่างน้อยปัญหานี้ ทำให้สามารถตั้งกระทู้ที่ทุกคนที่เข้ามาในกระทู้สามารถแผล่บให้เราโดยอัติโนมัติได้ หรือบังคับให้โพสหรือส่ง cookie ไปยัง server ที่ต้องการได้ครับ ซึ่งทำให้สามารถเอา cookies ของ admin มาเป็นของตัวเองได้ (ส่วนนี้ถ้ามีใครเข้าใจการทำงานของ cookie รบกวนเพิ่มเติมให้ด้วยครับ เพราะเข้าใจว่าในปัจจุบันการขโมย cookie อย่างเดียวใช้ไม่ได้แล้วเพราะจะ cross check กับ ip address)

 

วิธีการป้องกัน xss ก็คือใช้พวก framework ที่มี feature ป้องกัน xss หรือพวก html puifier กรองโค้ดที่เป็นอันตรายออกก่อน

Categories: Security, XSS Tags:

แผล่บตัวเองบน ssballthai.in.th

January 20th, 2015 Comments off

อดีตเว็ป soccersuck ทำเว็ปใหม่มาได้ซักพักครับ มี feature ใหม่ คือ แผล่บ ซึ่งก็คล้าย ๆ กับ like บน facebook นี่แหละครับ ไอ้แผล่บที่ว่าสามารถเอาไปแลกไอเทม หรือเลื่อนยศผู้ใช้งานได้ครับ ทำให้ แผล่บ เป็นที่ต้องการ

 

เราสามารถกดปุ่มแผล่บเพื่อแผล่บ “ให้คนอื่น” ได้ครับ สามารถแผล่บได้เดือนละ 200 แผล่บต่อเดือน แน่นอนว่าแผล่บให้ตัวเองไม่ได้ครับไม่งั้นก็แผล่บให้ตัวเองรัว ๆ ได้ หน้าตามปุ่มแผล่บก็ไอ้หน้าเลีย ๆ นี่แหลครับ

ขั้นตอนการแผล่บก็ง่าย ๆ ครับ ถ้าใช้ firebug ดู จะเห็นว่าแต่ละคอมเมนต์มีค่า string กำกับแผล่บอยู่ ถ้าเรากดแผล่บก็จะส่งค่า string ดังกล่าวกลับไปที่ server ทีนี้การกดแผล่บให้ตัวเองก็ง่าย ๆ ครับ ใช้ firebug ดูค่า string แผล่บคอมเมต์เราแล้ว copy ค่าดังกล่าวไปใส่ที่ปุ่มแผล่บคนอื่น เท่านี้เราก็จะสามารถแผล่บให้ตัวเองได้แล้วครับ

lick

ตามภาพ string ของแผล่บคือ Mjg0M….. นี่แหละครับ แค่นี้เราก็สามารถแผล่บให้ตัวเองได้แล้วครับ

 

Categories: Security Tags:

3G แมวเหมียวปล่อยให้เข้าถึง services บนลูกข่ายได้

January 19th, 2015 Comments off

เรื่องนี้เกิดช่วงต้นปี 57 ครับ ผมเพิ่งเคยใช้ 3G ผ่านมือถือเป็นครั้งแรกครับ เจ้าแรกที่ใช้คือ แมวเหมียวครับ 350 บาท/เดือน data unlimited ผมใช้ผ่าน aircard ครับไม่ได้เอาใส่โทรศัพท์แต่อย่างไรครับ

 

ถ้าใช้คำสั่ง ifconfig จะเห็นว่าคอมพิวเตอร์ได้ Ip address ในช่วง 10.x.x.x ครับ ซึ่งเป็น Private ip address ซึ่งโดยปกติอุปกรณ์ใน network address เดียวกันสามารถเข้าถึง services ต่าง ๆ ได้ครับ (เข้าใจว่าต้องประหยัด ip address เพราะขืน assign public ip ให้อุปกรณ์ mobile มีหวัง ip หมด range แน่นอนครับ)

 

ผมเลยลองใช้ nmap scan ดูพบว่ามี client up อยูจำนวนหนึ่ง แต่ปัญหาคือโดยปกติ 3G เราใช้กับโทรศัพท์ใช่ไหมครับ แล้วมี service ไหนที่เราสามารถเข้าถึงอุปกรณ์ได้โดยตรงหรือเปล่า สุดท้ายผมไปเจอว่าบน iphone ที่ jailbreak สามารถเข้าถึงผ่าน port 22 ได้ครับ

 

ซึ่ง jailbreak จะมี default username/password คือ root/alpine ครับ วิธีหาก็คือ > “ncrack -v –user root –pass alpine 10.x.x.x/24:22” ครับ ถ้า hit ncrack จะบอกเองครับ

 

เมื่อเราสามารถเข้าถึงอุปกรณ์ผ่าน ssh ได้แล้ว ก็สามารถเข้าถึงไฟล์ต่าง ๆ รวมถึง message/call log ได้ครับ ลองดู structure ของไฟล์บน iphone ได้ ที่นี่ ครับ

 

Note ผมแจ้งทางแมวเหมียวไปตอนนี้ใช้ nmap scan จะถูก fillter หมดแล้วครับ จริง ๆ ก็เป็นบทเรียนนะครับว่า product ที่เราไม่เคยทำมาก่อนจะมีปัญหาใหม่ซ่อนอยู่

Categories: Security Tags: