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

ctfshow萌新赛web

程序员文章站 2022-03-04 19:37:52
...

文章目录

萌新赛web_给她

首先由题目给她可以联想出git源码泄露。

得到的源码如下:

<?php
$pass=sprintf("and pass='%s'",addslashes($_GET['pass']));
$sql=sprintf("select * from user where name='%s' $pass",addslashes($_GET['name']));
?>

这里有个sprintf()函数没有看到过,搜了搜它的作用和漏洞,看到一个和本题很像的例子:
ctfshow萌新赛web
直接用这里的payload也可以,但是要构造万能密码,把and换为or就行%1$' and 1=1#

然后sprintf()注入原理为:
ctfshow萌新赛web

这里利用的原理是%1$\为空,所以我们构造%1$'单引号前的转义符会被置空。从而实现单引号逃逸

于是构造SQL语句为

?name=admin&pass=%1$' or 1=1--+

转到了一个404页面:
ctfshow萌新赛web
源码可以发现一个ctfshow萌新赛web

那么肯定要读取/flag这个文件,抓包发现有file,16进制转换为字符串为flag.txt

flag.txt:
ctfshow萌新赛web
wjbh.php:
ctfshow萌新赛web
访问flag.txt对比一下,发现有相同的部分,推测这里应该有个文件读取或文件包含:

直接构造/flag不行,用php://filter/convert.base64-encode/source=/flag提示base64不行。那么可以用rot13试试:

payload:
php://filter/read=string.toupper|string.rot13/resource=flag
ctfshow萌新赛web

最后还要全部换为小写

相关标签: 比赛题目总结