ရိုးရှင်းတဲ့ Sql Injection Scanner Tool လေးတခု ကို Python ကုတ် နဲ့ ရေးကြမယ်


SQL injection ဟာ အားနည်းချက်ရှိတဲ့ ဝဘ်ဆိုက် အက်ပလီကေးရှင်းတွေကို user input data ကတစ်ဆင့် SQL queries များကို သုံးပြီး user name , password နှင့် တခြား အချက်အလက်တွေ ရအောင် ကုဒ်ထိုး ဟက်နည်းစနစ်တစ်ခုဖြစ်တယ်။ဒီ sql injection attack နည်းဟာ ဟက်ကာတွေ အသုံးအများဆုံးနှင့် အန္တရာယ်များသော ဝဘ်ဆိုက် ဟက်နည်း တွေထဲက တစ်ခုဖြစ်တယ်။

ဒီ sql injection attack ကို အောင်မြင် အောင် ထိုးနိင်ခဲ့ရင် ၀က်ဆိုက် တွေ ရဲ့ Database ကို ဖျက်ပစ် လိုက်လို့ ရသလို အချက်အလက် တွေပြင်လို့ ဒါမှမဟုတ် အသစ် ထည့် လို့ ရပါတယ်..

အရေးကြီးဆုံး တချက်က ခွင့်ပြု ချက်မရှိတဲ့ တခြား ၀က်ဆိုက် တွေကို ဟက်လုပ်ခြင်း ဟာ ဥပဒေ နဲ့ မညီညွတ် ပါဖူး ..ထောင်ဒဏ် ငွေဒဏ် နစ်ရပ်လုံး ကျခံရတတ်ပါတယ်..တိုင်းပြည်တချို့ ကတော့ ကောင်းတဲ့ ရည်ရွယ်ချက်နဲ့ ၀က်ဆိုက် အားနည်းချက်် ရှာဖွေပြီး သက်ဆိုက် ရာ website admin ေတွကို အကြောင်းကြား ကာကွယ် ခိုင်းခြင်း အဆင့် ထိ ခွင့် ပြုထားပါတယ် ..တိုင်းပြည်အများ စု Cyber laws ဟာ သူတို့ ခွင့် ပြူချက် မပါပဲ မည်သည်ံ ကုတ်ထိုး ခြင်းမှ ခွင့်ပြု မထားပါဖူး ..ဒီပိုစ်တင်ခြင်းဟာ ပညာပေး ပညာယူ ရည်ရွယ်ချက်သက်သက် သာဖြစ်ပါတယ်


ဒီ သင်ခန်းစာမှာ ဝဘ်အက်ပလီကေးရှင်းတွေကို SQL Injection ထိုး လို့ ရနိင် မရနိင် အော်တို စမ်းလို့ ရနိင်မဲ့ ရိုးရှင်း ဆုံး Tool ေလး တခုကို python ကုဒ် နဲ့ ဘယ်လို တည်ဆောက်ရမလဲ ဆိုတာကို အတူလေ့လာရ အောင်ပါ


ပထမဆုံး ဒီ toolမှာ လိုအပ် တဲ့ python libraries ကို အောက်က ကွန်မန်း သုံးပြီး install လိုက်ပါ ..python3 နဲ့ ရေးထားတဲ့ အတွက် pip3 သုံးပါတယ်

pip3 install requests bs4


visual code ဒါမှ မဟုတ် mousepad ပဲဖြစ်ဖြစ် သုံး လို့ ရပါတယ်

ပထမဆုံး လိုအပ်တဲ့ မေားကျူ့ တွေ အင်ပို့ လုပ်ရပါမယ်


from bs4 import BeautifulSoup as bs

from urllib.parse import urljoin

from pprint import pprint

#ဒီအောက်ကတော့ ကျွန်တော် တို့ မော်ဇီလာ ဘရောက်ဆာ user agent သုံးထားပါတယ်

s = requests.Session()

s.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"

SQL injection ဟာ user inputs များနဲ့ ပတ်သက်နေတာကြောင့်၊ ကျွန် တော် တို့ ဝဘ်ဖောင် တွေ ကို ပထမဆုံး အောက်က ကုဒ် နဲ့ ထုတ်ယူဖို့ လိုအပ်ပါတယ်

 def get_all_forms(url):

"""Given a `url`, it returns all forms from the HTML content"""

soup = bs(s.get(url).content, "html.parser")

return soup.find_all("form")

def get_form_details(form):

"""

This function extracts all possible useful information about an HTML `form`

"""

details = {}

# get the form action (target url)

try:

action = form.attrs.get("action").lower()

except:

action = None

# get the form method (POST, GET, etc.)

method = form.attrs.get("method", "get").lower()

# get all the input details such as type and name

inputs = []

for input_tag in form.find_all("input"):

input_type = input_tag.attrs.get("type", "text")

input_name = input_tag.attrs.get("name")

input_value = input_tag.attrs.get("value", "")

inputs.append({"type": input_type, "name": input_name, "value": input_value})

# put everything to the resulting dictionary

details["action"] = action

details["method"] = method

details["inputs"] = inputs

return details

get_all_forms() ဟာ HTML ဖောင်တက်ဂ်အားလုံးကို ထုတ်ယူပေးပြီး တော့ Python list ထဲ ပြန်လာဖို့ အတွက် BeautifulSoup ကို သုံးထားပါတယ် get_form_details() လုပ် ဆောင်ချက်ကတော့ ရလာတဲ့ ဖောင်တက်ဂ် တွေထည်းကနေ အသုံး ၀င်မဲ့ fuction ေတွဖြစ်တဲ့ action တို့ methode တို ကို ခွဲခြား စိပ်ဖြာပေးပါတယ်

အောက်က ကုဒ်ကေတာ့ ၀က်ဆိုက်မှာ sql injection ထိုးလို့ ရနိင်မဲ့ error ေတွ ရှိမရှိ စစ် ပေးတဲ့ အလုပ် လုပ်ပါတယ် ( ဒီကုဒ်က ၀က်ဆိုက် ဆာဗာ တခုလုံး က error တွေကိုတော့ ရှာမပေးနိင်ပါဖူး ကျွန်တော်တို့ စကန်လုပ်မဲ့ sql injection point ပါတဲ့ လင့် တခုထည်းကိုပဲ ရှာပေးပါတယ် )


 def is_vulnerable(response):

"""A simple boolean function that determines whether a page

is SQL Injection vulnerable from its `response`"""

errors = {

# MySQL

"you have an error in your sql syntax;",

"warning: mysql",

# SQL Server

"unclosed quotation mark after the character string",

# Oracle

"quoted string not properly terminated",

}

for error in errors:

# if you find one of these errors, return True

if error in response.content.decode().lower():

return True

# no error detected

return False

အောက်က ကုဒ်က တော့ လင့် ရဲ့ နောက်မှာ sql injection ထိုး ရမရ စစ်တဲ့အခါသုံး တဲ့ ကော်မာ ( '"" ) စတဲ့ စာလုံး လေး တွေ ထည့်စစ် ပေးတဲ့ အလုပ်လုပ် ပေးပါတယ်


 def scan_sql_injection(url):

# test on URL

for c in "\"'":

# add quote/double quote character to the URL

new_url = f"{url}{c}"

print("[!] Trying", new_url)

# make the HTTP request

res = s.get(new_url)

if is_vulnerable(res):

# SQL Injection detected on the URL itself,

# no need to preceed for extracting forms and submitting them

print("[+] SQL Injection vulnerability detected, link:", new_url)

return

# test on HTML forms

forms = get_all_forms(url)

print(f"[+] Detected {len(forms)} forms on {url}.")

for form in forms:

form_details = get_form_details(form)

for c in "\"'":

# the data body we want to submit

data = {}

for input_tag in form_details["inputs"]:

if input_tag["value"] or input_tag["type"] == "hidden":

# any input form that has some value or hidden,

# just use it in the form body

try:

data[input_tag["name"]] = input_tag["value"] + c

except:

pass

elif input_tag["type"] != "submit":

# all others except submit, use some junk data with special character

data[input_tag["name"]] = f"test{c}"

# join the url with the action (form request URL)

url = urljoin(url, form_details["action"])

if form_details["method"] == "post":

res = s.post(url, data=data)

elif form_details["method"] == "get":

res = s.get(url, params=data)

# test whether the resulting page is vulnerable

if is_vulnerable(res):

print("[+] SQL Injection vulnerability detected, link:", url)

print("[+] Form:")

pprint(form_details)

break

နောက်ဆုံးကုဒ်ကတော့ အားလုံးစစ် ဆေးပြီး ကျွန် တော်တို့ စစ်လိုက်တဲ့ ၀က်ဆိုက်လင့်မှာ sql injection ထိုးလို့ ရနိင် မရနိင်ကို ဖော်ပြ ပေးတဲ့ အလုပ် လုပ်ပါတယ်


 
if __name__ == "__main__":

import sys

url = sys.argv[1]

scan_sql_injection(url)


အပေါ်က ကုတ်တွေ အား လုံး စုပြီး sql-injection-scanner.py နာမည်နဲ့ save လိုက်ရင် tool ရပါပြီ

Run တဲ့ အခါ python sql-injection-scanner.py (url)

ဥပမာ


python sql-injection-scanner.py http://testphp.vulnweb.com/artists.php?artist=1

အောက်က အတိုင်း sql injection ေပါက်မ ပေါက်ပြပါလိမ့် မယ်



┌──(kali㉿kali)-[~/Desktop]

└─$ python sql-injection-scanner.py http://testphp.vulnweb.com/artists.php?artist=1

[!] Trying http://testphp.vulnweb.com/artists.php?artist=1"

[+] SQL Injection vulnerability detected, link: http://testphp.vulnweb.com/artists.php?artist=1"



Tool တစ်ခုလုံး ရေးထားပြီးသား ဒေါင်းချင်ဒီလင်ံ့ က ဒေါင်းနိင်ပါတယ်

https://www.dropbox.com/scl/fi/mxj25li6st029xmhihg3c/sql-injection-scanner.py?rlkey=8tik1wxrta5ngvxwtdt9zax2u&st=kpyrrm97&dl=0



Post a Comment

Previous Post Next Post