所有由superfish发布的文章

不惧

写在今年最后

今年做了一些事情,但不能改变今年是个烂尾年的事实。

看看to do list,看看to read list,看看to find bug list,是有点儿烦的。

之前说的有考验12345,现在看看考验的结果,也不得不说比较欠缺。

随便写写,希望18年是个稳如铁马的一年。

 

情绪

最近情绪不太稳定,比较容易暴走、崩溃、失落以及莫名兴奋。。。

脑子比较乱,涌现出来的很多种感觉都是第一次,比如这种感觉、那种感觉、等等吧。。。

真的很神奇,没想到自己也会有这些感觉。。。神奇!太神奇了。。。

11月2日补充:坐在这突然想明白了,这感觉我从小就有,哈哈,本质上和之前没啥不一样的,我还是我,可以。

钓鱼搞我?玩儿大了吧。。

昨天晚上在游戏里卖东西,有个人M我,截图没有了大概意思是让我便宜点儿,我问她能不能瞬秒,她说钱不够能不能给我充500点卡,我觉得可以,就加了她微信,给了她邮箱(我开始以为要给游戏账号的邮箱)。

过了一会儿说充好了,让我去邮箱里查,我一看:

点“激活订单”:

点“下一步”:

真的,在这种场景下很容易上当的。。。我当时已经把账号密码都输进去了,就差点“登录”了,突然反应过来,看了一眼域名:

阿里的域名服务,感觉不太对啊,再审查元素看一下,然后就!!(╯’ – ‘)╯︵ ┻━┻

当时我微信跟她说她玩儿大了,然后就把她删了。

(以下内容纯属虚构,你懂的。。)

躺床上沉思了5秒钟以后,我开始审视这几个钓鱼页面的请求,发现了一处宽字节注入:

看了一下mysql用户,发现是root,小开心,用sqlmap跑,找到当前的数据库czkzx:

这里有个sqlmap的使用技巧:这个注入能用union并且有回显,所以用–technique U指定下注入的技术,但是sqlmap默认只用order by判断1-10列,这里是13列(手动判断出来的),所以我用–union-cols 12-15指定下判断的列数(指定1-15发现sqlmap居然判断不出来)。

利用报错拿到网站绝对路径:

尝试用select into outfile写webshell,发现失败,原因是网站开了gpc。

看一下拖出来的数据,发现里面用户的密码都是以加盐hash的方式进行存储的:

找了几个破解了一下,都没成功,并且最关键的是我根本找不到后台在哪,于是我打算试下XSS。

在输入账号密码的地方插入XSS Payload,然后去数据库里查看一下:

发现数据在入库前做了HTML实体编码(后来我用sqlmap的–sql-shell去查看的时候发现是没有编码的形式,这是因为sqlmap在显示查询结果的时候做了一下解码,如下图)。

由于没有列目录漏洞,于是我就去读了几个我知道的文件源码,发现确实做了编码处理:

由于用mysql_connect方式连接的mysql不支持堆叠查询,所以也没办法用update修改数据库里的数据,XSS的思路好像也不太行。

接着想到一般这种钓鱼站都会有给fisher发推送邮件的功能,果然在数据库中找到了邮箱和密码:

但是试了一下,密码不对。。。

由于在源码中发现了数据库的root密码,于是我又回到了利用mysql写webshell的思路上,唯一的障碍就是gpc,如果能直接通过3306连接那就没有这个问题了。

尝试ping一下目标域名,发现是阿里的cdn:

试了一些方法,没有找到真实IP(其实也真不一定有公网IP)。

没什么好思路了,于是接着看源码,发现网站根目录下的index.php内容如下:

看到一个新的域名,比较好奇就ping了一下,发现居然不解析,应该是很早就到期了,现在没人注册。

然后我看到了下面的file_get_contents,突然看到了一些希望:

我可以注册这个域名,然后让钓鱼服务器访问我的网站,这样不就能获取到他的公网IP了吗!(前提是它有公网IP而不是内网映射出去的。)

一般mysql默认安装很多是0.0.0.0,但是这不意味着允许root用户远程登录,于是我先通过注入看了下:

看到%了!

抱着一丝希望,我花了45元注册了这个域名,然后把www子域解析到了我的服务器上,然后访问这个index.php,果然!我的服务器上出现了一个IP,百度了一下发现是香港的IP,不是阿里云(当时用Python启的服务,没截图,看下和小伙伴的聊天记录吧):

怀着激动的心情,我用nmap扫了下3306端口,发现端口是开放的:

连接mysql:

可以,很舒服!尝试写个phpinfo:

之后用webshell看了下权限,很低,目标mysql是5.0的,直接上t00ls的udf提权脚本:

成功拿到system权限:

查看下端口信息,发现3264端口是远程桌面的端口:

创建用户,登录:

Game Over.

 

从C段找网站真实IP的小技巧

1.探测C段IP时,Host头要设置成目标域名,不要用IP地址,这是因为如果目标用Nginx做反向代理,会通过Host头来选择转发目标,Host头不正确则不能得到正确的探测结果;

2.部分首页不好判断的网站可加路径进行检测,比如带上cookie访问某登录后页面。

 

思考一些问题

最近在驾校的班车上翻了翻p牛小密圈里的东西,明明看的都是技术文章,但是我想到了一些其他的东西。

现在我总是感觉自己的总结能力比以前下降了好多。

从我开始学技术起,就尝试找到那种知识沉淀的感觉。但找了挺长时间了,还是没太找到。刚开始用Evernote的时候,觉得快找到这种感觉了,互联网各种需要的、不需要的东西都被我收到里面,这确实让我学到了很多东西,但细想一下,这是我的沉淀吗?这明明就是用笔把书上的知识点划下来了而已,以前学习的时候我是很不屑这种行为的,认为这是一种很低级、很没成效且上限极其有限的学习方式。

那我以前是如何学习的呢?以数学为例吧,我从小学五年级开始记数学笔记,一直到大一结束,一共记满了十多个笔记本。根据我之前的观察,身边同学记数学笔记的不算少,但大都以记典型例题、考试错题为主,而我的数学笔记本上几乎没有例题,有的是各种公理、定理以及最重要的——各种由我自己总结的规律和套路甚至定理!现在来看,当时自己真的是手握大量的0day的状态,这才叫沉淀。

我是怎么从p牛的小密圈想到这些的呢?

看看p牛在圈子里发的技术文章:

《unset变量导致的安全问题》

《ThinkPHP框架漏洞挖掘(上)》

《谈一谈ORM的安全》

《Django渗透测试与代码安全漫谈(一)》

内容涉及PHP自身特性导致的安全问题、开发人员典型写法不当导致的安全问题、Web开发框架自身安全问题、Web开发框架不当使用造成的安全问题等等。如此多的总结类文章,里面每一个知识点看上去都需要一大堆的案例去提炼,p牛真的有这么多时间和精力去完成这么多的“一大堆案例”->“知识点”的过程吗?

我想到了我以前记数学笔记的过程,大多时候我的状态是这样的:做出来一道之前没见过的题目,可能马上意识到这样的题目可能是一个类型,然后我就可以从自己解题的过程或结果中总结出解题套路或者规律。举个例子吧,初中平面几何里有一种题目使用的解法叫做“截长补短法”。我第一次遇见这种题目时,自己想到了这种方法,把题目做出来了,然后马上意识到这可能是一个类型的题目,并且把自己用的方法进行了总结,最后给这种方法起名叫做“以一推一法”,这个名字意会一下应该能明白什么意思吧,是不是比“截长补短”维度还要高些?

只做一道题目,就能有这样的沉淀,做题目追求“质”而非追求“量”。

我没有问过p牛,臆测一下,p牛如今的大多沉淀应该也来自于这种对”质“的追求。脑补一个场景:p牛审一套cms,发现一个安全问题,马上意识到这可能是个通用的问题,于是自己小结一下,针对这个点去审计其他的cms,发现果然如此,然后形成沉淀(后面针对性的审计过程甚至可以省略)。再脑补一个场景:我审一套cms,也发现了这个安全问题,然后…就没有了。

是什么造成了这种差异?

p牛审过的代码、写过的代码比我不知道多到哪里去了!

想想自己凭什么能做题追求“质”,不正是建立在自己的数学功底很扎实的基础上吗?这个前提就是一棵树的树干,沉淀相当于枝叶。p牛的树干上枝繁叶茂,而我在没有树干的条件下只是看了看其他树上的枝叶就想模仿,也想长出大量枝叶,这可能就是我感觉自己总结能力不如之前的原因吧——根本不是总结能力变弱了,而是内力不足

在车上的时候想到了这些,就想写下来。学而不思则罔,思而不学则殆,自勉。

随便写一点儿

请假两周,本来说主要学车的,估计现在这种情况不好约车了。。。

对,还有个目的是做毕设,思路年前就想的差不多了,最近又有些新的想法,前端可以做的事情真的有很多很多。

这几天除了在网上耗学车课时,自己也学了一些东西,比如xposed模块编写的一些细节以及不同场景下的hook方法,这应该算是年前拖欠的东西了,另外一些拖欠的东西也打算这几天补回来。

哎?这样还有时间做毕设不。。

怎么才能一天只睡俩小时

 

解决Python主线程和子线程共享变量的问题

我们知道threading提供了优雅的threading.local()来处理多线程之间共享由主线程提供的变量并且互不影响的场景。我最近遇到个需求,需要在主线程和子线程之间共享变量且主线程需要得到字线程修改后的变量值,并且我又不想使用全局变量,那怎么办?
上一篇文章里提到的坑恰好能用上了。
下面这个链接可以看作上篇文章知识点的引申,总结的很全面了:
http://www.cnblogs.com/loleina/p/5276918.html
所以,往子线程里传字典就可以了!

有关Python字典的一个坑

最近用gevent改写自己的pocmap,改写的两个点如下:

1.针对每个url都有一堆poc去测试;

2.有一堆url要去测试。

之前改了1,测试速度立刻提升了nnnn倍,我正要爽得飞起的时候,改2出问题了。。

改了2以后发现之前有漏洞的站测不出来了!

抓包一看我就震惊了:

2016-11-09 17:20:31屏幕截图

 

我发现在测试所有目标的时候目标的路径都变成了/easyInsurance/html5/login.html,也就是在我目标url列表里最后一个站的路径,怪不得测不出漏洞,这是个什么情况?!

2016-11-09 17:23:51屏幕截图

 

2016-11-09 17:44:49屏幕截图

 

路径就是上面productname字典的path键值,输出一下看看情况:

2016-11-09 17:23:06屏幕截图

 

沃日,传到g_scan_one函数之前还是对的,怎么里面就覆盖了?难道是gevent的问题?不对呀,为啥只有productname覆盖了,前面的参数像target_ip都是正确的?

2016-11-09 17:21:15屏幕截图

和同事一起研究,在传到g_scan_one函数之前用id函数输出一下target_ip和productname的地址,结果如下:

2016-11-09 17:21:45屏幕截图

 

看到结果就明白了,字符串target_id的地址是每次都变化的,而字典productname的地址每次循环都是不变的,所以path键字符串的地址也是不变的,由之前的输出可以知道,g_scan_one函数是循环完才开始执行的(下图),所以productname参数就都被覆盖成最后一个了。。。

2016-11-09 17:51:06屏幕截图