1.Bugku
decrypt
<?php
function encrypt($data,$key)
{
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];//.= 在php中是字符串连接的意思
$x+=1;
}
for ($i=0; $i < $len; $i++) {
$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
}
return base64_encode($str);
}
?>
写个py脚本解密flag即可。
#python3
from base64 import *
from hashlib import *
str_b64encode='fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA='
str=str(b64decode(str_b64encode),'utf-8')#len(str)=38,即len=38
key=md5('ISCC'.encode('utf-8')).hexdigest()
char=''
x=0
flag=''
for i in range(0,38):
if x==len(key):
x=0
char+=key[x]
x+=1
for i in range(0,38):
if ord(str[i])<ord(char[i]):
flag=flag+chr((ord(str[i])+128)-ord(char[i]))
continue
flag = flag + chr(ord(str[i]) - ord(char[i]))
print(flag)
每次看自己写的py脚本总觉得很丑陋,远不如大佬们写得美观、高效。
sql注入
方法提示的很明确,基于布尔的SQL盲注。
先尝试一下常用的用户名和口令,得到一个正确的用户名为admin。
先尝试了一下,传入"a'or(length(database())<8)"时提示用户名不存在,传入"a'or(length(database())<9)"时提示密码错误,说明当前数据库名长度为8。
这里要注意,本题过滤了information/where/is/=/like等关键词,所以没办法(至少我想不到办法)去爆表名,列名。看了wp好像是猜出来的?
使用py脚本,继续使用bool盲注的方式,爆出password,然后解密,登录,即可。