此文章是为了记录本人对知识理解,如有错误望敬请指出并谅解。
打开场景可以看到在本题中,页面的拦截方式做了改变。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4f93e6e171e14bddb4c8b5522b8c5250.png)
//检查结果是否有flag
if(!preg_match('/[\x00-\x7f]/i', json_encode($ret))){
$ret['msg']='查询成功';
}
\xnn 匹配ASCII代码中十六进制代码为nn的字符
[x00-x7f] 匹配ASCII值从0-127的字符
0-127表示单字节字符:数字,英文字符,半角符号,以及某些控制字符。
也就说,是以上字符的不会在页面显示出来。
那我们换个思路,不让在页面显示,写在某个文件里,然后查看文件内容。
以下解题思路:
- 查看网站所使用的服务器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ad212a2be494eb8987d0b0a3965454d.png)
在响应头的Server字段,我们可以知道,网站使用的服务器是nginx,操作系统为linux。
在linux中,/var/www/html为网站文件默认存放位置,于是,我们尝试在该路径下写入文件。
pyload:
1’ union select 1, password from ctfshow_user5 where username = ‘flag’ into outfile ‘/var/www/html/1.txt’ --+
执行后结果:
结果报错,不用理会直接查看文是否生成。
可以看到文件以作成,并且查询结果已写入文件。
到此,得到flag。