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()函数没有看到过,搜了搜它的作用和漏洞,看到一个和本题很像的例子:
直接用这里的payload也可以,但是要构造万能密码,把and换为or就行%1$' and 1=1#
然后sprintf()注入原理为:
这里利用的原理是%1$\
为空,所以我们构造%1$'
单引号前的转义符会被置空。从而实现单引号逃逸
于是构造SQL语句为
?name=admin&pass=%1$' or 1=1--+
转到了一个404页面:
源码可以发现一个
那么肯定要读取/flag这个文件,抓包发现有file,16进制转换为字符串为flag.txt
flag.txt:
wjbh.php:
访问flag.txt对比一下,发现有相同的部分,推测这里应该有个文件读取或文件包含:
直接构造/flag不行,用php://filter/convert.base64-encode/source=/flag提示base64不行。那么可以用rot13试试:
payload:php://filter/read=string.toupper|string.rot13/resource=flag
最后还要全部换为小写
上一篇: 使用Node.js+Chrome+Puppeteer实现网站的爬取
下一篇: 有趣的Linux命令