首页 > 其他分享 >Day_1

Day_1

时间:2024-07-11 15:29:45浏览次数:7  
标签:php DVWA 命令 源码 执行 Day 输入

第一天

7.8

今天我们的主要研究对象是建立靶机DVWA的过程,以及关于Command Injection漏洞的基本原理,使用的是Windows11系统。

0x00 建立DVWA靶机的踩坑过程

1. 注意一开始百度到的材料大部分正确,先下载PHPstudy,顺序安装,(小皮面板最后安装的时自定义安装在D盘),然后下载DVWA的压缩包,这里放一个帖子可以参考,现找也行;

之后就是遇到标红的问题如何解决,大多数情况是只需要根据DVWA靶机创建页面的提示更改php.ini(php文件中)即可,但是如果遇到类似关于 MySQL/MariaDB ,同时表示该用户无法访问此数据库的时候,就不能只依靠最初root数据库与用户名,在config.inc.php文件中改变用户名、用户密码、以及KEY的同时,注意PHP study上创建新的数据库,同时确保数据库名与用户名的相互统一。

2. 确保下载的压缩包中内容齐全,确保每个题目,low,medium,high,impossible等版本的PHP文件的齐全。

3. 遇到输出乱码问题,可以将相应的输出由“utf-8”改为“gbk”。

具体流程在配套的PDF文件中

0x01 Command Injection主要考察内容

主要分为low,medium,high三种难度,基本都很简单:low-level下源码没有任何的过滤情况;medium-level下源码只过滤了“&&”(以及Unix系统下的“;”);high-level源码过滤较多,但仍可以通过“|”进行输入

重点

1. 因为源码中的shell_exec(),是一种通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回的函数,因此外部输入跟命令行没有区别,会使php程序陷入危险的环境中。

2. 关于命令连接符“&&” “||” “|” “&” 的应用

a&&b :代表首先执行前者命令a再执行后命令b,但是前提条件是命令a执行正确才会执行命令b,在a执行失败的情况下不会执行b命令。所以又被称为短路运算符。

前面的指令执行正确,后面的指令才能继续执行

a&b :代表首先执行命令a再执行命令b,如果a执行失败,还是会继续执行命令b。也就是说命令b的执行不会受到命令a的干扰。

简单拼接,前后的指令互不影响

a||b :代表首先执行a命令再执行b命令,如果a命令执行成功,就不会执行b命令,相反,如果a命令执行不成功,就会执行b命令。

只有前面的指令执行失败,后面的指令才可以执行

a|b :代表首先执行a命令,再执行b命令,不管a命令成功与否,都会去执行b命令。

第一条失败仍会执行第二条,a的输出作为b的输入

*可以参考文章

3. 关于impossible情况下的源码安全的原因

源码如下:

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
	// Check Anti-CSRF token
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// Get input
	$target = $_REQUEST[ 'ip' ];
	$target = stripslashes( $target );

	// Split the IP into 4 octects
	$octet = explode( ".", $target );

	// Check IF each octet is an integer
	if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
		// If all 4 octets are int's put the IP back together.
		$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

		// Determine OS and execute the ping command.
		if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
			// Windows
			$cmd = shell_exec( 'ping  ' . $target );
		}
		else {
			// *nix
			$cmd = shell_exec( 'ping  -c 4 ' . $target );
		}

		// Feedback for the end user
		$html .= "<pre>{$cmd}</pre>";
	}
	else {
		// Ops. Let the user name theres a mistake
		$html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
	}
}

// Generate Anti-CSRF token
generateSessionToken();

?>

源码安全性高的原因是采用了几个更为严格的函数规范输入的形式:

stripslashes() :删除反斜杠,便于避免Linux系统通过反斜杠进行转义。

explode() :将输入打散,分成不同的数字。

is_numeric :用来判断分成不同份的数组是否是全为数字。

由此严格的限制输入必须是:数字.数字.数字.数字

重点总结:命令连接符的功能

标签:php,DVWA,命令,源码,执行,Day,输入
From: https://www.cnblogs.com/XXS-uic9/p/18296309

相关文章

  • 代码随想录算法训练营Day11 | 栈与队列基础 232.用栈实现队列 225. 用队列实现栈 20.
    栈与队列栈:先进后出   empty-push-push-pop队列:先进先出Tips: 栈和队列是STL(C++标准库)里面的两个数据结构。STL最旁边的三个版本:HPSTL、P.J.PlaugerSTL、SGISTL232.用栈实现队列题目:232用栈实现队列在python中,in主要负责push,out主要负责pop初始:self.......
  • 苍穹外卖 - day1
    1.项目介绍业务功能技术选型环境搭建前端前端部分非重点,直接由平台提供,部署在nginx服务器上。nginx概念反向代理与负载均衡动态监听80端口,将请求转发到目标服务器,若有多个目标服务器,则采取负载均衡策略进行请求的分发(如轮询)后端接口文档1.YApi通过上传jso......
  • 嵌入式开发学习day08
    完成学生管理系统1>使用菜单完成2>有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入3>查看学生信息:输出所有学生姓名以及对应的分数4>求出学习最好的学生信息:求最大值5>按姓名将所有学生进行升序排序6>按成绩将所有学生进行升序排序要求每个功能使用函......
  • Day32.老师查看课程下学生功能
    1.老师查看课程下学生功能_程序代码及执行流程2.老师查看课程下学生功能_老师视图层中查看课程下的学生check_stu_from_course'''老师视图'''fromlibimportcommonfromlibimportcommon_interfacefrominterfaceimportteacher_interface#todo全局记录用户登陆状......
  • 代码随想录刷题day 8 | 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
    344.反转字符串classSolution{publicvoidreverseString(char[]s){intleft=0,right=s.length-1;while(left<right){chartmp=s[left];s[left]=s[right];s[right]=tmp;left+......
  • Day7(字符串)|344.反转字符串 541.反转字符串II 54.替换数字
    344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例1:输入:s=["h","e","l","l","o"]输出:["o","l","l","e","h&......
  • Day6 (哈希表)| 454.四数相加II 383.赎金信 15.三数之和 18.四数之和
    454.四数相加II给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0示例1:输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,2],nums4=[0,2]......
  • 蓝桥杯单片机学习总结(Day4 独立按键实现LED流水灯)
    标题一:实现独立按键输出标题二:实现按键输出的效果标题三:实验总结      如图所示,S7、S6、S5、S4是独立按键一列,需要注意的是如果你的开发板独立按键和矩阵键盘是一体的如上图需要把引脚盖接到独立键盘那儿。    P30~P33是矩阵键盘和独立按键的引脚在编......
  • day08| 344.反转字符串 541. 反转字符串II 54.替换数字
    代码随想录算法训练营第八天|344.反转字符串541.反转字符串II54.替换数字Leetcode344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/description/题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不......
  • Day5(哈希表) |242.有效的字母异位词 & 349.两个数组的交集 & 202.快乐数&1.两数之和
    242.有效的字母异位词给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。注意:若*s*和*t*中每个字符出现的次数都相同,则称*s*和*t*互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="c......