程序逻辑问题
首先查看源代码,发现底部有链接index.txt,打开发现是php
第一个标注,是一个注入点,我们可以绕过查询直接给一个pw值,只要和输入的pass一样即可绕过验证过程,我们可以使用union select 构造语句,构造一个密码
构造语句:user’ union select ‘202cb962ac59075b964b07152d234b70’#
密码:123
NSCTF web200
打开是一段自定义加密函数
strrev(string):反转字符串
substr(string,start,length):返回字符串的一部分,从start开始返回length长度的字符串
ord(string):返回字符串首个字符的ACSII值
chr(acsii):从指定的ASCII值返回字符,ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,而十六进制值被定义为带前置 0x。
给了你密文,就只要把代码倒过来就可以了
推荐一个网站可以在线编译PHP代码:http://sandbox.onlinephpfunctions.com/
<?php
//Enter your code here, enjoy!
$_ = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$_ = str_rot13($_);
$_ = strrev($_);
$_ = base64_decode($_);
$_o = "";
for($_0 = strlen($_) - 1;$_0 >= 0; $_0 --){
$tmp = $_[$_0];
$tmp = ord($tmp);
$tmp --;
$tmp = chr($tmp);
$_o.=$tmp;
}
echo $_o;
上传绕过
随便上传一个图片文件
在传一个php文件
用0x00截断
在/uploads/后面加1.php+,然后在Hex处找到加号对应的16进制,2b改为00
Go一下,得到flag