2021-11-24 学习日记

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。


1-1

先尝试了一下,传入"a'or(length(database())<8)"时提示用户名不存在,传入"a'or(length(database())<9)"时提示密码错误,说明当前数据库名长度为8。
这里要注意,本题过滤了information/where/is/=/like等关键词,所以没办法(至少我想不到办法)去爆表名,列名。看了wp好像是猜出来的?
使用py脚本,继续使用bool盲注的方式,爆出password,然后解密,登录,即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容