自己在做bugku时,同时去做了攻防世界,其中分的也很详细。于是想将自己的writeup记录下来。
右键不能使用,那么直接在url中输入view-source:,就能查看源码。
就是get传参和post传参。
get传参:
post传参:
既然时robots协议,直接查看robots.txt:
然后发现有个php文件:
直接进入:
就是备份文件,一般备份文件就是.bak的文件,直接输入:
将备份文件下载下来,查看源码就可以的到flag。
进入后,F12打开开发者工具,找到储存,找到cookie,发现有一个cookie.php文件:
然后进入cookie.php,发现他让你查看response。
burp suite抓包,查看response。
就得到了flag。
按钮不能按,一般就是HTML中
看题目就知道是考察js的。
进去后先随便输个密码,到网页后查看源码。得到一段js代码。
观察发现,pass其实没什么用,是假密码。真正的密码在:javascript String[“fromCharCode”];
用python处理:
每个数字都是ASCII码,转换一下就是:786OsErtk12
falg就是格式加上那个字符串。
进入就提示:ip地址必须为123.123.123.123
那肯定是改X-Forwarded-For:。用burp suite抓包。
又提示:必须来自https://www.google.com
那就是改referer:.
再抓包。注意,要同时添加xxf和referer。
进入后是个登陆界面,我输入admin 123后,提醒我密码错误,输入abc 123后提醒我用admin登陆。那么就不需要猜用户名了。登陆失败后,查看源代码,发现:
那肯定就是爆破了。用burp suite抓包,进行密码爆破。
最后密码是:123456
直接连接菜刀,发现目录下有一个flag.txt,打开就是flag。
进去后发现是个ping命令的输入框。
首先要了解,command1 && command2 先执行command1后执行command2;command1 | command2 执行command2,不执行command1;command1 & command2 先执行command2,再执行command1。
于是构造:127.0.0.1 | ls …/…/…/…/home 返回:
发现flag.txt。于是再构造:127.0.0.1 | cat …/…/…/…/home/flag.txt 得到flag:
简单的代码审计。
首先是a参数,a与零相等,但不能是零,可以构造:a=0a。
然后是b参数,b不为数字,且b大于1234,可以构造:b=12345b。
传参就可以得到flag。
我刚开始以为是注入题,最后没想到是个坑爹题。
直接对id进行爆破,最后当id=2333时,就可以得到flag。
。。。。。
这道题就是sql注入的题。
输入1 ’ 报错,输入1 ’ #不报错。
第一步:
输入:1 ’ order by 4#报错,输入1 ’ order by 3#不报错。
说明有三列,进行联合注入。
第二步:
输入1 ’ union select 1,2,database()#
得到数据库:news
第三步:
输入:1 ’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘news’#
得到两张表:news,secret_table
flag肯定再secret_table中。
第四步:
输入:1 ’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘secret_table’#
得到字段:id,fl4g
第五步:
输入:1 ’ union select 1,2,fl4g from secret_table#
得到flag。
进入about,发现有git,可能时git泄露。
用GitHack进行下载源码。进行代码审计。
//index.php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// I heard '..' is dangerous!
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
....................html code
require_once $file;
?>
发现有一个assert函数。assert()函数在验证断言之前将其参数解释为PHP代码。
于是我们可以构造:’) or system(‘cat ./templates/flag.php’);//
得到flag。
有一个附件。下载下来是一个压缩包。解压,得到web100文件。
打开后,发现是个脚本,但是是乱码:
观察到,_应该是个函数,并且在最后eval了。
改后缀为html。并且将eval改为alert,就能得到解码后的代码。
function $(){
var e=document.getElementById("c").value;
if(e.length==16)
if(e.match(/^be0f23/)!=null)
if(e.match(/233ac/)!=null)
if(e.match(/e98aa$/)!=null)
if(e.match(/c7be9/)!=null){
var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
document.write(s[o%4][0]);
s[o%4].splice(0,1)
}
}
}
document.write('');
delete _
再将alert改为eval,就得到了个输入框。
分析源码,用正则来构造输入:be0f233ac7be98aa。
输入就得到了flag。
进去,没什么可以利用的。找robots.txt也没有。
只能用御剑扫,但是扫了半天,也没个结果。最后去百度了。。。。™的告诉我是phps。。。。
进入后查看源码是一个php代码片段。
观察代码,发现有urldecode()函数,肯定得url编码。这里需要url编码两次,一次是url递交时自动解析的,还有一次就是代码中解析的。
于是可以构造:111.198.29.45:34974/index.phps?id=%2561%2564%256D%2569%256E
从题目就可以看出来,是个反序列化的题。
这道题主要考查了反序列化中的__wakeup函数的漏洞:
一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数,可以用来绕过。
在本地搭建环境,来测试:
然后得到序列化:
将1改为2,传入到code中就可以得到flag。
持续更新中。。。。