SQL注入方法(sql注入攻击实例)

SQL注入方法 文章目录 前言如何测试与利用注入点手工注入思路工具sqlmap-r-u-m–level–risk-v-p–threads-batch-smart–os-shell–mobiletamper插件获取数据的相关参数 前

文章目录

简介测试并使用注入点手动注入idea工具sqlmap-r-u-m–level–risk-v-p–threads-batch-smart–os-shell–mobiletamper插件并获取相关参数如何数据

前言

记录一些注入思路和经常使用的工具,以后不断添加新的工具或者编译新的方法。

如何测试与利用注入点

手工

以下症状是指注射点存在后发生的情况。如果服务器有保护措施,就必须有其他手段来绕过它们。

旧方法:

撇号

问题现象:数据库出现错误。

或1=1

问题现象:页面访问正常,或者多条数据混合显示。

且1=1

现象:可以正常访问页面。

且1=2

症状:根据您编写服务器代码的方式,内容可能无法显示,或者您可能会收到错误消息。

订购n

现象:确定表的字段个数,直到不报错为止。也就是说order by后面的n就是字段的个数。

联盟

前提:由于我们知道表中的字段数量,因此我们可以先按照上面的顺序测试字段数量。

有效负载:Union select user(),database()

症状:如果你有一个注入点,这就是使用联合的地方,通常你可以看到多条数据,因为大量数据正在被合并。如果有注入点,联合注入的功能就会减弱。它变得非常强大。

MySQL5.0及以上版本有information_schema数据库信息

获取所有数据库名称。

Union select 1,group_concat(schema_name) from information_schema.schemata

获取当前数据库中所有表名。

\’union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

获取表的所有列名。

\’union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273

其中table_name=0x7573657273是一个十六进制数。无需转换为table_name=“users” 即可完成此操作。

获取表的所有字段数据。

\’ Union select 1,group_concat(user_id,0x7c,first_name,0x7c,last_name,0x7c,user,0x7c,password,0x7c,avatar,0x7c) 来自用户

0x7c代表|符号,实际使用|来组合并显示所有字段数据。

注入思路

第1 步:找到注入点并查找错误

单引号、双引号、单引号+括号、双引号+括号、单引号+双括号、双引号+双括号、数字类型(无需关闭)、JSON等注入类型(post数据)、http header注射.

第2步:

如果在第一步中发现错误信息,可以创建SQL注入语句。

order by、union select等方法在后端代码中推断该SQL语句查询的属性列数。

如果被阻止:对数据进行编码并使用大小写混合、双写、字符串连接等。查询完列数后,选择1,2,3.直到查询到不存在的数据,然后用并集进行join。选择查询和回显显示位

如果返回信息

将显示位改为你想要获取的信息,如database()、version(),或者使用mysql5.0以上版本使用images_schema快速拖拽数据库。

如果没有回复信息

尝试布尔盲注入、基于时间的时间注入等。您也可以在这里尝试错误注入。

如果您在第一步中没有看到回显消息。

尝试错误注入。 Dnslog Injection 拖动库布尔盲注、基于时间的时间类型注入等等。查找http 标头数据包中的注入点。第三步:

创建可以通过前后端检查的SQL注入语句,使用工具拖库,使用数据库附带的可执行系统命令进一步渗透。

工具

以下是注入该工具的一些方法。

穿山甲(穿山甲)

vstart50有

Havidji(萝卜头)

vstart50有

这个是国外的,比较经典实用,就是注册麻烦一点。您可以从错误信息中找到缺少的组件,并直接在线查找解决方案。

能够对后端数据库进行指纹识别、获取DBMS 用户和密码的哈希值、转储表和列以及从数据库中检索

您还可以检索数据、执行SQL 语句、访问底层文件系统以及发出操作系统级命令。

sqlmap

下载地址:https://github.com/sqlmapproject/sqlmap

摘要:这是一个开源的入侵工具。它是使用python2.7开发的,所以如果要使用就必须使用python2。或者直接访问并使用kali系统。 Kali 附带了sqlmap 工具。而且参数可以直接添加,完全没有顺序,非常方便。

命令执行后可能会出现提示。首先,让我们使用简单的-u 测试URL。

1:当sqlmap测试运行时,系统会询问您是否要继续测试其他数据库的有效负载插入语句。如果您不担心,请在此处输入“n”。

2:如果未设置级别和风险,则会询问您是否默认为级别1。

3:找到插入的参数后,会询问是否继续搜索其他插入的参数。这取决于您的需求。

结果:

开始使用参数用法和示例

-r

总结:通用参数主要用于后注入,但也接受其他请求方法。该参数是最常用的。该参数用于发送数据包文件中的数据来测试您的SQL 注入点。因此,要测试网站中的URL 是否存在SQL 注入点,请捕获数据包,保存它,然后使用-r 参数测试URL。

运行命令:python2 sqlmap.py -r 数据包文件

-u

简介:仅对于get 请求,参数URL 最好用双引号引起来。避免使用无法转义或写为参数的符号。

运行命令: python2 sqlmap.py -u \’http://192.168.121.151/pikachu/vul/sqli/sqli_search.php?name=vincesubmit=%E6%90%9C%E7%B4%A2\’

-m

简介:上面的-u只能测试一个URL,所以唯一能可靠测试多个URL的参数是-m。请注意,-m 参数指定文件中的多个URL。然后用-m指定文件

运行命令:sqlmap-masterpython2 sqlmap.py –level 3 –risk 3 -m ./m.txt

注意:如果您使用的URL 都位于同一IP 地址上,则在测试过程中,系统会询问您是否要跳过测试同一IP 地址上的其他URL。此时,您必须选择“否”才能继续测试。如果文件中的下一个URL 不是同一IP,则只会要求您确认该URL。测试同一IP 上的两个URL,如下图所示。下一轮,您要测试的URL 将不会被跳过,因此选择“否”。

level

简介:测试执行级别(1-5,默认1)。使用level 参数和值**=2 还会检查cookie 中的参数。如果=3,则还检查用户代理。检查引荐来源网址。

执行命令。 在上面的可执行语句中添加[-level],如下:

python2 sqlmap.py –level 3 -u \’http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vincesubmit=%E6%9F%A5%E8%AF%A2\’

注意:例如,如果您输入级别3,则在系统询问时您将处于级别3,但风险将保持默认值1,如下所示。

risk

摘要:测试执行风险(0-3,默认1)。默认值是1 用于测试大多数测试语句,2 用于添加基于事件的测试语句,3 用于为OR 语句添加SQL 注入测试。

运行命令: python2 sqlmap.py –level 3 –risk 3 -u \’http://192.168.121.151/pikachu/vul/sqli/sqli_blind_b.php?name=vincesubmit=%E6%9F%A5%E8%AF% A2\’

另请注意:例如,如果您编写risk3,则询问时将是风险3,但级别将保持默认的1。当多个级别和风险定义一个参数级别时,很容易发现。在这种情况下,将不会使用默认级别。

3 级风险3 通常就足够了。

-v

显示详细信息是什么意思,ERBOSE信息级别: 0-6(默认1),以及该值的具体含义:

“0”仅显示Python 错误和关键信息。 “1”显示基本信息和警告信息。 “3”同时显示插入的有效负载。 \” 同时显示HTTP 请求。 \”5\” 同时显示HTTP 响应头。 \”6\” 同时显示HTTP 响应页面。

如果您想查看sqlmap 发送的测试负载,最佳级别为3。设置为5 可显示更详细的http 支持信息。

运行命令: python2 sqlmap.py –level 3 –risk 3 -u \’http://192.168.121.151/pikachu/vul/sqli/sqli_blind_t.php?name=vincesubmit=%E6%9F%A5%E8%AF% A2\’ – v3

学习之后,我发现参数实际上随着时间的推移而提高。基本的说法就是上面的例子。

-p

-p 指定要注入的参数。例如,id是一个注入点。该测试可以显着减少测试时间。无论是post数据包还是检索URL,都可以直接使用-p指定注入参数。

threads

摘要:表示发送请求的并发线程数。线程数越少,SQL注入就越准确。

注意:默认线程数位于sqlmap文件夹\\lib\\core\\setting.py中。更改MAX_NUMBER_OF_THREADS=10。这意味着使用-threads 指定的最大线程数为10。如果要指定更大的数字,请修改, 配置文件。 (一般情况下不需要设置太大,否则对方服务器将无法承受大量请求,甚至可能会导致IP被封。)

-batch-smart

智能决策测试,找到注入点来测试自己(这个命令很少用)

此智能命令扫描所有数据库并将每个步骤的所有信息和数据保存在以下目录中:

注意,这个参数衡量的信息有很多,比如数据库、表格等。

os-shell

就我个人而言,我不建议使用它。 (别说是大新闻,等待时间还蛮长的)

先决条件

网站需要root权限

攻击者需要知道网站的绝对路径

GPC 被关闭,PHP 的主动转义功能也被关闭。

这个功能需要时间。

原则:

只需使用into outfile 函数创建一个php 文件,您可以使用该文件上传到网站的根目录。

然后,您可以使用tmpukjhb.php 上传tmpbezal.php 文件,并使用此tmpbezal.php 文件运行系统命令并返回结果。

mobile

只要加上–mobile就可以自动选择你的手机型号,不用自己输入(有限制,但不限于;市面上很少,手机有很多(因为网站可以判断访问的手机)来自手机)。

tamper插件

指示:

sqlmap.py -u url –tamper \’base64encode.py\’;

获取数据的相关参数

以下参数可以直接添加,无需添加任何数据。

示例:http://192.168.121.151/sql.php?id=1 –dbs

dbs # 获取所有数据库current-user # 显示当前用户current-db # 当前连接的数据库名称is-dba # 判断当前用户是否为管理员 users # 列出数据库中的所有用户

目前我了解的就这么多,以后想进一步学习补充。

以上关于#SQL注入方式的相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93273.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月6日 上午2:20
下一篇 2024年7月6日 上午2:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注