CTF自学笔记(二)SQL注入攻击「二」


CTF自学笔记(二)SQL注入攻击「二」

私信回复001 获取更多干货哦

Bool盲注


Bool盲注通常是由于开发者将报错信息屏蔽而导致的,但页面中真和假有着不同的回显。

常用的发现Bool盲注的方法是在输入点后面添加“and 1=1”和“and 1=2”(整型注入情况下)该原理是若题目后拼接的是SQL语句,and 1=1为真不会影响页面结果,但and 1=2为假,页面可能没有正常回显。

Bool盲注可能会遇到将1=1过滤的SQL注入点,这时可以修改为不常见的数值(如1474=1474)。在字符串型注入时,需绕过单引号,将Payload修改为'and'1'='1和'or'1'='2来闭合单引号。


Bool盲注常用函数


(1)截取函数


CTF自学笔记(二)SQL注入攻击「二」

(2)转换函数

CTF自学笔记(二)SQL注入攻击「二」

(3)比较函数

CTF自学笔记(二)SQL注入攻击「二」

注:在盲注题及真实渗透测试中,使用sqlmap可能会存在误报。

时间盲注


时间盲注出现的本质原因是由于服务器端拼接了SQL语句,虽然正确和错误存在同样回显,错误信息被过滤,但是可以通过页面响应时间进行按位判断数据。

一般来说,延迟时间可根据客户端与服务器端之间的响应时间来进行选择,选择一个合适时间即可。


常用函数

CTF自学笔记(二)SQL注入攻击「二」

二次注入


二次注入原理是用户数据进入数据库时进行转义及过滤,当这条数据从数据库中取出,在SQL语句中进行拼接,且这次拼接没有进行过滤,我们就可执行构造好的SQL语句。

示例:以sqli-labs靶场的第24关为例,具体靶场搭建教程见-Python黑客攻防(六)sqli-labs环境搭建

(1)进入第24关,点击右下角,注册新用户。


CTF自学笔记(二)SQL注入攻击「二」


(2)注册的用户名为admin'#,为了方便密码就设置为1,然后点击Register完成注册。


CTF自学笔记(二)SQL注入攻击「二」

CTF自学笔记(二)SQL注入攻击「二」


(3)然后我们进入数据库后台,查看数据库用户信息。可以看到,刚才注册的用户名密码已经成功进入数据库。


CTF自学笔记(二)SQL注入攻击「二」

CTF自学笔记(二)SQL注入攻击「二」


(4)回到最开始的登录页面,登录我们刚才注册的admin'#用户,进行修改密码。把密码修改为root,点击。


CTF自学笔记(二)SQL注入攻击「二」


(5)修改完后,回到数据库后台查看结果,可以看到我们注册的admin'#用户的密码并没有改变,改变的是admin用户。


CTF自学笔记(二)SQL注入攻击「二」

limit之后的注入


在MySQL版本号大于5.0.0且小于5.6.6的时候,在如下位置中可进行注入:

CTF自学笔记(二)SQL注入攻击「二」

也可使用如下Payload进行注入:

CTF自学笔记(二)SQL注入攻击「二」

注入点的位置及发现


1.常见注入点的位置


(1)GET中的注入

(GET - 从指定的资源请求数据)

该注入点一般是最容易发现的,可在地址栏获得参数和URL等信息,可用sqlmap或手工验证是否存在注入。

(2)POST中的注入

(POST - 向指定的资源提交要被处理的数据)

一般通过抓包来发现,同样也可以使用sqlmap或手工验证。

(3)User-Agent中的注入


User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

使用Burp的Repeater模块或sqlmap。使用sqlmap时将参数设置为level=3,即可自动检测User-Agent中是否存在注入。

(4)Cookies中的注入


cookies中文名称为小型文本文件,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

同样可使用Burp的Repeater模块或sqlmap。使用sqlmap时将参数设置为level=2,即可自动检测Cookies中是否存在注入。


2.判断注入点是否存在


假设源程序执行的SQL语句如下:

CTF自学笔记(二)SQL注入攻击「二」

可通过以下三种方式进行判断

(1)插入单引号


该方法是最常用的检测方法,原理是未闭合的单引号会引起SQL语句单引号未闭合的错误。

(2)数字型判断

通过and 1=1 (数字型)和闭合单引号测试语句'and'1'='1(字符串型)进行判断。

(3)通过数字的加减进行判断

如我们在链接http://***.com/?id=2,就可进行如下尝试即http://***.com/?id=3-1,若结果与原链接结果相同,则说明id这个输入点可能存在SQL注入漏洞。


分享到:


相關文章: