欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[网鼎杯 2018]Fakebook

程序员文章站 2022-03-10 09:16:36
...

[网鼎杯 2018]Fakebook

1.打开网站,就两个功能点
[网鼎杯 2018]Fakebook
2.先打开join看一***册页面,随便输入,注册一下:
[网鼎杯 2018]Fakebook
3.发现登陆进来了:(这里有个坑,注册完了之后就不能回退,去测试之前的login页面了,不过可以直接输入login.php回去测试)
[网鼎杯 2018]Fakebook
4.发现dawn是个url,点击看一下:(这里我也傻了,我一开始傻里傻气的在username插了个xss,结果没看到这个超链接,在源代码里面发现了之后打开一直转圈圈)
[网鼎杯 2018]Fakebook
5.看到url,这里是有注入的,跑一下。(这里过滤了union select,我们用union all select 就可以绕过)。[网鼎杯 2018]Fakebook
6.刚开始跑一脸懵逼,这不就是我们的注册信息吗?跑到data列的时候发现了序列化后的值:
[网鼎杯 2018]Fakebook
7.那就要考序列化了。一般不会让我们自己猜,肯定会给源码让我们构造的。线程开1跑dirsearch也会出现429,用自己整理过的御剑跑线程1,发现没跑出来= =。怀疑人生的时候看了wp,好吧,字典拉胯了。
[网鼎杯 2018]Fakebook
8.代码审计环节:

(1)一开始先对几个参数进行初始化:
[网鼎杯 2018]Fakebook
(2)重点是这里,查了些资料:
[网鼎杯 2018]Fakebook
【*】curl_init : 初始化一个cURL会话,供curl_setopt(), curl_exec()和curl_close() 函数使用。

【*】curl_setopt : 请求一个url。
其中CURLOPT_URL表示需要获取的URL地址,后面就是跟上了它的值。

【*】CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

【*】curl_exec,成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。

【*】CURLINFO_HTTP_CODE :最后一个收到的HTTP代码。
curl_getinfo:以字符串形式返回它的值,因为设置了CURLINFO_HTTP_CODE,所以是返回的状态码。

如果状态码不是404,就返回exec的结果。

(3)再来看看get函数在哪里调用:
[网鼎杯 2018]Fakebook
这里就清楚了,传的参数是blog。

9.差不多知道咋回事了,就是反序列化+ssrf。

我们注册后,把我们的信息序列化一下,然后存进data。在user界面,取出blog,获取资源。

两种思路吧?要不注册界面去设置blog,要不用注入设置blog,那肯定是注入简单些。
因为列名里面没有blog,所以我们要设置的点就是data那里了。

10.然后懵逼的时候又到了,我要去请求数据了,但是我请求个啥?flag在哪儿= =我去把所有的php文件都尝试了一遍,没发现啥有用的东西:

(路径是之前注入的时候报错爆出来的,序列化值也不用自己生成,之前注入出来了,改长度和值就行)

payload:

?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:27:"file:///var/www/html/db.php";}'

11.无奈还是看了WP,说是扫出来发现有个flag.php。再说一遍,我的字典好拉胯。
payload:

/view.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";}'

查看源代码发现:
[网鼎杯 2018]Fakebook
解码:

[网鼎杯 2018]Fakebook